gradle 추가
dependencies {
...
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.1"
implementation group: 'org.postgresql', name: 'postgresql', version: '42.1.4'
}
xml 파일 설정
...
spring:
application:
name: dockerTestApp
datasource:
url: jdbc:postgresql://서버ip:5432/db명
username: id
password: 비밀번호
driver-class-name: org.postgresql.Driver
이부분만 추가해주면 db 셋팅 부분은 끝났다!
간단하게 실제 db의 테이블에서 정보를 가져와 보자
간단한 예제
public class Anonymous {
private String name;
public String getName() {
return name;
}
}
- 테이블과 매핑되는 class
import com.test.hello.domain.Anonymous;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface AnonymousMapper {
@Select("SELECT * FROM anonymous WHERE anonymous_id = #{id}")
Anonymous find(@Param("id") Integer id);
}
- table과 Anonymous class를 mapping해주는 mapper
@RestController
public class AnonymousController {
@Autowired
AnonymousMapper anonymousMapper;
@GetMapping("/user")
public String getName() {
return anonymousMapper.find(1).getName();
}
}
- 실행해주는 controller
- 성모님 말씀이 요즘엔 Autowired를 안쓰는 추세라고 한다. 다른 방법을 적용해 보자!
db 정보 숨기기
1. 환경 변수 사용하기
1.Edit configuration에서 환경 변수 값 설정
인텔리제이에서는 다음과 같은 UI를 제공해 준다. 여기서 설정해주자.
2.xml 파일 수정
datasource:
url: ${db.url}
username: ${db.username}
password: ${db.password}
driver-class-name: org.postgresql.Driver
만약 명령어를 통해 jar 파일로 실행 시킨다면
java -jar -Durl=jdbc:postgresql://ip/db명 -Dusername=유저명 -Dpassword=비밀번호
와 같은 형식으로 실행시킬 수 있다.
2. Jasypt 사용하기
1.gradle 추가
// https://mvnrepository.com/artifact/org.jasypt/jasypt
compile group: 'org.jasypt', name: 'jasypt', version: '1.9.2'
2.config 파일 추가
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JaspyConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("thisiskey"); //암호화에 사용할 키 -> 중요
config.setAlgorithm("PBEWithMD5AndDES"); //사용할 알고리즘
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
3.암호화 하기
이제 암호화를 실행할 것이다. 어디서 하던지 상관없는데 CommandLineRunner를 사용해서 Application에서 실행해 보겠다. (테스트 파일에서 실행해도 좋을 것 같다.)
@SpringBootApplication
public class DockerTestApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(DockerTestApplication.class, args);
}
@Override
public void run(String... args) {
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword("thisiskey"); //2번 설정의 암호화 키를 입력
String enc = pbeEnc.encrypt("cafe24@~~~~~~~~`"); //암호화 할 내용
System.out.println("enc = " + enc); //암호화 한 내용을 출력
//테스트용 복호화
String des = pbeEnc.decrypt(enc);
System.out.println("des = " + des);
}
}
위와 같은 방식으로 우리가 필요한 url과 username, password를 암호화 시키면 된다.
4.암호화 값 적용
yml 파일에서 암호화 된 값을 적용하자.
url: ENC( 암호화된 값)
으로 설정한다.
이때 암호화 방법과 키에 따라 다르겠지만, 암호화 된 값은 매번 같은 값이 나오는 것은 아니다 !
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: ENC(aWMfwdRL4shAoa3binQxM0gOn5dWtmHyhWxuuFx2vDEwBhhXxSWJ3NEWZYsgbfQsdTx7tyvPKio=)
username: ENC(cqyeXqEpfPcAKuAoFrJ7IQ==)
password: ENC(XQFHn29LATCsIljeVYtmXmvHBfZrSPP6)
우리는 db 설정에 필요한 값을 암호화 했지만, 환경 변수설정이 필요할 때 유용하게 사용할 수 있을것 같다.