Spring Camp 2017 2일차

스프링 캠프 2017 2일차 정리

Posted by kingbbode on April 23, 2017

Recently by the same author:


3년차 웹 개발자

4년차로 접어든 웹 개발자의 3년차 늦은 회고

You may find interesting:


SpringOne Tour Seoul - Spring Cloud Gateway

스프링 원 투어 서울 컨퍼런스 중 정윤진님의 Spring Cloud Gateway 세션


스프링캠프 2018-Consumer Driven Contract

Consumer Driven Contract 기법을 활용한 마이크로서비스 API의 진화

키노트

  • 코드 구경
  • 댓글 논쟁
  • 기여

같은 기술에 대해 비슷한 고민을 하는 Group은 더 적극적인 행동/넓은 사람들에 다가가는 디딤돌!


Session 1. Reactive Spring ( Spring 5 & Reactor )

JDK 9

  • JDK 8+ lambda
  • Jigsaw

HTTP/2

  • NIO
  • Servlet
  • Netty, Undertow

Reactive

응답성

  • 요청이 들어오면 적시에 응답할 수 있어야 함
  • 발생한 문제에 대해 빠르고 효율적 대응

탄력성

  • 변화하는 환경에서도 응답할 수 있어야 함

회복성

  • 응답 불가 상태에서도 응답할 수 있어야 함

메시지 중심

  • 느슨한 결합의 방법을 사용하는 컴포넌트 사이에서 비동기의 방법으로 전달되는 메시지 기반

Reactive System, Reactive Programing은 MicroService가 지향하는 방향

Reactive Streams 스펙

  • 인프라 간 상호 운용성 집중
  • 논-블러킹 백프레셔를 제공하는 비동기 스트림 프로세싱 표준
  • 단순한 API

Session 2. Dooray 서비스 적용 사례를 통해 본 Spring Data JPA 실무 적용 How-To

여러 DBMS를 지원할 수 있는 프로젝트

  • ANSI SQL로도 해결할 수 없는 문제가 많았음.
  • MyBatis로는 한계가 많음
  • 결국 ORM 도입 결정

JPA 도입

  • Spring Default인 Hibernate를 구현체로 결정
  • Spring Data JPA를 사용

Entity 맵핑

DB Sharding

  • Auto_Increment 전략으로는 Sharding 구조에서 중복이 발생.
    • Globaly Unique 필요
  • UUID 사용하기로 결정
    • 모든 상황에서 id 값을 set 하기 어려움
    • @GenericGenerator 사용

복합키

  • lombok 사용

enum Type

  • 문자열이 아닌 코드를 저장하고 싶음
    • @Convert 어노테이션 사용

검색 색인용 Entity 필요

  • 서비스용 Entitiy와 검색용 Entity를 별도 작성
  • @MappedSuperClass 사용하여 중복 코드는 제거

알게된 것

  • 한 테이블에 대해 여러 개의 Entity를 만들어도 된다.
  • 모든 관계를 다 작성할 필요없다.

연관 관계 맵핑

@OneToOne

  • lazy loading이 적용되지 않음
    • 조회 전엔 엔티티에 대한 유/무를 확인할 수 없으므로, 프록시를 사용할 수 없음

Repository

메서드 이름으로 쿼리를 작성하는 것으로는 부족.

그 대안으로,

  • JPQL

    • SQL을 추상화하는 객체지향 쿼리
    • 문제는 결국 SQL이라는 점
  • Criteria API

    • 너무 복잡하고 장황

그래서 결국 QueryDSL 사용.

QueryDSL

  • Type Safe
  • JPQL을 메서드로 작성

뒤로는 발표 준비로 듣기만..!