[스프링부트] 레이어의 구조와 책임

익명 블로그 V1 - 2
이나겸's avatar
Nov 17, 2024
[스프링부트] 레이어의 구조와 책임

[익명 게시글을 쓰는 블로그 만들기 2]


레이어 구조

notion image
  • 클라이언트가 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)
💡

DTO(Data Transfer Object)

  • 계층 간 데이터를 주고받기 위해 사용되는 객체
  • DTO를 활용하여 불필요한 데이터 전송을 막고 필요한 데이터만 전송함으로써 성능을 최적화

BC, BS, BR의 의존성 확인

의존성 주입 (DI, Dependency Injection)

  • BC는 BS 의존
  • BS는 BR 의존
  • BR은 아무것도 의존 하지 않음 (DB와 상호작용하니까)
  • final이 붙은 전역 변수의 경우 new가 안돼서(초기화가 안돼서) 다른 곳에서 못씀 ⇒ 생성자 생성해서 다른 곳에서도 쓸 수 있게 만듦
  • 디폴트(빈) 생성자가 아닌 의존할 대상을 매개 변수로 가진 생성자 생성 ⇒ Spring이 IOC컨테이너에서 해당 객체를 찾아내서 의존성 주입해줌
  • 디폴트(빈) 생성자가 없어야 하는 이유
    • 디폴트 생성자가 존재하면 Spring이 디폴트 생성자를 작동시킴
    • 이 때 의존하는 클래스는 null이 돼버리기 때문에 작동을 안 함 ⇒ DI (의존성 주입 Dependency Injection)가 안됨
 
[BoardController]
  • BoardController는 BoardService 의존
notion image
[BoardService]
  • BoardService 는 BoardRepository 의존
notion image
[BoardRepository]
  • BoardRepository는 아무것도 의존 하지 않음 ⇒ DB와 상호 작용하는게 책임이니까
notion image
 

의존 관계 확인 디버깅

  • 디폴트(빈) 생성자가 있으면 DI (의존성 주입 Dependency Injection)가 안됨을 확인
  • 확인할 코드가 위치한 라인 번호를 클릭하고 디버그(벌레 모양 아이콘) 실행
notion image
  • 디버그 결과 : BoardService가 null임을 확인 할 수 있음 ⇒ 의존성 주입 안됨
notion image
 
Share article

Nakyeom's Study