- 시스템 설계 고민 1starryeye가장 간단하게 구현한 시스템 부터 대규모 트래픽을 감당할 수 있을 정도의 시스템 까지 생각하면서.. 시스템 설계 방법을 나열해보겠다.. (아래 내용은 트랜잭션 격리 수준에 따라 내용이 좀 달라질 수 있다.) (틀린 점이 있을 수 있다.. 있으면 댓글 부탁드립니다.) 기술 스택 : Spring, JPA, MySQL, Redis 요구사항 게시물의 좋아요 기능 설계에 대해서 고민해보자.. 좋아요 카운터를 증가시키는 트랜잭션은 2개의 쿼리로 진행했다. 1. 현재 좋아요 수 조회 2. 좋아요 수 = 현재 좋아요 수 + 1 -> JPA 에서 Dirty Check 기능으로 업데이트하는 것과 같다. 쿼리 1개로 하면 안되나..? -> 밑에서 따로 다룬다. 시스템 설계 방법 첫번째 방법 가장 생각하기 쉬운 방법이다. 위..
- 2023-06-08 22:45:24
- JPA Entity Default ConstructorstarryeyeJPA 의 공식 문서 JSR 338, Java Persistence API 를 보면.. 이런말이 나온다. 2.2 version https://download.oracle.com/otn-pub/jcp/persistence-2_2-mrel-spec/JavaPersistence.pdf?AuthParam=1686147162_93e6225ea2a6979ada32934da41475b1 즉, 엔티티 클래스는 Default 생성자를 반드시 가져야한다. (생성자의 접근지정자는 public or protected) 물론 표준 스팩일 뿐이므로 JPA 의 구현체 마다 다를 수 있다. 오늘은 이 부분에 대해 알아보자.. JPA 의 Entity 생성 방식 DB 에서 데이터를 읽고 Entity 를 반환해주려면.. JPA Entit..
- 2023-06-07 23:57:42
- JPA Merge, Dirty Checkstarryeye이번 포스트에서 다룰 주제는 JPA 의 Merge, Dirty Check 에 대해서이다. merge() 에 대해서 데이터 업데이트 용도로 쓰면 위험하므로 권장하지 않는 방법이다. 왜 이런말이 나왔을까..위 코드는 Spring Data Jpa 의 SimpleJpaRepository 의 Save 메서드 정의 부분이다. Jpa 를 잘 모르고 사용하면.. 데이터 업데이트를 위해서 비/준영속 상태의 엔티티로 save 를 호출해버린다면 merge 를 호출한 상황이 발생하기 때문이다. 참고> isNew() 에 대해서.. 알아보자 JPA 식별자 생성 전략이 @GenerateValue 이면, save() 호출 시점에 식별자가 없으므로 새로운 엔티티로 인식해서 persist() 로 로직이 흘러간다.. 하지만.. JPA 식..
- 2023-06-06 22:52:53
- Spring Cache AnnotationstarryeyeSpring Framework 에서 제공하는 Cache 어노테이션에 대해 알아보자.. 들어가기 앞서 Spring Cache 에 대해 간단하게 알아보자 Spring Cache 애플리케이션의 캐싱 동작을 어떤 캐시 라이브러리를 사용하던지.. 일관된 방식으로 적용되도록 관리한다에 목적이 있다. Spring Cache 는 Spring Framework 의 일부로 제공되는 모듈이며, 캐싱 로직을 비즈니스 로직으로부터 분리(관심사 분리)하여 코드를 깔끔하게 유지할 수 있도록 도와주는 추상화 계층이다. 참고> Spring Data Redis 의 RedisTemplate 은 Redis 와 상호작용하기 위한 템플릿 클래스이다. Redis 서버와 통신하며, 데이터의 실제 연산(저장, 검색 등)을 제공해준다. Redis 데..
- 2023-06-04 00:13:00
- Redis Core, I/O, Transaction, LockstarryeyeRedis Core Redis 는 기본적으로 싱글 스레드 모델을 사용하는 데이터베이스이다. 한번에 하나의 명령어만 처리할 수 있음을 뜻한다. 따라서, 하나의 연산에 대해 원자성을 보장할 수 있다. 조금 다르게 말하면, 병렬성(Parallelism) 없이 작업이 진행되고 동시성(Concurrency)으로 처리된다. 참고> 병렬성: 한 번에 여러가지 일을 처리 동시성: 한 번에 한가지 일을 하지만, 여러 가지 일을 돌아가면서 처리 (각각 GPU 와 CPU 를 연상해보자..) 따라서, 단일 연산에 대해 동시성 문제가 없다. 그래서 단일 연산에 대해 복잡한 동기화와 락 설정을 걱정하지 않아도 된다. 그러나, 하나의 Value에 대해 여러 연산(조회 후, 업데이트 등)을 처리함에 있어서 분산 환경일 경우 원자성..
- 2023-06-03 04:01:28
- Spring Data RedisstarryeyeSpring Data Redis 에 대해 알아보자.. Spring Data Redis 의 간단한 이해 Spring Data Redis 는 Redis 데이터베이스와 상호작용할 수 있게 해주는 프레임워크이다. Spring Data Redis 는 Spring Data Jpa 처럼 Spring Data 프로젝트의 일부이다. JPA 를 사용한 데이터 엑세스를 위한 많은 보일러플레이트 코드를 줄일 수 있었는데.. 마찬가지로, Spring Data Redis 도 Redis 를 사용한 데이터 엑세스를 굉장히 간단하게 해준다. 사실 여기까지만 말해도 Spring Data Jpa 를 이미 알고 있다면 벌써 감이 많이 잡힐 것이다.. Redis 의 라이브러리 1. Jedis - Spring Data Redis 에서 지원하는..
- 2023-06-03 02:57:10
- Event-Driven 아키텍처 와 Pub/Sub 모델starryeye개념이 헷갈려 간단하게 정리해보겠다.. 두 개념 모두 분산 환경에서 메시지 교환 방식을 효과적으로 관리하는데 사용되는 패턴이다. Event-Driven Architecture (EDA) 시스템이 특정 이벤트에 반응하여 동작하는 방식이다. 이벤트는 시스템의 상태가 변경되었음을 나타내고, 해당 이벤트는 다른 구성 요소가 구독하거나 반응할 수 있다. 이벤트의 생성, 감지, 소비를 중심으로 하는 아키텍처인 것이다.. 따라서 비동기성, 느슨한 결합 등의 특징이 있다. Pub/Sub Model Event-Driven Architecture 에 속하는 특정 유형이라 볼 수 있다. Publisher 는 이벤트 또는 메시지를 생성하고.. Subscriber 는 해당 메시지를 수신한다. Publisher 와 Subscri..
- 2023-06-03 02:17:05
- Redis Data Type 3starryeyeRedis 가 제공하는 Data Type 종류에 대해 계속 알아보겠다. 5. Sorted Set (ZSets) 하나의 Key 에 Value 로는 정렬된 데이터 집합으로 이루어진 형태이다. -> Key 는 변수이고, Value 는 C++ 의 set 이라 생각하면 편하다. -> 그런데 차이점은, Value 에 각 데이터들은 score 라는 값(숫자)이 존재하고 이를 바탕으로 정렬한다. (각 데이터는 member 로 불린다.) 특징 1. Redis 의 Sets 와 유사하게 유니크한 값의 집합이다. 2. 정렬된 상태를 유지한다. -> 최소/최대 값을 빠르게 조회할 수 있다. 3. 활용 랭킹(리더 보드) 기능에 활용 가능하다. 4. 대표적 명령어 명령어 기능 ZADD [Key] [Score] [Member] [S..
- 2023-06-02 21:47:42
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)