'Development/TIL' 카테고리의 글 목록
본문 바로가기

Development/TIL

(7)
[TIL] Spring Data Cassandra와 Spring Data JPA의 차이? (NoSQL과 RDBMS의 차이) *chatGPT4o 의 답변입니다.Q. does spring data cassandra has concept of transactional? what's difference in spring data jpa?Spring Data Cassandra는 Spring Data JPA와 같은 방식으로 트랜잭션을 지원하지 않습니다. 두 기술에서 트랜잭션이 다르게 작동하는 이유와 차이점을 설명하겠습니다.1. Spring Data JPA에서의 트랜잭션 지원Spring Data JPA(관계형 데이터베이스를 기반으로 하는)는 @Transactional 애노테이션을 사용하여 트랜잭션을 완전히 지원합니다. 이는 관계형 데이터베이스가 기본적으로 ACID(Atomicity, Consistency, Isolation, Durabi..
[TIL][Spring] Spring Webflux의 Spring Security (@EnableWebFluxSecurity), ReactiveSecurityContextHolder *GPT4o 가 답변한 문서입니다.Spring WebFlux와 함께 사용하는 Spring Security, @EnableWebFluxSecurity, 그리고 ReactiveSecurityContextHolder는 리액티브(Non-blocking) 환경에서 보안을 처리하기 위한 핵심 구성 요소입니다. 이들 개념을 깊이 이해하려면, Spring MVC에서의 동작 방식과 비교하며 설명하는 것이 중요합니다.1. Spring Security in WebFluxSpring WebFlux에서의 Spring Security는 기존의 Spring MVC와는 달리 논블로킹(non-blocking) 방식으로 동작하는 보안 시스템입니다. WebFlux는 리액티브 스트림과 Publisher(예: Mono, Flux)를 사용하여..
[TIL] DTO, Entity에서 Wrapper 클래스를 사용하는 이유 직렬화 및 역직렬화Primitive 타입의 한계: Java의 기본형(primitive type)은 null 값을 가질 수 없다. 예를 들어, int, long, boolean 같은 타입은 null이 될 수 없으므로, 직렬화 시 null을 표현해야 할 경우 문제가 발생할 수 있다.Wrapper 클래스의 유연성: 기본형에 대응하는 Wrapper 클래스(Integer, Long, Boolean 등)를 사용하면, null 값도 가질 수 있기 때문에 직렬화/역직렬화 과정에서 발생할 수 있는 문제를 방지할 수 있다. 이는 데이터베이스에서의 NULL 값을 표현하거나, JSON 직렬화 시 값이 없음을 표현할 때 유용하다.DTO와 Entity의 설계DTO의 표현 유연성: DTO는 주로 데이터 전송을 위한 객체로, 클라이..
[TIL] Kafka와 RabbitMq의 철학, 그리고 어떻게 철학을 달성했을까? * ChatGPT 4o가 작성한 답변입니다.철학Apache Kafka: 분산 스트리밍 플랫폼철학: Kafka는 확장성, 내결함성, 높은 처리량을 중시하는 분산 스트리밍 플랫폼으로 설계되었습니다. 이벤트 스트림이라는 개념을 중심으로 구축되어, 데이터를 실시간 또는 거의 실시간으로 지속적으로 수집하고 처리하는 데 초점을 맞추고 있습니다.사용 사례: Kafka는 데이터 파이프라인 구축, 스트림 처리 애플리케이션, 실시간 분석 시스템 구축에 자주 사용됩니다. 대규모 데이터를 분산 환경에서 효율적으로 처리하는 데 뛰어납니다.RabbitMQ: 메시지 브로커철학: RabbitMQ는 신뢰할 수 있는 메시지 전달, 복잡한 라우팅, 메시지 큐잉에 중점을 둔 전통적인 메시지 브로커입니다. Advanced Message Qu..
[TIL] Redis 캐싱을 사용해야 할 때 주의해야 하는 점 Redis 캐싱의 문제 발생 시나리오불필요한 데이터의 캐싱: 예를 들어 Redis에 50GB의 데이터가 저장되어 있는 상황에서, 페이지네이션(paging) 데이터를 캐싱하는 과정에서 불필요한 데이터를 과도하게 캐싱한 경우가 있을 수 있다. 이는 Redis 메모리를 불필요하게 차지하여 효율성을 저하시키고, 결국 Redis 장애로 이어질 수 있다.Redis 장애: 불필요한 데이터가 캐시에 쌓이면서 Redis 메모리가 고갈되고, 이로 인해 Redis가 정상적으로 작동하지 못하게 된다. 결과적으로 Redis에 연결하려는 요청들이 타임아웃(timeout)을 유발하게 되며, 시스템 성능에 심각한 영향을 미친다.문제 발생 시 해결 방법타임아웃 설정: Redis와의 연결 시 타임아웃 설정은 필수적이다. 예를 들어, 타..
[TIL] 다시 배우는 Docker Docker 이전의 개발 환경종속성 문제:버전 충돌: 소프트웨어는 다양한 라이브러리 및 종속성에 의존합니다. 개발 환경이나 운영 환경에서 사용하는 종속성의 버전이 다를 경우, 애플리케이션의 동작이 달라질 수 있습니다. 이는 개발자에게 큰 골칫거리였으며, "환경이 다르면 버그가 발생할 수 있다"라는 문제로 이어졌습니다.복잡한 설정: 각 개발 환경에 맞추어 정확한 버전의 종속성을 설치하고 설정하는 과정이 복잡하고 시간이 많이 소요되었습니다. 특히, 프로젝트가 커질수록 이러한 문제는 더 심각해졌습니다.확장성 부족:수작업 설치: 서버에 직접 소프트웨어를 설치하고 설정하는 과정이 필요했으며, 이는 인적 오류의 위험을 증가시켰습니다.자동화의 한계: 인프라의 자동화가 어려워 확장이 필요할 때마다 인스턴스를 수동으로 ..
[TIL] 클라이언트 사이드 로드밸런싱과 서버 사이드 로드밸런싱 클라이언트 측 로드 밸런싱작동 방식클라이언트의 책임: 클라이언트는 사용 가능한 서버 목록을 유지하며, 이 목록을 기반으로 어떤 서버로 요청을 보낼지 결정합니다.구현: 클라이언트는 서비스 레지스트리(예: Eureka)에서 서비스 인스턴스 목록을 가져온 후, 특정 알고리즘(예: 라운드 로빈, 랜덤)을 사용하여 인스턴스를 선택합니다.특징분산된 제어: 각 클라이언트는 독립적으로 서버 선택을 결정합니다.서비스 발견 통합: 서비스 발견 메커니즘과 통합되어 서비스 인스턴스의 최신 목록을 관리합니다.망 효율성: 요청은 클라이언트로부터 직접 선택된 서버로 라우팅되어 병목 현상을 감소시킵니다.장점지연 시간 감소: 중간자가 없기 때문에 서버와의 통신 지연 시간을 줄일 수 있습니다.고장 허용: 하나의 서버가 실패해도 클라이언..