전체 글
-
[시스템 디자인] 안정적인 알림 서비스를 구축하기 위해 고민한 것들개발 이야기 2025. 9. 14. 18:54
[Intro]알림은 서비스에서 발생한 정보를 고객들에게 알려줌으로써 서비스 재참여를 독려할 수 있는 서비스 입니다.신규 알림 서비스를 구축하면서, FCM(Firebase Cloud Messaging)을 알림 호스트로 선택했습니다.안드로이드, IOS, WEB 대상으로 쉽게 알림 서비스를 구축할 수 있기 때문입니다.하지만, FCM은 무료 제공 호스트 서버이기 때문에 언제든 지연, 누락에 대비해야합니다.이런 문제를 고민하고 안정적인 알림 서비스를 구축하기 위해 고민한 내용들에 대해 적어봅니다. [확장성을 위해 고민한 것들]타 서비스에서 알림 서비스로 전송 요청은 DB를 통해 등록하도록 했습니다.초기에는 API 로 설계했지만, 알림 서비스 스펙의 변경에 따라 이용하는 서비스도 수정해야하는 결합이 생긴다고 생각해..
-
[온라인 게임 개발] 클라가 서버를 만나면?개발 이야기 2025. 8. 17. 18:41
[결과물]온라인 멀티 플레이 게임 개발을 학습하고 있습니다.클라이언트와 서버를 연결하고 이동 동기화를 구현했습니다.이해한 내용을 정리하고자 글을 씁니다.(지금은 에니메이션 적용이 잘 안되어 있네요.) [클라 VS 서버, 누가 무엇을 해야할까?]- 싱글 게임의 경우싱글 게임 개발은 모두 클라이언트 측 구현에서 이루어집니다.클라이언트 코드의 메인 Loop 에서 입력, 이동, 스킬, 적 AI 등등 모든 판단이 이루어집니다. - 온라인 게임의 경우온라인 게임은 다수의 플레이어가 함께 즐기는 게임은 두 가지 요소가 필수입니다.- 올바른 행위인지에 대한 판단- 행위의 전파 클라이언트의 행위가 올바른 행위인지 판단 후 올바르면 연결된 클라이언트 들에게 해당 행위을 전파합니다.이를 위해 하나의 서버에서 클라이언트의 ..
-
[Unity] 터치 조이스틱 구현과 캐릭터 이동 동기화Unity 2025. 8. 3. 23:02
[결과물]모바일 게임을 개발하면서 터치 조이스틱과 플레이어블 캐릭터의 이동 동기화를 구현했습니다.클라이언트 측 구현은 기본적인 수학 개념에 대한 이해가 필요했는데, 피타고라스 정리 같은 쉬운 개념이지만수포자이기도 하고, 살면서 수학 개념을 사용할 일이 거의 없었는데, 문제를 해결하기 위해 적용하니 따분했던 이론도 재밌게 느껴집니다.[개발 순서]1. 터치 조이스틱 구현 a. 조이스틱 생성 b. 조이스틱 이동 반경 결정 c. 조이스틱 벡터 추출2. 플레이어블 캐릭터 구현 a. 조이스틱 벡터 동기화 b. 캐릭터 방향 보정 c. 캐릭터 이동 에니메이션 적용[터치 조이스틱 구현]조이스틱은 Unity Editor에서 UI로 생성할 수 있습니다.UI를 생성하면 EventSystem 이..
-
-
-
#1. 특정 상품에 동시 주문 요청 증가 시 DB 커넥션 부족 문제 해결 과정개발 이야기 2024. 11. 13. 23:16
[상황 설명] 선착순 구매 프로젝트에서 주문 API를 완성하고, 서버 환경에서 부하 테스트를 진행하였다.특정 상품에 100개의 주문 요청이 동시에 몰릴것을 가정한 시나리오로 테스트를 진행했는데, [실패가 많았다.] [원인 분석] 주문 API에서 재고 차감 시 해당 상품 row에 묵시적 X-Lock이 걸리며, 이는 트랜잭션이 종료될 때까지 유지된다. 외부 API와 통신하는 결제 요청은 거의 800 ~ 900ms 가까이 걸리기 때문에 하나의 주문 API 실행 시간은 평균 1s를 넘게된다. 특정 상품에 주문이 몰렸을 때 X-Lock으로 인해 순차적으로 실행되는데, 자신보다 앞선 주문 개수 x 1s의 시간을 대기하게 된다. 문제는 자원 대기 시간 제한에 있는데, Hikari Pool의 경우 connection-..
-
[Lock] X-Lock은 순서를 보장할까?(Transaction Scheduling : CATS)DB 2024. 9. 12. 09:37
[문제 시나리오 설명]선착순 구매 프로젝트를 진행하고 있다.특가 상품을 한정된 수량만 판매하기 때문에 갑작스럽게 이벤트 트래픽이 발생하는 상황을 가정한다. 가장 먼저 고민한 내용은 동시성 이슈이다. * 동시성 이슈란? 하나의 공유 자원을 여러 실행 단위가 변경함으로써 자원의 정합성이 맞지 않는 문제프로젝트에서 동시성 이슈가 발생할 수 있는 자원은 상품 재고이다.상품 구매가 일어나면, (상품 재고 확인 -> 재고가 남아 있으면 재고 차감) 의 로직을 수행하는데, 로직의 원자성을 보장하기 위해 X-Lock을 사용했다. * X-Lock에 대해 자세하게 알고 싶으면 링크를 참조해주세요. https://mergeman.tistory.com/10 동시성 이슈는 해결 되었지만, 순서도 보장 되었을까? 5명..
-
[LeetCode 75] 283. Move Zeroes카테고리 없음 2024. 9. 9. 15:49
문제링크 : https://leetcode.com/problems/move-zeroes/description/?envType=study-plan-v2&envId=leetcode-75 [접근법]0이 아닌 원소의 상대적인 순서를 유지하면서 앞쪽 인덱스로 밀어넣는 것이다.문제는 in-place. 즉, 별도의 공간을 할당하지 않고 주어진 배열 내에서만 풀어야 한다. 그리디하게 풀어보기단순하게 생각하면 루프를 돌면서 각 자신의 앞쪽 인덱스를 다시 순회하는 것이다.예를들어 주어진 배열이 아래와 같다면, 자신의 앞쪽 인덱스에서 0이 최초로 나오는 인덱스를 찾아서 현재 인덱스의 값을 넣어주는 것이다.[0,1,0,3,12][0,1,0,3,12] //idx = 0[1,0,0,3,12] //idx = 1[1,0,0,3,12..