클래스 A가 클래스 B를 알고 있을 때 클래스 A는 클래스 B에 의존한다고 말한다.클래스 A가 동작하기 위해서 클래스 B의 기능을 사용하기 때문이다.DiscountPolicy는 인터페이스, RateDiscountPolicy는 DiscountPolicy를 구현한 구체 클
이전 글에서 OrderService는 자신이 필요한 객체를 직접 생성하는 대신 생성자를 통해 의존성을 주입 받았다. 이제 OrderService는 어떤 종류의 DiscountPolicy 구체 클래스가 들어오는지 모른다.더 이상 자신이 직접 의존 객체를 생성하고 실행하지
기본 조회Junit5의 @Test, @DisplayName 애노테이션과 assertThat 으로 빈 기본 조회를 테스트해봤다.T getBean(Class<T> requiredType) 혹은 T getBean(String name, Class<T> requir
현재까지는 @Bean 애노테이션으로 빈 객체를 수동으로 등록했다. 실제 프로젝트에서는 빈으로 등록되어야할 객체가 많기 때문에 이를 일일히 등록하다가 누락하는 등의 문제가 발생할 수 있다. 설정파일 길이도길어지고 반복작업도 심하다. 이때 수동 등록 대신 사용할 수 있는것
수등으로 빈을 등록하지 않고 컴포넌트 스캔을 통해 빈을 등록하면 설정파일에서 의존관계를 주입해줄 수없기 때문에 의존관계를 주입해줄 다른 방법이 필요하다. 이 때 사용되는 것이 의존관계 자동 주입이다.꼭 컴포넌트 스캔과 함께 사용해야만 하는 것은 아니다. 수동으로 빈을
1. 빈 라이프사이클 스프링 컨테이너는 빈 객체의 라이프사이클을 관리해준다. 스프링 컨테이너와 빈은 다음과 같은 생명주기를 가진다. 스프링 컨테이너 생성 -> 빈 객체 생성 -> 의존 설정 -> 초기화 -> 빈 사용 -> 빈 소멸 -> 스프링 컨테이너 종료 스프링
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.웹 서버와 웹 애플리케이션 서버(WAS)의 경계는 조금 모호하다. 간단하게 말하자면 웹 서버는 정적 리소스를 제공하는 서버고, 기타 부가기능을 제공한다. WAS는 프로그램 코드를 실행해서 애플리
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.이전 글에서 HTTP 요청 메시지 파싱, HTTP 응답 메시지 생성 등의 반복적이고 번거로운 작업을 서블릿의 편의 기능을 사용하여 처리할 수 있다고 했다. 서블릿이 매개변수로 받는 HttpSer
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.해당 글은 스프링MVC가 제공하는 기능을 코드 위주로 살펴봅니다. 스프링이 제공하는 기능을 지탱하는 개념은 이전 글을 참고해주세요.@RequestMapping애노테이션이 붙은 핸들러는 Reque
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.웹 애플리케이션은 필수적으로 사용자가 입력한 값을 검증해야한다. 사용자가 숫자 타입을 문자 타입으로 입력하는 등 값이 올바르지 않은 경우 서버는 요청을 거절하고 입력한 데이터를 유지한 상태로 어
검증 기능을 매번 코드로 작성하기는 번거롭다. 객체 검증은 어쩔수 없지만 특정 필드에 대한 검증은 대부분 빈 값인지 아닌지, 특정 범위내에 있는지와 같이 매우 일반적인 경우가 많다. 이 때 애노테이션을 사용하여 다음처럼 검증을 매우 간단하고 명확하게 할 수 있다. 이전
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.HTTP 는 무상태 프로토콜이기 때문에 이전 요청을 기억하지 않는다. 모든 요청을 새로운 요청으로 간주한다는 것이다. 그런데, 웹사이트들은 로그인, 로그아웃 등의 기능을 제공한다. 모든 요청을
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.이전 글에서 세션과 쿠키를 사용해서 무상태 HTTP 프로토콜에서 로그인(상태)를 유지하는 방법을 알아봤다.특정 기능을 로그인한 유저만 사용할 수 있도록 제한하고 싶은 상황이 있다고 생각해보자.컨
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.예외 처리는 애플리케이션의 매우 중요한 부분입니다.MVC 예외 처리는 서블릿의 기능을 사용할 수도 있고 스프링 부트가 제공하는 기능을 사용할 수도 있습니다. 먼저, 서블릿이 제공하는 기능을 살펴
본 글은 인프런 김영한님의 스프링 완전 정복 로드맵을 기반으로 정리했습니다.애플리케이션을 개발하면 문자<->숫자 간의 변환처럼 타입을 변환해야 하는 경우가 많다. 스프링은 타입변환을 해주는 다양한 컨버터 및 포맷터를 제공해준다. 개발자가 직접 만든 타입의 경우 직