스프링
![[스프링 MVC 1편] 스프링 MVC - 기본 기능 (3)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQN2vx%2FbtrF3MUUudA%2FrTqxLkDnnwKtosHvaVtNs1%2Fimg.png)
[스프링 MVC 1편] 스프링 MVC - 기본 기능 (3)
HTTP 응답 - 정적 리소스, 뷰 템플릿 스프링(서버)에서 응답 데이터를 만드는 방법 3가지 정적 리소스 웹 브라우저에 정적인 HTML, css, js을 제공할 때는, 정적 리소스를 사용한다. 뷰 템플릿 사용 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다. HTTP 메시지 사용 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 정적 리소스 정적 리소스는 해당 파일을 변경 없이 그대로 서비스하는 것이다. 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다. /static , /public , /resources , /META-INF/resources 이 안에 든 파일..
[스프링 MVC 1편] 스프링 MVC - 기본 기능 (2)
요청 데이터 전달하는 3가지 방법 GET - URL에 쿼리 파라미터로 전달 POST - HTML Form에 쿼리 파라미터 형식으로 전달 HTTP message body에 데이터를 직접 담아서 요청 HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form @Slf4j @Controller public class RequestParamController { @RequestMapping("/request-param-v1") public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException { String username = request.getParameter("username"); in..
[스프링 MVC 1편] 스프링 MVC - 기본 기능 (1)
로깅 간단히 알아보기 스프링 부트 로깅 라이브러리 SLF4J Logback 로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리다. 즉, SLF4J는 인터페이스이고 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다. 로그 선언 private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(Xxx.class); @Slf4j : 롬복 사용 가능 LogTestContr..
![[스프링 핵심 원리] 빈 스코프 (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXEPVb%2FbtrFpt3lLsd%2F9j0mr7QUHkgZ3AjSJhcpr1%2Fimg.png)
[스프링 핵심 원리] 빈 스코프 (2)
웹 스코프 웹 스코프는 웹 환경에서만 동작한다. 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다. 웹 스코프 종류 request: HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. session: HTTP Session과 동일한 생명주기를 가지는 스코프 application: 서블릿 컨텍스트( ServletContext )와 동일한 생명주기를 가지는 스코프 websocket: 웹 소켓과 동일한 생명주기를 가지는 스코프 request 스코프 예제 동시에 여러 HTTP 요청이 오면 정확히 어떤 요청이 남긴 로그인지 구분하기 어렵다. 이럴때 사용하기 딱 좋은것이 바로 r..
![[스프링 핵심 원리] 빈 스코프 (1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwcX4k%2FbtrFi938Nty%2FRgPT8wBTbMtmAFx1uv0jjK%2Fimg.png)
[스프링 핵심 원리] 빈 스코프 (1)
빈 스코프란? 스프링 빈은 기본적으로 싱글톤 스코프로 생성된다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링의 스코프 종류 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 빈 스코프 지정방법 @Scope("singleton") @Component public class ..
[스프링 핵심 원리] 빈 생명주기 콜백
스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 사용 => 소멸전 콜백 => 스프링 종료 객체의 생성과 초기화를 분리하자. 생성자는 필수 정보(파라미터)를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다. 반면에 초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는등 무거운 동작을 수행한다. 따라서 생성자 안에서 무거운 초기화 작업을 함께 하는 것 보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋다. 물론 초기화 작업이 내부 값들만 약간 변경하는 정도로 단순한 경우에는 생성자에서 한번에 다 처리하는게 더 나을 수 있다. 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다. 인..
[스프링 핵심 원리] 의존관계 자동 주입 (2)
롬복과 최신 트랜드 롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. (생성자 주입할 때 편리하다.) 롬복 라이브러리에는 @RequiredArgsConstructor 말고도 다른 편리한 기능들이 많다. (@Getter, @Setter, ...) 기존 코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(Mem..
[스프링 핵심 원리] 의존관계 자동 주입 (1)
다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discoun..