
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월부터 조금씩 결혼 준비를 하기 시작했다. 🎉🤵🏻👰🏻♀️🥳 그와 동시에.. 결혼을 하고 나면 이직 타이밍을 놓칠 것 같아서 어쩌다 보니.. 이직 준비도 같이 하게 되었다. 결혼 준비와 이직 준비를 동시에 어떻게 하냐고 많..

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..

Enum Class의 동시성 이슈 troubleshooting #1 Enum Class가 싱글톤 성질을 가지고 있기 때문에 발생했던 동시성 이슈를 기록하고자 한다. (동시성 이슈﹖ 다수의 스레드가 동시에 같은 인스턴스 필드 또는 공용 필드 값을 변경하면서 발생하는 이슈) . 그 이슈는 바로바로.. 🥁🥁🥁 . ... Issue 구매 완료 알림 푸시가 내가 주문한 상품명이 아닌 다른 사람이 주문한 상품명으로 전달된 이슈였다. 예를 들어 사용자는 불고기버거 기프트콘을 주문했지만, 무소음 키보드 주문이 완료되었다는 구매 완료 알리 푸시를 받게 된 것이다. 정상 푸시 메시지 불고기버거 세트 기프트콘 주문이.. 문제의 푸시 메시지 무소음 키보드 주문이.. Problem 푸시 톡 클래스는 Enum 클래스인데, 아래와..