![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bbWo2U/btsF2GHimVy/6VmcEC2RnGQGZMIXlzxoM1/img.png)
문제 상황 & 접근DB 정렬 및 페이징 쿼리 기반으로 랭킹을 조회하는데 있어 성능이 좋지 못했다.가장 많이 호출되는 핵심 API 이자 호출 빈도 수가 가장 높은 중요한 기능이다.커서 페이징 방식으로 바꾸는 방법을 우선 고려했지만, 정렬 기준은 랭킹에 사용되는 포인트 값이었고 이 값을 통해 페이징을 수행해야 했다. 포인트 값은 계속해서 변화하기 때문에 적합하지 않을 것이라 판단했다.페이지 마다 랭킹들을 보여주면 되었기에 다음과 같은 경우가 있었다.[오프셋 기반 페이징 시 발생 가능한 상황] 이전 페이지에 있던 회원이 이후 페이지에 보여진다면 에러 상황이 아니다. 포인트가 바뀌어 랭킹이 바뀐 상황일 뿐이다.[커서 기반 페이징 시 발생 가능한 상황] 실제 그룹의 전체 회원의 수와 다른 수의 회원이 랭킹에 보여..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Q2eDm/btsF13pikUB/pjmHMd5sNiBkmpU58keuJk/img.png)
요구사항유저는 지인들과 그룹을 만들 수 있으며, 그룹 내에서 서로 어느 위치에 있는지 휴대폰 화면으로 확인할 수 있어야 한다.특히나, 두 명 이상의 유저가 가까운 거리에 있는 경우 느리게 업데이트되면 빠르게 위치를 파악하지 못해 만나는데 서비스가 크게 도움이 되지 않을 것이기에 3초에 한 번 자신의 위치를 클라이언트에서 공유하여 그룹 전체 인원에게 알린다.문제 상황 - 실시간 공유 기술 선택양방향 실시간 위치 공유 구현을 위한 기술 선택 필요요구 사항[실시간성] 실시간으로 확인할 수 있도록 낮은 지연 시간 요구됨변화 시점마다 그룹원의 위치 파악 필요[양방향 지원] 양방향으로 데이터를 공유각 그룹원이 데이터를 서버에 보내면 나머지 그룹원이 데이터 받아야 함[높은 업데이트 빈도] 각 유저는 3초 주기로 데이..
요구 사항 그룹 랭킹과 그룹 별 회원 랭킹을 보여줘야 한다. 회원 랭킹은 각 회원의 GitHub 기여도(커밋, 이슈, pr, 코드리뷰) 개수를 모두 더한 값을 포인트로 하여 랭킹을 매긴다. 각 기여도는 각 다른 GitHub API를 통해 조회하여 저장한다. 그룹 랭킹은 그룹 내에 속한 회원들의 포인트(GitHub 기여도)를 모두 더한 총합을 토대로 랭킹을 매긴다 문제 상황 동시에 여러 번 호출할 경우 DB 데이터가 중복 저장되는 현상 빈번히 발생 특히, 그룹의 포인트 갱신 시 동시성 이슈 발생 한 번의 요청에 종류가 다른 4가지 멤버의 기여도를 가져와 하나의 같은 테이블을 업데이트, 다른 한 테이블에는 insert DB Lock 적용DB Lock을 통해 데이터..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/TGg7G/btsF4zHdKIl/Ul5Eklx0mnW812js64IPsk/img.png)
Latency 3.52s -> 454ms 로 쿼리를 7.7배 개선한 작업을 공유하고자 합니다. 문제 상황 & 고민서비스의 핵심 API의 Latency가 데이터가 몇십만 건이 쌓이는 경우 성능적 개선이 필요했습니다.해당 API에서 사용하는 DB 조회 쿼리 개선이 필요하다고 판단했습니다.개선 작업약 41만 건의 랜덤한 데이터 삽입 이후 K6를 통해 부하테스트를 통한 평균 Latency를 확인하며 진행했습니다.부하테스트의 경우 같은 조건으로 5번 이상씩 수행하며 평균에 가까운 값을 확인했습니다.1. 초기 상태 [3.52s]어떤 작업도 하지 않은 상태에선 조회 API Latency가 3.52초가 걸렸으며, 이로 인해 개선 작업을 시작했습니다.서비스의 가장 중요한 결과 조회 API 이었기에 더더욱 개선이 필요했..
기아 상태 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태이다. SJF, SRT, 우선순위 스케줄링, SPN, feed back 등의 스케줄링 방법에서 발생 가능하다. 기아 상태 해결 방법 에이징(Aging) 프로세스가 대기 큐에서 기다릴수록 우선순위를 증가시켜주는 방식이다. 이렇게 하면 오랫동안 기다린 프로세스가 결국에는 CPU를 할당받을 수 있다. 우선순위 기반의 스케줄링 알고리즘에서 주로 사용된다. 피드백(Feedback) 프로세스가 CPU를 사용할수록 우선순위를 감소시켜주는 방식입니다. 이렇게 하면 자주 CPU를 사용하는 프로세스가 낮은 우선순위로 밀려나게 되고, 오랫동안 기다린 프로세스가 높은 우선순위로 올라가게 된다. 다단계 큐(Multilevel Queue)나 다..
프로세스 프로그램 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 것 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일 프로세스 프로그램이 실행되서 돌아가고 있는 상태, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 컴퓨터 프로그램 프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 '실행중인 프로그램' 프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 '프로세스'가 되는 것 프로세스 문맥 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보 시분할 시스템 환경에서 명령을 수행하기 위해서 이전에 어디까지 명령을 수행했는지 정확한 수행 시점과 상태를 재현할 수 있는 정보가 필요하고 이 정보가 프로세스 문맥 프로세스 문맥은 하드웨어..
개요 운영체제 컴퓨터의 하드웨어 바로 윗단에 설치되는 소프트웨어이다. 컴퓨터 시스템의 하드웨어 자원을 효율적으로 관리하는 역할을 한다. 주어진 자원으로 최대한의 성능을 내면서 특정 사용자 혹은 프로그램이 지나친 불이익을 받지 않도록 한다. 주요 역할 사용자에게는 편리한 인터페이스와 환경을 제공하는 역할을 한다. 운영체제 자신을 보호하는 역할을 가진다. (보안적인 측면) 운영체제의 분류 시분할 시스템 여러 작업을 수행할 때 컴퓨터의 처리 능력을 일정한 시간 단위로 분할해 사용하는 방식이다. 현대의 범용 컴퓨터는 대부분 시분할 방식을 사용한다. 다중 프로그래밍 방식과 결합하여 모든 작업이 동시에 진행되는 것처럼 대화식 처리가 가능하다. 다중 프로그래밍 시스템(multi-programming system) 하..