Springboot의 개발 목표를 위한 도구 실습 - Spring Boot Starter Project/Auto Configuration/Spring Boot DevTools 개념과 사용하기

2025. 4. 12. 15:34· 언어 공부/springboot로 백엔드 개발

 

 

🔗전체 내용 요약

 

 

1.Springboot 사용 이전엔 애플리케이션 프로젝트 설정과 관리에 많은 작업이 요구되었다.

따라서 우리는 Spring, Spring MVC툴만 사용하는 것이 아닌 SpringBoot를 같이 사용함.

 

2. spring.io를 이용한 프로젝트 세팅하기 

 

3. 간단한 REST API 빌드하기 -> Springboot를 사용하면 사용자는 비즈니스 로직에만 집중하면 된다는 것을 알 수 있음.

 

4. Springboot 프레임워크의 중요한 목표

 

Springboot 의 가장 중요한 목표는 프로덕션 환경에서 사용 가능한 애플리케이션을 빠르게 빌드할 수 있도록 돕는 것

 

5. SpringBoot 에서 원활한 개발 환경을 지원하는 다양한 도구

Spring Boot Starter Projects 프로젝트의 의존성을 빠르게 정의한다.

Starter은 여러 의존성을 한번에 묶은 편리한 패키지로,
원하는 기능에 맞는 스타터를 추가하면,관련된 라이브러리들이 같이 오게 된다.

Spring Boot Auto Configuration 클래스 경로에 있는 의존성에 따라 자동으로 설정이 제공된다.

직접 작성해야 했던 설정 (configuration) 을 SpringBoot 의 Autoonfiguration 기능이 자동으로 필요한 설정들을 추론해서 구성해 준다.
Spring Boot DevTools 수동으로 서버를 다시 시작하지 않고도 애플리케이션을 변경한다.

개발 중인 애플리케이션을 빠르게 테스트할 수 있도록
코드나 설정이 변경되면 자동으로 재시작할 수 있게 도와주는 툴

-프로필을 통해 환경별 설정을 세팅해보았다.

-로깅 수준별로 다른 정보 출력을 제공한다.
trace, debug, info, warn, error

Configuration Properties(프로퍼티) 클래스 -설정을 하나의 클래스로 묶어 관리한다.(설정값을 구조화된 방식으로 관리)
 Embedded Server
-배포 프로세스를 최소화
Spring Boot Actuator -모니터링 도구

-운영 환경에서 프로덕션 단계의 애플리케이션의 상태와 동작을 쉽게 모니터링하고 관리할 수 있다.
-다양한 시스템/애플리케이션 정보를 엔드포인트(REST API)로 제공하는 Spring Boot 제공 운영 상태 모니터링 도구

-엔드포인트별로 설정해서 확인할 수도 있다.

 

 

 

 

 

강의 & 실습 내용 정리

 


 

목차

 

1. Spring Initializer

2. Spring Boot Starter Project

3. Auto Configuration

4. Spring Boot DevTools

 

 


 

Springboot를 사용하는 이유

 

 

Spring boot 없이도 앱 애플리케이션과 REST API를 빌드할 수 있음.

Springboot를 사용하는 이유는?

 

 

Springboot 없이 애플리케이션을 빌드할 경우)

 

 

1. 의존성 관리(pom.xml)

 

Springboot 이전 Spring 프로젝트를 설정하기 위해서는

여러 프레임워크를 사용해, 모든 의존성과 버전을 사용하여 pom.xml을 만들어야 했다.

 

pom.xml - maven 프로젝트에서 필수 의존성, 플러그인, 설정 등을 관리하는 xml 형식의 파일

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

 

 

예) 단위 테스트를 작성하려면spring-test 라이브러리,junit,mockito 등을 pom.xml에 하나하나 넣고 버전을 호환되게 맞춰 관리해야 했다. 

 

 

2. web.xml 웹 애플리케이션 설정 파일

 

-Servlet 기반 웹 애플리케이션 설정 파일이며

어떤 서블릿을 쓰는지, 어떤 URL경로로 호출할 것인지, 초기화 파라미터 등을 설정했다.

 

그러나 Springboot 에서는 이걸 Java 코드나 어노테이션으로 대체해서 사용할 필요가 없게 되었다.

 

3. 비기능 요구사항 고려

 

○  로깅

○  오류 처리

○  모니터링

 

등 Springboot 이전에는 이러한 기능을 전부 수동으로 구현해야 했다.

 

따라서, Springboot 이전의 세계에서는 프로젝트 설정에도 많은 작업이 요구되었다.

 

 


 

 

Start.spring.io 를 사용한 Springboot 프로젝트 설정

 

 

Spring Initializr

 

1. 강의에서는 Maven을 사용하라고 되어 있지만,

우리는 Gradle을 선택한다.

 

2. 버전은 SNAPSHOT 버전은 선택하지 않음을 주의한다. (개발 중인 버전이므로)

 

3. Project Metadata 설정

항목 설명 설정예
Group 프로젝트의 고유 식별자(주로 도메인을 거꾸로 씀) com.example
Artifact 생성되는 빌드 결과물의 이름 (jar 파일 이름 등에 사용됨) demo
Name 프로젝트 이름 (보통 artifact와 동일하게 설정됨) demo
Description 프로젝트 설명 (IDE나 빌드 파일에서 확인할 수 있음) Demo project for Spring Boot
Package name 빌드 방식 선택: JAR(기본), WAR(서블릿 컨테이너 필요 시) com.example.demo

 

4. packaging은 Jar로 선택

 

5. Java 버전은 최소 17로 선택한다. (17 권장)

 

6. 의존성 선택하기

 

REST API를 빌드하기 위해 의존성이 필요하다.

 

(1)  Apache Tomcat을 임베디드 컨테이너르 사용하는 spring web 을 선택한다.

 

그러나 사용하는 데이터베이스 등을 참조하여 다음과 같은 의존성 또한 권장한다.

 

참고)

 

00. 프로젝트 시작하기. IntelliJ / 초기 프로젝트 생성 방법 / 의존성 / Gradle — TechScribe

 

00. 프로젝트 시작하기. IntelliJ / 초기 프로젝트 생성 방법 / 의존성 / Gradle

00. 프로젝트 시작하기. IntelliJ / 초기 프로젝트 생성 방법 / 의존성 / Gradle

ariadnes-thread.tistory.com

 

 

이후 Generate 하여 압축 파일을 풀고 사용한다.

 

강의에서는 Maven을 사용하였으므로 pom.xml 파일이 존재하나,

Gradle을 사용하였다면, build.gradle 파일이 존재한다.

 

 

코드 구조 

 

src/main/java 자바 코드
src/main/resources 애플리케이션 설정
src/test/java 단위 테스트 작성

 

 

● 코드 실행

 

실행 버튼을 누르거나 / 파일 우클릭 후 실행

 

기본 포트인 localhost:8080 에 접속하여 실행을 확인한다.

기본 경로로 인식되는 index.html 파일이 나온다.

 

index.html 등을 설정하지 않았다면

404 에러 페이지가 나오는데, 요청은 갔지만 찾는 페이지가 없기 때문에 404에러가 뜬 것으로,

Whitelabel Error Page 가 나온다면 서버가 잘 실행된 것이다.

 

※404 에러
-404 에러는 사용자가 존재하지 않는 URL을 요청했을 때 발생하는 HTTP 응답 코드로, "페이지를 찾을 수 없음을 의미

 


 

간단한 REST API 빌드하기

 

 

만들 API 내용

 

-URL

-반환할 데이터

// http://localhost:8080/courses
{
	{
		"id": 1,
		"name": "Learn AWS",
		"author": "in28minutes"
	}
}

CourseController 라는 클래스를 생성한다.

 

package com.example.springbootdeveloper;

import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;

@RestController
public class CourseController {

    //Courses
    // Course: id, name, author
    public List<Course> retreieveAllCourses() {
        return Arrays.asList(
                new Course(1,"Learn AWS", "in28minute"),
                new Course(2,"Learn DevOp", "in28minute")

        );
    }
}

 

 

새 클래스 생성 단축키 : Alt + Enter 

 

IntelliJ 의 코드 생성 기능 사용하기

Alt + insert

또는 우클릭 > Generate > toString 등 원하는 메서드를 골라 자동 생성

 

항목을 모두 선택하고, 

● toString

●  Getter

●  Constructor

을 자동 생성하였다.

package com.example.springbootdeveloper;

public class Course {
    private long id;
    private String name;
    private String author;

    //Constructor

    public Course(long id, String name, String author) {
        this.id = id;
        this.name = name;
        this.author = author;
    }

    //Getters

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    //toString

    @Override
    public String toString() {
        return "Course{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }


}

 

 

CourseController에

@RequestMapping을 사용해 URL을 매핑한다.

/Courses 를 입력하면 코스 목록 반환

@RequestMapping("/courses")

 

 

package com.example.springbootdeveloper;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;

@RestController
public class CourseController {

    //Courses
    // Course: id, name, author

    @RequestMapping("/courses")
    public List<Course> retreieveAllCourses() {
        return Arrays.asList(
                new Course(1,"Learn AWS", "in28minute"),
                new Course(2,"Learn DevOp", "in28minute")

        );
    }
}

 

 

해당 URL로 이동하면, 코스 목록이 반환되어야 한다.

localhost:8080/courses

 

필요시 확장 프로그램 설치 - json formatter chrome extension 프로그램을 설치 하면 json형식으로 편하게 볼 수 있다.

 

 

 

(1) 컨트롤러를 생성해, @RestController로 이 클래스가 REST API 요청을 처리하는 컨트롤러임을 명시했다.

/Course URL로 요청이 들어오면 retrieveAllCourses 메서드가 실행되어, 안에 넣은 코스 2개의 값이 리턴된다.

 

Course라는 클래스의 List를 반환(내부에서는 객체 2개)하기로 했기 때문에, 

 

(2)Course 클래스를 생성하였다. 우리가 반환하려는 데이터의 모델로, id, name,author 3개를 설정하고,

toString, Constructror, Getter 을 만들었다.

 

Constructror 값을 생성자로 받을 수 있게 함 (new Course ~)
Getter 필드 값을 외부에서 읽을 수 있게 함
REST API가 객체를 JSON으로 변환할 때, 내부 값을 가져오려면 getter이 필요하다.
toString 객체를 문자열로 보기 좋게 출력한다. 또는 디버깅 용

 

-다른 것에는 집중할 필요가 없고, 비즈니스 로직에만 집중하면 된다고 했는데,

 


비즈니스 로직

 

-요청이 왔을 때 어떤 데이터를 반환할지 정하는 부분을 말한다.

public List<Course> retrieveAllCourses() {
    return Arrays.asList(
        new Course(1,"Learn AWS", "in28minute"),
        new Course(2,"Learn DevOp", "in28minute")
    );
}

따라서 컨트롤러에 어떤 로직을 구현할지, 

Client 요청에 어떤 데이터를 어떻게 응답할지가 중요.

 

 


 

 

추가 실습) 특정 Id에 해당하는 Course를 반환해 본다.

 

 


 

SpringBoot  프레임워크의 중요한 목표

 

 

Springboot 의 가장 중요한 목표는 프로덕션 환경에서 사용 가능한 애플리케이션을 빠르게 빌드할 수 있도록 돕는 것이다.

 

 

 

 

1. 빠르게 빌드하기

 

 -빠른 애플리케이션 생성을 위해 이미 spring.io 를 사용하였다.

 

-애플리케이션을 빠르게 빌드하는 데 도움이 되는 다른 기능은,

Spring Boot Starter Projects 프로젝트의 의존성을 빠르게 정의한다.
Spring Boot Auto Configuration 클래스 경로에 있는 의존성에 따라 자동으로 설정이 제공된다.
Spring Boot DevTools 수동으로 서버를 다시 시작하지 않고도 애플리케이션을 변경한다.

 

 

2. 프로덕션 환경에 사용 가능하도록 만들기

 

프로덕션 환경 : 실제 사용자들이 서비스에 접속해서 사용하는 운영 환경

(개발 환경X, 테스트용 서버 X 가 아닌 실제 운영 서버를 의미)

 

환경에 맞는 다양한 설정과, 애플리케이션 모니터링, 메모리 확인, 애플리케이션 측정항목 확인 등

프로덕션 가능한 상태로 빠르게 도달하는 데 도움이 되는 여러 기능을 제공한다.

 

 

● Springboot가 제공하는 도구

기본 로깅 로그 설정 안 해도 기본 로그 출력 가능
Profiles application-dev.yml, application-prod.yml 등 환경별 설정 분리 가능
ConfigurationProperties 외부 설정을 편리하게 객체로 매핑함.
Spring Boot Actuator 애플리케이션 상태 정보, 헬스 체크, 메트릭 제공 등 운영에 유용

 

 

 


Spring Boot Starter Project

 

애플리케이션 기능을 빌드할 때마다 많은 프레임워크가 필요하다.

 

예) 단위 테스트를 작성할 때

Spring Test, JUnit, Mockito 프레임워크가 필요함.

 

더보기

Starter은 여러 의존성을 한번에 묶은 편리한 패키지로,

원하는 기능에 맞는 스타터를 추가하면,관련된 라이브러리들이 같이 오게 된다.

 

● 주요 Starter Project

Starter 이름 역할 포함된 주요 의존성
spring-boot-starter-web   spring-webmvc, spring-web, spring-boot-starter-json, spring-boot-starter-tomcat, jackson, validation 등
spring-boot-starter-test   junit, mockito, spring-test, assertj, hamcrest 등
spring-boot-starter-data-jpa   spring-data-jpa, hibernate, javax.persistence-api, spring-orm 등
spring-boot-starter-jdbc   spring-jdbc, HikariCP (기본 커넥션풀) 등
spring-boot-starter-security   spring-security-core, spring-security-web, spring-security-config 등
spring-boot-starter-actuator   micrometer, spring-boot-actuator 등

 

 

 

 

 


 

Spring Boot Auto Configuration 

 

 

직접 작성해야 했던 설정 (configuration) 을 SpringBoot 의 Autoonfiguration 기능이 자동으로 필요한 설정들을 추론해서 구성해 준다.

 

생성의 기준

 

기준 1 클래스 경로에 어떤 라이브러리(starter)가 있는지 보고 자동 설정을 수행한다.
(우리가 의존성에 추가한 Starter Project와 가져온 프레임워크, 클래스 경로에 있는 프레임워크에 따라 많은 내용을 자동 설정한다.)
기준 2 기존 설정.
application.properties 같은 기존 설정값이 있으면 그것을 우선적으로 반영한다.

SpringBoot 가 디폴트 자동 설정을 제공하며
자체 설정을 사용하여 이를 오버라이드 할 수 있다.

 

 

 

 Auto Configuration 로직의 위치

 

● spring-boot-autoconfigure.jar 에 존재한다.

 

External Libraries에서 확인하였다.

 

● application.properties 파일

 

src/main/resources 에 존재하며

자동 설정을 좀 더 자세히 알아보고 로깅 수준을 설정할 수 있다.

 

 

아래의 내용을 입력해 로깅 수준을 설정할 수 있다.

 

logging.level.org.springframework=debug

// 특정 패키지 org.springframework를 디버그 수준에서 로깅

 

 

디폴트 로깅 수준은

INFO,

DEBUG로 변경한다면 더 많은 정보가 출력됨을 확인할 수 있었다.

 

spring.application.name=springboot-developer

logging.level.org.springframework=debug

 

 

 

CONDITIONS EVALUATION REPORT Positive matches 자동 설정된 항목을 의미
Negative matches 자동 설정되지 않은 항목을 의미

 

모든 자동 설정은 특정 jar인 spring-boot-autoconfiguration.jar 에서 확인한 코드에 기반한다.

 

따라서 spring-boot-autoconfiguration.jar 안에 설정 로직이 들어 있으며, 자동 설정이 정의된 위치이다.

 

더보기

📌 SpringBoot 는 Starter 을 통해 라이브러리를 묶어서 가져오고
Auto Configuration을 통해 관련 설정들을 자동으로 해준다.

 

 

 

 

● 디폴트 오류 페이지(404) 로 보는 자동 설정 예시

 

 

이전 애플리케이션이 URL이 매핑되어 있지 않았을 때 404 오류 메세지를 띄움을 확인했다.

 

자동으로 오류 페이지를 설정하는 클래스는 ErrorMvcAutoConfiguration 클래스이다.

Springboot는 SpringBoot Auto Configuratuon 으로 오류 페이지를 자동 설정한다.

 

 

실제 검색해서 찾아보면 (Ctrl Shift F 가 아닌 Ctrl shift N 으로 클래스 전체 이름을 검색할 것)

클래스 안에서 whitelabel Error 페이지를 발견할 수 있다.

 

 

 

 

● Spring Boot Starter Web  로 보는 자동 설정 예시

 

Spring Boot Starter Web 을 사용하면

 

○ Tomcat 

○ Default Error Page 

○ JSON 변환 

 

등이 자동 설정됨.

 


 

Spring Boot DevTools

 

 

개발 중인 애플리케이션을 빠르게 테스트할 수 있도록

코드나 설정이 변경되면 자동으로 재시작할 수 있게 도와주는 툴

 

 

 

우리가 코드를 수정했을 때, 저장하고 → 서버를 껐다가 다시 켜야 반영된다.

DevTools는 자동으로 다시 시작, 해당 코드를 반영시켜 준다.

 

강의에서는 maven을 쓰기 때문에 pom.xml 을 수정하여 적용했지만

나는 Gradle 을 사용 중이므로 build.gradle 의 dependencies 에 추가

 

developmentOnly 'org.springframework.boot:spring-boot-devtools'

//개발 전용 의존성이기 때문에 developmentOnly 로 추가한다.

 

Q 내용 추가해도 바로 시작 안 되는데?

 

세팅에서 Build project Automatically

+ Registry 창에서 compiler.automake.allow.when.app.running 체크 하라고 하는데 후자 옵션 없음

 

 

더보기

Spring Boot DevTools는 애플리케이션의 다시 시작을 자동으로 트리거하므로 수동으로 서버를 다시 시작하지 않아도 된다.

 

질문) DevTools 툴 적용 방법?

 

 

 

 


 

프로덕션 환경에서 사용 가능한 애플리케이션 기능 만들기

-여러 환경에 따라 설정 파일과 로깅 수준을 분리해서 관리함을 배운다.

 

개발 환경

 

QA 테스트 팀이 기능을 검증하는 환경. 개발자가 배포한 코드가 정상 작동하는지 테스트
스테이지 실제 프로덕션과 가장 유사하게 구성된 환경. 릴리즈 직전 최종 점검 장소
프로덕션 실제 사용자가 이용하는 운영 환경을 말함

 

프로필의 개념 

: 프로필을 통한 환경별 설정을 제공한다

 

개발 환경 - 개발 데이터베이스와 통신

테스트 환경 - 테스트 데이터베이스와 통신

프로덕션 환경 - 프로덕션 데이터베이스와 통신한다.

 

 

dev, qa,stage, prod가 있다면

각 환경을 위한 별도의 프로필을 만든다.

 

 

(1) dev용 프로필, qa용 프로필, stage용 프로필, prod용 프로필을 만들고 

(2) 각 환경을 위해 별도의 설정을 만든다.

 

 

dev환경과 prod 환경 두 개만 있다고 가정한다.

 

● application.properties

spring.application.name=springboot-developer

logging.level.org.springframework=debug

 

현재 debug 수준에서 정보를 출력하고 있으나, trace 수준에서 정보를 출력하려고 한다.

 

prod프로필은 info수준에서 구성해

모든 정보를 로깅하는 게 아니라 중요한 정보만 로깅하려고 한다.

 

 

 

→ 프로필을 사용한다.

 

파일 구성을 위해 application.properties을 복사하여

● application-dev.properties 

: trace 로깅 수준을 사용

 

spring.application.name=springboot-developer

logging.level.org.springframework=trace

 

● application-prod.properties

: info 로깅 수준을 사용

 

spring.application.name=springboot-developer

logging.level.org.springframework=info

 

프로필을 사용하고 있지 않으면 애플리케이션은  application.properties에서 설정된 디폴트 프로퍼티를 사용한다.

 

프로덕션 프로필 사용하기

● application.properties

 

spring.application.name=springboot-developer

logging.level.org.springframework=info
spring.profiles.active=prod

 

spring.profiles.active=prod 로 prod 프로필을 활성화했으므로, 우선순위가 높은 info 로그만 현재 출력된다.

 

 

 

로깅 수준 정리

 

 로깅 수준 출력 범위 설명
trace trace, debug, info, warn, error 가장 자세한 정보까지 출력 (개발 중 디버깅용)
debug debug, info, warn, error 로직 흐름 확인
info info, warn, error 운영 환경에 기본적인 일반 정보 출력
warn warn, error 경고,에러만
error error 에러만 출력
off 없음 완전 비활성화, 로깅 출력x

 

 

정리 

 

1. spring.profiles.active=dev

dev 환경에서 trace로 설정한다면, trace,debug, info, warn, error 까지 모두 출력된다.

 

2. 활성화된 프로필의 설정이 우선적으로 적용된다.

spring.profiles.active=prod,

spring.profiles.active=dev 등으로 활성화

 

3. 프로필을 사용하면 다양한 환경에 맞는 여러 설정을 보유할 수 있다.

 

 


 

 

 

Spring boot 에서 많은 설정값을 구조화된 방식으로 관리하는 방법

 

복잡한 설정을 지정할 때 → 설정 값들을 객체처럼 묶어서 다뤄 보자

 

 

특히 외부 서비스(API)의 URL, 사용자명, 키 등을 구조화된 방식으로 관리하는 것을 말한다.

 

현재 통신하고 있는 통화 서비스(외부 서비스) 가 있다. 해당 서비스의 여러 값을 설정한다고 했을 때,

 

//url, username, key

currency-service.url

currency-service.username

currency-service.key

 

 

필요한 설정값들이 많아진다면 관리가 어려울 것이다.

SpringBoot를 사용하여 이런 애플리케이션 설정들을 관리하기 위해

 

 

→ Configuration Properties(프로퍼티) 클래스 사용

 

더보기

설정을 하나의 클래스로 묶어 관리한다.

 

(1) CurrencyServiceConfiguration 클래스를 만든다.

(2) @ConfigurationProperties 라는 주석을 추가한다.

 

(2) 접두사를 current-service로 작성한다.

※ 단축키 : Ctrl + p

 

 

더보기

📌 접두사 

-설정 파일에서 여러 설정 값들이 있을 때 공통으로 붙은 키 이름의 앞부분 

(여가서는 설정 키가 모두 동일하게 시작하는 currency-service) 

@ConfigurationProperties(prefix = "current-service")

 

(3) CurrencyServiceConfiguration에 세 가지 속성 url,username,key 를 저장한다.

그리고 getter , setter 을 생성한다.

 

(4)@Component를 추가하여 Spring으로 이를 관리한다.

 

 

package com.example.springbootdeveloper;

//currency-service.url=
//currency-service.username=
//currency-service.key=

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "currency-service")
@Component
public class CurrencyServiceConfiguration {
        private String url;
        private String username;
        private String key;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}

 

 

(5) application.properties 설정 파일에 내용 작성

 

 currency-service로 시작하는 키들이 있어야

→  위 클래스의 필드 url, username, key 에 자동으로 들어가게 된다.

 

● application.properties

spring.application.name=springboot-developer

logging.level.org.springframework=info
spring.profiles.active=prod

currency-service.url=http://default.in28minutes.com
currency-service.username=defaultusername
currency-service.key=defaultkey

 

 

(6)컨트롤러를 만들어 application.properties에서 CurrencyServiceConfiguration 으로의 매핑이 작동하는지 확인한다.

 

● CurrencyConfigurationController

 

- /currency-configuration 으로 매핑

-만든 클래스 CurrencyServiceConfiguration 반환

 

package com.example.springbootdeveloper;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class CurrencyConfigurationController {

    //Courses
    // Course: id, name, author

    @RequestMapping("/currency-configuration ")
    public CurrencyServiceConfiguration retreieveAllCourses() {
        return ;
    }
}

 

그럼 @Component가 CurrencyServiceConfiguration의 인스턴스를 만들고,

우리가 자동으로 연결해주면 된다.

 

(7)@Autowired를 통한 자동 연결과  CurrencyServiceConfiguration의 변수 선언 추가

   @Autowired
    private CurrencyServiceConfiguration configuration;

 

의존성 주입 (DI)를 사용하는 코드.

Spring 컨테이너에 등록된 CurrencyServiceConfiguration 객체를 이 변수에 자동으로 주입해달라고 요청하는 코드이다.

(해당 객체가 @Component로 관리되고 있기 때문에 스프링 컨테이너가 관리가능하다)

 

Bean이 자동 연결된다.

 

 

package com.example.springbootdeveloper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class CurrencyConfigurationController {

    //Courses
    // Course: id, name, author

    @Autowired
    private CurrencyServiceConfiguration configuration;

    @RequestMapping("/currency-configuration")
    public CurrencyServiceConfiguration retreieveAllCourses() {
        return configuration; //return configuration
    }
}

 

 

localhost:8080/currency-configuration 로 실행하면

 

 

dev 프로필에서 다른 프로퍼티를 사용하고 싶다면

우리가 생성했던 application-dev.properties로 이동하여 여기서 설정하면 된다.

 

● application-dev.properties

 

더보기

spring.application.name=springboot-developer


logging.level.org.springframework=trace

 

currency-service.url=http://dev.in28minutes.com

currency-service.username=devusername

currency-service.key=devkey

 

※application.properties 에서

spring.profiles.active=dev

 

후 해줘야 인식함

 

 

 


정리

 

 

이런 식으로 복잡한 애플리케이션 설정을 만들어야 할 때는 @ConfigurationProperties를 사용한다.

 

애플리케이션에 필요한 모든 설정을 외부화하는 것이며,

spring 컴포넌트를 만들고 @ConfigurationProperties로 주석을 달아 원하는 만큼 프로퍼티를 입력할 수 있다.

 

 


 

 

 Embedded Server 를 사용하여 배포를 간소화

 

 

 

-여러 환경이 있기 때문에, 프로덕션에 배포할 때는 최대한 배포 프로세스를 간단하게 만드는 것이 중요하다.

 

 

WAR 방식 자바 설치 -> 특정 웹서버 설치 -> 배포
Embedded Server -JAR 파일에 이미 Tomcat 같은 서버가 포함되어 있음 (웹 서버가 JAR파일의 일부)
-따라서 자바를 설치하기만 하면 JAR 파일을 실행할 수 있다.

 

-자바만 설치하면 JAR 파일을 실해할 수 있으므로 전체 배포 프로세스가 간소화된다.

-Springboot는 디폴트 Embedded Server 로 spring-boot-starter-tomcat 으로 기본적으로 사용되는 서버이다.

 

 

 

※ 웹 서버와 WAS의 개념 알아보기

 


 

모니터링

 

Spring Boot Actuator

 

-운영 환경에서 프로덕션 단계의 애플리케이션의 상태와 동작을 쉽게 모니터링하고 관리할 수 있다.

-다양한 시스템/애플리케이션 정보를 엔드포인트(REST API)로 제공하는 Spring Boot 제공 운영 상태 모니터링 도구

 

 

 

여러 개의 엔드포인트를 제공한다.

 

엔드포인트 설명
/beans 애플리케이션에 등록된 모든 Spring Bean 정보 확인
/health 애플리케이션의 상태 정보 확인.(제대로 동작하는지 확인)
/metrics 다양한 시스템/애플리케이션 메트릭(메모리, 요청 수 , 응답 속도 등)
/mapping 애플리케이션에서 설정된 모든 요청 매핑 관련 세부 사항 확인

 

 

인텔리J에서는, build.gradle에 다음을 반영한다.

 

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

 

 

 

실행 후 localhost:8080/actuator

을 입력한다  

 

{
"_links": {
        "self": {
            "href": "http://localhost:8080/actuator",
            "templated": false
        },
        "health-path": {
            "href": "http://localhost:8080/actuator/health/{*path}",
            "templated": true
        },
        "health": {
            "href": "http://localhost:8080/actuator/health",
            "templated": false
        }
	}
}

 

 

health URL 을 클릭하면 애플리케이션의 상태가 표시된다.

 

 

기본적으로 Actuator을 실행하면 health 엔드포인트만 노출되므로

Actiator의 더 많은 기능을 사용하고 싶다면 application.properties에서 기능을 사용 설정한다.

 

 

Acturator에서 제공하는 모든 엔드포인트 노출시키기

 

더보기

management.endpoints.web.exposure.include=*

 

해당 옵션을 적용하고, locathost:8080/actuator

을 보면 많은 엔드포인트가 표시되어 있는 것을 확인할 수 있었다.

 locathost:8080/metrics 에 들어가면

애플리케이션 시작 시간

디스크 여유 공간

총 공간

풀 등에 대한 metrics도 확인할 수 있다.

 

 locathost:8080/metrics/http.server.requests 등 세부적인 정보로도  들어갈 수도 있다.

애플리케이션으로 들어오는 요청 횟수 추적하기

 

주의

 

1. 여러 엔드포인트를 사용하여 많은 정보를 수집하면 CPU,메모리 과다 사용

 

2. 일반적으로는 아래처럼  명시적으로 엔드포인트를 설정하여 사용한다. → actuator에서 확인하면 해당 엔드포인트만 노출되어있다.

 

더보기

management.endpoints.web.exposure.include=health,metrics

 

 



 

Spring MVC 와 Spring Boot 는 보완하는 관계

 

 

 

Spring Boot는 Spring + Spring MVC의 생산성을 높여주는 도구이다.

 

 

 

 

(1) Spring Framework (기초 플랫폼)

 

장점 의존성 주입(DI) 기능 중심이다.
다양한 객체를 @Component, @Service 등으로 등록하고 @Autowired 등으로 주입한다.
컴포넌트 스캔으로 자동 등록 가능하다.
단점 DI만으로는 서비스 만드는 데 한계가 있음
데이터베이스,테스트 등의 기능은 다른 프레임워크와 연동 필요

 

 

 

(2) Spring MVC (웹 모듈)

 

장점 Spring의 웹 애플리케이션/REST API 개발을 위한 서브모듈
@Controller, @RestController, @RequestMapping 등 사용
단점 pom.xml등 여전히 설정이 복잡하며 개발 초기 세팅에 시간이 걸린다.

 

 

 

 

(3) Spring Boot ( 자동화와 간소화를 돕는 도구이다.)

 

설명 Spring/Spring MVC를 쉽게 사용하도록 돕는다.
설정 자동화, 운영 기능 내장이 되어 있어 실무에서 빠르게 개발할 수 있다는 장점이 있다.

 

 

● 특징

기능 설명
Starter 프로젝트 필요한 의존성을 한 번에 묶어서 제공 (예: spring-boot-starter-web)
Auto Configuration 설정을 자동으로 해줌 (application.properties만 설정하면 된다.)
Embedded Server Tomcat 내장 → .jar 파일로 배포 가능
Actuator 상태/성능 모니터링 가능
로깅 및 오류 처리 디폴트 설정 자동 제공
Profiles, @ConfigurationProperties 환경 설정을 유연하게 분리/관리 가능
 

'언어 공부 > springboot로 백엔드 개발' 카테고리의 다른 글

Springboot에서 swagger 사용하기  (1) 2025.05.03
01. 패키지와 스프링 애플리케이션 실행, postman(포스트맨) 설치하기  (0) 2025.04.05
springboot 프로젝트에서 갑자기 spring을 인식하지 못할 때 / IntelliJ 캐시 재빌드하기  (0) 2025.04.05
00. 프로젝트 시작하기. IntelliJ / 초기 프로젝트 생성 방법 / 의존성 / Gradle  (0) 2025.03.30
'언어 공부/springboot로 백엔드 개발' 카테고리의 다른 글
  • Springboot에서 swagger 사용하기
  • 01. 패키지와 스프링 애플리케이션 실행, postman(포스트맨) 설치하기
  • springboot 프로젝트에서 갑자기 spring을 인식하지 못할 때 / IntelliJ 캐시 재빌드하기
  • 00. 프로젝트 시작하기. IntelliJ / 초기 프로젝트 생성 방법 / 의존성 / Gradle
카페인곰
카페인곰
개발 기술 블로그입니다. 이전 버전 블로그 : https://velog.io/@5mito2/posts
카페인곰
TechScribe
카페인곰
전체
오늘
어제
  • 분류 전체보기 (12)
    • ICT 멘토링 (0)
      • spring (0)
    • 알고리즘 (0)
    • SQL (0)
    • github (0)
    • 코딩테스트 (2)
      • 코딩테스트 관련 개념정리 (1)
    • 언어 공부 (5)
      • 자바 (0)
      • 파이썬 (0)
      • 자바스크립트 (0)
      • springboot로 백엔드 개발 (5)
    • 자료•생각 (1)
    • TAVE (0)
      • TAVE springboot 스터디 자료 (0)
    • 프로그램•강연 후기 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
카페인곰
Springboot의 개발 목표를 위한 도구 실습 - Spring Boot Starter Project/Auto Configuration/Spring Boot DevTools 개념과 사용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.