728x90

전체 글 75

[Java] Java 17 특징

Java 17은 2021년 9월에 출시된 LTS(Long Term Support) 버전으로 Java 17에서 추가된 기능과 특징에 대해 정리해보고자한다. 주요 특징에 대해 정리하면 다음과 같다.RecordSealed ClassSwitch ExpressionStream toList()Text Block위의 항목을 하나씩 살펴보자. 1. RecordRecord는 데이터 클래스를 의미하며 불변 객체를 생성하여 DTO 정의시 편리하게 사용할 수 있다.모든 필드가 private final로 선언된다.상속이 불가능하다.toString, equals, hashCode 등의 구현을 자동으로 해준다.예시public record Animal( String type, String name){} 2. Sealed ..

Java 2025.01.30

[Java] Java 11 특징

Java 11은 2018년 9월에 출시된 LTS(Long Term Support) 버전으로 Java 11에서 추가된 기능과 특징에 대해 정리해보고자한다. 주요 특징에 대해 정리하면 다음과 같다.Collection Factory Method 강화var 키워드 추가문자열 관련 Method 추가Reactive StreamZGC(Z Garbage Collector) 추가위의 항목을 하나씩 살펴보자. 1. Collection Factory Method 강화Java9에서 도입된 기능이 강화되었다.List, Set, Map과 같이 컬렉션을 생성할 수 있는 factory method를 사용할 수 있다.of()를 통해 예시와 같이 생성 가능하며, 이때 생성 된 것은 불변하다.참고)불변 List에 추가/삭제 작업을 하려면..

Java 2025.01.30

[AI] 당장 서비스에 적용할 수 있는 프롬프트 Skill

여러 서비스의 다양한 기능에 프롬프트 엔지니어링을 해보면서 습득한 프롬프트 스킬과 팁을 정리해 보고자한다. 목차공통 스킬상황별 스킬추가 Tip 프롬프트 엔지니어링도 코딩과 같다. 요구사항이 정해지면 그에 필요한 것들을 정의하고 설계하고 해결해 나가야 한다. 그리고 하나 하나 정교하게 명령을 풀어나가면 보다 좋은 결과를 얻을 수 있다. 아래의 스킬은 단순한 대화, 요약, 번역부터 AI 리포트, 캐릭터가 반영된 AI, 정확한 품질과 실시간 답변을 요하는 서비스까지 다양한 경험을 토대로 얻은 스킬이다. 당장 서비스에 적용할 수 있을 뿐만 아니라 일상에서 Chat GPT 같은 서비스를 이용할 때에도 도움이 될 것이다. 추가로 세부적인 제어를 위한 스킬들이 있지만, 이러한 부분은 기회가 되면 차차 다뤄보고자한다...

AI 2025.01.16

[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (2)적용

앞서 살펴본 Resilience4j 라이브러리를 적용해 보고자한다. Circuit Breaker 패턴과 Resilience4j에 대해서는 이전 글을 참고하면 된다. 전체 코드는 GitHub에서 볼 수 있다. 목차Resilience4j 1.1 환경 구성1.2 프로퍼티 설정1.3 커스터마이징Circuit Breaker 기본 구현 2.1 @CircuitBreaker 적용 2.2 @TimeLimiter 적용2.3 상태 확인 및 관리 2.4 Fallback 전략 실전 예제3.1 시나리오3.2 Resilience4j 적용 코드3.3 적용 결과 3.4 고려 사항  1. Resilience4j 환경 구성1.1 의존성 추가gradleimplementation 'org.springframework.cloud:spring-..

Spring Boot 2025.01.15

[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (1)개념

목차 Circuit Breaker란? Circuit Breaker 패턴 동작 방식 2.1 Circuit Breaker 상태 종 2.2 Circuit Breaker의 장애 판단 기준 2.3 Circuit Breaker 동작 방식 Resilience4j 라이브러리 3.1 Resilience4j 3.2 핵심 모듈 3.3 기본 설정 및 예시  1. Circuit Breaker란? Circuit Breaker란 사전적 의미로 회로 차단기이다. 회로 차단기는 전기 회로에서 과부하가 걸리거나 단락으로 인한 피해를 막기 위해 자동으로 회로를 정지시키는 장치이다. 차단기는 어느 정도 시간이 지난 뒤에는, 원래의 기능이 동작하도록 복귀한다.  Circuit Breaker 패턴은 회로 차단기처럼 MSA에서 장애 전파..

Spring Boot 2024.12.28

[Spring] Redis를 이용한 대기열 관리

콘서트 예약 서비스 기능 중 대기열 관리를 위해 RDB 대신 Redis를 적용해 보며 얻은 장점을 정리해보고자한다.  1. DB 부하 감소Redis를 사용하면 RDB 보다 비용이 저렴하고 속도가 빠르다. 특히, 대기열 진입은 많은 사용자가 동시에 요청할 수 있는 기능으로 Redis를 사용해 DB 부하를 줄일 수 있다.사용자마다 폴링을 통해 토큰의 상태를 확인하고, 토큰의 상태를 전환하는 과정 등에서 발생하는 DB의 부하를 줄일 수 있다. 2. 대기열 순서 관리 용이Redis는 String, List, Sorted Set, Set, Hash 등 다양한 자료구조를 제공한다.Redis를 사용하면 대기 상태(WAITING) 토큰을 갖는 User 정보를 Sorted Set 자료구조로, 활동 상태(ACTIVE) 토..

Spring Boot 2024.12.28

[Spring] Transaction 분리를 통한 성능 개선

목차1. Transaction 분리의 필요성2. Transaction 분리로 발생할 수 있는 문제와 해결방안3. 콘서트 예약 서비스에 적용해보기    3.1 Transaction 분리1. 좌석예약    3.2 Transaction 분리2. 결제 1. Transaction 분리의 필요성Transaction의 범위에 따라 다음과 같이 성능에 영향을 줄 수 있다. 따라서 Transaction을 분리할 필요가 있다. 1. Transaction 범위가 불필요하게 많거나 느린 쿼리가 포함되어 있는 경우트랜잭션 내에서 Lock을 갖고 있다면 다른 사용자는 트랜잭션이 끝날때까지 대기해야한다. 그리고 데드락이 발생할 수도 있다.다수의 느린 쿼리가 포함된 작업은 요청 처리에 영향을 줄 수 있다.긴 생명 주기의 Transa..

Spring Boot 2024.12.27

[Spring] Lock을 이용한 동시성 제어 - 낙관적락/비관적락/분산락 (2)적용

콘서트 예약 서비스에서 발생할 수 있는 동시성 문제를 파악해보고 앞서 살펴본 동시성 제어에 대하여 적용해보았다. Lock을 이용한 동시성 제어 개념은 이전 글을 참고하면 된다. 콘서트 예약 서비스 기능 중 동시성 제어가 필요한 기능으로 다음 항목을 선정하였다.콘서트 좌석 예약포인트 충전포인트 사용 각각에 대해 적합한 방법을 고민한 결과 다음과 같다. 실제 구현 코드는 GitHub에 있다.   1. 콘서트 좌석 예약적절한 방법: 분산락(pub/sub) > 비관적락 > 낙관적락선택한 방법: 분산락(pub/sub) + 낙관적락선택 이유콘서트 예매는 동시 접속자가 많기 때문에 충돌이 많이 발생할 수 있다. 따라서 동시성 이슈 발생 가능성이 매우 높다. 또한 분산 환경에서의 동시성 제어가 필요하다.분산 환경에서 ..

Spring Boot 2024.12.27

[Spring] Lock을 이용한 동시성 제어 - 낙관적락/비관적락/분산락 (1)개념

목차낙관적락 (optimistic lock)비관적락 (pessimistic lock) - s-lock (공유락)- x-lock (배타락)낙관적락과 비관적락 성능/효율성 테스트분산락 (Redis)Redisson 라이브러리 사용시 주의점 분산 환경에서 동시성 제어를 위해 사용하는 Lock의 종류와 각각의 특징을 정리해보고자한다. 1. 낙관적락 (optimistic lock)특징version을 사용하여 충돌을 예방하며, DB Lock 을 설정해 동시성 문제를 제어하는 것이 아니라 읽은 시점과 수정 시점의 데이터 변경 여부를 확인해 제어하는 방식이다.트랜잭션, Lock 설정 없이 데이터 정합성을 보장할 수 있으므로 비관적 락보다 성능적으로 우위에 있다.충돌 빈도가 적을 경우 권장하며, 동시 요청 중 한건만 성공..

Spring Boot 2024.12.26

[Spring] RedisSerializer 알고 쓰기! 종류 별 특징과 주의 사항

목차RedisSerializer 란?RedisSerializer 구현체 종류와 특징2.1 JdkSerializationRedisSerializer2.2 StringRedisSerializer2.3 Jackson2JsonRedisSerializer2.4 GenericJackson2JsonRedisSerializer그럼 우리는 어떻게 사용해야 할까? Spring Boot에서 RedisConfig 파일을 작성한 예시를 검색하다 보면 블로그마다 설정이 다른 것을 볼 수 있다.Serializer 설정을 안하는 케이스, StringRedisSerializer, Jackson2JsonRedisSerializer, GenericJackson2JsonRedisSerializer 를 사용하는 케이스.. 과연, 어떤 차이가..

Spring Boot 2024.12.04

[실전 자바 - 기본편] 다형성2

김영한의 실전 자바 - 기본편 강의를 듣고 정리한 내용입니다.인프런김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런 김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런김영한 | 실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문www.inflearn.com 1. 다형성 활용아주 단순하고 전통적인 동물 소리 문제로 접근해보자.1.1 예시Animalpackage poly.ex2;public class Animal { public void sound() { System.out.println("동물 울음 소리"); }}Dogpackage poly.ex2;public..

Java 2024.09.09

[실전 자바 - 기본편] 다형성1

김영한의 실전 자바 - 기본편 강의를 듣고 정리한 내용입니다.인프런김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런​ 김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런김영한 | 실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문www.inflearn.com 1. 다형성 시작1.1 다형성의 의미다형성(Polymorphism) : 다양한 형태, 여러 형태→ 프로그래밍에서는 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 의미.1.2 다형적 참조(1) 부모는 자식을 담을 수 있음부모 타입은 자식 타입을 담을 수 있으나, 자식 타입은 부모 타입을 담을 수 없다..

Java 2024.09.09

[99클럽 코테 스터디 42일차 TIL] First Day Where You Have Been in All the Rooms

💡문제https://leetcode.com/problems/first-day-where-you-have-been-in-all-the-rooms/description/There are n rooms you need to visit, labeled from 0 to n - 1. Each day is labeled, starting from 0. You will go in and visit one room a day.Initially on day 0, you visit room 0. The order you visit the rooms for the coming days is determined by the following rules and a given 0-indexed array nextVisit of..

[99클럽 코테 스터디 40일차 TIL] Unique Paths

💡문제https://leetcode.com/problems/unique-paths/There is a robot on an m x n grid. The robot is initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m - 1][n - 1]). The robot can only move either down or right at any point in time.Given the two integers m and n, return the number of possible unique paths that the robot can tak..

728x90