SPRING-BOOT

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-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-28
Spring boot으로 초간단하게 Slack Message 보내기를 만들어 보는 프로젝트입니다. Slack Message 에서 제공하는 3가지 메시지를 보내 보겠습니다. 전체 코드는 GitHub 보시는 것을 권장해 드립니다. Slack Web Hook 연동 Incoming WebHooks 작업이 완료 됬다고 가정하고 포스팅을 진행하겠습니다. 만약 작업이 완료 되지 않았다면 해당 앱을 설치하고 특정 채널에 알림이 가게 설정해주세요 Slack Message 유형 크게 3 가지 유형이 있습니다. 이미지 형태와 컨트롤러에서 보내 볼 수 받아 볼 수 있는 Curl 하나하나 살펴보습니다....
2018-07-26
그동안 개인 블로그에 포스팅 해왔던 Spring Boot + JPA를 앞으로는 Popit에도 진행하게 되었습니다. 이전 포스팅에 대해는 아래 목차를 참조해주세요. 목차 step-01 : Account 생성, 조회, 수정 API를 간단하게 만드는 예제 step-02 : 효과적인 validate, 예외 처리 (1) step-03 : 효과적인 validate, 예외 처리 처리 (2) step-04 : Embedded를 이용한 Password 처리 step-05: OneToMany 관계 설정 팁 step-06: Setter 사용하지 않기 step-07: Embedded를 적극 활용 step-08: OneToOne 관계 설정 팁 step-09: OneToMany 관계 설정 팁(2)...
2018-07-13
악평(?)이 자자하던 Java 날짜와 시간 Date and Time 라이브러리 [1] 는 Java 8 버전부터 완전히 새로워졌다. 이 글은 새로워진 Java 날짜와 시간(이하 Java8 날짜와 시간)을 스프링 부트 Spring Boot + JPA Java Persistence API ( Hibernate ) 환경에서 사용하는 방법을 다룬다. 기대와 다른 결과 예시 코드는 스프링 부트 1.5 으로 작성하였고 JPA (spring-boot-starter-data-jpa) 의존성을 추가하였다. [2] 데이터베이스에 저장될 Member 엔티티 Entitiy 는 아래와 같다. createdTimeAt, createdDateAt에 Java8 날짜와 시간 객체인 LocalDate, LocalDateTime을 사용하였다....
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-03-28
2달전 제 뒤에 앉아았는 개발자님께서 왜 알아보기 어렵게 날짜를 숫자로 사용해야하냐고 의문을 가진 적이 있다. API를 처음 구성할 때 참고했던 API가 사용했다는 이유로, spring 400에러 응답에서도 long 형태의 시간표현을 한 사례, Timezone과 DB처리에서 장점이 있다는 이유로 적용했던 Unix Time형태의 날짜 표현방식이 문제가 될 수도 있다는 생각이 들었다. 그렇게 불편하다면 한번 바꿔볼까? 하는 생각과 함께 고민을 시작했다. API 설계를 위해 REST에 대해 학습하는 과정에서 우리는 URI, Method, Http Status 에만 집중한다. 하지만 API를 개발하고 사용하는 목표는 결국 데이터를 주고 받는데 있기 때문에 데이터가 담기는 Parameter, Request/Response Body의 형태를 정하고 Interface로 약속해야 한다....
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 -...
더보기