%EC%8A%A4%ED%94%84%EB%A7%81

2019-09-10
비동기 메시지를 사용하여 상호 간에 통신하는 방식을 메시징 Messaging[1] 이라고 부른다. 마이크로서비스 환경에서 비동기 처리 시 보통 카프카 Kafka 나 래빗엠큐 RabbitMQ 같은 메시지 브로커 Message Broker 를 사용하여 메시징을 구현한다. 아래와 같이 마이크로서비스들이 메시징을 통해 협업하여 주문을 처리한다고 가정해보자. OrderService는 주문 상태 이벤트(예. ORDER_CREATED, ORDER_CANCELLED 등)를 메시지 브로커에 발행하고 이벤트에 관심 있는 서비스가 구독하여 처리한다. 주문 상태 이벤트의 발행은 두 가지로 구분할 수 있다....
2018-11-17
JPA Java Persistence API 는 엔티티에 변경이 일어나면 이를 감지하여 자동으로 데이터베이스에 반영한다. 이런 특징에 익숙지 않은 상태에서 스프링 데이터 Spring Data JPA 를 사용하다 보면 예상치 못한 지점에서 SQL update 구문을 보는 경우가 있다. 이 글은 JPA 변경 감지가 무엇이고 스프링 데이터 JPA와는 어떤 관계가 있는지 설명한다. JPA 변경 감지 Dirty Checking JPA는 엔티티 매니저 Entity Manager 가 엔티티를 조회/저장/삭제/수정한다. 엔티티 매니저의 API 를 살펴보면 조회(find), 저장(persist), 삭제(remove)는 제공하지만 이상하게도 수정 API는 찾아볼 수 없다. 그 이유는 엔티티 매니저가 엔티티가 변경이 일어나면 이를 자동 감지하여 데이터베이스에 반영하기 때문인데 이것을 변경 감지라고 한다. 간단한 JPA 코드로 확인해 보자....
2018-10-04
스프링 애플리케이션을 만들 때 스프링 프레임워크 Spring Framework 로 직접 구성하기보다는 스프링 부트 Spring Boot 를 사용하는 것이 더 간단하고 쉽다. 그리고 그 중심에는 스프링 부트 자동 설정 Auto-configuration 이 있다. 스프링 부트 자동 설정은 스프링 애플리케이션에 추가한 라이브러리(JAR)를 인식하여 관련 값을 스프링 부트 기본으로 설정해 준다. 따라서 스프링 부트를 사용하는 입장에서는 자동으로 해주는 부분 이외에 필요한 설정만 하면 되니 편하다. 최근...
2018-09-06
이 글은 읽기 전에 이전 글까지 모두 읽을 필요는 없습니다. 다만 맥락을 이해하기 위해서 1편 은 미리 읽는 편이 좋습니다. REST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의 간단한 분산 트랜잭션 구현 - 4편 REST Retry 지난 글까지는 REST 기반의 분산 트랜잭션 구현 방법 중 하나인 TCC Try-Confirm/Cancel 를 다루었다. 분산 환경에서는 네트워크 오류나 일시적인 서비스 중지 등으로 인해 일시적으로 REST 요청이 실패할 수 있다. 이러한 문제는 REST 요청을 재시도...
2018-08-22
JPA(하이버네이트)로 개발하다 보면 JPA가 자동으로 만들어 실행하는 SQL문을 확인하고 싶을 때가 있다. 이 글은 스프링 부트와 JPA를 함께 사용하는 환경에서 SQL문을 로깅 Logging 하는 방법을 소개한다. 예제 프로젝트 이해를 돕기 위해 간단한 스프링 부트 + JPA 예제 프로젝트를 만들고 SQL문 로깅을 추가해 보자. 예제 프로젝트는 스프링 부트에서 제공하는 부트스트랩 Bootstrap 도구인 SPRING INITIALIZR 로 프로젝트를 만든다. 의존성으로 JPA와 별도로 데이터베이스 설치하지 않고 사용할 수 있는...
2018-08-06
REST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의 간단한 분산 트랜잭션 구현 - 4편 REST Retry 지난 글 에서는 TCC Try-Confirm/Cancel 에서 'Confirm 하기 전에 실패하는 경우' 일관성을 유지하기 위한 방법으로 Timeout과 Cancel을 이야기했다. 그리고  휴리스틱 예외를 언급하면서 결과적 일관성 모델을 간단하게 소개하였다. 이번 글은 결과적 일관성 모델을 사용하여 'TCC Confirm 중에 실패하는 경우' 일관성을 유지하는 방법에 대해 다룬다....
2018-07-06
REST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의 간단한 분산 트랜잭션 구현 - 4편 REST Retry 지난 글 에서는 분산된 REST 시스템들 간의 트랜잭션을 HTTP와 REST 원칙으로 접근하여 해결하는 방법으로 TCC Try-Confirm/Cancel 를 소개하였고 온라인 쇼핑몰에서 일어날 수 있는 '주문' 시나리오를 예시로 설명하였다. TCC는...
2018-05-15
REST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의 간단한 분산 트랜잭션 구현 - 4편 REST Retry 안영회 님은 마이크로 서비스 공부하게 책 하나 추천해주세요 글에서 마이크로 서비스 간 일관성을 유지하는 방법 중 하나로 TCC Try-Confirm/Cancel 를 언급했다. How to become eventually consistent. 오호… 지옥(?)에 오신 것을 환영한다. 내 모듈에 처리된 내용이 다른 모듈과 일관성을 유지하려면 어떻게 해야 하나? 알려진 방법으로...
2018-01-08
이 글은 JavaBean Validation(이하 Bean Validation)의 기본 개념과 Hibernate Validator와의 관계 그리고 Spring Boot에서 간단한 사용법을 소개한다. Bean Validation Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체라고 위키피디아는 정의한다. Bean Validation defines a metadata model and API for JavaBean validation -...
2017-12-18
REST(Representational state transfer) 를 개발 하다 보면 하나의 기저(Base) URL(예. http://www.example.gov/api/v1/magazines.json )을 사용하면서 호출 하는 클라이언트에 따라 조회 조건(URL Query)이나 응답(Response)이 완전히 달라져야 하는 경우가 있다. 이를 Spring Framework에서 구현하는 방법을 소개 한다. HTTP Header 사용 필자가 가장 먼저 고려 했던 방법은 HTTP Header를 사용하는 것이었다. 먼저 클라이언트에 따라 다르게 처리 하기 위해 새로운 미디어 타입을 정의 했다. application/vnd.example.clientA+json...
더보기