2022-02-27-TIL
Today I Learned
MapStruct
MapStruct는 DTO와 엔티티처럼 모양이 비슷한 객체 사이의 매핑 코드를 생성해 주는 자바 애너테이션 프로세서다. 매퍼 인터페이스에 매핑 메서드를 선언하면 컴파일 시점에 구현 클래스가 만들어진다. 레퍼런스 문서에 따르면 생성된 코드는 리플렉션 없이 일반 메서드 호출로 값을 옮기므로 빠르고, 매핑할 수 없는 속성이 있으면 빌드 시점에 오류로 알려 준다.
1
2
3
4
@Mapper(componentModel = "spring")
public interface MemberMapper {
MemberResponse toResponse(Member member);
}
런타임에 리플렉션으로 매핑하는 ModelMapper와 비교하면, MapStruct는 설정 실수를 컴파일 단계에서 잡을 수 있다는 점이 가장 큰 차이다. 애너테이션 프로세서라서 IDE에서 생성 코드를 인식하려면 플러그인이나 annotation processing 설정이 필요하다.
- https://mapstruct.org/documentation/ide-support/
- https://dev-splin.github.io/spring/Spring-ModelMapper,MapStruct/
- https://mapstruct.org/documentation/stable/reference/html/
Custom Exception
자바에서 사용자 정의 예외는 Exception(checked) 또는 RuntimeException(unchecked)을 상속해서 만든다. 링크된 글들이 공통으로 권하는 원칙은 다음과 같다.
- 표준 예외(
IllegalArgumentException,IllegalStateException등)로 충분하면 새로 만들지 않는다. 새 예외는 호출자가 그 예외만 따로 잡아 처리할 이유가 있을 때 만든다. - 이름은
...Exception으로 끝내고, 무엇이 잘못되었는지 드러나게 짓는다. - 원인 예외를 받는 생성자(
super(message, cause))를 두어 스택 트레이스를 잃지 않는다. - 예외에 에러 코드 같은 부가 정보를 담으면
@ControllerAdvice에서 응답으로 바꾸기 쉽다.
Spring 애플리케이션에서는 보통 비즈니스 예외의 공통 부모(BusinessException 등)를 unchecked로 두고, 에러 코드 enum과 함께 전역 예외 처리기에서 HTTP 응답으로 변환하는 구조를 많이 쓴다.
- https://www.javatpoint.com/custom-exception
- https://stackoverflow.com/questions/19326615/java-defining-custom-exceptions-inside-of-class-is-this-bad
- https://all-learning.com/java-custom-exception-user-defined-exceptions/
- https://howtodoinjava.com/java/exception-handling/best-practices-for-for-exception-handling/
- https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions
- https://stackoverflow.com/questions/4791823/what-are-industry-standard-best-practices-for-implementing-custom-exceptions-in
- https://howtodoinjava.com/best-practices/java-exception-handling-best-practices/
- https://dzone.com/articles/implementing-custom-exceptions-in-java
- https://www.baeldung.com/java-new-custom-exception
- https://stackify.com/best-practices-exceptions-java/
- https://stackify.com/java-custom-exceptions/
- https://github.com/Hyune-c/exception-handling
NGINX
NGINX는 HTTP 웹 서버이면서 리버스 프록시, 로드 밸런서로도 쓰이는 서버 소프트웨어다. 요청마다 스레드를 만드는 대신 이벤트 기반 구조로 많은 동시 연결을 적은 자원으로 처리한다. Spring Boot 애플리케이션 앞에 두고 정적 파일 제공, TLS 종료, 여러 인스턴스로의 부하 분산을 맡기는 구성이 흔하다.
- https://medium.com/@su_bak/nginx-nginx%EB%9E%80-cf6cf8c33245
Facade Pattern
퍼사드 패턴은 여러 하위 시스템의 복잡한 호출 순서를 단순한 인터페이스 하나 뒤로 감추는 구조 패턴이다. 클라이언트는 퍼사드의 메서드 하나만 호출하고, 퍼사드가 내부에서 여러 객체를 조합한다. 하위 시스템과 클라이언트 사이의 결합을 줄이지만, 퍼사드가 모든 일을 떠안으면 거대한 클래스가 되므로 역할을 한정해야 한다.
- https://www.baeldung.com/java-facade-pattern
댓글
아직 댓글이 없습니다