SERIES

hiyen

11 Posts·Last updated on March 04, 2024

서버 병목현상 추적기

September 10, 2024

갈만해 프로젝트를 소개합니다 갈만해 웹사이트 갈만해 Github Pasted image 20240912211252 '갈만해'라는 웹서비스를 운영하고 있습니다. 블로그에 웹 서비스를 개발하며 겪은 문제점과 해결 과정을 공유하려고 합니다. 이번 글은 갈만해 프로젝트의 후반부에 겪었던 서버 병목현상과 그 추적과정, 해결을 다루려합니다. 갈만해 프로젝트는 실시간…


외부 API 호출과 데이터 처리

August 25, 2024

갈만해 프로젝트를 소개합니다 갈만해 웹사이트 갈만해 Github Pasted image 20240912211252 '갈만해'라는 웹서비스를 운영하고 있습니다. 블로그에 웹 서비스를 개발하며 겪은 문제점과 해결 과정을 공유하려고 합니다. 이번 글은 갈만해 프로젝트의 초반부에 겪었던문제들과 그에 대한 제 나름대로의 해법을 담았습니다. 갈만해 프로젝트는 실시간…


바이트코드와 함께 알아 보는 자바 실행과정

June 17, 2024

(Java8 이전 버전에 대한 설명입니다) 이 코드, 어떻게 실행될까? Cat을 만들고 각 객체의 메서드를 실행하는 아주 단순한 코드입니다. 해당 코드가 대체? 어떻게? 실행되는지에 대해 정리해보고 싶었습니다. javac HelloJVM.java로 .class파일을 만든다. 자바 기초책을 보면 항상 javac로 컴파일하는 과정을 거쳐야 하는데요, 왜 j…


'이미 선택된 좌석입니다' 티켓 예매시 중복예매생성 문제

April 11, 2024

프로젝트에 적용한 Pull Request 링크 학습 계기 콘서트 티켓 예매 프로젝트를 진행하는 중 동시에 많은 사용자가 한 자리의 좌석을 예매할 시 여러개의 같은 예약이 생성되는 문제를 발견했습니다. 콘서트 예매 상황을 생각해보면 굉장히 흔한 일인데요, '이미 선택된 좌석입니다'라는 메시지를 한번쯤은 보신 기억이 있을 거라 생각됩니다. 해당 문제를 해결하…


분산시스템에서 데이터를 전달하는 방법

August 05, 2024

단일 DB 그리고 외부 API도 호출하지 않을 경우 데이터의 전달에 대해 크게 걱정할 필요가 없다. DBMS의 트랜잭션 기능을 사용하여 처리하면 되고 실패시 실패했다는 응답을 사용자에게 보내고 롤백하면 된다. 하지만 실제 웹서비스는 여러 개의 다른 DBMS를 사용하거나 다른 서비스와 네트워크로 연결되는 경우가 많다. 만약 결제 서비스에서 결제가 성공된…


스레드테스트와 트랜잭션 전파

May 20, 2024

학습예제 코드 글에서 실습을 진행한 레포지토리입니다. 문제 상황 현재 진행하고 있는 프로젝트에서 예매시 동시에 사용자가 같은 좌석을 선택하는 상황을 테스트하기 위해 멀티스레드를 생성하는 테스트를 작성하게 되었습니다. 이 때 데이터 롤백을 위해 @Transactional을 사용했을 때 테스트 데이터가 삽입되지 않는 문제를 발견하게 되었습니다. 처음에는 …


기술변경에 확장성을 가진 리팩토링

May 07, 2024

프로젝트에 적용한 Pull Request 링크 학습 계기 팀원분이 ci과정에서 계속 빌드가 실패한다고 해당 오류에 대한 이슈를 제기해주셨습니다. 로그를 살펴보았는데요, 테스트에서 Redis가 없어서 일어난 오류임을 인지하고 CI 과정에서 Redis설치하는 flow를 추가해서 문제를 해결했습니다. 간단한 오류였고 간단한 해결이었지만 찝찝했는데요, Redis…


조회 API 성능 개선

April 27, 2024

프로젝트에 적용한 Pull Request 링크 학습계기 프로젝트를 진행하며 api마다 부하테스트로 성능을 측정하고 있었습니다. 이 중 가장 조회가 많을 것이라 예상되는 좌석 조회 api가 너무나 성능이 떨어지는 충격적인 결과를 보게 되었는데요.. (2분동안 100명이 10초 간격으로 조회요청시) Pasted image 20240417170414 오류율 2…


리팩토링을 통해 유연한 도메인을 만들자!

April 16, 2024

프로젝트에 적용한 Pull Request 링크 학습 계기 프로젝트를 진행하며 쿼리문을 짜고 있는데 너무나 많은 join을 사용하고 있다고 느껴졌습니다. 물론 테이블 개수가 많으면 여러개의 join문을 사용하는 것은 빈번하지만 해당 프로젝트는 테이블의 개수가 그렇게 많지 않은데도(6개) 3~4중 조인문을 작성하며 구현이 진행되니 도메인 설계와 비즈니스 로…


Spring Data JPA의 페이징처리와 fetch join시의 문제점

March 14, 2024

문제를 해결한 코드링크 페이징 처리의 필요성 성능: 대량의 데이터를 한 번에 로드하면 메모리 부족이나 느린 쿼리 실행으로 인해 성능이 저하될 수 있다. 페이징 처리를 사용하면 사용자가 필요로 하는 작은 일부 데이터만 로드하여 성능을 향상시킬 수 있다. 사용자 경험: 사용자가 대량의 데이터를 한 번에 볼 필요는 없으며, 보통은 페이지별로, 특히 최근기록 위…