[익명 게시글을 쓰는 블로그 만들기 2]
레이어 구조

- 클라이언트가 Board Controller에 요청을 함
- Board Controller(BC)
- 외부 클라이언트의 요청에 맞게 응답 해줌
- Board Service에게 역할 위임 → Board service에게서 DTO 받아서 클라이언트에 응답
- Board Service(BS)
- 비즈니스 로직 처리
- DTO를 책임, 만듦 (진짜 필요한것만 DTO로 만들어서 Board Controller에 전달)
- 트랜잭션 처리 (Board Repository와 상호작용)
- Board Repository(BR)
- DB와 상호작용 (CRUD - insert, select, update, delete)
BC, BS, BR의 의존성 확인
의존성 주입 (DI, Dependency Injection)
- BC는 BS 의존
- BS는 BR 의존
- BR은 아무것도 의존 하지 않음 (DB와 상호작용하니까)
- final이 붙은 전역 변수의 경우 new가 안돼서(초기화가 안돼서) 다른 곳에서 못씀 ⇒ 생성자 생성해서 다른 곳에서도 쓸 수 있게 만듦
- 디폴트(빈) 생성자가 아닌 의존할 대상을 매개 변수로 가진 생성자 생성 ⇒ Spring이 IOC컨테이너에서 해당 객체를 찾아내서 의존성 주입해줌
- 디폴트(빈) 생성자가 없어야 하는 이유
- 디폴트 생성자가 존재하면 Spring이 디폴트 생성자를 작동시킴
- 이 때 의존하는 클래스는 null이 돼버리기 때문에 작동을 안 함 ⇒ DI (의존성 주입 Dependency Injection)가 안됨
[BoardController]
- BoardController는 BoardService 의존

[BoardService]
- BoardService 는 BoardRepository 의존

[BoardRepository]
- BoardRepository는 아무것도 의존 하지 않음 ⇒ DB와 상호 작용하는게 책임이니까

의존 관계 확인 디버깅
- 디폴트(빈) 생성자가 있으면 DI (의존성 주입 Dependency Injection)가 안됨을 확인
- 확인할 코드가 위치한 라인 번호를 클릭하고 디버그(벌레 모양 아이콘) 실행

- 디버그 결과 : BoardService가 null임을 확인 할 수 있음 ⇒ 의존성 주입 안됨

Share article