분류 전체보기

· Java/Java
예외 처리는 어떻게 하는게 좋을까, 실무에서 많은 고민중에 있다 운영을 하다보니 효율적인 예외 로그가 정말정말 중요하게 느껴진다 어떻게 하면 좋을까 고민을 하던 중 기본적인 것 부터 시작을 해보자 해서 다시 공부해본 내용을 정리해 보았다 Java 에서의 예외 종류Error시스템이 비정상적인 상황 ex) OutOfMemoryError, ThreadDeathJVM 에서 발생한다.Exception(Checked)컴파일시 에러가 잡힌다.RuntimeException(Unchecked)컴파일시 에러가 안잡힌다 -> 실행 중에 기능이 동작할 때 잡힌다. 추가적으로 네트워크 장애, 서버 다운 같은 외부 요인들은 Error 라고 생각하기엔 애매해서 나는 그냥 장애 라고 정의하는게 좋을 것 같다는 생각이 든다 0. Th..
문득 궁금한게 생겼다. 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..
hyeon.q
'분류 전체보기' 카테고리의 글 목록