모르지 않다는 것은 아는것과 다르다.

Spring 39

파일 업로드

2가지 폼방식 HTML Form을 통한 파일 업로드를 이해하려면 폼을 전송하는 2가지 방법을 알아야한다. application/x-www-form-urlencoded HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type: application/x-www-form-urlencoded 를 추가해 주면 된다. 폼에 입력한 전송할 항목을 HTTP Body에 문자로 username=kim&age=20 와 같이 & 로 구분해서 전송한다. multipart/form-data 파일은 문자가 아니라 바이너리 데이터를 전송해야 하기 때문에 application/x-www-form-urlencod..

Spring 2022.02.27

쿠키와 세션을 사용한 로그인 처리

쿠키 쿠키에는 영속 쿠키와 세션 쿠키가 있다. 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키 : 만료 날짜를 생략하면 브라우져 종료시 까지만 유지 쿠키생성 로직 Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie); 로그인에 성공하면 쿠키를 생성하고 HttpServletResponse 에 담는다. 쿠키 이름은 memberId 이고, 값은 회원의 id를담아둔다. 웹브라우저는종료전까지회원의 id를서버에계속보내줄것이다. request header 를 보면 Cookie: memberId=1 이 있는 것을 확인할 수 있다. Application -> Sto..

Spring 2022.02.26

컴포넌트스캔

컴포넌트 스캔 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 정보에 붙여주면 된다. 컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록되기 때문에, AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고, 실행되어 버린다. excludeFilters 를 이용해..

Spring 2022.02.26

커스텀 Validator 구현

커스텀 Validator 구현 개요 보통 나는 필드는 @Valid 를 사용해서 validation 을 처리했고, 메소드의 파라미터는 @Validated 를 통해서 진행했다. 하지만 메소드 내에서 validation 을 처리하고 싶었다. 그렇기 때문에 메소드 내에서도 validation 을 할 수 있게 커스텀 Validator 를 구현해볼 생각이다. 방법1. Spring Validator 인터페이스 구현하기 스프링 프레임워크 4.0은 빈 검증기 1.0(JSR-303) 와 1.1(JSR-349)를 지원하며 Spring의 Validator 인터페이스에 적용할 수 있다. package org.springframework.validation; public interface Validator { boolean su..

Spring 2022.02.26

의존관계 주입

의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법이다. 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { t..

Spring 2022.02.26

싱글톤 컨테이너

웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회: 호출할 때 마다 객체를 생성 MemberSer..

Spring 2022.02.26

스프링 타입 컨버터

스프링과 타입 변환 타입을 변환해야 하는 경우는 상당히 많다. 스프링 MVC 요청 파라미터 -> ex> @RequestParam , @ModelAttribute , @PathVariable @Value 등으로 YML 정보 읽기 XML에 넣은 스프링 빈 정보를 변환 뷰를 렌더링 할 때 이런게 가능한 것은 스프링이 중간에 타입 변환기를 사용해서 타입을 String Integer 로 변환해주었기 때문에 개발자는 편리하게 해당 타입을 바로 받을 수 있는 것이다. 만약 개발자가 새로운 타입을 만들어서 변환하고 싶으면 아래와 같이 컨버터 인터페이스를 사용하면 된다. public interface Converter { T convert(S source); } 스프링은 확장 가능한 컨버터 인터페이스를 제공한다. 개발자..

Spring 2022.02.26

서블릿 구조

서블릿이란? 서블릿이란 동적 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그램밍 기술이다. 다시말해서 서블릿은 웹 프로그래밍에서 클라이언트 요청을 처리하고 처리 결과를 클라이언트에게 전송하는 기술이다. 자바로 구현된 CGI이다. html을 사용해서 요청에 응답한다. java thread를 통해서 동작한다. MVC 패턴중 Controller로 이용된다. HTTP 변경시 Servlet을 재 컴파일한다. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다. SpringMVC 구조 Spring MVC의 구조는 위와 같다. 동작순서는 아래와 같다. 1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러..

Spring 2022.02.26

서블릿 예외처리

서브릿이 예외를 처리하는 방식 Exception(예외) 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 동작과정은 아래와 같다. WAS(여기까지 전파) 인터셉터 -> 컨트롤러 2. WAS(여기까지 전파) 컨트롤러(/error-page/500) -> View 스프링 부트가 제공하는 오류페이지 스프링 부트는 아래와 같은 과정으로 오류페이지를 제공한다. ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를..

Spring 2022.02.26

빈 스코프

빈 스코프란? 보통 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다고 알고있다. 그 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. applicatio..

Spring 2022.02.26