스프릥 부트 개념과 활용04(inflearn) - 백기선
Spring boot
내장 웹 서버
@SpringBootApplication 쓰지 않고 톰캣 띄우기
- 부트는 서버가 아니다.
- 톰캣객체생성
- 포트설정
- 톰캣에 컨텍스트 추가
- 서블릿 만들기
- 톰캣에 서블릿 추가
- 컨텍스트에 서블릿 맵핑
- 톰캣실행및대기
이 모든 과정을 보다 상세히 또 유연하게 설정하고 실행해주는게 바로 스프링 부트의 자동 설정.
- ServletWebServerFactoryAutoConfiguration (서블릿 웹 서버 생성)
- TomcatServletWebServerFactoryCustomizer (서버 커스터마이징)
- ServletWebServerFactoryAutoConfiguration (서블릿 웹 서버 생성)
DispatcherServletAutoConfiguration
- 서블릿 만들고 등록한다.
- DispatcherServlet이 따로 있는 이유
- 서블릿 컨테이너는 변경될 수 있느나, 서블릿은 변경되지 않기때문에
컨테이너와 서버 포트
톰캣이 기본 컨테이너로 설정되어있다.
다른 서블릿 컨테이너로 변경
- 톰캣 의존성을 제외한다.
- 원하는 서블릿 컨네이너 설정
웹 서버 사용하지 않기
코드로 타입변경
application.properties로 타입변경
포트
- 변경
- application.properties에 포트번호 정의
server.port=7070
- application.properties에 포트번호 정의
- 랜덤포트
- 사용가능한 포트를 랜덤으로 사용한다.
server.port=0
- 사용가능한 포트를 랜덤으로 사용한다.
- ApplicationListner<ServletWebServerInitializedEvent>
- 웹서버가 초기화가되면(생성되면) 이벤트 리스터가 콜백된다.
- 해당 방법으로 포트 확인이 가능하다.
- 변경
응답 압축해서 보내기
- application.properties에 아래왕 같이 입력 시, 응답을 압축해서 보낸다.
server.compression.enabled=true
- 기본적으로 압축해도 좋은 타입만 압축해서 보내준다.
- text/html
- text/xml
- text/plain
- text/css
- text/javascript
- application/javascript
- application/json
- application/xml
HTTPS와 HTTP2
HTTPS 설정하기
- 키스토어 만들기
- 줄바꿈없이 아래내용 입력한다.(터미널)
keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000
- genkey : key를 생성한다.
- alias : 별칭
- storetype : 서블릿 컨테이너마다 지원 티압이 다르다.
- 주요키타입
- PKCS12
- JKS (JavaKeyStore)
- 주요키타입
- 줄바꿈없이 아래내용 입력한다.(터미널)
- application.properties 설정
server.ssl.key-store: keystore.p12 /* keysotre의 경로를 classpath에 넣은경우, classpath:를 앞에 붙여준다.*/ server.ssl.key-store-password: 비밀번호 server.ssl.keyStoreType: PKCS12 server.ssl.keyAlias: spring
HTTP로 요청 시, 실패
HTTPS로 요청 시,
- 브라우저가 해당 인증서의 펍키를 모르는 상태일때, 위와같은 화면이 나타난다.
- 공인된 인증서를 사용 시, 대부분의 브라우저가 펍키를 알기때문에 정상적인 화면이 나타난다.
커넥터가 하나이기때문에 HTTP를 받을 커넥터가 없다.
- 키스토어 만들기
HTTP 커넥터는 코딩으로 설정하기
@Bean
public ServletWebServerFactory servletContainer(){
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(8080);
return connector;
}
https, http 포트번호를 달리 설정한 후 테스트 결과, 둘다 정상으로 나온다.
이미지- HTTP2 활성화
- application.properties에 다음설정을 추가한다.
server.http2.enabled=true
그러나 컨테이너 마다, 전부 다르다.
undertow
- HTTPS만 설정되어있으면 추가 설정이 필요없다.
- HTTPS만 설정되어있으면 추가 설정이 필요없다.
Tomcat
- 8.5버전 이하는 복잡한 설정이 필요 (비추천)
- 톰캐9 이상 과 JDK9 이상 시, 설정 필요없다.
- 차리리 버전을 업그레이드 하는것을 추천한다.
참고 강의 : 생활코딩 - HTTPS와 SSL 인증서