티스토리 뷰

TIL

[TIL] 2022-11-04

아몬드통 2022. 11. 4. 23:26

1. 스프링에서 자동 주입 방법은 3가지다. 생성자, 세터, 필드 거의 모든 자료에서 생성자 주입을 권장하고 있다. 그 이유 중 하나로는
스프링 컨테이너가 빈을 생성하는 시점에서 순환참조를 알 수 있어서 오류를 발생시키고, 그러므로 런타임시에 오류를 방지할 수 있다.
세터주입과 필드주입은 둘다 객체의 생성과는 무관하므로 실제로 빈객체가 사용되어지는 로직에서 문제가 발생한다.
컴파일오류와 런타임오류 둘 중 하나를 선택해야한다면 당연히 컴파일 오류이다. 고치면 되니까. 그러므로 특별한 경우가 아니라면 생성자 주입을 사용하면 된다. 생성자 주입을 해주는 어노테이션의 이름과 주요 특징이다.

@NoArgsConstructor - 기본 생성자 생성
@AllArgsConstructor - 모든 필드를 초기화하는 생성자 생성
@RequiredArgsConstructor - 초기화 되지 않은 모든 final 필드 & @NonNull 마크가 있는 필드를 초기화하는 생성자 생성

2. jpa 사용시 service에서 find로 읽어온 객체의 값을 변경했는데도 db상에서 적용이 안됐다면, @Transactional을 안써준지 확인하자.
변경이 안되는 이유는 준영속상태도 있지만, find로 읽으면 영속상태로 다시 관리해주기 때문에 준영속과는 관련이 없다.

3. mysql에서 date를 더하거나 빼주는 date_add(now(), INTERVAL 1 DAY) 함수는 반환이 kst 기준으로 yyyy-MM-dd hh:mm:ss 이렇게 반환하므로
자바에서 LocalDate로 입력된 컬럼과 비교를 위해서는 Date(date_add(now(), INTERVAL 1 DAY)) 이렇게 변환해서 단위를 맞춰준 후에 비교하는 것이 좋다.
다만 안해도 알아서 어느정도는 비교를 해주는 것 같지만 언제나 미연의 방지가 가능한 것은 할 수록 좋다.

'TIL' 카테고리의 다른 글

[TIL] 2022-11-08  (0) 2022.11.08
[TIL] 2022-11-06  (0) 2022.11.07
[TIL] 2022-11-03  (0) 2022.11.03
[TIL] 2022-11-02  (0) 2022.11.02
[TIL] 오늘 검색한 것 2022-11-01  (0) 2022.11.01
댓글