시뻘건 개발 도전기

#2. 코인 자동 매매 프로그램 만들기 본문

프로젝트/토이프로젝트

#2. 코인 자동 매매 프로그램 만들기

시뻘건볼때기 2022. 2. 7. 13:04
반응형
※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다.
투자의 책임은 투자자 본인에게 있음을 알려드립니다.

 

이번 포스팅은 프로그램에 사용될 resource에 대해 이야기한다.

 

encrypted.a.key={업비트에서_발급받은_암호화된_access_key}
encrypted.s.key={업비트에서_발급받은_암호화된_secret_key}

나는 업비트에서 API를 사용하기 위해 발급되는 access key와 secret key를 한 번 암호화 해서 사용한다. 실제 배치에서는 해당 키를 사용해서 로그인을 시도할 때, 복호화가 진행되게 해서 보안에 신경썼다. 암호화의 종류는 선호하는 방식을 진행하면 된다.

 

key={암호화_key_32byte}
iv={암호화_iv_16byte}
charset={사용할_charset}
contents={사용할_암호화방식_및_패딩}

암호화는 언제 어떤 취약점이 발견될지 알 수 없기 때문에, 언제든지 빠르게 대응이 가능해야한다고 생각한다. 최근 log4j 보안 이슈를 보면 알 수 있다. 따라서 암호화에 사용되는 모든 데이터 또한 리소스로 관리될 수 있도록한다. 물론 코드 상으로 어느정도 제한이 될 수 있고 더 광범위하게 생각할 수 있지만, 암호화에 대한 내용으로 시간을 할애하는 것 보다, 프로젝트의 core에 할애하고 싶다.

 

logging.logback.rollingpolicy.max-file-size=100MB
logging.file.name=logs/autobot.log
logging.logback.rollingpolicy.file-name-pattern=logs/autobot_backup.%d{yyyy-MM-dd}-%i.log
logging.pattern.console=%-5level [%X{loggingID:-none}] %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M:%line] - %msg%n
logging.pattern.file= %-5level [%X{loggingID:-none}] %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M:%line] - %msg%n
logging.charset.console=UTF-8
logging.charset.file=UTF-8
logging.level.dotori=debug
logging.level.org.apache.http=debug
logging.level.root=info

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url={datasource_url}
spring.datasource.username=ENC({username})
spring.datasource.password=ENC({password})

spring.jpa.hibernate.ddl-auto=none
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

마지막으로, logging 설정과 jpa 및 datasource 설정이다.

properties로 관리하다보니, username과 password에 대해서는 "jasypt"를 사용해서 암호화를 진행했다.

사용된 jasypt에 대해 간략하게 설명한다면, 아래와 같다.

@Configuration
public class JasyptConfig {

    @Bean(name = "jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {

        String key = "{key}";
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(key); // 암호화할 때 사용하는 키
        config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 알고리즘
        config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
        config.setPoolSize("1"); // 인스턴스 pool
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
        config.setStringOutputType("base64"); //인코딩 방식
        encryptor.setConfig(config);
        return encryptor;
    }
}

배치에서 해당 bean을 사용하기 위해서는 "@EnableEncryptableProperties" 어노테이션이 필요하다.

반응형
Comments