https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=74 강의를 수강하며 작성하는 글입니다.
SpringBoot강의를 본격적으로 수강하기전에 강의자료를 먼저 읽었는데 마음이 두근두근 한다!
일반 스프링 프로젝트는 WAS에 올라가는데 무려 스프링부트는 컨테이너를 품고있다!
스프링 부트 소개
스프링부트 1.0 : 컨테이너 없는 웹 애플리케이션 아키텍처를 구현하는 것을 목표로 출시
스프링부트 2.0: JAVA8이상 스프링 프레임워크 5.0, 스프링 시큐리티 5.0, 스프링 Data JPA 2.0 적용
스프링 부트 기능 정의
XML 구성이 사라진다! JAVA코드만 가지고서 구현 할 수 있다.
운영에 필요한 Health Check 기능 제공
스프링 부트 구성요소
- 빌드도구(그레이들 vs 메이븐)
- 스프링 프레임워크(4.X vs 5.X)
- 스프링 부트 (v1.5 vs v2.0)
- 스프링 부트 스타터
스프링부트는 스프링 프레임워크를 기반으로 한 애플리케이션 개발플랫폼 이다
개발플랫폼이라 불리기 위해서는 개발에 필요한 라이브러리 의존성 관리, 빌드 및 배포, 나아가서 운영을 위한 편의기능까지 제공할 수 있어야 한다. 스프링부트는 개발 및 운영 전 과정을 아우르는 기능을 제공한다!
Build
1. Spring Initializer에 접속한다. https://start.spring.io/
스프링 부트 프로젝트가 생성되는곳이다. 선택된 값을 가지고 스프링 부트 프로젝트를 생성하여 zip파일로 다운로드 받을 수 있다.
IDE에서는 이렇게 내려받은 zip 파일 압축을 풀고 불러와서 build.gradle 혹은 pom.xml을 읽어서 프로젝트 정의된 의존성 라이브러리를 추가하고 이용 가능한 상태로 만든다.
2. 빌드도구, 언어, 스프링부트 버전과 패키지정보를 입력한다.
3. Option을 클릭하면 Packaging과 JAVA 버전을 선택 할 수 있다.
4. 프로젝트를 개발하는데 필요한 라이브러리를 입력 할 수 있다.
웹을 개발할때 필요한 풀스택 웹이 가능하다. TomCat을 기본적으로 가지고 있다.
Web, Lombok, JPA, Hibernate를 선택한다.
5. 마지막으로 생성된 프로젝트를 살펴보거나, 프로젝트를 생성 후 Zip로 다운 받을 수 있다.
(개발자가 선택한 값을 가지고 쿼리스트링형태로 서버에 데이터를 전달 한 후 starter.zip를 내려받을 수 있게 해준다.)
Explore the project를 선택하면 아래와 같이 프로젝트가 생성되는것을 확인 할 수 있다
(그동안 프로젝트를 진행하며 프로젝트 환경설정하느라 고생했던 일들이 주마등처럼 스쳐 지나간다...)
프로젝트 기본 코드 구조
SpringBootVersion 설정.. 등등.. pom.xml과 마찬가지로 의존성을 정의한다.
Gradle 기반 프로젝트 기본 코드구조
1)앞의 build.gradle
3) 리눅스계열에서 사용되는 스크립트
4) 윈도우 사용 배치파일
5) 프로젝트의 기본적인 구성 정의
실제 컴파일 단계에서는 src main과 srt main만 컴파일 되서 배포가 된다.
JAR냐 WAR냐 하는 패키징 방식은 어디에 배포하느냐에 따라 달라진다.
스프링부트는 실행가능한 JAR로 애플리케이션을 배포한다. 따라서 JVM과 JRE가 있는 환경이라면 어디서나 실행할 수 있다WAR의 경우에는 별도의 WAS에 배포한다는 가정을 했을때 선택한다.
스프링부트는 빌드시 재포장 작업을 한다. 애플리케이션과 그 실행에 필요한 의존성을 가지는 라이브러리를 묶은 후 내장테이너를 넣고 다시한번 포장을 한다.
스프링부트에서 생성하는 JAR는 스프링부트에서 제공하는 빌드 플러그인이 배포본 생성과정에서 리패키징 과정을 통해 컨테이너를 내장시킨다
(개인적으로 이부분에서 충격을 받았다.. 여태까지 진행했었던 프로젝트는 WAS와 서블릿 컨테이너가 주가되고, 웹애플리케이션을 올려놓는다는 인상이였는데, 주객이 전도된 느낌이다.)
Spring Boot 1.5버전과 2.X 버전의 차이점은, Spring라이브러리 버전의 차이다.
Spring Boot 1.5: 스프링 4.3 기반
Spring Boot 2.0: 스프링 5.0 기반
스프링부트 2.X부터 시작하는것을 권장한다.
스프링부트는 스프링의 컴포넌트 스캔기능을 적극 활용한다.
여담이지만, 서블릿컨테이너가 객체를 관리할때와 스프링컨테이너가 객체를 관리할때 어떤 차이점과 장점이 있는지에 대해서 고민해볼 필요가 있다. 왜 스프링 컨테이너를 '경량 컨테이너'라고 부르는지에 대해서도 연구해 보자.
@SpringBootApplication
@ComponentScan - 애플리케이션의 컴포넌트스캔 범위지정
@ConditionlOn~~ - 조건에 따라 활성화 한다.
@SpringBOotConfiguration(= @Configuration) Spring과 SpringBoot를 구분하기 위해
CODE
@SpringBootApplication
public class BootSpringBootApplication {
public static void main(String[] args){
SpringApplication.run(BootSpringBootApplication.class, args);
}
}
스프링부트가 시작되는 곳 @SpringBootApplication
JSP를 배우기 전 JAVA를 배우며 Java Application을 작성했었던 이후로 오랜만에 보는 main 메서드(...)
의외로 SpringBoot는 main메서드 안에서 시작한다.
main 메서드 안에서 SpringApplication 인스턴스를 생성하고 run 메서드를 실행한다.
자기가 관리하는 컨테이너를 실행시키고 하향식으로 패키지을 탐색하며 애너케이션이 붙은 클래스를 찾는다.
스프링부트 스타터를 사용하면 버전명을 직접 기입할 필요 없이, 스타터에서 의존성을 관리해준다(!) 이런 프린세스메이커의 요정집사 가트니라구ㅜㅜ
따라서 개발자는 아래의 요소들만 신경쓰면 되겠다..
spring-boot-autoconfigure: 스프링부트 자동구성을 알 수 있다.
@Configuration
@ConditionalOn
애너테이션을 살펴본다-
애플리케이션 속성을 외부에서 주입받아서 지정을 할 수 있다.
우선순위를 알아보자.
1. 실행인자(터미널에서나 AWS에서 환경변수 적용..)
2. 서버안에 JSON으로 선언한 구성파일
3. OS 환경변수(AWS에서 많이 씀)
4. 두가지 속성파일에서 속성을 따옴..
4. 로컬/테스트/DEV로 구분된 properties...
우선순위에 따라서 덮어 쓰는 형태가 된다고 한다.
Spring환경의 기본인 @ComponentScan에 대해서 숙지할 필요가 된다.
너무나 당연하게도, 스프링부트로 비즈니스로직을 작성하기 위해서는 스프링 프레임워크를 잘 알아야 한다!
: https://github.com/spring-projects/
스프링은 출시된지 어언 15년이 된 프레임워크다.. 굉장히 방대하다.
기능을 이해하면서 개발하는것이 중요하다!
소감
우선 강의를 들으며 거듭 느꼈던 거지만, 톰캣없이 실행 가능하다는것에 대해 적지 않은 충격을 받았다. 또한 스프링부트가 스프링프레임워크를 기반으로 하고 있는만큼, 스프링에 대한 튼튼한 기반지식 없으면 활용하기가 쉽지 않을 거라는것을 느꼈다.
Spring Boot 강의 수강과 동시에 Spring프레임워크에 대해 복습이 필요할것 같다.
넣어뒀던 Spring 책을 다시 꺼낼때다!
'Today I learned' 카테고리의 다른 글
프로젝트 빌드 혹은 톰캣 기동시 갑자기 에러가 발생할때. (0) | 2019.09.02 |
---|---|
[Spring Boot] 스프링부트 2일차 (0) | 2019.08.29 |
2019 배우고싶거나 하고싶은것 정리 (0) | 2019.08.28 |
CSS/JS를 수정했음에도 반영이 되지 않는경우 (0) | 2019.08.27 |
JQuery 예제 - 작은 div박스 추가하고 삭제하기 (0) | 2019.08.25 |
댓글