배포 전 민감정보 처리

기여·2024년 8월 29일
0

소소한 개발팁

목록 보기
94/103

들어본 적 있는데, 교육은 못 받은 부분이라
chat gpt, 구글, 유튜브, 커뮤니티에서 물어보고 찾아보고 그랬다.
처음 들어본 개념들이 많아서 막막하고 시간이 상당히 걸렸다.
그래도 드디어 나름대로 해냈다! 😸

본인이 생각하는 민감정보:

  • db 경로 & 로그인 정보
  • api key

가장 추천되는 방향은 '암호화'가 아닌가 싶다.
그러기 위해 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")) 로 설정했으면, 해당 오류가 안 날 것 같다.
다음 플젝에서 지켜보겠다 🤓

profile
기기 좋아하는 여자

0개의 댓글