Study/java

VSCode/Cursor + Spring Boot + Maven/Gradle 프로젝트 시작을 위한 설정 방법

bluebamus 2025. 4. 30.

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에서 프로젝트 구조 설정 및 다운로드

      - https://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

https://ittown.tistory.com/1

 

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

 

댓글