전체 글

Backend Developer
문득 궁금한게 생겼다. Redis 가 얼마나 빠르길래 사람들이 Redis 를 자주 사용하는걸까? 그래서 직접 RDB 와 InMemory DB 의 퍼포먼스를 비교해보려고 한다단순한 궁금증에서 출발한 실험이지만, 실제로도 Redis 캐시를 도입할 가치가 있는지 가늠할 수 있는 지표가 될 수 도 있다. 실험 조건rdb 는 mysql, inMemory 는 redis 를 사용한다Sample 은 40만건 기준이다.비교 정보는 단건 조회 및 전체 조회 이다.rdb 및 redis 는 조회할 컬럼에 인덱스가 걸려있다.동시성은 고려하지 않는다.Redis 는 Hash 자료구조를 사용한다. 단건 조회// MySQL 단건 조회public Pos getUuid(Long id) { Pos pos = posRepository...
· Infra/Docker
1. multi broker 구축기본적으로 카프카 클러스터를 구축할 떄는 1개의 zookeeper 및 3개의 broker 를 사용 한다그 이유는 안정적인 서비스 제공에 있다Zookeeper 는 Kafka-broker 메타데이터를 관리한다 -> 브로커 상태, 토픽 정보, 브로커 리더 선출 등등..3개의 브로커가 있다고 가정하였을 때 기본적으로 브로커 3개중 1개는 리더, 2개는 팔로어로 구성을 한다한대의 브로커에 장애가 발생하더라도 다른 브로커로 옮겨가며 서비스를 제공할 수 있다메시지 복제는 broker 간의 복제 메커니즘인 replication.factor 를 통해 이루어진다 아래는 kafka 구성을 위한 docker compose 파일 이다(참고로 필자는 Spring 환경에서 kafka3.6 버전을 사..
· Spring/Boot
개요실무에서 비즈니스 로직을 작성하며 코드 의존성을 줄일 수 있는 방법을 계속 고민해보았다.위에 대한 방안을 찾던 중 이벤트 기반 아키텍쳐 라는 개념을 알게되었다 이벤트 라는 단어는 생소하였지만 궁금해져서 공부한 내용을 적어보려고 한다 Event 란?이벤트라 함은 어플리케이션 내에서 발생한 요청 및 상태 변화를 의미하며 이를 다른 컴포넌트에 알리는 것을 이벤트라 정의한다. ex)1. 주문 취소 요청이 오면 -> 주문 취소 이벤트 발생2. 음식 주문 후 배달 받을 장소를 변경한다 -> 배달지 변경 이벤트 발생 이벤트 기반 아키텍처에는 이벤트를 중심으로 시스템이 동작하며, 이벤트를 발생시키는 발행자(publisher) , 이를 처리하는 구독자(subscriber) 가 존재한다 위 역할을 적절히 비즈니스 로직..
· Java/Java
thread-safe 이란?면접 단골질문? 이 있다. 바로 StringBuffer 와 StringBuilder 에 대한 질문이다 위 질문에서 아마도 면접관들이 원하는 키워드는 바로 'thread-safe' 에 대한 의견을 듣는 것일 것이다당연하게도 남들 다 아는 똑같은 역할과 동작을 시키지만 내부 메소드가 다르고, 구현 방법이 다르고~ 이런 이야기는 좋아하지 않을 것이라고 생각한다Java ConcurrentMap 에 대한 내용을 공부하닥 thread-safe 에 관한 내용이 나와 한번 정리를 해보았다.1. thread-safe 개념Thread-safe 이란 여러 스레드가 동시에 같은 리소스(객체, 변수, 데이터 구조 등)에 접근하더라도 프로그램이 의도한 대로 정확하게 동작하는 것을 의미한다일반적으로 우리..
· Database/JPA
JPA 를 사용할 때 항상 N+1 문제를 조심해야한다 그리고 N+1 문제를 해결하기 위해서는 여러가지 방안이 있다 왜 N+1 이 발생하고, 어떻게 해결해 나가는지 코드를 통해 이해를 도와보자 1) Entity기본적으로 위 예시에는 2개의 엔티티가 존재한다 NMember 와 NOrder 가 있고, NMember 는 여러개의 NOrder 를 가짐으로써 두 엔티티의 관계에서부모: NMember, 자식: NOrder 관계 이다. 그러므로 NMember 기준 @OneToMany, NOrder 기준 @ManyToOne 사용  코드 수 최소화 및 편의를 위해 Lombok 을 사용하서 개발을 한다 @AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED..
· Spring/Boot
📌 Java & SpringBoot & JPA 환경에서 개발중임.  서론Java/SpringBoot 를 사용하여 실무를 하고있다.개발을 하다보면 예외처리를 해야할일이 상당히 많이 생길 것이다 대표적으로 Java 하면 NullPointException 이 있을 것이다 적절한 예외처리를 하지 않고, Runtime 에러가 생길 경우 어플리케이션에 장애가 생길 것이다 심하면 서비스가 중단이 되는 상황도 발생할 수 있다 그만큼 예외처리는 귀찮지만 중요한 일이다. 소홀히 해서는 안된다 위 상황을 방지하기 위해서 코드를 작성할 때 적절한 예외처리가 항상 필요하다 아래 예시 코드를 보며 한번 예외 처리를 점진적으로 발전시켜보자. 예시는 DB 와 통신하는 상황에서의 예외 처리이다 일단 try ~ catch 에 대한 방..
· Spring/Boot
실무를 하다가 한가지 작업에 여러개의 트랜잭션이 필요한 상황이 있다.예를 들어보겠다. 현재 배치 파일을 만드는 상황이다. 배치 파일을 만들기 위해서는 파일 내부도 만들어야하고, 파일 서버에 업로드도 해야하고, 배치 파일이 insert 되었다는 기록도 해야한다.큰 틀에서 보면 3가지 작업이 있다. 한번의 작업을 하는데 적어도 3개의 메소드가 필요하다. 그렇다면 @Transactional 어노테이션은 어디에 걸어두는게 적절할까? 라는 고민을 하였다. 아래 코드는 최상위의 코드이다. @Slf4j@Servicepublic class DailyTransactionService { private final TransactionBatchService transactionBatchService; public..
· Spring/Boot
Spring 프레임워크를 사용하면 대부분의 클래스들에 어노테이션을 선언하고는 한다 대표적으로 많이 사용하는 어노테이션이 Lombok, Spring Context 에 Bean 으로 등록하기 위한 어노테이션이 있다@Getter, @Setter, @Service, @Component, @RestController 등... 개발을 하며 여러가지 어노테이션을 사용하고 있을 것이라고 생각한다 그리고 위 어노테이션을 선언함으로써 어떠한 동작을 할수있게 된다. 나는 문득 궁금해졌다.내가 이 어노테이션이 어떻게 동작하는지 알고 쓰는걸까?어노테이션을 내가 만들어서 사용할 수 있을까?라는 생각을 하였다.  위 생각을 행동으로 옮기기 위해 생각이 났을 때 공부를 해보고 기록을 해보았다  1) 어노테이션 동작 원리 및 예시어노..