Group Study (2020-2021)/Spring Boot

[Spring Boot] 1, 2주차 보충 내용 - Spring Boot, Flow, Build

DongsunSin 2020. 10. 19. 04:28

안녕하세요! 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 위에 구축된 프로젝트입니다.

image


출처: https://dzone.com/articles/what-is-spring-boot

👀 Spring Boot와 Spring Framework 대표 차이점 👀

  1. 내장 서블릿 컨테이너로 jar 파일을 간단하게 배포할 수 있다.
  2. starter가 관리해주는 dependency
  3. Embed Tomcat 사용으로 Tomcat 설치나 버전 관리의 수고가 줄었다.
  4. 다른 스프링 프레임워크 요소들을 쉽게 사용

2. 자세한 Spring Boot 동작 Flow

Spring boot는 내부적으로 내장 톰켓을 가지고 있습니다. 그러면 Spring Boot가 실행되면 내부적으로 내장 Tomcat 즉 Servlet Container가 실행됩니다. Spring Boot에서 DispatchServletFrontController의 역할을 합니다.

여기서 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

image


출처: 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://12bme.tistory.com/555

https://wrkbr.tistory.com/520

https://gasungbilife.tistory.com/5 → 블로그 깨알 홍보..❤