Spring(Java)

패스트캠퍼스 환급챌린지 2일차 미션 (2월 2일) : 10개 프로젝트로 시작하는 백엔드 웹개발 : 신입 개발자 취업 집중반 강의 후기

코드라티 2025. 2. 2. 11:45

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/4gL1f1o

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

 

 

오늘은 스프링 기반 프로젝트에서 프로퍼티(Properties)를 관리하는 방법에 대해 학습했다.

프로퍼티는 프로젝트 내부에서 전역적으로 사용할 수 있는 어떤 key-value 쌍의 값인데, 프론트에서의 환경변수(Environment Variable)를 떠울리며 공부하니 편했다.

resources/ 하위의 application.properties 라는 파일 내부에서 관리하고, 프론트의 env와 다른점은 단순한 string 뿐 아니라 여러가지 타입으로 값을 불러올 수 있다는 점과 user.name, user.age, user.phoneNum과 같이 .으로 그룹화하여 관리할 수 있다는 점이 인상깊었다. 

// .으로 비슷한 맥락에서 사용되는 환경변수들끼리 묶을 수 있다.
provider.google="google"
provider.kakao="kakao"

// 프로퍼티 값을 불러올 때에는 @Value 어노테이션을 활용한다.
@RestController
public class OAuthProviderController {

    @Value("${provider.google}")
    private String google; // google에는 프로퍼티로 설정한 "google"이 할당됨.
    
 // ...
 }

 

배열 프로퍼티값도 정의할 수 있는데, 아래와 같이 정의하고 사용할 수 있다. 사용하는 쪽에서는 List 타입으로 할당받도록 설정해야한다.

grade=a,b,c,d,e,f

// ...
@Value("${grade}")
private List<String> gradeTypes;

 

그리고 또 인상깊게 공부했던 부분은, 서버가 띄워지는 환경에 따라 이 properties 파일을 다르게 불러오도록 설정할 수 있다는 것이었다.

사실 이건 프론트에서의 env도 가능한 기능이긴 한데, 스프링에서도 이런식으로 불러올 수 있다는게 흥미로운 부분.

많은 서비스 회사들이 비슷하게 환경을 local, dev, staging(qa, test ...), prod 등 목적에 따라 최소 2개 이상의 서버 환경으로 분리해두었을 것인데, 이를 위한 기능이다.

| resources
|----|
     | application.properties // 모든 환경에서 불러와짐
     | application-dev.properties
     | application-local.properties
     | application-staging.properties

 

@ConfigurationProperties 어노테이션을 활용해서 특정 prefix로 시작하는 프로퍼티값들을 한번에 불러와서 할당하는 방법도 있는데, 특정 상황에서 매우 유용하게 사용할 수 있을 것 같다.

@ConfigurationProperties 어노테이션을 활용하려면 gradle에 아래 의존성을 추가하고 사용해야한다는 것을 주의하자.

dependencies {
    // ...
    implementation "org.springframework.boot:spring-boot-configuration-processor"
}
provider.google="google"
provider.kakao="kakao"


@Configuration
@ConfigurationProperties(prefix = "provider")
public class OAuthProviderConfigs {
    private String google; // "google"이 할당됨
    private String kakao; // "kakao"가 할당됨
    
 }

 

추가로 @ConfigurationProperties를 통해 불러온 프로퍼티값을 해당 클래스의 생성자 함수에 바인딩 할 때는 @ConstructorBinding 어노테이션을 활용하면 된다.


예시)

# Payment Configuration
payment.gateway.type=stripe
payment.gateway.api-key=sk_test_123456789
payment.gateway.secret=secret_key_123
payment.registration-fee=10000
payment.currency=KRW

// ...
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.bind.ConstructorBinding;

@ConfigurationProperties(prefix = "payment")
public class PaymentProperties {
    private final GatewayConfig gateway;
    private final int registrationFee;
    private final String currency;

    @ConstructorBinding
    public PaymentProperties(GatewayConfig gateway, int registrationFee, String currency) {
        this.gateway = gateway;
        this.registrationFee = registrationFee;
        this.currency = currency;
    }
// ...

 

 

학습 시작 인증

 

학습 종료 인증

 

첫 번째 클립 수강 인증

 

두 번째 클립 수강 인증

 

학습 인증