
(23.12.30) 그냥 인텔리제이 쓸게요.. 인텔리제이 최고.. 인텔리제이 쓰세요..
점프 투 스프링부트에서는 STS4를 이용하지만 이후에 진행할 프로젝트를 위해 VS Code에서의 스프링부트 개발 환경을 구축해보려 한다.
이 블록 안의 말들은 개인적인 궁금증 때문에 적어놓은 추가적인 설명이다.
빠르게 개발 환경 구축만을 원한다면 건너뛰어도 좋다.
이 확장팩에는 6개의 확장팩이 포함되어 있다. 따로 따로 설치해도 되지만 한 번에 까는 것이 편리한데 굳이..?
이 확장팩에는 3개의 확장팩이 포함되어 있다.
Maven 대신 Gradle을 사용할 거라면 이 확장팩을 설치해야한다. 아직 Maven이나 Gradle이 자세히 뭔지 몰라도 된다. 그냥 간단히 프로젝트를 관리해주는 도구 정도라고 알고 있자. 점프 투 스프링부트에서는 Gradle을 사용하니 이를 설치해준다.Maven과 Gradle은 빌드 관리 도구이다. 둘의 차이점은 분명 존재하지만 공통적으로 라이브러리와 프로젝트를 관리해준다. Gradle이 더 나중에 나온 것이며, 최근에는 Gradle로 많이 넘어오는 추세라고 한다. Maven은 자바용 프로젝트 관리 도구인 반면, Gradle은 자바, C/C++, Pythone 등을 지원한다. Maven에는 없지만, Gradle에는 Maven과의 비교 문서가 있다고 한다. 그만큼 자신있다는 입장인 듯 하다. 실제로 Gradle은 Maven보다 최대 100배 빠르다. Maven과 Gradle에 대한 더 자세한 설명은 이후 별도의 글에서 다루도록 하겠다.
[Ctrl/Cmd] + [shift] + [P] 혹은 상단 메뉴 [View] - [Command Palette]를 누른 후, 위에서 설치한 Spring Initializr를 이용해서 스프링부트 프로젝트를 생성한다. Maven 또는 Gradle 중에 자신이 사용할 도구를 선택하면 된다.
여기서는 Gradle을 선택한다.
일반적으로 가장 상위에 뜨는 버전이 최신 릴리즈 버전이기 때문에 이를 선택하면 된다.
여기서는 3.0.1을 선택한다.
SNAPSHOT이란 개발 브랜치 중 가장 '최신' 코드라는 것을 의미한다. 아직 개발 중인 데일리 빌드 버전이기 때문에 안정화되지 않았고 변동될 수 있다. 반대로 뒤에 아무것도 써있지 않다면, 정식 'release' 버전이란 것이다. 이는 정식 출시된 안정적인 버전이다.
다시 말해, SNAPSHOT은 아직 개발 중인 버전이며 release 버전이 되기 전 단계라고 할 수 있다. 하지만 release 된 후에는 다음 버전의 SNAPSHOT이 생기기 때문에 어쩌면 SNAPSHOT이 정식 릴리즈 버전보다 최신 버전일 수도 있다. 그림에서 보면, 3.0.1은 최신 정식 릴리즈 버전이고 3.0.2(SNAPSHOT)은 아직 개발 중이기 버전이라는 것을 알 수 있다. 우리는 가장 안정적인 버전인 3.0.1을 선택할 것이다. 하지만 이보다 더 최신 버전을 사용하고 싶다면 3.0.2(SNAPSHOT)을 선택할 수도 있다. 물론 안정성은 보장되지 않겠지만 말이다.
스프링 부트 버전 주기에는 SNAPSHOT과 GA 외에도 M(Milesotne)과 RC 버전도 있다. 더 자세히 알고 싶다면 스스로 찾아보도록 하자.참고 : "Maven Getting Started Guide." Maven. last modified Jan 14, 2023, accessed Jan 17, 2023, https://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version.
프로젝트에서 사용할 언어를 선택한다.
여기서는 Java를 선택한다.
Group Id는 프로젝트를 식별하는 유일한 값이다. 보통 회사 도메인을 거꾸로 만드는 것이 일반적이다. naver.com이라면 Group Id를 com.naver라고 하면 된다.
여기서는 com.mysite.sbb라고 해보자.
groupId는 모든 프로젝트들 가운데 본인의 프로젝트를 유일하게 식별할 수 있도록 해주는 값이다. groupId는 Java의 패키지 명명 규칙(네이밍 룰)을 따라야 한다. (강제는 아니지만 따르는 것이 좋다.) 당신이 컨트롤하는 도메인명의 역순으로 groupId를 만들면 된다.
ex)org.apache.maven,org.apache.commons
위 방법이 강제는 아니기 때문에 네이밍 관습을 따르지 않고 한 단어로 groupId를 만든 레거시 프로젝트들도 많다. 하지만 Maven Central repository에서 승인되는 한 단어 Id를 찾기는 힘드니 그냥 네이밍 룰을 따르도록 하자.
하위 그룹은 원하는 만큼 얼마든지 만들 수 있다. 따라서 프로젝트 구조를 이용해 groupId를 세분화하는 것이 좋다. 현재 프로젝트가 다중 모듈 프로젝트라면, 상위 groupId에 새로운 식별자를 덧붙여 하위 그룹을 만들면 된다.
ex)org.apache.maven.plugins,org.apache.maven.reporting출처 : "Guide to Naming Conventions." Maven. last modified Jan 14, 2023, accessed Jan 17, 2023, https://maven.apache.org/guides/mini/guide-naming-conventions.html.
Artifact Id는 프로젝트 이름이라고 생각하면 된다. Artifact는 소프트웨어 산출물을 의미하고, Java에서는 빌드하면 생성되는 jar 파일을 뜻한다. 다음과 같이 생각하면 쉬울 것 같다.
artifact == 프로젝트
artifactId == 프로젝트 이름
여기서는 sbb-vscode라고 해보자.
groupId와 artifactId가 결합되어 기본 패키지 이름이 만들어진다.
artifactId는 버전 없는 jar 파일의 이름이다. 따라서 프로젝트 이름이라 생각해도 무방한 것이다. 특수문자는 사용할 수 없으며, 소문자만 사용 가능하다. 보통 소문자와 하이픈(-)을 이용하는 것이 일반적이고, 이름은 원하는 대로 정하면 된다.
만약 third party jar 파일을 사용하는 경우라면, 배포된 이름 그대로 사용해야 한다.
ex)maven,commons-math출처 : "Guide to Naming Conventions." Maven. last modified Jan 14, 2023, accessed Jan 17, 2023, https://maven.apache.org/guides/mini/guide-naming-conventions.html.
Jar를 선택한다. 현재로서는 Jar와 War의 차이를 알 필요 없다. Spring Boot Guide에서 제안하는 표준은 Jar이므로 일반적으로 Jar를 사용하면 된다는 정도만 알고 있자.
JAR(Java Archive)와 WAR(Web Application Archive)는 둘 다 Java의 jar 옵션
"java -jar"을 이용해 생성된 압축(아카이브) 파일로, 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징해주는 역할을 한다.
Jar는 Java Application이 동작할 수 있도록 자바 프로젝트를 압축한 파일로, (JDK에 포함된) JRE만 있어도 실행 가능하다.
War는 servlet/jsp 컨테이너에 배치할 수 있는 Web Application을 압축한 파일로, 실행을 위해서는 Tomcat 등 별도의 웹 서버 또는 웹 컨테이너(WAS)가 필요하다. 웹 어플리케이션 전체를 패키징 하기 위한 Jar 파일이라고 생각하면 쉬울 것 같다.
SpringBoot는 Tomcat 서버를 내장하고 있으므로 Jar 배포만으로도 실행이 가능하며, 표준 가이드는 Jar이다. 하지만 (SpringBoot에서 지양하지만) JSP나 외장 WAS를 이용해야하는 상황이라면 War을 사용해야한다. 어플리케이션 리소스릂 패키징하는 방법에 차이가 있을 뿐이니, 어떤 것을 사용할지는 개발자의 판단이다.(더 자세한 내용은 추후에 별도의 글에서 다뤄보도록 하겠다.)
본인이 사용하는 자바 버전을 선택하면 된다.
cmd 또는 terminal에
java -version을 입력하면 현재 컴퓨터에 설치된 Java의 버전을 알 수 있다.
Dependency는 Spring Boot에서 특정 기능을 사용할 때 필요한 라이브러리라고 할 수 있다. 필요에 따라 dependency를 추가하면 되고, 이후에 추가적으로 필요한 dependency는 pom.xml(for Maven) 또는 build.gradle(for Gradle) 파일을 수정해서 추가할 수도 있다.
위 사진에 선택된 것들은 기본적으로 필요한 의존성이니 추가하도록 하자.
마지막으로 프로젝트를 생성할 위치를 선택하면 드디어 프로젝트가 생성된다!
생성된 프로젝트를 열어 위 그림처럼 뜨는지 확인해보자.