1. 시작하며 의존성을 주입하기 위해 필드에 @Autowired 를 사용하면 편리하지만 intellij나 sonarLint 에서 Constructor Injection 을 사용하라는 warning을 발생시킨다. 왜 경고가 발생하는지 스프링에서 의존성을 주입하는 방법을 알아보자. 2. Inversion of Control, DI(Dependency Injection) 이란 Inversion of Control (제어의 역전 - IoC) 일명 할리우드 원칙이라고도 불린다. don’t call me, I’ll call you. 나를 부르지 마라, 내가 너를 부를 것이다. 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다. 이 방식은 대부분의 프레임워크에서 사용하는 방식..
1. 시작하며 JPA Auditing 을 통해 등록/수정 날짜/시간 설정을 자동화 해보자. 2. 왜 JPA Auditing 쓰나? 매번 엔티티의 날짜/시간 데이터가 변경돨 때마다 이를 코드로 수정한다면 여기저기 입력/수정 코드를 구현해야한다. 그러나 JPA Auditing를 사용하면 공통으로 처리할 수 있다. 3. JPA Auditing 구현 1) BaseEntity 추상 클래스를 생성한다 도메인에 BaseEntity 클래스를 생성한다. BaseEntity는 모든 Entity의 상위 클래스이다. 따라서 이를 상속받는 Entity들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 한다. @Getter @MappedSuperclass @EntityListeners(AuditingE..
1. 시작하며 롬복 어노테이션 사용시에 자꾸 헷갈려서 개인적인 기억 정리 용도로 기록해 두고자 한다. 2. 왜 Lombock을 쓰나? Getter, Setter, Constructor 등을 자동으로 생성해줘서 귀찮은 일을 줄여 준다. 단, 무한루프에 빠지거나 무분별하게 setter를 남발할 수 있으니 조심해서 쓰자 3. Lombok 설치 maven org.projectlombok lombok true gradle compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' gradle 5버전 이상은 annotationProcessor 'org.projectlombok:lombok' 을 추가해주어야 한다. 그렇지않..
@PostConstruct와 @PreDestroy Annotation 사용하기 1. 언제 쓰는가 최근에 개발하다가 딱 한번만 받아오면 되는 값을 사용 시 마다 요청을 새로 호출하는 실수를 했다. 아니 누가 이따위로 개발했는가 하고 git history를 뒤져보았더니 범인은 다름아닌 과거의 나였다. 따라서 잊지 않기 위해 @PostConstruct 에 대해 기록해두고자 한다. @PostConstruct 를 사용하면 WAS 가 뜰 때 한번만 기본값을 세팅해두고 두고두고 쓸 수 있다. @PostConstruct 는 WAS 가 뜰 때 bean이 생성된 다음 딱 한번만 실행된다. @PreDestroy 는 컨테이너에서 객체를 제거하기 전에 실행된다. 2. @PostConstruct Spring은 bean을 초기화 ..
No identifier specified for entity 에러 해결 이슈 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: 엔티티명 a..
하이버네이트 자동 키 에러 해결 이슈 java.sql.SQLException: Table 'dbschema.hibernate_sequence' doesn't exist at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1694) ~[mariadb-java-client-2.7.3.jar:na] at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1556) ~[mariadb-java-client-2.7.3.jar:na] 해결 개발용 스키마에 sql 로 직..
@ControllerAdvice 를 이용한 예외 처리 이슈 회사에서는 내려줘야 할 Response 에러 포맷이 정해져 있다. 에러를 아름답게 형식화하여 json으로 내려주고 싶다 해결 @ControllerAdvice 로 커스터마이징하여 특정 컨트롤러, 예외 타입에 대해 반환할 응답 JSON 을 정의 할 수 있다. 주요 예외 처리는 다음과 같다. @ControllerAdvice public class CustomRestExceptionHandler { @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity handleHttpMessageNotReadableException( HttpMessageNotReadableExce..