스프링 프레임워크를 활용할 때, 생각보다 복잡한 초기 설정으로 인해서 빨리 포기하는 사람들도 많습니다.
DispatcherServlet 설정하고, jdbc 연결하고, xml 설정해주고.. 톰캣으로 서버 연결하고..
이를 자동화시켜 빠르게 스프링으로 개발을 할 수 있도록 도와주는 것이 바로 '스프링 부트'입니다.
MVC모듈의 DispatcherServlet, JDBC 설정을 제공해주며, 복잡한 XML을 설정해 줄 필요가 없습니다. 또한 임베디드 톰캣이 내장되어 있어서 별다른 추가 설치 없이 main 메소드를 실행할 수 있습니다.
시작하기 전, 기본 개념 간단 요약
컨테이너란?
- 웹 어플리케이션이 배포되는 공간
WAS( Web Application Server )
- JSP, PHP 등을 사용해 동적 페이지들을 생성 가능한 서버
클래스 로더
- 자바 코드를 작성하고 실행 시, 컴파일이 진행되고 코드가 JVM에서 실행 가능한 상태로 변경됩니다. 이후 코드 안에 존재하는 클래스들을 로딩하는 과정이 진행되는데, 이 역할을 하는 것이 바로 클래스 로더입니다.
클래스 로더 특징
1. 구조가 계층적 : 상위에서 하위 클래스 로더로 (최상위 구조는 부트스트랩 클래스 로더)
2. 클래스 로딩 위임 가능
3. 가시적 규약(로딩 가능 범위)
(자식 클래스 로더는 로딩 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾기 가능하지만, 부모는 자식이 로딩한 클래스를 알수 없음)
4. 클래스 언로딩 불가능 : 가비지 컬랙터가 동작하거나 WAS 재시작 시 초기화 됨
유형 (상-하위 순)
부트스트랩 클래스 로더 : JVM 런타임 실행 위해 기반이 되는 파일을 로드 (rt.jar)
확장 클래스 로더 : Object 포함 자바 API 로드 (ext 폴더 하위에 있는 JAR 파일들)
시스템 클래스 로더 : 클래스패스에 포함된 클래스들을 로드
사용자 정의 클래스 로더
서블릿
- JVM 기반에서 웹 개발을 하기 위한 명세이자 API
'자바를 실행하려면 JRE가 필요한 것처럼, 서블릿을 실행하려면 웹 어플리케이션 컨테이너가 필요합니다'
서블릿 생명주기 3단계
1. 초기화 : 클래스 생성자의 초기화 작업과 같음 (로드한 서블릿의 인스턴스를 생성하고, 리소스 로드와 같은 역할)
2. 서비스 : 클라이언트의 요청에 따라 호출할 메서드를 결정
3. 소멸 : 서블릿 언로드 (런타임 오류, 컨테이너 종료 시)
필터
- 서블릿보다 먼저 동작해 전처리 작업 필요시 활용 (pre-post)
필터 체인
- 여러개의 필터를 등록해서 처리하는것
HTTP 요청/응답
get 요청 : doGet 메서드 활용 ( 브라우저에서 정보를 표현하기 위해 사용 - 쿼리스트링으로 )
post 요청 : doPost 메서드 활용 ( 폼에서 데이터 입력 후 전송할 때 사용 - 로그인, 회원가입 등등.. )
멀티파트
- 바이너리 데이터 전송을 위해 사용 (ex. 파일 업로드)
- 서블릿 3.0 이후부터는 외부 라이브러리 없이 구현 가능
폼 속성에 'enctype="multipart/form-data"를 입력해야 함
쿠키
- 사용자가 사이트 방문 시, 사용자의 컴퓨터에 저장되는 정보
- 쿠키는 HTTP 헤더 정보에 포함되어 전달된다.
- 생성, 수정 및 삭제를 구현할 수 있으며 이때 만료 시간 설정을 활용함 (setMaxAge)
세션
- 서버와 클라이언트의 유효한 커넥션을 식별하는 정보
- 쿠키는 클라이언트에 저장되는 정보라면, 세션은 서버에 저장되는 정보
'스프링(Spring)' 카테고리의 다른 글
Spring Boot 동작 환경 (0) | 2021.03.22 |
---|---|
Vue CLI + Spring Boot 연동하여 환경 구축하기 (1) | 2019.06.30 |
[스프링] 스프링 MVC 흐름도 요약 (0) | 2018.10.31 |
의존성 주입 - DI(Dependency injection) (1) | 2018.08.10 |
스프링 프레임워크(Spring Framework) 시작 (0) | 2018.08.09 |