Oracle Select vs OR vs IN 비교 약 2만 건 정도의 데이터를 조회하는 API를 개발해야 하는데, 하나씩 조회, OR 연산자 사용, IN 연산자 사용 중 어떤 방법이 성능상 유리할지 궁금했다. 당연히 모두가 아는 결과를 테스트하는 것일 수도 있지만.. 내 눈으로 직접 확인해 보아야 믿을 수 있을 것 같다.. . 실제 서비스 환경과 동일하게 SpringBoot, MyBatis, Oracle 환경으로 테스트하였고, 오라클에서 IN 절에 허용되는 최대 식은 1,000개인 이유로 1,000건 단위로 분할조회 하도록 하였다. 1,000건이 초과하면 ORA-01795 maximum number of expressions in a list is 1000 예외를 던진다고 한다. (그런데 테스트 당시에..
Spring Assert Statements package org.springframework.util; 인수를 검증하고 예외를 발생시키는 유용한 클래스 Assert Class Spring Assert 특징 Assert 메서드는 정적 예상되는 인수를 가정하고, 조건이 충족되지 않으면 런타임 예외를 발생 첫 번째 매개 변수는 검증을 위한 인수 또는 확인할 논리적 조건 두 번째 매개 변수는 유효성 검사에 실패할 경우 표시되는 예외 메시지 Example public class Car { private String state = "stop"; /** * speed > 0 조건을 충족하지 않을 경우 런타임 예외 발생 */ public void drive(int speed) { Assert.isTrue(speed ..
Using JWT(JSON Web Tokens) in Java JWT를 업무에 사용해야 하는 일이 생겼는데, 알고는 써야지 생각을 해서.. JWT 생성과 복호화과정을 간략하게 살펴보려고 한다. Token Authentication 토큰 인증은 서버 측 세션 ID에서 해결할 수 없는 문제 해결을 위해 개발 서버 로드 감소, 권한 관리 간소화 등의 장점 기존 인증과 마찬가지로 사용자는 확인 가능한 자격 증명을 세션 ID 대신 토큰 세트로 제공 토큰은 사이트 간 요청 위조(CSRF) 보호 체계, OAuth 2.0 상호 작용, 세션 ID 및 인증 표현(쿠키 내)을 포함한 다양한 응용 프로그램 제공 JWT JSON 형식 웹 토큰 URL에 안전하고, 인코딩 되고, 암호화된 문자열로 다양한 응용 프로그램에서 토큰으로..
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 을 사용하는 방..
Request multipart/form-data type API by attaching a file 서버단에서 multipart/form-data 타입으로 파일을 첨부해서 요청을 보내본 적은 없었는데.. 이번에 관련 작업을 하면서 정리를 해보고자 한다. (여기서 파일은 이미지 URL 을 저장해서 보낸다.) MultipartFile multipart/form-data 타입으로 Request 시 MultipartFile 객체가 필요하다. @PostMapping(value = "/sample/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) SampleResponse uploadImage(MultipartFile upload, @RequestHeader(va..
2022년 회고 2021년 회고에 이어 2022년 회고도 작성해보려고 한다. 회고를 작성하는 게 생각보다 귀찮고.. 어색하고.. 잘 쓰고 있는지도 사실 모르겠다..🙄 그래도 다른 분들의 회고를 참고해 보며 작성하다 보면 점점.. 적응이 되겠지...?!🥲 작년 숙제 작년 숙제는 꾸준히 Java/Spring 기술을 깊게 파면서, 유지보수하기 좋은 프로그램을 개발하기 위한 고민을 해보기 였다. 올해 이 숙제들을 잘 이뤄냈는지 돌아보자.. 결혼 준비와 이직 준비 10월달에 결혼을 하게 되어 1월부터 조금씩 결혼 준비를 하기 시작했다. 🎉🤵🏻👰🏻♀️🥳 그와 동시에.. 결혼을 하고 나면 이직 타이밍을 놓칠 것 같아서 어쩌다 보니.. 이직 준비도 같이 하게 되었다. 결혼 준비와 이직 준비를 동시에 어떻게 하냐고 많..