내일배움캠프

[내일배움캠프] Spring MVC 기초 정리

munsik22 2026. 4. 17. 18:56

  • @RestController = @Controller + @ResponseBody
    • @RestController 내부의 메서드에 @ResponseBody를 붙인다고 동작에 문제가 생기지는 않지만 중복이다.
  • @Service, @Repository, @Controller는 모두 내부적으로 @Component 어느테이션을 포함하고 있다
    • 위 세 어노테이션을 모두 @Component의 sterotype이다.
    • 기능은 같지만 역할을 명확히 표현하기 위해 이름을 나눈 것이다.
  • DI(Dependency Injection)는 Spring이 Bean 사이의 의존 관계를 파악하여 필요한 객체를 자동으로 주입하는 방식이다.
  • Spring의 기본 Bean 스코프는 singleton이다.
    • 하나의 객체를 만들어 컨테이너 전체에서 공유한다.
    • 하나의 객체를 모든 요청이 공유하므로 인스턴스 변수에 사용자별 상태를 저장하면 동시 접근 시 다른 사용자의 데이터가 섞일 수 있다.
  • @Controller@RestController의 차이점
    • @Controller는 메서드 반환값을 뷰 이름으로 해석해서 HTML을 렌더링 한다. (예: "login" 반환 → login.html 렌더링)
    • @RestController는 반환값을 JSON 등으로 변환해 응답 본문에 직접 쓴다.
  • @Transactional은 프록시 패턴으로 동작한다. 같은 클래스 내부에서 this.method()로 호출하면 프록ㄷ시를 거치지 않기 때문에 트랜잭션이 적용되지 않는다.
  • @Repository는 빈 등록 외에 DB 기술별로 다른 예외를 Spring의 DataAccessException 계층으로 자동 변환하는 기능을 가지고 있다.
  • DispatcherServlet은 모든 요청을 하나의 입구에서 먼저 받아서 적절한 Controller를 찾아 연결하는 역할이다.