티스토리 뷰
Spring으로 개발을 하다보면 application.properties파일 또는 application.yml파일에 공통으로 쓰이는 프로퍼티를 정의하고정의된 값을 여러 Java 파일에서 참조해서 애플리케이션 개발이 진행되는데 대표적으로 파일경로가 있다.
하지만 이 설정파일에 데이터베이스 접속정보, JWT 암호화 키, 그 외 관련된 중요한 데이터들도 들어있을 수 있는데 이러한 정보들이 외부로부터 노출될 수 있기 때문에 이 정보들을 암호화를 하거나 외부에서 접근했을때 알아보지 못하게 해야한다.
이러한 방법으로 jasypt 라는 라이브러리를 제공해는데 이 라이브러리를 이용해 예제코드와 함께 알아보도록 하자.
jasypt (Java Simplified Encryption) 란?
Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works.
간단히 얘기하자면 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 프로젝트에 기본 암호화 기능을 추가 할 수있는 Java 라이브러리입니다.
jaspyt 의존성 추가
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
jasypt 의존성을 추가해주자.
해당 의존성을 추가하고나면 JasyptEncryptorConfigurationProperties 설정이 자동으로 잡히는데
JasyptEncryptorConfigurationProperties.class 파일엔 lombok을 사용하고 있으므로 lombok 라이브러리가 없으면 추가해주자
jasypt key 추가
데이터를 암호화 및 복호화 할 key를 설정해주고 설정파일의 정보들중에 이메일주소와 패스워드 부분을 테스트해보도록 하자
jasypt 데이터 암호화
정상적으로 데이터가 암호화 되었으니 저 값을 설정파일에 넣어보자.
jasypt 데이터 복호화
정상적으로 데이터가 복호화 되었다.
근데 여기서 한가지 의문이 들 것이다. 중요한 정보들을 암호화를 해서 넣었지만 결국 key값도 설정파일에 있으니
의미가 없지않을까? 그래서 저 key값을 Java application이 동작할때 외부에서 넣어줘야 한다. Java 시스템 변수를 활용하자
System 변수에 jasypt key 세팅
application.properties(yml)에 선언된 key를 지우자
그리고스프링 애플리케이션 컨텍스트를 초기화 되기전에 static 영역에 System변수에 값을 할당해줘야 한다.
jar 빌드
값을 확인해보기 위해 main메서드가 있는쪽에다 해당소스를 작성하였다.
이제 jar파일로 빌드해서 IDEA가 아닌 외부에서 jar파일을 실행해보자.
만약 jar파일로 빌드되는 과정에 Test클래스 파일을 찾지못하는 에러가 발생되면 빨간색 체크박스를 체크후 빌드하자
jar 실행
정상적으로 실행된걸 확인할 수 있다.
java -jar -Dname=value jar파일명.jar으로 jar파일을 실행하면 된다.
-D옵션은 Java application 구동시 System변수에 key=value형태로 런타임시 값을 넣어줄 수 있다.
'Spring' 카테고리의 다른 글
[Spring] - Spring Boot Configuration Properties 클래스 만들기 (0) | 2021.05.06 |
---|---|
[Spring] - Spring Security에서 사용자의 권한을 동적으로 처리하기 (0) | 2021.04.26 |
[Spring] - Swagger 기본사용법 및 API 문서자동화 (5) | 2021.04.11 |
[Spring] - Model 과 HttpSession에 데이터를 저장할 때 주의점 (6) | 2021.03.26 |
[Spring] - DI (Dependency Injection) 동작원리 간단히 파헤치기 (7) | 2021.03.15 |