[캡스톤] SpringBoot에서 비밀 번호 관리 (.gitignore, .properties)

이신행·2024년 6월 21일

capstone

목록 보기
8/15
post-thumbnail

부록

사실 이건 프로젝트와 크게 관련 있는 건 아니지만, 깃허브를 사용한다면 한번쯤 마주할 문제입니다.
캡스톤 글을 쓰면서도 이에 대한 언급이 잠깐 나와서 글을 쓰게 되었습니다.

필요한 이유

우선 프로젝트를 깃허브나 다른 형상 관리 서비스를 통해 관리한다고 할 때, 올리지 말하야 할 정보가 있습니다.
물론 private으로 설정해 놨다고 하더라도, 나중에 public으로 바꿨을 때 로그에 남아 있을 수도 있습니다.

  1. 여러 외부 라이브러리를 사용하다 보면 발생하는 앱 식별에 사용하는 비밀번호, json 파일, pem 키
  2. 추후 배포 후에 보안을 위해서 DB 비밀번호
  3. AWS 키….

등등 여러 이유로 올리면 안 되는 정보들이 있습니다.
파일 전체(혹은 폴더)를 올리지 말아야 한다면, .girignore에 파일의 경로와 이름을 넣어주면 됩니다.
하지만 올리지 말아야 할 정보가 코드 안에 들어가야 하는 문자열이라면, 이 방법을 사용하시면 됩니다.

예시

예시로 제 캡스톤 프로젝트에서 사용한 application.yml 파일을 일부 보여드리겠습니다.

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/capstone
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
  mail:
    host: smtp.gmail.com
    port: 587
    password: ${EMAIL_AUTH}

${DB_USERNAME} 와 같이 EL 표기법으로 쓰인 부분이 보이실 겁니다.
저 부분은 제가 공개하지 않고 비밀번호를 관리하는 파일 안에만 넣어둔 겁니다.
저렇게 두고, 비밀 파일은 깃허브가 아닌 다른 안전한 경로로 내부에서만 공유한다면 코드가 공개되더라도 문제가 없겠지요.

사용 방법

1. gitignore 설정

우선 비밀번호를 관리할 파일을 gitignore로 설정해 줍니다.
저희는 /src/main/resources/ 위치에 [secrets.properties]라는 이름의 파일로 만들어봅시다.
이름은 상관없지만, 확장자는 .properties 확장자로 만들어주시면 됩니다.
그러면 gitignore에는 이렇게 미리 넣어 두면 됩니다.

/src/main/resources/파일_이름.properties

2. 비밀 번호 관리 파일 만들기

이제 비밀번호를 관리할 폴더를 만듭니다.
앞서 사용한 이름으로 src\main\resource 위치에 만들어 주시면 됩니다.
[secrets.properties] 파일 내부에 다음과 같이 변수를 생성하면 됩니다.
(한글로 작성한 부분을 각자 프로젝트에 맞게 고쳐 사용하면 됩니다.)

DB_USERNAME=디비_유저명
DB_PASSWORD=디비_비밀번호
EMAIL_AUTH=이메일_앱_비밀번호

3. main 클래스에 property로 설정해주기

이제 프로젝트 전체를 실행하면 실행되는 클래스에 annotation을 하나 달아줄 겁니다.
main 메서드가 있는 클래스로 이동해서 클래스 이름 위에 다음과 같이 달아줍니다.

@PropertySource("classpath:secrets.properties")

main 클래스 상단 캡쳐

4. 사용하기

자 이제 필요한 준비는 마쳤습니다.
앞서 변수로 생성한 문자열을 변수명으로 호출할 수 있습니다.

마무리

혹시 부족한 설명이 있거나 오류, 질문 등은 댓글로 달아주시면 감사하겠습니다.

profile
언제나 Response 하는 Ability가 있는 서버를 만드는, Responsibility 있는 개발자가 되자

0개의 댓글