Spring 기술 지식

데일리·2022년 4월 7일
0

기술 지식

목록 보기
3/6

1. IOC

  • 제어의 역전
  • 개발자가 직접 객체를 관리하지 않고 스프링 컨테이너에서 직접 객체를 생성하여 해당 객체에 주입 시켜준 것
  • 생명주기 관리를 컨테이너가 도맡아서 한다.
  • 이점
    • 역활과 책임의 분리 -> 높은 응집도와 낮은 결합도
    • 변경에 유연한 코드 구조를 가져가기 위해서

2. DI

  • 의존성 주입
  • IOC를 구현하는 방식 중 하나

3. Service, Controller, Repository annotation의 차이점

  • @Component: Spring에서 관리되는 객체임을 표시하기 위해 사용되는 가장 기본적인 애너테이션
  • @Controller: @RequestMapping 애너테이션은 해당 애너테이션애만 사용 가능
  • @Repository: Spring에서 지원하지 않은 Exception을 사용할 경우 사용해야한다. 만약 Exception이 발생하면 Unchecked Exception인 DataAccessException이 발생
  • @Service: @Component와 큰 차이가 없다.

4. @Controller, @RequestController의 차이

  • @Controller

    • 뷰를 반환하기 위해 사용
    • Data를 반환하는 경우도 있지만 @ResonseBody를 사용해야먄 Json 형태로 데이터를 반환할 수 있다.
  • @RequestController

    • 데이터를 반환하기 위해 사용
    • @Controller + @ResonseBody

5. Bean 등록 방법

  • 생성자 사용

    • Null을 주입하지 않는한 NullPointerException이 발생하지 않는다.
    • final 키워드를 통해 객체의 불변을 유지 할 수 있다.
    • 순환 참조를 방지할 수 있다.
  • 필드 주입

    • 가장 단순하지만 추후 변경할 수 있는 방법이 없다.
  • Setter 주입

    • 수정이 가능하다
    • 가장 큰 단점은 public이 의무화되는 메서드에서 개발자가 임의로 호출할 수 있기 때문에 보안 상의 문제가 발생한다.
    • NullPointerException 발생 가능

6. @ControllerAdvice

  • 전역에서 발생할 수 있는 예외를 잡아 처리해주는 애너테이션

7. AOP

  • 관점 지향 프로그래밍
  • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하는 것
  • 주요 개념
    • Aspect: 흩어진 관심사를 모듈화 한것
    • Target: advice가 적용되는 대상
    • advice: 어떤 일을 해야할 지
    • joinPoint: 메서드 실행 시점
    • PointCut: JoinPoint의 상세한 스펙 정의

8. Interface, abstract 차이

  • abstract

    • 미완성 설계도
    • new를 통해 객체 생성 불가
    • abstract로 선언한 메소드를 반드시 구현해야한다.
    • 사용 여부
      • 관련성이 높은 클래스 간에 코드 공유
      • 추상 클래스를 상속받을 클래스들이 공통으로 가지는 메소드와 필드가 많을 때
  • interface

    • 기본 설계도
    • new를 통해 객체 생성 불가
    • 추상 클래스보다 추상화 정도가 더 높다
    • 일반 메서드 또는 멤버 변수를 구성원으로 가질 수 없다.
    • 다중 상속이 가능하다.
      • abstract는 모든 메소드를 무조건 구현해야하는데 인터페이스는 다중상속하고 있는 인터페이스에 동일한 메서드가 존재하더라도 내부 구현이 안되어있어서 문제될 것이 없다.
    • 사용 여부
      • 서로 관련성이 없는 클래스들이 인터페이스를 구현할 때
        • 다중 상속을 허용하고 싶을 때

9. Interceptor와 Filter 차이

  • Filter

    • 디스패쳐서블릿 이전에 실행
    • 자원의 앞단에서 요청 내용을 변경하거나 여러가지 체크 수행
  • Interceptor

    • 요청에 대한 작업 전/후로 가로 챈다.
    • 필터는 스프링 컨텍스트 외부에 존재하는 반면 인터셉터는 디스패쳐서블릿이 컨트롤러를 호출하기 전, 후로 실행되기 때문에 컨텍스트 내부에서 존재한다.
    • 스프링의 모든 빈 객체에 접근 가능
profile
하루에 한편 씩 읽기 좋은 테크 로그

0개의 댓글