Spring Boot

웃음인·2025년 4월 23일

Framework

목록 보기
4/7
post-thumbnail

Spring Boot란?

Spring MVC Project 구성 시 필요했던 복잡한 환경 설정을 최소화 하여
개발자로 하여금 비즈니스 로직 구현에 집중할 수 있도하기 위해 개발됨


Spring Boot의 장점

  • 내장된 서버(Tomcat 등)를 제공해서 war 배포 없이 독립 실행이 가능한 웹애플리케이션을 개발할 수 있음
    → Spring MVC Project처럼 Tomcat 서버를 Start 하는 것이 아닌 Java Project 처럼
       main 메서드가 작성된 class를 Run해서 실행 → 자동으로 내장된 Tomcat 서버가 시작됨

  • 다양한 Starter POM 파일을 제공해서 Maven, Gradle 등의 빌드 도구 구성, 라이브러리 관리를 간소화

  • Spring Starter를 이용해서 프로젝트를 생성 및 초기 설정을 간소화




Spring Boot 개발 환경 설정


1 . STS4 다운로드 https://spring.io/tools


2. STS 설정
메뉴 → Window → Preferences
▪ General → Show heap status 체크


▪ General → Workspace → Refresh using native hooks or polling 체크


▪ General → Appearance → Colorts and Fonts → Basic → Text Font → 원하는 폰트로 수정


3. DevStyle (이클립스 테마) 설치
Help → Eclipse MarketPlace → Dev Style 검색 → Install

4. lombok 설치




Spring Starter를 이용한 프로젝트 생성


1. STS 마법사(wizard)를 이용해서 Spring Boot 프로젝트 생성

  • New → Spring Boot → Spring Starter Project 선택


2. 생성할 프로젝트의 기본 설정

  • 각 항목별 설명

    • Service URL : 데모 프로젝트를 다운 받을 서비스 경로
      (Spring 공식 페이지의 initiolizr를 통해 설정된 내용대로 데모 프로젝트를
      생성해서 받아옴)

    • Name : 프로젝트 이름

    • Type : 빌드 도구(Maven 또는 Gradle)

    • Packaging : 배포 시 압축 형태

    • Java Version : 프로젝트에서 사용할 자바 버전

    • Language : 프로젝트에서 사용할 언어 종류

    • Group : 사용할 그룹(배포시 도메인, 보통 회사명을 작성, 대분류의 개념)

    • Artifact : 만들어진 산출물이름(프로젝트명, 소분류의 개념)

    • Version : 프로젝트 버전

    • Description : 프로젝트 설명

    • package : 프로젝트 기본 패키지 3레벨 (Group + Artifact로 작성)


3. 프로젝트에서 사용할 모듈, 라이브러리 의존성 추가

선택 완료 후 Finish → 다운로드가 진행됨

  • Spring Boot Version : 3.2.3(버전은 SNAPSHOT을 제외한 최신 버전 선택)

  • Selected

    • Spring Boot DevTools : Spring Boot 개발성 향상을 위한 도구 모음
      (클래스 로딩 문제 진단, 속성 기본값, 자동 재시작, 라이브 리로드, 전역 설정, 원격 애플리케이션)
      → 브라우저에 표시되는 내용의 코드가 변하면 자동으로 애플리케이션을 재시작하여
          브라우저 내용을 업데이트

    • Lombok : DTO(VO) 자동 완성

    • Spring Configuration Processor : .properties 또는 .yml 파일 자동 완성 지원

    • Java Mail Sender : Java로 메일 발송 코드 지원

    • WebSocket : 전이중 통신 관련 코드 지원(ex : 채팅)

    • JDBC API : Spring에서 JDBC를 사용 가능하게 하는 라이브러리 모음

    • MyBatis Framework : Spring에서 MyBatis를 이용하기 위한 라이브러리 모음

    • Oracle Driver : Oracle DB 연결에 필요한 드라이버 클래스가 포함된 라이브러리

    • Spring Security : Spring 보완 관련 라이브러리 모음(암호화)

    • Thymeleaf : View Template Engine으로 클라이어은트 응답 화면을 만들 때 사용하는
                      탬플릿 (Thymeleaf 사용을 공식적으로 권장)

    • Spring Web : Spring Web Application에 개발에 필요한 라이브러리 모음


4. application.properties 내용 추가


5. 프로젝트 실행 테스트

  • build.gradle 파일에서 JDBC 관련 dependency 주석 처리 → Refresh Gradle Project 수행


  • xxxApplication.java 파일 어노테이션 수정
    @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) // import 필요

  • 프로젝트 우클릭 → Run As → Spring Boot App 클릭

또는

  • 자동 생성된 xxxApplication.java 파일에서 Run

  • console 실행 로그

  • http://localhost/ 접속해서 에러 페이지가 뜨면 성공



Spring Boot 프로젝트, 파일 구조 파악

1. 프로젝트 구조

  • src/main/java : 자바 소스 코드를 모아두는 폴더

  • src/main/resources : 자바에서 사용할 자원, 설정 파일을 모아두는 폴더

    • templates : Java 템플릿을 모아두는 폴더(thymeleaf)
    • static : templates에 적용될 정적 자원을 모아두는 폴더(JS, CSS, 이미지)
    • application.properties : Spring Boot 프로젝트 관련 설정을 정의하는 파일 (중요!)
  • Project and External Dependencies : build.gradle에 명시된 라이브러리 모음

  • build.gradle : gradle(빌드도구 == maven의 pom.xml)
                          프로젝트에 필요한 라이브러리, 배포, 빌드 관련 설정을 작성하는 파일


2. BoardProjectBootApplication.java (XXXApllication.java)

package edu.kh.project;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class BoardProjectBootApplication {

	public static void main(String[] args) {
		SpringApplication.run(BoardProjectBootApplication.class, args);
	}
}
  • @SpringBootApplication : Spring Boot Application에 필요한
    필수 어노테이션을 모아둔 어노테이션

    • Spring Boot 프로젝트로 만든 애플리케이션의 실행을 담당하는 클래스
    • Spring Application을 최소 설정으로 간단하고 빠르게 실행할 수 있게 해줌
    • ★ Java 파일을 실행하듯이 Run 버튼을 클릭하면 배포가 시작됨 ★
  • (exclude = {SecurityAutoConfiguration.class})
    Spring Security 자동 설정을 사용하지 않음

  • @SpringBootConfiguration

    • Spring설정 파일(설정을 위해 만든 클래스)임을 나타내는 어노테이션
    • @Conficuration(해당 클래스는 자바 기반 설정 파일임을 나타내는 어노테이션) 자식 어노테이션
  • @ComponentScan

    • 지정된 패키지 이하에 bean 등록을 위한 어노테이션을 인식하는 어노테이션(bean 등록이 수행됨)
    • @SpringBootApllication이 붙은 클래스가 위치하고 있는 패키지 이하가 @ComponentScan 지정 패키지가 됨.
      (최상위 패키지 바로 아래 클래스가 위치해야함!)
  • @EnableAutoConfiguration

    • 자동 설정을 위해 사용되는 어노테이션
    • 등록된 bean과 조건에 따라 자동으로 설정을 적용
    • spring-boot-autoconfigure 라이브러리
      → spring.factories 파일에 자동 설정을 위한 클래스가 등록되어있음

3. bulid.gradle

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

group = 'edu.kh'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	//implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-mail'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-websocket'
	//implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
	implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	//runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
	testImplementation 'org.springframework.security:spring-security-test'
}

tasks.named('test') {
	useJUnitPlatform()
}
  • Gradle 빌드 도구를 이용하는 프로젝트를 관리할 때 사용하는 파일
  • dependencies에 필요한 라이브러리를 작성하면 mvnrepository에서 자동으로 다운로드가 진행됨.

0개의 댓글