대표 글

500만 건 데이터의 페이징 API 성능 최적화: TPS 4.3에서 219로 개선하기

문제 사항 1. 책 조회 페이징 API (TPS 4.3)책 조회에 대한 페이징 API를 구현한 뒤, Ngrinder를 통해 TPS를 확인해보니 4.3 으로 매우 낮은 상태였습니다. 책 ID(클러스터 인덱스)로 조회했을 때 최대 TPS는 약 230에 비해 현저히 낮은 상태였습니다. 이 문제점을 개선하기 위해 다음과 같은 과정을 진행했습니다. 테스트 환경NCLOUD 애플리케이션 서버 (2CPU / 2GB)NCLOUD ngrinder 에이전트 및 컨트롤러 서버 (2CPU / 2GB)MySQL 마스터 / 슬레이브 이중화로 구성 (Book 테이블에는 500만건의 더미데이터 생성) 개선 전 상태 API를 호출하면 쿼리문이 2번 나갑니다. 처음은 OFFSET 방식으로 쿼리가 나가고, 그다음은 총 개수를 얻기위해 카운..

북챌린지 2024.09.22 2

이슈 번호 생성의 동시성 문제와 커넥션 풀 최적화 여정

사전 지식 이슈란이슈란 팀이 프로젝트를 진행하면서 관리해야 할 모든 종류의 작업, 버그, 개선사항, 요청 등을 포괄합니다.1. 이슈 유형- 스토리(Story): 사용자 요구사항이나 기능 개발을 의미합니다.- 버그(Bug): 시스템 오류나 문제를 추적합니다.- 태스크(Task): 구체적인 작업 단위를 나타냅니다.- 에픽(Epic): 여러 스토리와 태스크를 포함하는 큰 단위의 작업입니다.2. 설명 및 요약(Description & Summary)- 작업의 목적, 세부 내용, 예상 결과 등을 기술합니다.  이슈번호(PROJECT-1 같은 형식)를 사용하는 이유- 커뮤니케이션 효율성짧고 명확한 참조: "PROJECT-123"처럼 간단히 이슈를 지칭할 수 있음구두 커뮤니케이션: 회의나 대화에서 쉽게 언급 가능"P..

AgileHub 2024.11.09 2

클라우드 환경에 내 로컬 DB 연결하기

문제 사항애플리케이션 서버를 배포한 후, 성능 테스트를 수행하려면 반드시 데이터베이스(DB)가 필요합니다.  하지만 다음과 같은 어려움이 있습니다: RDS를 이용한 성능 테스트: 쿼리 당 비용이 발생하여 예산이 제한적인 상황에서는 적합하지 않습니다.개발 서버용 EC2에 MySQL 설치: EC2 프리 티어의 1CPU 1GiB 사양으로는 MySQL을 원활하게 운영하기 어렵습니다.로컬 환경에서의 성능 테스트: 로컬 PC에서 Tomcat과 MySQL을 실행하여 테스트할 수 있지만, localhost 내에서 수행되므로 실제 네트워크 환경을 반영하지 못해 의미 있는 성능 테스트가 어렵습니다.해결방안로컬에 MySQL 도커 컨테이너를 설치하고 외부 접속이 가능하도록 설정하고 DDNS 도메인을 만들면, EC2에서 안정적..

북챌린지 2024.08.26 0

이슈 전체 조회 성능 개선하기

준비 사항프로젝트 1만개 생성멤버 1만개 생성프로젝트와 멤버 1대1 매칭예를들어 1번 프로젝트는 1번 멤버, 2번 프로젝트는 2번 멤버, n번 프로젝트는 n번 멤버가 속합니다.성능 비교를 위한 것은 프로젝트와 멤버가 아닌 이슈이기 때문에 최대한 간단하게 매칭 시켰습니다.EPIC 이슈는 100개 생성STORY 이슈는 에픽당 200개씩 총 2만개의 스토리 이슈 생성TASK 이슈는 스토리당 200개씩 총 4만개의 테스크 이슈 생성모든 이슈는 1번 프로젝트에 속하도록 합니다. 문제 사항1. 로직 리팩토링 더미데이터를 넣고 이슈 전체 조회 API를 요청 했지만 쿼리가 돌다가 응답이 오지 않고 멈췄습니다.(성능측정을 해야지하고 몇 초나 걸릴까를 생각했는데 그냥 아예 팅겨버린..)이유가 당연했습니다. 로직이 다음과 ..

AgileHub 2024.07.06 0

인증/인가 구현 및 리뷰과정에서 발생한 트러블 슈팅

팀원이 먼저 인증 API를 구현하고난뒤 함께 리뷰하면서 생겼던 트러블 슈팅을 적어보려 한다.- Spring Security 6.1- SpringBoot 3.2.3- Redis 5.0.7- java-jwt 4.4.0- oauth2-client 1. base 64 디코딩 에러 발생GitHub CLI gh로 PR을 로컬에 받고 테스트 도중 이상한 것을 발견했다. postman을 통해 api를 요청할 때 Authorization 헤더에 bearer: { accessToken } 을 넣고 API를 요청을 했다. e.g) /api/projects응답 결과는 다음과 같이 Token 유효성을 검사 도중 유효하지 않은 JSON format이라는 에러 메세지를 받았다.JwtUtil.verifyToken error: The..

AgileHub 2024.04.29 3

CI/CD 파이프라인 구축 (Github Actions self-hosted runners)

신규 Repo 생성 > Actions 탭 > set up a workflow yourself 클릭합니다. CI 테스트 워크 플로우 작성 backend_ci.yml name: 애자일허브 백엔드 CI 테스트 자동화 on: pull_request: branches: - main - develop permissions: write-all jobs: build: runs-on: ubuntu-latest steps: - name: 레포지토리를 가져옵니다 uses: actions/checkout@v3 - name: JDK 17를 설치합니다 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: 그래들 캐시 uses: ac..

AgileHub 2024.02.20 0