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 클래스인데, 아래와..
Spring Batch 향로님 Spring Batch 가이드 보고 따라하기 jojoldu/spring-batch-in-action 배치 기능 활성화 보통 실시간 처리가 어려운 대용량 데이터나 대규모 데이터일 경우 배치를 활용 배치기능 활성화를 위해 프로젝트 Application 클래스에 @EnableBatchProcessing 를 추가해주자. @EnableBatchProcessing @SpringBootApplication public class SpringBatchTestApplication { public static void main(String[] args) { SpringApplication.run(SpringBatchTestApplication.class, args); } } Job 생성하기 ..
Java PlayGround [Java] 자바 플레이그라운드 with TDD, CleanCode 후기 (2) NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드에서 새롭게 배우고 깨닫게 된 내용들을 기록한 글입니다. Part02. Inheritance, Abstract, Functional programming Inheritance 상속을 통한 중복 코드 제거 중복 코드를 별도의 클래스로 분리해보자. extends 부모 클래스의 모든 필드와 메소드를 자식 클래스가 상속하도록 지원하는 keyword 상속을 할 경우 멤버 필드와 메소드를 하위 클래스에서 그대로 상속 Abstract 추상화를 통한 중복 제거 역할이 비슷한 메서드를 추상화 시켜 중복을 제거해보자. abstract 클래스를 추상 클래..
Refactoring With IntelliJ Change Signature 클래스의 생성자에 parameter 추가 Convert Anonymous to Inner Class 익명 클래스를 내부 클래스로 변환 New 또는 생성자에 커서를 위치시키고 리팩토링 Before public class Class { public Interface method() { final int i = 0; return new Interface() { public int publicMethod() { return i;} }; } } After public class Class { public Interface method() { final int i = 0; return new MyInterfaceClass(i); } } p..