본문 바로가기
🛠 백엔드/Spring

[Spring] 민감한 정보 관리하기 wt. secretKey

by meteorfish 2024. 7. 1.
728x90

JWT를 사용하다 보면 secretKey를 어떻게 관리해야 하는지 고민해본적이 있을 겁니다.

이는 공개되게 되면 매우 위험하므로 적절하게 관리하는 것이 중요하다.

 

1. 메모장

직접 메모장에 시크릿 키를 저장하여 파일을 읽어 사용하는 방법이다.

원격 저장소에는 secretKey를 비워두고, 배포 시점에 직접 바꿔주는 식으로 진행하면 된다.

 

2. application.properties 또는 application.yml

secretKey를 application에 저장한 후, @Value를 이용하여 가져오는 방법이다.

// application.properties
auth.jwt.secret= Yn2kjibddFAWtnPJ2AFlL8WXmohJMCvigQggaEypa5E=

// POJO
@Component
public class JWTProvider {
	
    private final String secretKey;
    
    public JWTProvider(
    	@Value("${auth.jwt.secret}")
        String scretKey
    ) {
    	this.secretKey = secretKey;
    }
}

@Value 외에도 @ConfigurationProperties를 이용한 방법도 존재한다.

 

장점

  • 민감한 정보 설정 값과 프로덕션 코드를 분리시킬 수 있다.

 

문제점

  • application.properties 또한 원격 저장소에 올라가게 되면, 정보가 유출된다는 문제점이 존재한다.

 

3. OS 환경 변수 이용하기

OS 환경 변수로 값을 저장하여 사용하는 방식으로 secretKey에 직접 접근할 수 없도록 한다.

그러나 이는 값 변경 시 환경 변수를 재정의해야한다는 문제점이 존재한다.

$ export SECRET_KEY=Yn2kjibddFAWtnPJ2AFlL8WXmohJMCvigQggaEypa5E=
//application.properties
roomescape.auth.jwt.secret= ${SECRET_KEY}

catsriding | Spring Boot 애플리케이션 macOS 환경변수 활용하기

 

catsriding | Spring Boot 애플리케이션 macOS 환경변수 활용하기

환경변수는 운영체제 레벨에서 설정하고 관리되는 값을 말합니다. 이러한 환경변수들은 애플리케이션의 실행 환경을 설정하거나, 시스템의 행동을 조절하는 등 다양한 목적으로 사용될 수 있

www.catsriding.com

 

 

4. 서브모듈 이용하기

  • GitHub의 Private Repository에서 .properties 파일을 관리한다.
  • 해당 repository를 프로젝트 Repository에 서브모듈로 등록 후, 필요한 경우 파일을 불러와 사용한다.

Git Submodule 알아보기 (hudi.blog)

 

Git Submodule 알아보기

학습배경 우테코 달록팀은 현재 JWT의 비밀키와 같은 민감한 정보를 다루기 위해 환경변수를 사용한다. 스프링부트 프로젝트의 application.yml 에 Property Placeholders 문법을 사용하여 OS 환경변수를 불

hudi.blog

 

장점

  • 버전 형상관리가 가능하고, 팀원들과 함께 공유가 가능하다는 장점이 존재한다.

 

 

728x90