BackEnd

    [Spring] 스프링 인터셉터 - Handler Interceptor

    HandlerInterceptor를 통한 요청 가로채기 Controller가 요청을 처리하기 전/후 처리 실제 Business Logic과 분리되어 처리해야 하는 기능을 넣고 싶을 때 유용하다 @Component public class SessionInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); // 세션에 로그인 정보가 있다면 그대로 진행 if (session.getAt..

    [Spring] 스프링 핵심 원리 기본편 9. 빈 스코프

    9. 빈 스코프 빈 스코프란? 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지 스프링 빈이 싱글톤 스코프로 생성되기 때문 스프링은 다음과 같은 스코프 지원 “싱글톤”: 기본 스코프, 스크링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 “프로토타입”: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 “웹 관련 스코프” request: 웹 요청이 들어오고 나갈 때 유지되는 Q스코프 session: 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 프로토타입 스코프 싱글톤 스코프와 달리 스프링 컨테이너에 조회하면 ..

    [Spring] 스프링 핵심 원리 기본편 - 8. 빈 생명주기 콜백

    8. 빈 생명주기 콜백 빈 생명주기 콜백 스프링은 간단하게 다음과 같은 라이프사이클을 가진다 객체 생성 → 의존관계 주입 (생성자 주입은 예외) 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 함 - 개발자는 의존관계 주입이 완료된 시점을 어떻게 알 수 있을까?? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 ..

    [Spring] 스프링 핵심 원리 기본편 - 7. 의존관계 자동 주입

    7. 의존관계 자동 주입 다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 불변: 생성자 외에 외부에서 의존관계를 수정할 수 없음 필수: final, 꼭 값이 있어야 함 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동으로 지정됨 생성자 주입은 빈을 등록하면서 의존관계 주입도 같이 일어남 - 생성자를 호출하게 되기 때문에 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 주입 특징 선택, 변경 가능성이 있는 의존관계에 사용 참고: @Autowired(required = false) → 주입할 대상이 없어도 동작하게 할 ..

    [Spring] 스프링 핵심 원리 기본편 - 6. 컴포넌트 스캔

    6. 컴포넌트 스캔 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다 참고: @Configuration이 붙은 설정 정보도 자동으로 등록되기 때문에 excludeFilters를 사용해서 컴포넌트 스캔 대상에서 제외 @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 스프링 빈의 기본 이름은 클래스명을 사용하되, 맨 앞글자만 소문자를 사용 MemberServiceImpl 클래스 → memberServiceImpl 빈 이름 직접 지정도 가능 → @Component(”memberServiceImpl”) @Autowired 의존관계 자동 주입 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입..

    [Spring] 스프링 핵심 원리 기본편 - 5. 싱글톤 컨테이너

    5. 싱글톤 컨테이너 웹 애플리케이션과 싱글톤 대부분 스프링 애플리케이션은 웹 애플리케이션 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다 스프링 없는 순수한 DI 컨테이너 AppConfig: 요청을 할 때마다 객체가 새로 생성 해결 방안: 객체가 1개만 생성, 생성된 객체 인스턴스를 공유해서 쓰기 싱글톤 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 막기 package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService() { } public static SingletonSe..

    [Spring] 스프링 핵심 원리 기본편 - 4. 스프링 컨테이너와 빈

    4. 스프링 컨테이너와 빈 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너, 인터페이스 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다 @Bean 이 붙은 애들을 하나씩 호출 → 메서드 이름을 빈 이름으로, 반환하는 객체를 빈 객체로 등록 빈 이름은 항상 다른 이름을 부여 스프링 빈 의존관계 설정 설정 정보(AppcConfig)를 참고해서 의존관계 주입 스프링은 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있음 → 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한꺼번에 처리 컨테이너에 등..

    [Spring] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

    스프링 핵심 원리 기본편 할인 정책을 바꾸려면 OrderServiceImpl 코드를 변경해야 함 역할과 구현을 충실하게 분리O 다형성 활용O, 인터페이스와 구현 객체를 분리함 OCP, DIP 객체 지향설계 원칙을 충실히 준수한 것처럼 보이지만 사실은 아님 DIP: 주문서비스 클라이언트(OrderServiceImpl)은 DiscountPolicy 인터페이스에 의존하면서 DIP를 지킨 것 같은데? 추상인터페이스 뿐만 아니라 구현 클래스에도 의존하고 있음 추상 인터페이스: DiscountPolicy 구현 클래스: FixDiscountPolicy, RateDiscountPolicy OCP: 변경하지 않고 확장? 지금은 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌 DIP 위반 → 추상(인터페이스)만 의존..

    [스프링/자바] 좋은 객체 지향 설계의 5가지 원칙: SOLID

    인프런 강의 '스프링 핵심 원리 - 기본편' 을 보고 정리한 내용입니다. 단순히 객체 지향 프로그래밍에 대한 개념만 이해하다가 강의를 들으니까 이제서야 객체 지향 설계가 무엇인지에 대한 개념이 생기는 것 같다. 특히 단순히 인터페이스와 클래스를 구현하는 것만으로는 SOLID 원칙을 모두 지킬 수 없다는 점이 크게 와닿았다. 스프링에 대한 필요성을 이해하는 데 좋은 것 같다. 다들 왜 이 강의를 추천하는 지 알 것 같음.. SOLID SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다 하나의 책임은 모호한 개념이다. SRP를 판단할 수 있는 중요한 기준은 변경 - 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것 한 클래스가 여..

    [Spring] 제어 역전 IoC와 의존성 주입 DI

    IoC와 DI 제어 역전(IoC) 일반적인 자바 개발: 객체 선언 > 의존성 생성 > 객체에서 제공 일련의 작업들을 개발자가 직접 제어함 제어 역전: 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임 ‘외부’: 스프링 컨테이너(Spring Container) 스프링에서 제어 역전 Bean: 스프링에서의 객체 Container: Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리 담당 객체 생성 의존성 객체 주입: 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입 의존성 객체 메소드 호출 스프링 컨테이너가 객체를 만드는 시기: 컨테이너가 만들어질 때 필요한 객체를 모두 생성 cf. lazy-init: getBean을 할 때마다 객체가 생성 기본: 싱글톤 패턴 s..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]