서버가 여러 대일 때 문제가 생긴다.서버 1, 서버 2, 서버 3이 동시에 같은 데이터에 접근하면, 각 서버의 메모리는 공유가 안 되기 때문에 여러 서버가 같이 볼 수 있는 공간에 락을 걸어야 한다. 이것이 분산락이다.이 글에서는 실무에서 가장 많이 쓰이는 SETNX와
REST API는 클라이언트가 먼저 요청해야만 서버가 응답할 수 있다.반면 WebSocket은 한 번 연결하면 서버도 클라이언트도 언제든지 먼저 메시지를 보낼 수 있다.속도가 빠르기 때문이 아니다.진짜 이유는 서버가 클라이언트한테 먼저 데이터를 보낼 수 있기 때문이다.
모든 데이터를 DB에만 넣으면 성능 문제가 생기고,모든 데이터를 Redis에만 넣으면 장애 시 데이터가 날아간다.데이터 성격에 맞는 저장소를 선택하는 것이 핵심이다.저장소를 결정할 때 이 4가지를 먼저 물어본다.질문별 판단읽기가 쓰기보다 많은 데이터에 적합한 패턴이다.
Let's Git It 프로젝트를 개발하면서 실시간 멀티플레이어 게임 서버를 설계하다 마주친 고민을 정리했다.Let's Git It은 Git 명령어를 게임으로 학습하는 멀티플레이어 플랫폼이다.Speed Run, Time Attack, 협력 모드 등 실시간 인터랙션이 핵
Let's Git It 프로젝트는 여러 플레이어가 동시에 Git 명령어를 수행하는 멀티플레이어 게임이다.게임이 시작될 때 서버는 각 클라이언트에게 명령어셋(게임 데이터) 을 브로드캐스트한다.핵심 문제1명의 플레이어가 네트워크 이슈로 명령어셋을 늦게 받거나 아예 받지 못
SSAFY 프로젝트에서 협력 게임을 구현하기 위해 WebSocket 명세서를 작성하던 중, 몇 가지 설계 고민이 생겼다.이 글은 그 고민과 결론을 정리한 글이다.협력 게임의 핵심 흐름은 다음과 같다.4명이 모두 접속해야 게임 시작 가능명령어 4개를 3초 공개 → 카드
프로젝트에서 WebSocket 에러 처리 구조를 설계하다가 고민이 생겼다.성공 response에 errorCode 필드를 추가할까, 아니면 type 자체를 분리할까?결론부터 말하면 type 분리가 맞다. 그 이유를 정리해본다.프로젝트에서 사용 중인 WebSocket 메
Let's Git It — WebSocket 기반 실시간 Git 명령어 학습 게임 프로젝트의 백엔드 인증 구현 시리즈입니다.이번 글은 로컬 로그인 구현의 첫 번째 단계, Spring Security + JWT 기반 세팅을 다룹니다.초기 프로젝트에는 Spring Secu
Let's Git It — WebSocket 기반 실시간 Git 명령어 학습 게임 프로젝트의 백엔드 인증 구현 시리즈입니다.이번 글은 로컬 로그인 구현의 두 번째 단계, Auth DTO 설계를 다룹니다.OAuth 관련 API를 제외하고 오늘 다루는 Auth API는 총
Let's Git It — WebSocket 기반 실시간 Git 명령어 학습 게임 프로젝트의 백엔드 인증 구현 시리즈입니다.이번 글은 이메일 인증 코드 발송/검증 API 구현 전 공통 세팅을 다룹니다.이메일 인증 2개 API(발송, 검증) 모두에서 공통으로 필요한 파일
Let's Git It — WebSocket 기반 실시간 Git 명령어 학습 게임 프로젝트의 백엔드 인증 구현 시리즈입니다.이번 글은 로컬 로그인 전체 구현을 마치고, 꼭 알아야 하는 핵심 개념들을 정리합니다.사용자 인증 정보를 JSON 형태로 담아 서명한 토큰이다.
Let's Git It 프로젝트에서 팀이 채택한 Repository 구조 설계 방식을 정리합니다.JPA/QueryDSL에 종속되지 않는 Service를 만들기 위한 4-file DIP 패턴을 다룹니다.처음 MemberRepository를 이렇게 작성했다.AuthServ
Let's Git It 프로젝트 코드 리뷰에서 발견된 인증 실패 응답 형식 불일치 문제와 해결 방법을 정리합니다.PR 리뷰에서 아래 코드에 대한 피드백을 받았다.피드백 내용HttpStatusEntryPoint를 사용하면 인증 실패 시 401 상태 코드만 내려가고 Err
Let's Git It 프로젝트 코드 리뷰에서 발견된 JWT 필터 응답 형식 불일치 문제와 해결 방법을 정리합니다.PR 리뷰에서 아래 코드에 대한 피드백을 받았다.피드백 내용JwtAuthenticationFilter에서 인증 실패 응답을 직접 문자열로 작성하고 있습니다
Let's Git It 프로젝트 코드 리뷰에서 발견된 JWT 서명 검증 예외 누락 문제와 해결 방법을 정리합니다.PR 리뷰에서 아래 코드에 대한 피드백을 받았다.피드백 내용형식은 정상인데 서명이 다른 JWT는 SignatureException 계열 예외로 밖으로 전파될
Let's Git It 프로젝트 코드 리뷰에서 발견된 401/403 응답 형식 불일치 문제와 해결 방법을 정리합니다.PR 리뷰에서 아래 코드에 대한 피드백을 받았다.피드백 내용인증은 되었지만 접근 권한이 없는 경우에는 Spring Security 기본 403 응답이 내
SSAFY 팀 프로젝트 Let's Git It에서 구글 소셜 로그인을 구현하면서 정리한 내용입니다.구현 배경(2. 전체 흐름(3. 기존 아키텍처와의 통합 포인트(4. 단계별 구현(5. 핵심 설계 결정들(6. 테스트 방법(7. 마무리(Let's Git It 프로젝트는 G
로그아웃 후 다시 로그인을 시도했을 때 아래 응답이 반환되며 로그인이 되지 않는 현상이 발생했다.로그인 API(POST /api/v1/auth/login)는 SecurityConfig에서 permitAll()로 열어둔 공개 엔드포인트인데, 왜 401이 반환되는지 의아했
코드 리뷰 중 회원탈퇴 API에서 작은 버그를 발견했다.비밀번호 검증이 실패해도 사용자가 로그아웃되는 문제였다.버그를 분석하면서 Redis 원자성과 Race Condition까지 고민하게 됐고, 그 과정을 정리해봤다.LOCAL 계정 사용자가 비밀번호를 틀리게 입력해 탈
Let's Git It 프로젝트를 진행하면서 고민이 생겼다.room, coop, competitive 세 도메인에서 동일한 DTO를 사용하고 있었는데, 구조가 바뀔 때마다 각 도메인의 DTO를 일일이 수정해야 했다. 대표적인 예가 플레이어 정보 DTO다.이 구조를 세