1. Spring Initializr
 
- Project 에서는 Maven 과 Gradle 중 원하는 빌드 도구를 선택 가능
- Language 에서는 Java, Kotlin, Goovy 중 원하는 언어를 선택 가능
- Spring Boot 버전 선택 가능
- SNAPSHOT : 개발 도중인 daily build 버전. 변경이 잦기 때문에 안정적으로 사용하기는 어려움
- M(Milestone) : 새로 개발중인 기능이 포함된 버전. 기능이 완성되면 바로 릴리즈 가능한 상태
- RC(Release Candidate) : 정식 릴리즈될 후보 버전. 치명적인 결함이 발견되지 않는다면 릴리즈해도 되는 상태
- GA(General Availability) : 정식 릴리즈된 버전. 여기서는 아무 명칭도 붙어있지 않은 버전이 GA 버전
 
- Project Metadata 작성
- Group
- 프로젝트의 패키지명
- 일반적으로 com.<회사명>.<프로젝트명> 등의 형태로 구성 (도메인을 뒤집어놓은 형태)
- 특수문자나 대문자 등의 사용은 쓰지 않을 것이 권장됨 (가독성을 위해 hyphen 정도는 사용 가능)
 
- Artifact
- version을 붙이지 않은 배포용 jar 파일의 이름
- 빌드 산출물의 이름을 미리 정하는 것
 
- Name
- 어플리케이션의 이름
- 일반적으로 Artifact와 동일하게 사용
 
- Description
- Packaging
- 배포 방식 선택 가능
- JAR
 
- 빌드 결과 실행가능한 jar파일을 얻을 수 있음
- jar 파일 내에 톰캣이 내장되어있어 별도의 WAS를 설치하지 않고도 바로 서버 구동 가능
 => webflux 를 사용할 경우 톰캣 대신 Netty를 사용
 
 
 
- WAR
- NginX 와 같은 별도의 WAS를 사용하고자 하는 경우 선택해야할 방식
- WAR 파일을 WAS에 웹 어플리케이션으로 등록하는 식으로 배포 가능
 
 
- Java 버전 선택가능
- Java 8부터 Stream이나 Lambda 표현식, 인터페이스의 default method, Optional 클래스 등
 다양한 기능이 업데이트되었기 때문에 일반적으로 최소 Java 8 이상의 버전을 사용
 
 
- 오라클 웹 사이트에서 각 버전별 차이를 숙지하고 자신의 프로젝트에 적합한 버전을 골라
 사용하는것이 좋음.
 
 
 
 
2. Dependencies
 
- Spring Initializr 페이지 우측의 Dependencies 에서 ADD 를 클릭하면 위와 같은 모습을 볼 수 있다.
- 원래 Spring에서 다양한 라이브러리나 보조 프레임워크 등을 사용하기 위해서는 복잡한 의존성 설정이 필요
- Spring Boot에서는 이러한 의존성 관리를 xml이나 그래들 빌드 파일 등에서 쉽게 관리할 수 있음
- Spring Initializr의 Dependencies는 프로젝트를 생성하면서부터 미리 필요한 의존성을 추가할 수 있도록 해줌
- 위 사진에서 선택된 Spring Web 의존성만 추가해도 Spring MVC 구조의 웹 개발을 위한 최소한의 환경이 갖춰짐
 
 
3. 프로젝트 시작
 
- Spring Web 의존성만 추가해준 뒤 GENERATE 버튼을 누르면 프로젝트가 압축파일 형태로 다운로드 된다.
- 압축을 풀고 디렉토리 내의 build.gradle 파일을 프로젝트로 불러오기만 하면 완성이다.
 
 
 
 
- IntelliJ
- Open > 프로젝트 디렉토리 내의 build.gradle 선택 > OK > Open as Project 선택
- 이후 이 글에서는 IntelliJ를 사용하여 프로젝트를 진행
 
- Eclipse
- File > Import > Existing Gradle Project 에서 마찬가지로 build.gradle 파일을 선택하여 불러오기
- Eclipse의 경우에는 별도로 Gradle 플러그인을 설치해줄 필요가 있음
 
 
 
4. 프로젝트 구조
 
- 프로젝트를 불러오고 Gradle이 빌드를 완료하기까지 기다리면 위와 같이 프로젝트가 구성된다.
 
 
- src
- 웹 어플리케이션을 구성할 Java 코드와 리소스(이미지, 템플릿, css, js 파일 등)가 위치할 디렉토리
 
 
- main
- java
- 실제로 웹 어플리케이션을 구성하는 Java 코드가 위치
- 앱을 구동할 메인 어플리케이션 클래스는 물론 이전에 설명한 Controller, Service, Repository나
 Entity(모델), DTO, 개발자가 임의로 정의한 클래스나 Java Configuration 파일도 여기에 위치
 
- resources
- css, js, 이미지 파일, 템플릿(html) 등의 정적 리소스들이 위치하는 디렉토리
- Dispatcher Servlet이 요청을 처리한 핸들러를 찾지 못했을 경우 탐색하는 정적 리소스 경로
 
 
 
 
- test
- JUnit Test를 위한 코드들이 위치하는 디렉토리
- 일반적으로 실제 java 디렉토리와 같은 구조로 구성하여 테스트를 진행한다.
 
 
 
- .gitignore
- git 저장소에 commit 시에 staging 하지 않을 파일들을 명시한 파일
- 원래 직접 작성해야하지만 Spring Initializr로 Spring Boot 프로젝트 생성시 자동으로 
 .gitignore에 추가해야할 파일들을 작성해준다. 물론 추가적으로 명시해야할 파일이
 생기게 될 경우에는 직접 작성해줘야한다.
 
 
 
- build.gradle
- Gradle을 사용하여 프로젝트를 빌드하기 위한 설정 파일
- 이 파일을 통해 프로젝트의 의존성을 간편하게 관리할 수 있다.
 
 
 
 
5. 메인 어플리케이션 실행
- src/main/java/<Group 이름> 디렉토리 하위의 MycommApplication 을 실행하면 웹 서버를 구동할 수 있다.
 
- 정상적으로 실행되었다면 콘솔창에 위와 같이 출력되며 웹 서버에 접속 가능한 상태가 된다.
- 현재 서버는 로컬에서 구동중이며 톰캣의 기본 포트는 8080이므로 127.0.0.1:8080 으로 웹 서버에 접속 가능하다.
 
 
- 접속해보면 위와 같이 Whitelabel Error Page가 뜨는 것을 확인할 수 있다. 아직 요청을 처리할 
 컨트롤러도, 넘겨줄 정적 리소스도 없기 때문이다.
 
 
- 다음 포스팅에서는 간단한 index 페이지와 컨트롤러, 템플릿을 작성하여 원하는 웹 페이지를 띄워볼 것이다.