스프링: 잘 모르면서 그냥 썼던 것들 정리

wisdom·2022년 7월 22일
0

@ResponseBody

  • HTTP의 body에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
      • Jackson -> 객체를 json으로 바꿔주는 라이브러리
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
    • 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 그 둘을 조합해서 HttpMessageConverter가 선택된다.

viewResolver

  • 주어진 데이터를 바탕으로 실제 이용자가 보는 화면을 그려준다.
    • 사용자가 요청한 것에 대한 응답 view를 렌더링하는 역할
  • The ViewResolver provides a mapping between view names and actual views

@Controller

  • 전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용

@RestContorller

  • @Controller에 @ResponseBody가 추가된 것
  • Json 형태로 객체 데이터를 반환하는 것

Spring Bean

  • 스프링 컨테이너에 의해 관리되는 자바 객체
    • 스프링 컨테이너는 스프링 빈의 생명 주기 관리하고 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할

Spring Bean 등록 방식

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기
    • 상황에 따라 구현 클래스를 변경해야 하는 경우, 설정을 통해 스프링 빈으로 등록한다.

스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤으로 등록한다. 즉 같은 스프링 빈이면 모두 같은 인스턴스다.

DI(Dependency Injection)

생성자에 @Autowired 가 있으면 ?

  • 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
  • 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI, 의존성 주입이라 한다

DI 방법

  • 필드 주입
    • 단점: 코드가 간결하지만 외부에서 변경하기 힘들고 테스트 작성이 힘들다.
  • setter 주입
    • 단점: 대부분의 의존 관계는 한번 일어나면 애플리케이션 종료시점까지 의존 관계를 변경할 일이 희박한데, setter는 언제든 변경하게 될 위험이 있다.
  • 생성자 주입
    • 권장되는 방법이고 여러가지 장점이 있다. 그 중 하나는 생성자 호출시점에 딱 1번 호출되는 게 보장된다. -> 불변

AOP

  • Aspect Oriented Programming
  • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리

회고

  • 정확하게 모르고 사용했던 것들을 정리하면서 코드 한 줄, 한 줄 쓰기 전에 왜 쓰는지 이유를 알고 써야한다고 크게 느꼈다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글