🚩클린코드의 위한 주의사항
- 함수는 한가지 일만 수행하는 것이 좋다
- 클래스는 작고 하나의 책임을 가지는것이 좋다(검증과 DTO클래스를 재사용보다 새로 생성!)
Entity
- 저장되고 관리되어야 하는 데이터테이블의 뼈대
- ⚠️데이터를 사용할 경우 엔디티를 사용금지 보안상으로 문제가 발생함으로 새로운 DTO를 만들어 사용해야함
- 모든 연관관계는 지연로딩으로 설정(laze의 주의점)
- 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다.
- 실무에서 모든 연관관계는 지연로딩( LAZY )으로 설정해야 한다
- @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다(디폴트가 EAGER이기때문에 N+1문제가 발생할 확률이 높다)
- OneToMany의 디폴트는 laze이다
Controller
- 파라미터 혹은 body로 받은 데이터를 객체로 만들어주기
- 사용자의 Request를 전달받아 요청의 처리를 담당하는 Service를 호출한다
Service
- 알맞은 정보를 가공하는 과정으로 'Controller에 의해 호출되어 비즈니스 로직과 트랜잭션을 수행한다.'
- @Transactional(readOnly = true) 읽기 전용!(디폴트는 false)
Repository
❗의존관계
- Controller->Service->Repository 순으로 한방향으로 의존해야한다!
- 순서의 관계도를 따라 의존
참고자료 : 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!