본문 바로가기

서버29

Redis에서 사용하는 분산락 알고리즘인 RedLock에 대해 알아보자 개요 redis에서는 분산락을 제공하기 위해 redLock 알고리즘을 사용한다. 이에 대해 공부해보고 내용을 정리해본다. 참고: https://redis.io/docs/manual/patterns/distributed-locks/ Distributed Locks with Redis A distributed lock pattern with Redis redis.io 분산락을 적용하는 방법 레디스가 단일 인스턴스일 때의 방법은 간단하다. 레디스의 SetNX 를 사용하면 된다. // 락이 존재하지 않는다면 value를 set하고 3초 뒤에 ttl 한다. SET key_name random_value NX PX 3000 spring data redis를 활용한 스프링 코드로 보면 다음과 같을 것이다. 과정을 간.. 2023. 9. 16.
nGrinder 성능 테스트 측정 삽질 일기 (Docker를 통한 설치 + war 파일을 통한 설치 포함) 개요 서비스의 성능을 측정하기 위해서는 대게 Throughput과 Latency 성능지표가 필요하다. 보통 Throughput은 얼마나 많은 요청을 처리할 수 있는지에 대한 처리량을 의미하고, Latency는 요청을 처리하는 속도를 의미한다. 처음 nGrinder를 썼을 때 왜 안되지? 이것들은 뭐지? (가령, TPS는 뭔지, 스크립트는 어떻게 만드는지, Agent는 뭔지) 하며 많이 당황했었고 이 글을 보는 개발자 분들이 단순 구현보다는 성능과 모니터링에 관심을 가졌으면 해서 nGrinder를 활용한 성능 테스트 측정 방법을 정리해보고자 한다. nGrinder 알아보기 nGrinder는 네이버에서 The Grinder라는 성능 테스트 도구를 기반으로 제작한 오픈소스 성능 테스트 솔루션이다. (오픈소스 .. 2023. 9. 2.
[JPA] 단방향, 양방향 연관관계 매핑과 주의점 *본 게시글은 김영한님의 자바 ORM JPA 표준 책을 보고 이해한 내용을 바탕으로 정리한 글입니다. 엔티티들은 대부분 다른 엔티티와 연관관계를 가지고 있다. sql문을 사용해서 테이블에 접근할 때는 외래 키를 사용하여 join을 하기 때문에 어떤 방향으로든 테이블을 탐색할 수 있다. 그러나 객체는 참조를 사용해서 관계를 맺는다. 즉, 서로 setter 혹은 생성자를 통해 서로의 참조를 넘겨주어야 한다. ORM에서 가장 중요하고 또 어려운 객체의 연관관계 매핑에 대하여 알아보자. (해당 포스팅에선 우선 이해를 위해 다대일 관계를 기반으로 설명하겠습니다.) 단반향 연관관계 JPA에서 연관관계를 매핑할 때는 따로 Id를 사용하지 않는다. Id를 사용하려면 아래와 같이 외래 키 식별자를 직접 다루어야 하고 이.. 2022. 10. 31.
[JPA] 기본 키 매핑 전략 정리 *본 게시글은 김영한님의 자바 ORM JPA 표준 책을 보고 이해한 내용을 바탕으로 정리한 글입니다. JPA에서 엔티티의 기본 키가 데이터베이스의 기본 키에 매핑되는 여러 전략을 알아보자. 기본 키 자동 생성 전략이 다양한데, 이 이유는 데이터베이스 벤더마다 지원하는 방식이 모두 다르기 때문이다. 예를 들어 오라클 데이터베이스는 시퀀스를 제공하지만 MYUSQL은 시퀀스를 제공하지 않는다. 즉, SEQUENCE나 IDENTITY는 데이터베이스에 의존하는 전략이다. 데이터베이스에 의존하지 않으려면 TABLE 전략을 사용하여야 한다. 각 전략의 자세한 내용은 아래를 참고하자. 1. 직접 할당 @Id private Long id; 별다른 어노테이션 없이 @Id 어노테이션만 붙이면 직접 할당 전략을 사용한다. e.. 2022. 10. 30.