본문 바로가기

개발/Spring

[Spring Boot] application.yml 시크릿 키 숨기기

평소에 Spring Boot에서 데이터베이스를 연결하거나 하게 되면, 비밀번호 같은 정보 application.yml에 적어두었는데, 해당 정보들은 노출되면 안되기 때문에 application.yml 파일을 gitignore 처리해주었었다.

그런데 팀 프로젝트를 할 때 application.yml에 변경사항이 있으면 매번 공유해야 했었기 때문에 불편했었고, 잘못해서 gitignore에 올라가기라도 하면 지우느라 급급했었다.

 

그런데 application.yml의 내용 중 특정 부분을 숨길 수 있는 방법을 알게 되었다!

바로 Edit Configurations > program arguments를 사용하는 방법이다.

(물론 이 정보도 팀원간에는 공유를 해야하긴 하지만 훨씬 공유의 양을 줄일 수 있었고 노출의 걱정이 사라졌다!)

 

IntelliJ의 Run 버튼 왼쪽을 보면 현재 실행할 것의 이름이 나와있는 칸이 있는데, 그것을 클릭하면 아래 Edit Configurations...가 있다.

그곳의 현재 Application이름이 적혀 있는 란 아래 칸에 정보들을 적어주면 된다.

application.yml 파일은 아래와 같은 형식으로 되어있는데, 

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/aaa
    username: aaa
    password: aaa

  jpa:
    hibernate:
      ddl-auto: update

  redis:
    host: localhost
    port: 6379

jwt:
  secret: aaa
  expired:
    access: aaa
    refresh: aaa

만약 jwt에 secret을 숨겨주고 싶다! 하면 yml파일에서 secret:aaa는 지워주고,

configuration에는

--jwt.secret=aaa

이렇게 적어주면 된다.

 

그래서 이걸 코드 상에서 꺼내와서 사용하려면???

@Value를 사용해주면 된다.

@Value("${jwt.secret}")
String secret;

이 때 주의할 점은 @Value가 lombok으로 부터 가져온 것이 아니라 springframework.beans.factory.annotation으로 가져와야 한다는 것이다!