들어본 적 있는데, 교육은 못 받은 부분이라
chat gpt, 구글, 유튜브, 커뮤니티에서 물어보고 찾아보고 그랬다.
처음 들어본 개념들이 많아서 막막하고 시간이 상당히 걸렸다.
그래도 드디어 나름대로 해냈다! 😸
본인이 생각하는 민감정보:
가장 추천되는 방향은 '암호화'가 아닌가 싶다.
그러기 위해 jasypt 설치가 필요한데 이를 개발한 분의 github 참고하면 도움이 되겠다.
만일 암호화가 우선이 아니고, 단순히 민감정보만 github에 노출되지 않게끔 하려면
난이도가 좀 더 낮은 '환경변수 설정 및 관리'할 방법이 있다.
1, 이를 도와주는 lib인 dotenv를 pom.xml에 추가
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>3.0.0</version>
</dependency>
2, .env파일 생성
위치: 플젝 디렉토리 루트, 즉 pom.xml과 같은 위치
처음 생성했을 때 암호를 입력하라는 문구가 떴는데,
알고보니 pc에 한컴 설치 시 anysign4pc도 함께 설치됐는데 이것이 원인이었다.
.env파일은 vscode로 열면 정상적으로 작성, 수정, 저장이 가능하다.
sts4에서도 열기 위해 anysign4pc 제거했다.
해당 파일에는 민감정보 원래의 값을 입력하고 변수를 지정한다.
DB_DCL=org.***
DB_URL=jdbc:***
DB_USERNAME=***
DB_PASSWORD=***
API_KEY_KAKAOMAP=***
API_KEY_PAYMENT=***
3, application.properties
해당 파일은 env파일의 변수를 대입 받는다.
#db 연결 정보
spring.datasource.driver-class-name=${DB_DCL}
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
#api key
api.key.kakaomap=${API_KEY_KAKAOMAP}
api.key.payment=${API_KEY_PAYMENT}
4, Application.java
SpringBoot에서 env파일을 읽어올 수 있도록 환경변수 로드하고 설정해준다.
관련해서 요 github 내용도 도움이 되었다.
@SpringBootApplication
public class KringApplication {
public static void main(String[] args) {
Dotenv dotenv = Dotenv.configure()
.filename("test.env")
.load();
System.setProperty("DB_DCL", dotenv.get("DB_DCL"));
...
System.out.println(dotenv.get("DB_DCL"));
...
SpringApplication.run(KringApplication.class, args);
}
}
5, Controller
api key 쓰는 ctrl에도 해당 값을 주입
@Controller
public class StartCtrl {
@Value("${api.key.kakaomap}")
String appKey;
@GetMapping("/offlineStore")
public String offlineStore(Model model) {
System.out.println("offlineStore");
model.addAttribute("appkey", appKey);
return "common/offlineStore";
}
}
6, .gitignore
배포 시 .env파일을 무시하도록 .gitignore파일에 아래 내용 추가
# env
*.env
행복하다~!
p/s:
그리고 혹여나 Access denied for user '계정'@'localhost' (using password: YES) 오류가 보이면 sql에 아래 쿼리 실행하면 된다.
GRANT ALL PRIVILEGES ON *.* TO '계정'@'localhost' IDENTIFIED BY '비밀번호';
FLUSH PRIVILEGES;
그런데 이미 Application.java에서 System.setProperty("DB_PASSWORD", dotenv.get("DB_PASSWORD")) 로 설정했으면, 해당 오류가 안 날 것 같다.
다음 플젝에서 지켜보겠다 🤓