Backend
도메인 개발 팁 간단 정리
"김영한 강사님의 JPA 활용편 1을 듣고 필요한 부분 간단하게 정리하기." JPA는 트랜잭션 안에서 이뤄지기 때문에 @Transactional을 선언해준다. 조회 시에는 @Transactional(readOnly = true)를 설정해주는 것이 조회 성능에 있어서 장점을 가진다. 따라서, 클래스 레벨에서 @Transaction(readOnly = true)로 설정해주고 C, U, D 부분에서 @Transactional을 사용해 메서드 레벨에서 관리한다. 메서드 레벨의 애노테이션이 클래스 레벨의 애노테이션보다 우선순위가 높다. @Transactional(readOnly = true) // 조회 성능에서 장점을 가진다. @Service public class Service { ... @Transaction..
엔티티 설계의 주의사항 간단 정리
"김영한 강사님의 JPA 활용편 1을 듣고 필요한 부분 간단하게 정리하기" 엔티티에는 Setter를 사용하지 않는 것이 좋다. 모든 연관관계는 지연로딩으로 설정한다. 즉시로딩은 회원이랑 주문이 연관관계 있는 경우 회원을 조회하면 주문도 한번에 조회가 되는것을 말함 예측이 어렵고 어떤 SQL이 실행될지 모를 수 있다. 지연 로딩 (LAZY)로 설정하고 Fetch Join을 이용해 데이터를 가져온다. JPQL을 실행할 때 N(연관된 회원 조회 100번) + 1 (주문 쿼리 한번) 문제의 발생 XtoOne관계는 모드 EAGER가 default로 되어있다 → 반드시 LAZY 설정 컬렉션 필드는 초기화를 한다. List orders = new ArrayList(); NPE에 대해 안전해진다. 하이버네이트가 엔티티..
RestTemplate
API를 개발하다보면 외부 API 서비스 혹은 다른 서비스 API를 호출해서 데이터를 송,수신 해야하는 경우가 있다. RestTemplate는 Spring 3부터 지원하기 시작한 “동기 방식"의 REST API 호출 방법이다. Http 요청을 작성할 수 있는 템플릿으로서 json, xml 데이터를 Jackson과 함께 간단하게 파싱해서 사용하는 것이 가능하다. Spring 4부터는 비동기 방식인 AsyncRestTemplate를 지원하기 시작했고, 최근 Spring 5부터는 기존의 동기 방식을 포함할 뿐만 아니라 비동기, 넌블로킹 방식도 WebClient를 지원하기 시작했다. 메서드 RestTemplate의 메서드는 아래와 같다. 1. getForObject : GET 메서드를 이용해 요청한 URL로부터..
Spring Cloud Config의 설정 파일 비대칭키로 암/복호화
이전에 필요한 환경변수 파일들을 Github에 Config Repository를 하나 생성해 관리했다. Spring Cloud Config Server는 실행 시 이 환경 설정파일들을 애플리케이션이 실행될 때 전파해주었다. 이런 환경설정 파일들을 Public Repository에서 관리하거나 Private Repository에서 관리하더라도 암/복호화를 통해 안전하게 관리해야한다. 일반적으로 암/복호화하는 방식은 크게 대칭키방식과 비대칭키 방식이 있다. 대칭키(Symmetric) : 암/복호화하는 키가 동일한 경우를 의미한다. 대표적으로 AES, SEED, ARIA와 같은 알고리즘이 있다. 비대칭키(Asymmetric) : 암/복호화 하는 키가 다른 경우를 의미한다. 모든 사람이 사용할 수 있는 공개키와..
RestControllerAdvice, ExceptionHandler를 이용한 전역 예외 처리
이전 포스팅에서 프로젝트 애플리케이션이 동작 시 발생하는 다양한 상황에 대해서 메세지를 클라이언트로 전달해주기 위해 Custom Exception을 이용한 사용자 예외 처리를 다뤘다. 이렇게 Custom Exception을 사용하다보니 Web Layer (Controller)에서 로직을 처리해 줄 때 발생하는 예외를 try-catch로 매 로직마다 처리해주어야 했다. try-catch문에 들어가는 로직은 status, message를 담아 보내주는 공통적인 로직인데 이를 한 군데서 전역 처리할 수 없을까? @RestControllerAdvice, @ControllerAdvice ControllerAdvice, RestControllerAdvice는 모든 Controller에서 발생한 예외를 한 곳에저 전..