VSCode/Cursor + Spring Boot + Maven/Gradle 프로젝트 시작을 위한 설정 방법
1. Java 설치 및 확장팩 설치
- Eclipse Temurin 설치
- https://adoptium.net/temurin/releases/?os=windows&arch=x64&package=jdk
- Java Extension Pack (Microsoft)
- vscode에서 Java 응용 프로그램을 작성, 테스트 및 디버그하는 데 도움되는 확장팩이다. (필수)
- Spring Boot Extenstion Pack (Pivotal)
- Spring Boot 애플리케이션 개발 및 배포를 위한 확장팩이다. (필수)
- Lombok Annotations Support for VS Code (Gabriel Basilito Brito)
- Java 라이브러리로, 반복되는 getter, setter, toString 등 반복 메서드 작성 코드를 줄여줌. (선택)
2. 스프링 부트의 버전 선택
- start.spring.io에서 프로젝트 구조 설정 및 다운로드
- 운영 환경에서는 반드시 정식 릴리스 버전(접미사 없음)을 사용해야 한다.
- 예: spring-boot 3.2.4, spring-framework 6.1.6 등
- RC/Milestone/SNAPSHOT은 새 기능 테스트나 프로토타입 단계에서만 사용하는 것이 좋다.
- 예시 :
- 3.2.0-SNAPSHOT: 개발 중인 버전, 변경될 수 있음
- 3.2.0-M1: 1차 마일스톤, 주요 기능 일부 포함
- 3.2.0-RC1: 거의 완성된 상태, 릴리스 직전
- 3.2.0: 정식 안정 버전 (운영 환경용)
3. VSCode/Cursor에서 프로젝트 생성하기
3.1. Maven/Gradle 프로젝트 선택
- ctrl + shift + p 혹은 f1 키를 누르고 >를 입력하거나 메뉴의 view -> command palatte를 클릭하고 spring initializr를 입력하면 다음과 같이 Maven/Gradle 프로젝트를 선택하여 생성할 수 있다.
3.2. 스프링 부트 버전 선택
3.3. 사용할 언어 선택
3.4. Group ID
- 정의:
- 프로젝트의 그룹을 식별하는 고유한 식별자입니다. Maven에서는 프로젝트를 고유하게 식별하기 위해 groupId를 사용한다.
- Group ID는 프로젝트의 소속과 네임스페이스를 정의하는 식별자이다.
- Java 프로젝트의 **소속(조직, 회사, 팀)**을 나타내는 고유 식별자이다.
- 전 세계적으로 중복되지 않게 하기 위해 보통 도메인 이름을 역순으로 사용한다.
- 명명 규칙:
- 자신이 소유한 도메인의 역순을 사용한다. 예를 들어, 도메인이 example.com이라면 com.example로 설정한다.
- 예시:
- com.example
- org.springframework.boot
- net.mycompany.project
- 목적:
- 다른 프로젝트와의 충돌을 방지하고, 조직이나 회사 내에서 프로젝트를 체계적으로 관리하기 위함이다.
3.5. Artifact ID
- 정의:
- 생성될 프로젝트의 이름이자, 빌드 결과물(예: JAR 파일)의 이름이 된다. Maven에서는 artifactId를 사용하여 특정 프로젝트를 식별한다.
- 프로젝트의 고유 이름 (즉, "무엇"인지 식별하는 ID)
- 일반적으로 프로젝트 폴더 이름과 동일하다.
- Maven 중앙 저장소나 Gradle 의존성에서 라이브러리를 식별하는 데 사용된다.
- 실제 생성되는 산출물의 파일명에도 포함된다.
- 명명 규칙:
- 소문자와 하이픈(-)을 사용하여 명확하고 간결하게 작성한다.
- 소문자와 -(하이픈)을 사용해 읽기 쉽게 작성한다. (예: spring-core, user-service)
- 프로젝트 목적을 명확하게 드러내는 이름이 좋다.
- 같은 Group ID 내에서는 중복되면 안된다.
- 예시:
- demo
- user-service
- order-management
- 목적:
- 프로젝트의 목적이나 기능을 명확하게 나타내어, 여러 프로젝트를 관리할 때 혼동을 줄이고 가독성을 높이기 위함이다.
3.6. 패키지 타입 (Packaging)
3.6.1. 선택 옵션:
- Jar:
- 독립 실행형 애플리케이션을 생성할 때 사용한다.
- War:
- 웹 애플리케이션 아카이브로, 외부 웹 서버(예: Tomcat)에 배포할 때 사용한다.
3.6.2. 용도:
- Jar:
- 내장 서버를 포함하여 실행 가능한 애플리케이션을 만들 때 적합하다.
- War:
- 기존의 웹 서버 환경에 애플리케이션을 배포할 때 사용한다.
- 선택 기준:
- Spring Boot에서는 기본적으로 Jar를 권장한다. 하지만 기존의 웹 서버 환경에 배포해야 하는 경우 War를 선택한다.
3.6.3. 정리
- Maven/Gradle의 <packaging> 혹은 build.gradle의 apply plugin 설정을 통해 프로젝트가 생성·배포되는 산출물(artifact) 유형을 결정하며, 기본값은 jar이다.
- JAR(Java ARchive)는 클래스 파일과 리소스를 하나의 .jar 파일로 묶어 배포하며, 종종 Uber-JAR(Fat JAR)로 의존성까지 포함해 독립 실행형 애플리케이션으로 사용한다.
- 주로 Java 라이브러리 패키지로 사용된다.
- Java 프로그램(애플리케이션)을 실행할 수 있도록 필요한 클래스 파일과 메타데이터가 포함되어 있다.
- 독립 실행 애플리케이션을 위한 내장 웹 서버(예: 톰캣)를 포함할 수 있어 별도 서버 환경 없이 바로 실행할 수 있다.
- 주로 Spring Boot 애플리케이션에서 사용된다.
- WAR(Web Application ARchive)는 웹 애플리케이션 표준 구조인 WEB-INF 디렉터리와 JSP/HTML, 정적 리소스를 포함해 서블릿 컨테이너(Tomcat, Jetty 등)에 배포한다.
- 주로 웹 애플리케이션을 위한 패키지 형식이다.
- 웹 서버나 서블릿 컨테이너(예: 외장 톰캣, 제티 등) 내에서 실행될 수 있으며, WEB-INF 디렉터리 아래에 JSP 파일, 서블릿 클래스, 메타데이터 등을 포함한다.
- 기존의 Java EE(Web) 애플리케이션 서버에서 많이 사용된다.
3.6.4. JAR 패키징
3.6.4.1. 구조 및 구성 요소
- 기본 구조:
your-app.jar
├── META-INF/
│ └── MANIFEST.MF ← Main-Class, Class-Path 지정
├── com/…
└── resources/…
3.6.4.2. 실행 방식
- 독립 실행:
- java -jar your-app.jar 커맨드로 실행
- 의존성 포함:
- Uber-JAR로 빌드 시 외부 라이브러리까지 모두 포함 → 단일 파일로 간편 배포
3.6.5. WAR 패키징
3.6.5.1. 구조 및 구성 요소
- 기본 구조:
your-app.war
├── WEB-INF/
│ ├── classes/ ← 컴파일된 .class 파일
│ ├── lib/ ← 종속 JAR들
│ └── web.xml (선택)
├── index.html, *.jsp
└── static/…
- web.xml 없이 Servlet 3.0+ 어노테이션 기반 설정 가능
3.6.5.2. 배포 방식
- 웹 서버/컨테이너(예: Tomcat, Jetty)에 WAR 파일을 배포하여 동작
- 컨테이너가 자동으로 WEB-INF/lib의 JAR을 클래스패스에 로드
3.6.5.3. 장점 및 단점
- 장점
- 웹 애플리케이션 전용 디렉터리 구조 제공
-표준 자바EE/자카르타EE 스펙 준수로 이식성 높음
- 단점
- 독립 실행 불가 → 반드시 서블릿 컨테이너 필요
- WAR 크기가 커질 수 있으며, 복수 모듈 간 중복 의존성 관리 어려움
3.6.6. JAR vs. WAR 비교표
구분 | JAR | WAR |
구조 | META-INF + 클래스+리소스 | WEB-INF + classes/lib + 웹 리소스 |
실행 방법 | java -jar | 서블릿 컨테이너에 배포 |
배포 대상 | 독립 애플리케이션, 라이브러리 | 웹 애플리케이션 |
빌드 라이프사이클 | jar:jar goal 자동 바인딩 | war:war goal 자동 바인딩 |
장점 | 단일 파일, 경량, 독립 실행 | 웹 구조 최적화, 자카르타EE 표준 준수 |
단점 | 웹 콘텐츠 불가, 복잡도 제한 | 서버 의존, 파일 크기·중복 의존성 관리 부담 |
사용 예시 | CLI 앱, 마이크로서비스, 라이브러리 | 전통적 웹 앱, JSP/Servlet 기반 시스템 |
3.7. 자바 버전 선택
3.8. Dependency 선택
- 기본 구성 선택
- Lombok
- Spring Boot DevTools
- Spring Configuration Processor
- Spring Web
- Spring Data JPA
- H2 Database
4. 테스트 프로젝트 실행하기
4.1. 테스트 코드 작성
- demo/java/com/example/demo 위치에 DemoController.java 이름의 파일을 생성하고 코드를 입력한다.
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/test")
public String test() {
return "test demo";
}
}
4.2. 코드 실행하기
- 실행은 DemoApplication.java 파일에서 해야 한다. 우측 상단의 화살표로 되어있는 Run 버튼을 누른다.
4.3. 결과 확인
- localhost:8080/test에 접속해 확인을 한다.
5. gradle 설치/빌드/실행
5.1. 명령어 실행
- 설치 명령어 : ./gradlew
- 빌드 명령어 : ./gradlew jar
- 실행 명령어 : ./gradlew bootRun
5.2. vscode, cursor의 확장 프로그램 설치 및 실행
- Gradle Extension Pack 설치
- 아이콘 메뉴 중 코끼리 모양 클릭
- 빌드
- build -> build 의 오른쪽에 run 아이콘(오른쪽 삼각형 아이콘)을 클릭
- 실행
- application -> bootrun의 오른쪽에 run 아이콘(오른쪽 삼각형 아이콘)을 클릭
- reference :
https://withwltn.tistory.com/6
[VSCode] vscode에서 Spring Boot Maven 프로젝트 생성하기(환경구성)
1 프로젝트 생성하기에 앞서 필요한 확장팩 세개를 설치해준다. 단축키 Ctrl + Shift + X를 눌러 마켓플레이스를 연다. Java Extension Pack (Microsoft) : vscode에서 Java 응용 프로그램을 작성, 테스트 및 디버
withwltn.tistory.com
VSCode + Spring Boot + Maven 프로젝트 생성(No spring.config.import property has been defined 에러?)
1. VSCode 확장팩(Extension) 설치 VSCode에서 Java 언어 사용을 위한 Extension들을 설치해줘야 한다. [Ctrl] + [Shift] + [X] 또는 좌측 아래의 Extensions 아이콘을 클릭한다. 아래의 Extension Pack을 검색하여 설치한
ittown.tistory.com
https://www.baeldung.com/java-jar-war-packaging
'Study > java' 카테고리의 다른 글
[Java] 자바의 신 학습 정리 VOL.2 주요 API 응용편 - 제네릭만 정리 (0) | 2025.04.28 |
---|---|
[Java] 자바의 신 학습 정리 VOL.1 기초 문법편 (0) | 2025.04.20 |
댓글