상세 컨텐츠

본문 제목

@Controller @Service @Repository 차이 및 의존성 주입

백엔드 공부진행도/SpringBoot

by myeongjaechoi 2024. 12. 18. 05:44

본문

공통점

  • @Component가 동일하게 존재한다.
    • @Componet란?
      • 해당 클래스를 자바 빈으로 등록시키라는 것을 알려주는 것
      • Spring에서 관리
      • 특정 계층에 속하지 않는 일반적인 컴포넌트를 정의할 때 사용
  • @Component를 확장한 어노테이션

@Controller

  • 계층 - Presentation Layer
  • 주요 역할
    • 클라이언트 요청을 처리하고 응답을 반환
    • 주로 Spring MVC에서 사용되며, URL 매핑(@RequestMapping)과 함께 사용
    • 뷰(View)와 비즈니스 로직 간의 중간 역할을 수행

@Service

  • 계층 - Business Layer
  • 주요 역할
    • 비즈니스 로직을 처리
    • 컨트롤러에서 받은 요청을 처리하고, 데이터 접근 계층(Repository)과 상호작용
    • 도메인 객체 간의 협력을 조정하며, 응용 계층의 핵심 로직을 구현

@Repository

  • 계층 - Persistence Layer
  • 주요 역할
    • 데이터베이스와의 상호작용
    • DAO(Data Access Object) 역할을 하며, JPA나 MyBatis같은 ORM 툴과 함께 사용

사용 이유

  • 역할 명확화 : 각 어노테이션은 해당 클래스가 어떤 계층에서 어떤 역할을 수행하는지 명확히 나타냄
  • 추후 확장성 : 스프링 프레임워크는 각 어노테이션에 추가적인 기능을 부여
  • 가독성 및 유지보수성 : 코드의 구조를 직관적으로 이해할 수 있어 협업 및 유지보수 용이

 

의존성 주입에 대한 친구의 질문에 대한 나의 답

  1. 빈이 생성되고 어떻게 스프링에서 관리되나? ->IoC 컨테이너
  2. IoC 컨테이너가 무엇인가? -> 제어 역전. 사용자가 제어하는 것이 아닌 스프링에서 bean을 등록하고 제어
  3. 빈 주입은 IoC컨테이너 말고 못하나? -> DI 의존성 주입이있다. 생성자 주입, 필드 주입, 수정자 주입

스프링의 콘셉트

  • AOP(관점지향프로그래밍) - 프로그래밍을 할 때 핵심 관점과 부가 관점을 나누어서 개발하는 것
  • PSA(이식가능한 서비스 추상화)  - 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것
  • IoC(제어 역전) - 객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대신하는 것
  • DI(의존성 주입) - 외부에서 객체를 주입받아 사용하는 것

'백엔드 공부진행도 > SpringBoot' 카테고리의 다른 글

CORS란?  (0) 2025.01.15
@SpringBootApplication 중 3 가지  (1) 2024.12.25
트랜잭션 격리수준  (1) 2024.12.18

관련글 더보기