
GitHub: https://github.com/ohksj77/api-gateway GitHub - ohksj77/api-gateway: 직접 라우팅을 구현하며 api-gateway를 만들어보자직접 라우팅을 구현하며 api-gateway를 만들어보자. Contribute to ohksj77/api-gateway development by creating an account on GitHub.github.com전체 코드는 위 Repository에서 확인할 수 있습니다. 이 포스트에서 전체 구현을 다루지는 않습니다. 들어가며마이크로서비스 아키텍처에서 API Gateway는 모든 클라이언트 요청의 진입점 역할을 하며, 라우팅, 로드 밸런싱, 인증, 모니터링 등 다양한 기능을 제공합니다. 이번 포스트에서는 Sp..

GitHub: https://github.com/ohksj77/kgit GitHub - ohksj77/kgit: Kotlin으로 만든 git 프로젝트Kotlin으로 만든 git 프로젝트. Contribute to ohksj77/kgit development by creating an account on GitHub.github.com전체 코드는 위 Repository에서 확인할 수 있습니다. 이 포스트에서 전체 구현을 다루지는 않습니다. 들어가며KGit은 Kotlin으로 구현된 Git 클론 프로젝트입니다. 실제 Git과 유사한 CLI 명령어를 제공하며, Git의 핵심 개념인 객체 모델과 참조 시스템을 구현했습니다. Git 내부 동작을 알아보고자 진행했습니다. 동작 예시 프로젝트 구조kgit/├── src..

GitHub: https://github.com/ohksj77/kmysql GitHub - ohksj77/kmysql: Kotlin으로 만든 MySQL 프로젝트Kotlin으로 만든 MySQL 프로젝트. Contribute to ohksj77/kmysql development by creating an account on GitHub.github.com 👋🏻 들어가며이전에 응시한 면접에서 이러한 질문을 받은 적이 있습니다.“직접 DB를 구현한다면 어떻게 Repeatable Read를 구현하고 싶으신가요?” 당시 질문을 받은 후 추상적인 생각들만 겉돌며 당황한 기억이 있습니다.이러한 계기로 언젠가는 간단하게라도 DBMS를 구현해보고 싶은 욕구가 생겼고, 이를 실제로 구현해봤습니다. 기술 스택: Kotl..

2025.01 ~ 2025.02 두 달간의 인턴십 전반의 느낌과 배운 점에 대한 회고를 작성하고자 한다. 정규직 전환이 되었는가체험형 인턴이라고 해도 궁금해할 만한 전환을 먼저 언급하자면 전환은 되지 않았다. 하지만, 이유가 내게 있지는 않았다. 처음부터 전환을 전제로 하지 않기도 했다. 인턴 마무리 시점에 받은 평가는 과분할 정도로 정말 좋게 받았다. 특히 기술적인 항목들은 받을 수 있는 가장 높은 점수를 받는 등 전반적으로 좋은 점수를 받았던지라 아쉬웠다. 개발 작업 도중에 마음에 들어 하셨다는 점을 직접적으로 알 수 있기도 했다. 체험형 인턴이었던 점에도 불구하고 팀에서 전환을 위해 알아봐 주셨지만 팀 사정상 아쉽게 되었다. 적응과 전반적인 부분에 도움을 주신 멘토님과 버디님께서 이런 점을 전달하며..

로드밸런서가 아닌 API 서버에서 로드밸런싱을 수행할 수 밖에 없었던 작업 내용을 공유합니다. 요구사항아이템(선수팩, 랜덤박스 등)의 실제 개봉 확률을 의도한 확률과 비교하여 검증하고자 한다.어드민에서 100만 건의 아이템을 한 번에 개봉하여 로그로 결과를 확인하고자 한다. * 아이템 개봉이란 아이템을 사용해 정해진 확률을 기반으로 랜덤한 결과(선수, 재화 등)를 계정에 획득하는 것을 의미합니다. 개발 범위 설정실제 확률을 검증하기 위해 어드민에서 실 서비스에서 사용되는 개봉 메서드를 호출한다.따로 로직을 만들어 기능을 제공하면 실제 로직을 타지 않아 확률을 검증한다는 기능의 의미와 괴리가 있습니다.서버 구조 파악 개발 과정 1: 테스트, chunk size, 그리고 두가지 문제점...테스트 1. 메서드..

🖌️ 서론안녕하세요, Showpot입니다! 🎶내한 공연을 좋아하시는 분들이 많을 텐데요. 저희는 내한 공연 정보를 받아보고, 티켓팅 알림까지 설정할 수 있는 데 도움이 되는 서비스를 소개해 드리려고 합니다. Showpot이 어떻게 탄생했는지, 어떤 이슈를 겪었고 어떻게 해결해 나가고 있는지 담아봤으니 재미있게 읽어주세요! 😀🔎 Showpot 제작 배경Showpot은 YAPP IT 동아리에서 시작되었습니다.팀원 중 한 분이 내한 공연을 즐겨 보며, 내한 공연 정보를 편리하게 받아볼 수 있는 앱이 있으면 좋겠다는 아이디어를 제안했습니다.기존에는 인스타그램, 내한 공연 오픈 채팅방, 내한 공연 정보 웹 사이트(페스티벌 라이프, 인터파크 티켓, 예스 24 티켓) 등을 통해 정보를 얻어야 했습니다.하지만 ..

요구사항과 문제 정의공연에 대한 조회 시 조회한 공연에 대한 조회수를 늘려주는 기능이 존재한다. 조회수를 단순히 1 늘려주는 작업이며 DB에 접근하며 수정이 진행된다.여러 트랜잭션에서 조회수 갱신 시도 시 조회수가 예상보다 적은 수치로 기록되는 동시성 문제가 발생한다. 해당 조회수는 다른 API의 조회 기능에서 사용되며, 실시간으로 반영되어야 하기에 아키텍처의 Redis INCR 연산으로 미리 계산해두어 주기적으로 DB 반영하는 방법은 고려할 수 없었다. 공연을 조회하는 API에서 조회수 갱신이 같이 수행되고 있다.현재, 조회수를 갱신하는 API에는 크게 두가지 문제점이 존재하며, 순차적으로 살펴보기로 한다. 문제1: 조회수 동시성 문제여러 트랜잭션이 동시에 조회수 증가 업데이트 요청 시 조회수가 정확하..

서버 배포와 함께 모니터링을 세팅하면서 다음과 같은 의문이 들었다.Spring Actuator가 기본으로 제공하는 메트릭으로는 파악하기 어려운 부분을 모니터링할 수 없을까? 특히나, 외부와 상호작용하거나 통신하는 부분을 모니터링하고 싶었다. 이러한 부분들에 대한 커스텀 메트릭을 만들기로 결정하였다. 다음과 같은 부분을 타겟으로 success, failure 횟수와 소요 시간을 메트릭화 하고자 한다.OpenAPIInternal API (core alarm)Redis Pub/Sub 모니터링을 위한 메트릭 추가를 횡단 관심사로 보았고, 각 메서드마다 이름을 주어 간편히 사용할 수 있도록 어노테이션과 AOP 기반으로 적용해보았다. 어노테이션, AOP 코드 예시@Target({ElementType.METHOD..