전체 글 썸네일형 리스트형 Nginx로 로드 밸런싱과 부하 테스트 1. 서론2. 테스트3. 결론1. 서론프로젝트에서 '한 개의 Nginx 서버'가 '두 개의 스프링 서버'로 요청을 로드 밸런싱 하도록 했습니다.그에 따라 서버를 scale-out 하면 어느 정도의 부하까지 견딜 수 있는지 테스트하고자 했습니다. 2. 테스트취준생 입장에서 서버 요금은 부담스럽기 때문에, AWS와 네이버 클라우드의 프리티어를 최대한 활용했습니다. 필요한 서버Spring WAS 서버 2개Nginx 로드 밸런싱 서버 1개 (네이버 클라우스 micro server)RDS 1개 (AWS db.t3.micro)10만 User, 10만 Contract, 30만 Board 데이터 부하JMeter로 초당 300 스레드를 20회 반복하여, 총 6000번 요청했습니다. 테스트 목록2-1. Spring 서버.. 더보기 Spring 세션과 Redis를 활용한 조회수 증가 중복 방지 1. 서론2. 여러 방법과 비교3. 구현4. 마무리 1. 서론프로젝트를 진행하면서 게시글의 조회수를 카운트하도록 했습니다.여러 서비스들을 살펴봤을 때, 새로고침을 할 때마다 조회수가 증가되는 서비스가 있었고, 새로고침하여도 조회수가 증가 되지 않도록 중복을 방지한 서비스도 있었습니다. 다른 서비스들은 조회수 증가의 중복을 방지하기 위해 어떤 방법을 사용하는지 알아봤는데, 그 중 대표적으로 유튜브는사용자가 의도적으로 동영상을 시작한다사용자는 적어도 30초동안 영상을 시청한다최대 반복수는 300번으로 예상된다최대 반복수를 넘었을 시 봇을 이용하는지 유효성 검사 단계가 수행되면서 더 이상 조회수가 증가하지 않는다조회수 증가하지 않는 상황많은 장치에 대해 하나의 IP 주소를 사용하여 동시에 동일한 영상을 시청할.. 더보기 (2) Mysql 실행 계획 분석 및 쿼리 튜닝 1. 서론2. 쿼리 응답 속도3. 부하 테스트4. 실행 계획 분석5. 쿼리 튜닝6. Spring에서 쿼리 힌트7. 결과8. 결론과 마무리 1. 서론지난 글에서 QueryDsl을 사용하여 DTO 조회로 극한의 성능 최적화를 진행했었습니다. 그때 결과적으로 약 6배 이상의 성능이 개선되었는데,데이터를 가져오는 양과 트랜잭션 범위의 차이에 의한 것이라고 생각했었습니다. 하지만 김영한님의 강의에서 요즘은 네트워크 성능이 좋아졌기 때문에 성능상 크게 차이가 나지 않을 것이라 하였고, 그렇다면 트랜잭션의 범위 차이와 user_roles 쿼리 한번의 추가로 6배나 차이가 생길까? 하는 의문이 계속 들었습니다. 그래서 테스트 했던 것을 다시 회고하는 중에, 엔티티로 모두 조회하는 쿼리에 포함되어 있던 distinct가.. 더보기 (1) Querydsl 성능 최적화와 테스트 목차1. 서론2. dto로 조회하기3. 성능 테스트4. 결론 1. 서론기존에 JPA를 사용하면서 생기는 N+1 문제를 모두 해결했었습니다. 또한 fetch join, batch_size를 사용하여 쿼리 횟수를 최소화하였으며, 중복되는 insert 쿼리를 jdbc template을 사용하여 bulk 쿼리로 대체하는 모든 최적화 과정을 마쳤었습니다. 하지만 DTO로 필요한 데이터만 가져와 최적화하는 것은 하지 않았기 때문에, 이 글에서 기존의 조회 API를 DTO로 조회하면 성능 차이가 얼마나 생길지, 적용 후 테스트 하고자 합니다. 2. DTO로 조회하기DTO로 조회하는 것을 기존에 하지 않았던 이유1:N 관계에 있는 컬렉션은 DTO로 바로 조회하지 못합니다. one 쪽 엔티티의 id(들)을 사용하여 ma.. 더보기 (2) 스프링 Redisson 분산락 진행 중인 프로젝트는 여러 개의 서버가 nginx로 로드밸런싱 되고 있고, DB는 Master-Slave 구조로 이중화되어 있다. 이런 환경에서는 어떤 락을 사용해서 동시성 문제를 해결해야 할까 ? 목차 1. 분산락이란 2. 다른 방식의 락은 동시성 문제를 해결할 수 없나 ? 3. Redisson vs Lettuce 4. AOP를 이용한 분산락 5. 낙관적 락, 비관적 락, 분산 락 테스트 6. 결론 1. 분산락이란 분산락은 여러 서버 또는 DB에서 공유되는 데이터의 동시성 문제를 해결하기 위해 사용하는 기술이다. lock을 획득한 프로세스 or 스레드가 공유되는 데이터 or critical section에 접근할 수 있도록 하여 race condition을 방지한다. 2. 다른 방식의 락은 동시성 문제.. 더보기 (1) 스프링 동시성 문제 1. 서론 나의 프로젝트들 중에는 '조회수'와 '북마크 수'를 카운트하는 기능이 있다. 조회수가 증가하는 로직은 중복을 방지하여 사용자가 게시글을 조회하면 조회수에 + 1 갱신 북마크 수는 DB 테이블을 반정규화하여 Board 테이블의 컬럼에 북마크 수를 두고, 사용자가 게시글을 북마크하거나 해제하면 +1, -1 하도록 구현했다. 얼마전 유튜브를 보다가 실제 인스타그램에서도 좋아요 수를 표시하기 위해 이렇게 테이블을 구성했다고 한다. 나의 기능들을 보면, 조회수나 북마크 수는 비즈니스에 엄청난 영향을 미치는 것은 아니기에 무시할 수도 있다. 하지만 상품의 재고 수량과 계좌의 입출금 같은 경우 동시성 문제가 일어난다면 비즈니스에 치명적인 피해를 입힐 것이다. 2. 동시성 문제가 뭔데 ? 하나의 자원을 2개.. 더보기 프로그래머스 방의 개수 Java https://school.programmers.co.kr/learn/courses/30/lessons/49190 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 설명 원점(0,0)에서 시작해서 아래처럼 숫자가 적힌 방향으로 이동하며 선을 긋습니다. ex) 1일때는 오른쪽 위로 이동 그림을 그릴 때, 사방이 막히면 방하나로 샙니다. 이동하는 방향이 담긴 배열 arrows가 매개변수로 주어질 때, 방의 갯수를 return 하도록 solution 함수를 작성하세요. 제한사항 배열 arrows의 크기는 1 이상 100,000 이하 입니다. arrows.. 더보기 프로그래머스 가장 먼 노드 Java https://school.programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 설명 n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다. 노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 .. 더보기 이전 1 2 3 4 ··· 9 다음