[Spring] 프로젝트 생성

이지연·2026년 1월 13일
post-thumbnail

스프링(Spring)이란

  • Spring은 Java 기반 애플리케이션 개발을 위한 프레임워크로, 웹 애플리케이션을 만들 때 필요한 다양한 기능/라이브러리를 제공한다.
  • 순수 Java로 웹을 개발할 때 반복적으로 구현해야 하는 영역을 프레임워크가 표준화/단순화해서 개발 생산성을 높인다.

대표적으로 다음 편의 기능을 많이 활용한다.

  • HTTP 통신 처리(요청/응답, request/response 데이터 바인딩 등)
  • DB 연결 및 쿼리 실행(JDBC, ORM/JPA 등과의 연동)
  • 보안(로그인/권한 등) 기능 연동(Spring Security 등)

스프링부트(Spring Boot)란

  • Spring Boot는 Spring 기반 애플리케이션을 더 쉽고 빠르게 만들도록 “프로젝트 구성/설정/실행”을 크게 자동화한 도구(프레임워크 생태계)다.
  • 설정을 최소화하는 핵심은 자동 설정(Auto-configuration)과 스타터(Starter) 의존성으로, “의존성만 추가하면 관련 기본 설정이 함께 준비되는” 방식이다.
  • 최신 실무에서는 초기 세팅 속도, 실행/배포 편의(내장 서버 포함), 클라우드 환경 적응성 등의 이유로 Spring Boot 기반이 일반적이다.

스프링부트 프로젝트 생성

스프링부트 프로젝트는 보통 2가지로 시작한다.

  • IntelliJ IDEA Ultimate(유료)의 Spring Initializr 연동 기능 사용
  • Spring Initializr(https://start.spring.io)에서 ZIP 생성 후 IDE로 열기(가장 보편적)

Spring Initializr 주요 설정

  • Project(빌드 도구): Gradle(Groovy) 또는 Maven
    • Gradle은 빌드/의존성 관리/배포 자동화를 담당하며, 의존성은 build.gradledependencies에 선언한다
    • Groovy는 Gradle 빌드 스크립트를 작성하는 문법(언어)로, build.gradle 작성에 사용된다
  • Language: Java(일반적)
  • Spring Boot 버전
    • SNAPSHOT은 실험/개발 버전이므로 보통 안정 버전을 선택한다.
  • Project Metadata
    • Group: 조직/도메인 기반 네이밍(보통 도메인을 역순으로)
    • Artifact: 프로젝트 식별자(빌드 산출물 JAR 이름에도 반영)
    • Name / Package name: Group/Artifact 기반으로 자동 완성되는 경우가 많다
  • Packaging
    • 보통은 Jar를 사용(스프링부트 실행/배포 방식과 궁합이 좋음)
  • Dependencies(의존성)
    - Spring Web: HTTP 기반 웹 서비스라면 사실상 기본
    - (선택) Thymeleaf: 서버 사이드 템플릿 기반 뷰를 쓸 때 선택
    - 이후 JDBC/MyBatis/JPA/Security 등은 프로젝트 진행하며 추가

ZIP 다운로드 후 IntelliJ에서 여는 법

  • ZIP 압축 해제 후, IntelliJ에서 build.gradle(또는 프로젝트 루트)을 열면 Gradle이 의존성 다운로드/동기화를 진행한다.
  • 의존성이 꼬였거나 다시 받고 싶으면 Gradle 새로고침(리로드)로 재동기화한다

스프링부트 기본 디렉터리

  • .idea/: IntelliJ IDEA가 프로젝트를 열 때 사용하는 IDE 설정/메타데이터 폴더(팀 공용이 아니라면 보통 Git에 올리지 않음).
  • src/: 스프링부트 표준 소스 루트로, 크게 maintest로 나뉜다
  • build/: Gradle 빌드 결과물(컴파일 산출물, 생성된 JAR 등)이 쌓이는 폴더로, 보통 Git에서 제외한다

src/main (실행 코드)

  • src/main/java: 애플리케이션의 실제 구현 코드(컨트롤러/서비스/도메인 등)가 위치한다
  • src/main/resources: 설정 및 리소스가 위치하며 application.properties/application.yml 같은 설정 파일이 여기에 온다
  • src/main/resources/static: CSS/JS/이미지/정적 HTML 같은 정적 파일을 두는 위치로, 스프링부트가 정적 리소스로 서빙할 때 자주 사용된다. (주로 REST API이므로 백엔드 데이터만 처리하지만, 예외적으로 MVC 아키텍쳐의 경우 하나의 서버에서 정적 리소스도 함께 제공되는 경우가 있고 이 때 정적 리소스를 위치시키는 폴더가 static, templates이다.)
    - application.properties: properties와 yaml(야믈) 파일 중 yml(=yaml)이 더많이 사용된다.

src/test (테스트 코드)

  • src/test/java: JUnit 등으로 작성하는 테스트 코드 위치이며, 스프링부트 기본 프로젝트가 처음부터 test 폴더를 제공하는 건 테스트가 개발 흐름에서 중요하다는 전제를 반영한다.
  • 테스트는 “서버를 직접 실행하지 않고도” 핵심 로직/스프링 설정을 검증하는 방식으로도 많이 활용된다.

Gradle/설정 파일들

  • build.gradle: Gradle 빌드 스크립트로, 플러그인/의존성/빌드 설정을 정의( Maven을 쓰면 이 역할을 pom.xml이 담당)
  • settings.gradle: 프로젝트 이름 등 Gradle 프로젝트의 기본 설정을 담고, 멀티 프로젝트(모노레포) 구성에서도 사용
  • .gradle/: Gradle이 빌드 과정에서 생성하는 캐시/임시 파일 등이 저장되는 폴더로, 재빌드 시간을 줄이는 데 사용
  • gradle/wrapper/ + gradlew(gradlew.bat): Gradle Wrapper 구성 요소로, 로컬에 Gradle을 별도 설치하지 않아도 지정된 버전으로 빌드가 가능하게 해준다
  • .gitignore: 빌드 결과물(build/), IDE 설정(.idea/), 로컬 캐시(.gradle/) 같은 “소스가 아닌 것”을 Git 추적에서 제외하기 위한 파일

기타 (/build/out 차이)

빌드 설정을 IntelliJ로 변경할 경우 build/ 파일이 아닌 out/ 파일이 될 수도 있고, 빌드가 꼬일 경우 해당 파일을 아예 지웠다가 다시 실행하는 방법도 있으니 참고하자

properties와 yml

Configuration(환경설정, 구성도)은 스프링의 환경설정 파일이다.

  • properties : server.port = 8081 의 형식으로 작성
  • yml : 계층구조를 가진 가독성 좋은 형식이다

application.properties로 설정 후 8080포트 -> 8081포트로 변경후 빌드

application.yml로 설정 후 8080포트 -> 8081포트로 변경후 빌드


메인 Application 클래스

  • @SpringBootApplication이 붙은 main 클래스를 실행하면 기본 설정으로 서버가 기동된다(기본 포트는 8080).

Gradle 빌드와 실행(JAR 만들기)

Gradle 관련 파일(왜 중요한가)

  • gradlew / gradlew.bat: Gradle Wrapper 실행 스크립트로, 프로젝트에서 정의한 Gradle 작업을 실행한다 (jar 파일을 생성하는 목적)
  • .gradle/: 빌드 과정의 캐시/임시 파일 등이 저장될 수 있다.

build.gradle 코드 살펴보기

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.5.9'
	id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.beyond'
version = '0.0.1-SNAPSHOT'
description = 'basic project for Spring Boot'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

// gradle build tool을 사용하더라도 저장소로 maven repository를 사용.
repositories {
	mavenCentral()
}

// dependencies(의존성): 이 프로젝트에서 사용할 라이브러리(외부 모듈) 목록
// - Spring Web: HTTP 통신(요청/응답) 처리를 위한 라이브러리 (기본 의존성)
// - Test / JUnit: 테스트 작성을 위한 라이브러리
//   * 테스트란?
//     - 코드로 코드를 검증하는 개념
//     - 하나의 코드(샌드박스)를 실행하면 input 값과 output 값이 존재함
//     - 사람이 하는 테스트: 실제 응답값과 예상 출력값이 동일한지 직접 확인
//     - 여기서 말하는 테스트: test 디렉터리에서 테스트 코드를 작성해,
//       코드가 기대한 대로 동작하는지 자동으로 검증(코드 검수)하는 것
//     - 이 과정에서 사용하는 라이브러리가 Test / JUnit
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
	useJUnitPlatform()
}

직접 빌드해보기 (실행 가능한 JAR 생성)

  • 빌드 실행
    • ./gradlew build : 빌드 + 테스트 등 라이프사이클 작업이 함께 수행될 수 있으며, Spring Boot 플러그인이 적용된 경우 bootJar도 연동되어 실행될 수 있다
    • ./gradlew bootJar : 실행 가능한(executable) JAR을 만드는 데 초점을 둔 태스크
  • 빌드 실패 시 자주 쓰는 방법
    • ./gradlew clean build : 기존 빌드 결과물을 정리한 뒤 다시 빌드
  • 생성된 JAR 확인
    • 보통 build/libs/ 아래에 생성된다.
  • JAR 실행
    • java -jar 프로젝트명-버전.jar 형태로 실행하며, 종료는 Ctrl + C로 한다
  • bootJar 명령어를 통해 jar 파일 생성 후 /build/libs 위치에 생성된 jar 파일 확인
  • 인텔리제이의 실행버튼 클릭시 출력되는 화면과 동일한 화면 터미널 내 확인 가능
profile
Eazy하게

0개의 댓글