안녕하세요! Spring Boot 스터디 리드이자, DSC-Sookmyung Core Member 신동선입니다. 🙇♀️
모두 1, 2주차 강의 잘 들으셨나요? 매우 쉬울수도 있고, 제가 올려드린 질문을 생각해보다 보면 어려울 수 있지만 끝까지 따라와주세요!
먼저, 제가 올려드린 질문들을 정리해보면 다음과 같습니다.
# 1, 2주차 들으면서 추가적으로 더 생각해 볼 것
1. Spring Boot vs Spring Framework 차이
2. Spring Boot FLOW
3. HTTP GET, POST, PUT DELETE
4. Spring Boot에서 build
1. Spring Boot, Spring Framework?
Spring 은 과거 EJB(Enterprise JavaBeans)를 대체하는 프레임워크로 등장했습니다. 하지만, Spring은 기능이 많은 만큼 환경설정이 복잡한 편입니다. 여기서 등장한 Spring Boot는 스프링 프레임워크를 사용할 때 필요한 설정의 많은 부분을 자동화해 개발자 비즈니스 로직에 집중할 수 있도록 도와줍니다. 즉, Spring Boot는 Spring framework 위에 구축된 프로젝트입니다.
출처: https://dzone.com/articles/what-is-spring-boot
👀 Spring Boot와 Spring Framework 대표 차이점 👀
- 내장 서블릿 컨테이너로 jar 파일을 간단하게 배포할 수 있다.
- starter가 관리해주는 dependency
- Embed Tomcat 사용으로 Tomcat 설치나 버전 관리의 수고가 줄었다.
- 다른 스프링 프레임워크 요소들을 쉽게 사용
2. 자세한 Spring Boot 동작 Flow
Spring boot는 내부적으로 내장 톰켓을 가지고 있습니다. 그러면 Spring Boot가 실행되면 내부적으로 내장 Tomcat 즉 Servlet Container가 실행됩니다. Spring Boot에서 DispatchServlet이 FrontController의 역할을 합니다.
여기서 Servlet Container는 웹 애플리케이션 서버 중 HTTP 요청을 받아 처리하는 기초 역할을 담당합니다. 서블릿 컨테이너 위에서 서블릿, 필터, 이벤트 리스너 등을 적절히 구현해 탄생한 것이 웹 프레임워크입니다. 아파치 톰캣, 제티 등이 서블릿 컨테이너로 서블릿은 서블릿 컨테이너에 등록됩니다.
Spring boot는 ServletContainerInitializer를 구현한 'TomcatStarter'의 onStartup 메소드를 먼저 실행합니다. 톰캣이 실행되고 다음 조건이 만족하면 Dispatcher Servlet이 등록되어 집니다.
- Spring DispatcherServlet이 Bean으로 등록됩니다.
- DispatcherServlet Context에 Servlet을 등록합니다.
- Servlet Filter에 등록해놓은 filter들을 등록합니다.
- Dispatcher Servlet에 각종 Handler를 등록해 자원 url매핑을 하거나 Exception Handling 을 지원합니다. 이때 컨트롤러 빈들이 생성되어 싱글톤으로 관리됩니다.
더 자세한 내용은 https://gasungbilife.tistory.com/5 의 MVC파트를 참고해주세요!
3. HTTP GET, POST, PUT, DELETE
METHOD | 역할 |
---|---|
POST | POST로 해당 URI를 요청하면 리소스를 생성한다. |
GET | GET으로 해당 리소스를 조회한다. 리소스를 조회 후 자세한 정보를 가져온다. |
PUT | PUT으로 리소스를 수정한다. |
DELETE | DELETE로 리소스를 삭제한다. |
자세한 내용은 아래 내용도 참고해보세요!
https://github.com/shindongsun0/HttpProtocolSocketProgramming
4. Spring Boot에서 Build
출처: https://simuing.tistory.com/269
Spring Boot로 개발을 마치고 실제 서비스가 필요할 때 jar나 war파일을 만들어 배포해야 합니다. build task로 빌드시, build/libs 폴더에 실행 가능한 jar나 war파일이 생성됩니다. Spring Boot 프로젝트는 모든 라이브러리가 jar/war 파일 안에 포함됩니다.
$ gradle build
$ java -jar build/libs/hello-spring-0.0.1-SNAPSHOT.jar
war 파일이 필요하다면 war 플러그인을 넣어줍니다.
JAR(Java Archive) vs WAR(Web Application Archive)
두 파일 모두 JAVA의 jar툴을 이용해 생성된 압축 파일입니다. 이 파일은 어플리케이션을 쉽게 배포하고 동작할 수 있게 리소스, 속성 파일등을 패키징 해줍니다.
JAR 확장자 파일에는 Class와 같은 Java 리소스와 속성 파일, 라이브러리, 액세서리 파일이 포함되어 있습니다. 자바 프로젝트를 압축한 파일로 JRE만으로도 실행 가능합니다.
WAR 확장자 파일은 웹 프로젝트에서 배포를 위한 최소한의 단위입니다. JSP, SERVLET, JAR, CLASS, XML, HTML, JAVASCRIPT 등 Servlet Context 관련 파일들로 패키징되어 있습니다. WAS(Web Application Server)가 WAR 압축을 해제 후 배포합니다. 따라서, 배포에 대한 메타 정보가 필요합니다. 그래서 WAR 파일에는 WEB-INF 폴더에 포함된 web.xml 파일이 필요합니다. Jar와는 다른 면이죠.
현재 저는 jar파일, 즉 단독 파일로 실행이 가능한 방향으로 배포를 진행하고 있습니다.
💛마치며💛
간단하게 1,2주차에 확인하면 좋을 내용을 적어봤습니다. 궁금한 점이 있으시면 언제든 댓글 남겨주세요!
참고자료
https://jojoldu.tistory.com/43
https://gasungbilife.tistory.com/5 → 블로그 깨알 홍보..❤
'Group Study (2020-2021) > Spring Boot' 카테고리의 다른 글
[Spring boot] 4주차 스터디 - AOP (0) | 2020.11.09 |
---|---|
[Spring Boot] 3주차 스터디 - 스프링빈, 웹MVC개발 (0) | 2020.11.03 |
[Spring Boot] 2주차 스터디 - 스프링 웹 개발 기초, 백엔드 개발 (0) | 2020.10.28 |
[Spring Boot] 1주차 스터디 - Spring Boot Web 프로젝트 생성하기 (0) | 2020.10.16 |