๐๊ฐ๋ฐ ํ๊ฒฝ ๋ถ๋ฆฌํ๊ธฐ
๋ค๋ฅธ์ฌ๋๊ณผ ๊ฐ์ด ์งํํ๋ ํ ์ดํ๋ก์ ํธ์์ ํ ์คํธ์ฉ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ DB๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํด ๋จ๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ์ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค. ์ด ๋ ํ๊ฒฝ์ application.proerties ๋ .yml ์ ์ด์ฉํ์ฌ ๋ถ๋ฆฌ๋ฅผ ํ๋ค.
๊ธฐ์กด application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/gubun
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
logging.level:
org.hibernate.SQL: debug
# org.hibernate.type: trace
AWS RDS ๋ฅผ ๊ฐ๋ฐ db๋ก ์ฌ์ฉํ๊ธฐ๋ก ํด์ ๊ธฐ์กด H2 DB๋ฅผ ์ฐ๋ ํ๊ฒฝ์ ํ ์คํธ๋ก ๋๊ณ , ์๋ก ์ถ๊ฐํ Postgres DB๋ฅผ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก(test,dev) ๋ถ๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
(SpringBoot 2.4 ๋ฒ์ ์ดํ๋ก on-profile ์ ์ด์ฉํด์ผ ํ๋ค. ๊ธฐ์กด์ ๋ฐฉ์์ deprecated ๋จ)
application.yml
spring:
profiles:
active: dev
logging.level:
org.hibernate.SQL: debug
# org.hibernate.type: trace
application-test.yml
server:
port: 8080
spring:
config:
activate:
on-profile: test
datasource:
url: jdbc:h2:tcp://localhost/~/gubun
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
application-dev.yml
server:
port: 9090
spring:
config:
activate:
on-profile: dev
datasource:
url: ##DB์์น
username: ##์ด๋ฆ
password: ##ํจ์ค์๋
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
format_sql: true
๐DataSource ์ํธํ ํ๊ธฐ
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ํ ๊ฐ์ง ๋ฌธ์ ๋ ์ด ํ๋ก์ ํธ๊ฐ Git์ผ๋ก ๊ด๋ฆฌ ๋๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ DataSource ๊ทธ๋๋ก Git์ ์ฌ๋ ค๋ฒ๋ฆฌ๋ฉด ๋ณด์๋ฌธ์ ๋ ๋ฌผ๋ก ์ด๊ณ AWS์์ ๋ง์๋ฒ๋ฆฐ๋ค.
.yml ์ gitignore์ ํตํด ์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง ์ฌ๊ธฐ์ ์ํธํํด์ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค.
Jasypt
Jasypt๋ ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ์ํธํ ํด์ฃผ๋ ๋ชจ๋๋ก, ์ฌ๊ธฐ์ ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ์ํธํ ํ ๋ค์ ํ๊ฒฝ๋ณ์๋ก ๋ณตํธํํค๋ฅผ ์ค์ ํ์ฌ ์ ์ํ ์ ์๊ฒ ํ ๊ฒ์ด๋ค.
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
์ด ๊ณณ์ ๋ค์ด๊ฐ๋ฉด ์ง์ ์/๋ณตํธํ๋ฅผ ์ํํ ์ ์๋ค.
key๋ฅผ ์ด์ฉํ์ฌ ๋ณตํธํ๋ฅผ ์ํํ๋ ค๋ฉด Two Way Encryption์ด๋ผ๋ ์ต์ ์ ์ ํํด์ผ ํ๋ค.
๋จ๋ฐฉํฅ ์ํธํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ณตํธํ ํค๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ๋ก ์๋ฌธ์ด ๋์จ๋ค.
์ฐธ๊ณ ๋ก, ์ EncryptedString์ Encrypt๋ฅผ ์ํํ ๋ ๋ง๋ค ๋งค๋ฒ ๋ค๋ฅธ EncryptedString์ด ๋์จ๋ค.
์ด์ Spring์์ ์ด๋ฅผ ์ด์ฉํด๋ณด์.
์์กด์ฑ์ถ๊ฐํ๊ธฐ (ulisesbocchio-jasypt)
dependencies {
// ์ํธํ ๋ชจ๋
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
}
์ฐธ๊ณ ) 3.0.3 ๋ถํฐ ๋ฐฉ์์ด ๋ฌ๋ผ์ ธ์ ์ด์ ๋ฒ์ ์ ์ด์ฉํ๋ฉด ๋์ ๋์ง ์์ ์๋ ์์
https://github.com/ulisesbocchio/jasypt-spring-boot
Configuration ์ถ๊ฐํ๊ธฐ
import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* ์๋ฒ ์ ๋ณด ์ํธํ ํ๊ธฐ์ํ ConfigClass
* ์๋์ URL์์ encrypt decrypt ๊ฐ๋ฅ
* https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
*
* application-dev.yml ์์ ์๋ ์ํธํ๋ DB ์ ๋ณด๋ฅผ decrypt ํ๊ธฐ ์ํด์ ํ๊ฒฝ๋ณ์์์ ๊ฐ์ ์ง์ ์
๋ ฅ๋ฐ์์ผ ํฉ๋๋ค.
*/
@Configuration
@Slf4j
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(System.getenv("JASYPT_PASSWORD"));
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
config.setPassword(System.getenv("JASYPT_PASSWORD")); ์ด ๋ถ๋ถ์ด ํ๊ฒฝ๋ณ์๋ก ๋ถํฐ ํค ๊ฐ์ ๋ฐ์์์ ์ค์ ํด ์ฃผ๋ ๋ถ๋ถ์ด๋ค. ํ๊ฒฝ๋ณ์๋ฅผ ์์คํ ๋ณ์์ ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋๋ฐ, ํ์๋ null ์ด ๋ฐํ์ด ๋์ด์ ์ง์ runConfigurations์ ์ถ๊ฐํด์ ์งํ ํ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋์์์ application-dev.yml ๋ถ๋ถ์ DB์ ๋ณด๋ฅผ ์ํธํ ํ์ฌ ๋์จ ๊ฐ๋ค๋ก ์ฑ์์ฃผ๋ฉด ๋๋๋ฐ ENC()๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋
spring:
config:
activate:
on-profile: dev
datasource:
url: ENC(Akn44dXsH2btWIRNfqmNJc60LKUOWP2c+PVQ15+xSoZf4ddzGl1JcI13hbWZ9LUVeXo6kwdlBIuw+YKPaSUkK8h0sQWonoADl1lGUFwdS4NAaeQugwBBNJIu6kwxMBJ1)
username: ENC(EmRRq+Xam8r36WFSPZas2UjrcY/DfwSv)
password: ENC(daX0fX/g9fgOzXIz8TroQj50f1XwHf4z6qHiPA0Vv3g=)
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
format_sql: true
'Backend > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] WebFlux ๋์ ์ ๊ดํ ์ด์ผ๊ธฐ (0) | 2022.11.03 |
---|---|
[Spring] Redis (1) | 2022.09.17 |
[Spring] ์คํ๋ง RestTemplate (0) | 2022.06.26 |
[Spring] RestAPI์ Hateoas๋ก ๋งํฌ ์ฝ์ ํ๊ธฐ (0) | 2022.06.19 |
[Spring] Http ํต์ ๊ณผ ๊ด๋ จ๋ Annotations ๊ฐ๋จ ์ ๋ฆฌ (0) | 2022.06.16 |