[Project] 동료들의 집중 시간을 실시간으로 알고 싶다: 푸시 서버 아키텍처(WebSocket & Redis Pub/Sub)
·
DrillDown/Project
개요현재 새로운 서비스 기획 및 설계를 진행하고 있습니다. 해당 서비스에서는 실시간으로 서버측의 푸시를 받아야 하는 데이터가 있습니다. 유저가 서비스에 접근한 상태, 즉 ‘활성화’ 상태라면 다음과 같은 정보를 실시간으로 받습니다.본인이 입장 상태인 스쿼드의 정보스쿼드 멤버스쿼드 멤버들의 집중 누적 시간스쿼드 멤버들의 타이머 상태주간 랭킹 유저(1 ~ 10위) 정보유저 주간 랭킹유저 주간 누적 점수본인 정보(본인 정보는 타인이 아닌 본인 누적 점수 변화에 따른 정보만 최신화)주간 누적 점수주간 랭킹금일 누적 시간본인 바로 위 랭킹과의 점수 차이 조회알림새 알림동료 요청스쿼드 초대스쿼드 삭제 여기서 등장하는 ‘스쿼드’는 서비스 내에서 만들어지는 유저 그룹을 의미합니다. 유저는 소속된 스쿼드에 입장/퇴장할 수..
[Project] PK 고민과 선택: AUTO_INCREMENT vs UUIDv4 vs UUIDv7
·
DrillDown/Project
현재 새로운 서비스 기획 및 설계를 진행하고 있습니다. 해당 서비스에서 다루는 데이터는 엔티티로서 RDBMS(MySQL - InnoDB 사용)에 저장되어야 합니다. 각 레코드는 PK를 가지며, 줄곧 MySQL이 생성해주는 순차 아이디 값을 사용해왔습니다. 하지만 서비스를 직접 운영해본 경험이 없었기 때문에 이러한 PK가 실제 운영 환경에서 발생시킬 수 있는 문제를 충분히 고려하지 못했습니다. 이 포스팅은 AUTO_INCREMENT 기반 PK의 잠재적인 문제를 살펴보고, 해결 방안 비교를 통해 트레이드오프를 고려하여 적합한 PK 전략 결정을 목표로 합니다. 목차는 다음과 같습니다.문제 상황해결 방안과 트레이드 오프최종 결정마치며 문제 상황MySQL의 AUTO_INCREMENT를 통해 레코드를 생성했을 ..
[Project] SpringBoot 테스트 코드 실행 최적화 - 캐싱과 병렬 처리
·
DrillDown/Project
개요프로젝트 Photique API 서버의 테스트 케이스가 점차 늘어나면서 테스트 실행 시간이 눈에 띄게 증가했습니다. 이번 글에서는 이 문제를 어떻게 개선했는지에 대해 공유하려고 합니다. 목차는 다음과 같습니다.문제 상황지연 구간 분석 및 개선최적화 결과마치며 문제 상황현재 API 서버 애플리케이션의 스펙입니다.Java 21SpringBoot 3.4.0Junit 5.11.3Mockito 5.14.2TestContainers 1.20.4755개 테스트 케이스통합테스트 - @SpringBootTest슬라이스 테스트 - @WebMvcTest단위 테스트 - @Mock, @InjectMocks 활용테스트 커버리지(instruction 기준) 84% by JaCoCo 코드의 변경 사항이 생기고 메인 브랜치에 ..
[Network] 타임아웃 - Connection Timeout & Read Timeout
·
Computer Science/Network
개요네트워크 타임아웃, 어디까지 고려해보셨나요? 서버 API를 개발하면서 기능 구현과 비즈니스 로직에는 많은 시간을 투자하지만, 네트워크 통신 과정에서 발생할 수 있는 타임아웃 상황까지 깊이 있게 고민해본 경험은 많지 않았습니다. 타임아웃으로 발생할 수 있는 예외 상황들을 인지하지 못했던 것이죠. 여러 기술 아티클과 사례를 접하면서, 분산 환경에서는 네트워크 지연이나 장애가 언제든 발생할 수 있으며, 이를 적절히 처리하지 않을 경우 서비스 전반에 연쇄적인 영향을 줄 수 있다는 점을 깨닫게 되었습니다. 그래서, 이번에 네트워크 타임아웃의 개념을 정리하고 문제 시나리오를 살펴보면서 머릿속에 남기려고 합니다. 목차는 다음과 같습니다.타임아웃이란?타임아웃의 중요성마치며 L4에서 데이터 통신을 위해 주로 사용되는..
[Project] 알림이 서버를 흔들고 있다? - 비동기 이벤트 기반으로 처리하기
·
DrillDown/Project
개요 GitHub - photique-project/backend: Photique API serverPhotique API server. Contribute to photique-project/backend development by creating an account on GitHub.github.com개인 프로젝트 Photique에는 알림 기능이 존재하며, 다음과 같은 경우에 알림 데이터가 MySQL에 생성됩니다.단일작품 및 전시회 생성단일작품 및 전시회 댓글 추가단일작품 및 전시회 좋아요 추가유저 팔로우 이 글에서는 위와 같은 알림 데이터 생성 처리 구조에서 발생할 수 있는 잠재적인 문제를 살펴보고, 이를 어떻게 인지하고 개선해 나갔는지에 대한 과정을 정리해보려 합니다. 목차는 다음과 같습니다.문..
[About Me]
·
기타
안녕하세요 🙂 정보의 비대칭성을 줄이기 위해,제가 한 고민과 선택을 누구나 이해할 수 있도록쉽고 자세하게 설명하는 연습으로 블로그 글을 작성하고 있습니다. 현재 백엔드 개발 직무로 구직 중입니다. 🔨 SkillsJava, MySQL, Spring📚 Education한양대학교 컴퓨터소프트웨어학부 | 2022-03 ~ 2024-08 (편입, 졸업)경상대학교 반도체공학과 | 2017-03 ~ 2022-02 (자퇴)📬 ContactEmail: jms3847@gmail.com💻 Github BenchPress200 - OverviewBenchPress200 has 30 repositories available. Follow their code on GitHub.github.com
[Project] MySQL → Elasticsearch 동기화 대작전
·
DrillDown/Project
개요 GitHub - photique-project/backend: Photique API serverPhotique API server. Contribute to photique-project/backend development by creating an account on GitHub.github.com개인 프로젝트 Photique에서 정합성과 트랜잭션이 중요한 원천 데이터는 MySQL에 저장하고, 고성능 & 유연한 전문 검색이 필요한 조회는 Elasticsearch에서 처리하도록 구성했습니다. 검색 대상이 될 수 있는 단일작품과 전시회 데이터는 댓글, 작가, 태그 데이터 등 여러 연관 관계를 품고 있으며, 이러한 데이터는 정합성, 무결성이 중요한 영역이기 때문에 MySQL을 원천 저장소로 선택했습니..
[Project] 조회수 처리 전략
·
DrillDown/Project
개요 GitHub - photique-project/backend: Photique API serverPhotique API server. Contribute to photique-project/backend development by creating an account on GitHub.github.com진행 중인 개인 프로젝트 Photique에서는 유저가 단일작품, 전시회를 게시할 수 있습니다. 각 게시물은 조회수를 가지고 있는데, 해당 조회수를 어떻게 처리할지에 대한 전략에 대해서 나열해보고 장단점을 파악한 후 프로젝트에 적용해보려고 합니다. 목차는 다음과 같습니다.문제 상황과 해결 방법해결 방법 이론적 비교해결 방법 수치 비교조회수 처리 전략 의사결정마치며 문제 상황과 해결 방법서비스에서 단..
[회고] 2025년 회고
·
회고
🌪️ 제가 2025년에는…벌써 연말이 되었네요. 한 해가 끝날 때쯤 늘 회고를 하는데요. 이번엔 블로그에 남겨보려고 합니다. 회고는 시간 순서대로 그때에 저는 뭘 하고 있었는지, 목표는 무엇이었는지, 어떤 사건들이 있었는지 등을 다뤄보려고 합니다. 💪🏻 구직 !2025년이 시작되면서 올해의 최종 목표는 구직이었습니다. 학부 졸업은 2024년 8월에 했기 때문에 백수 상태가 이어지고 있었습니다. 작년 12월에 시작한 photique라는 개인 프로젝트가 있었는데, 올해 3월쯤 마무리 짓고 포트폴리오에 넣는 것이 우선으로 할 일이었습니다. 그 외에도 코딩 테스트, CS 복습, 주간 스터디 진행를 병행했구요. 프로젝트를 진행하는 와중에 관심있는 기업의 채용이 열리면 지원하여 코테도 응시하고 서류도 넣어보..