KISA SEED 암호화 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 1999년 2월 한국인터넷진흥원과 국내 암호전문가들이 순수 국내기술로 개발한 128비트 블록 암호 알고리즘 128bit의 암/복호화키를 이용하여 임의의 길이를 갖는 입력 메시지를 128bit의 블록단위로 처리하는 128bit 블록암호 알고리즘 따라서, 임의의 길이를 가지는 평문 메시지를 128bit씩 블록단위로 나누어 암호화하여 암호문을 생성 암/복호화하는 방법에 대한 운영모드로 ECB(Electronic Code Book), CBC(Cipher Block Chaining), CTR(CounTeR), CCM(Counter with CBC-MAC), GCM(Galois/Counter Mode)..
RSA Public/Private key in JAVA 업무 중 외부 API와 연동을 위해 RSA 암호화 알고리즘을 적용이 필요하게 되었는데, Public Key, Private key 에 대한 개념을 이해하고 적용해 보고자 간단하게 정리하게 되었다. RSA(Rivest-Shamir-Adleman) 비대칭 암호화 알고리즘 공개 키를 사용하여 데이터를 암호화하고, 개인 키를 사용하여 암호를 해독 대칭 알고리즘인 DES, AES와 다르게 2개의 키(Public Key, Private Key) 존재 Public Key : 누구와도 공유할 수 있는 공개 키(데이터를 암호화에 사용) Private Key : 자신을 위한 개인 키(복호화에 사용) 메세지 암호화 시 해당 메세지가 공개 키(Public Key)로 암호..
Redis Transactions 프로젝트에 Redis 를 적용하면서 Redis Transaction 을 잘 모르고 사용했다가, Spring Transaction 과 함께 데이터가 롤백되어 버리는 상황을 맞이하고 Redis Transaction 에 대해 알아보게 되었다. . Redis 는 싱글 스레드 기반으로 데이터 처리 반면, 이벤트 루프(Event Loop)라는 Redis 동작 원리로 여러 클라이언트 요청을 동시에 응답하는 동시성 보유 유저 레벨에서는 싱글 스레드로 동작하지만, 커널 I/O 레벨에서는 스레드 풀 이용 따라서, 동시성 문제에 대한 처리가 필요 Redis 동시성 처리를 위한 트랜잭션 방법은 SessionCallback 인터페이스를 구현하는 방법과 @Transactional 을 사용하는 방..
2022년 회고 2021년 회고에 이어 2022년 회고도 작성해보려고 한다. 회고를 작성하는 게 생각보다 귀찮고.. 어색하고.. 잘 쓰고 있는지도 사실 모르겠다..🙄 그래도 다른 분들의 회고를 참고해 보며 작성하다 보면 점점.. 적응이 되겠지...?!🥲 작년 숙제 작년 숙제는 꾸준히 Java/Spring 기술을 깊게 파면서, 유지보수하기 좋은 프로그램을 개발하기 위한 고민을 해보기 였다. 올해 이 숙제들을 잘 이뤄냈는지 돌아보자.. 결혼 준비와 이직 준비 10월달에 결혼을 하게 되어 1월부터 조금씩 결혼 준비를 하기 시작했다. 🎉🤵🏻👰🏻♀️🥳 그와 동시에.. 결혼을 하고 나면 이직 타이밍을 놓칠 것 같아서 어쩌다 보니.. 이직 준비도 같이 하게 되었다. 결혼 준비와 이직 준비를 동시에 어떻게 하냐고 많..
Spring Boot + Redis Spring Boot 에 Redis 를 적용하면서 알게된 내용들을 정리해보자. Redis 특징 Collection(List, Set, Sorted Set, Hash) 지원 Race condition 방지 Redis 는 Single Thread 로 Atomic 보장 persistence 지원 서버가 종료되더라도 데이터 리로드 가능 Spring Data Redis Ready build.gradle Redis 는 Key-Value 형식을 갖는 자료구조 Spring Data Redis 는 RedisTemplate , Redis Repository 를 사용하는 두 가지 접근 방식 제공implementation 'org.springframework.boot:spring-b..
Java / Spring Framework / Spring Boot Release Java Java 10 Local Variable Type Inference // Choose variable names that provide useful information. // Before List x = dbconn.executeQuery(query); // After var custList = dbconn.executeQuery(query); // Consider var when the initializer provides sufficient information to the reader. // Before ByteArrayOutputStream outputStream = new ByteArrayOutputSt..
Papago 번역 API를 애플리케이션에 적용해 보고자 한다. 👏🏼 . 참고로 Papago 번역 API는 일 허용량이 10,000 글자이다. 궁금하진 않겠지만.. 어떤 애플리케이션인지는.. 비밀🤫 . 네이버는 API를 쉽게 적용할 수 있도록 잘 설명이 되어 있는 레퍼런스를 제공해 주어서 사실 이 글은 무의미할 수도 있다.. 그래도 기록은 해야지..ㅋ_ㅋ.. Papago 번역 개요 . 우선 네이버 개발자 센터에서 애플리케이션을 등록이 필요한데, 애플리케이션을 등록은 매우 간단하다. 애플리케이션 등록 애플리케이션 등록 네이버 개발자 센터 상단 Application -> 애플리케이션 등록 -> 애플리케이션 등록 (API 이용신청) 페이지 애플리케이션 이름, 사용 API, 비로그인 오픈 API 서비스 환경 입력..
동시성 문제와 스레드 로컬 동시성 문제 다수의 스레드가 동시에 같은 인스턴스 필드 값을 변경하면서 발생하는 문제 스프링 빈처럼 싱글톤 객체의 필드를 변경하며 사용할 때 주의 Sample Service @Slf4j public class FieldService { private String nameStore; // 싱글톤 객체의 공용 필드 public String logic(String name) { log.info("저장 name={} -> nameStore={}", name, nameStore); nameStore = name; sleep(1000); log.info("조회 nameStore={}", nameStore); return nameStore; } } Test @Slf4j public clas..