[COA ver.1] 사용자를 맞이할 준비

한강섭·2025년 10월 26일
post-thumbnail

우리는 받아쓰기 기능과 CPM(타수) 랭킹을 통해서 재밌게 알고리즘을 학습할 수 있는 1차 MVP를 준비하였고, 서비스를 출시하기 전 고려하고 설계한 과정을 정리해보고자 한다.

아키텍처

마이크로 서비스 아키텍처


1차 MVP는 코드 에디터를 추가해서 받아쓰기 기능을 추가한 버전이다.

Nginx를 통한 정적 파일 제공, 리버스 프록시와 Spring Cloud Gateway를 통한 라우팅과 인증 필터까지만 구현하기로 결정하였다.

그리고 각각의 마이크로 서비스로 분리하여 장애 전파를 막고 확장성 있는 아키텍처를 설계하였다.

기능

랭킹 + 채팅 + 받아쓰기


우리의 최종 기능은 알고리즘과 언어를 모두 선택해서 진행하는 것이지만, 1차 MVP에서는 언어를 메인페이지에서 선택 후 랜덤한 알고리즘으로 게임을 진행할 수 있도록 설정하였다. 이렇게 사용자가 최대한 편하게 즐길 수 있도록 설정하였다.

메인 페이지에서는 랭킹을 확인할 수 있고 (무한 스크롤), 전체 채팅을 통해서 접속한 사용자들끼리 채팅을 진행할 수 있다.

받아쓰기 화면은 이렇게 구성되어있다. Monaco Editor를 사용해서 코드를 에디터에 입력하듯이 사용할 수 있고 정확도 100% + 글자 수가 완벽히 동일할 때 종료되는 시스템으로 구현하였다.

보안


가장 중요한 부분이다. 우리 서비스가 위협에 노출되지 않기 위해서 생각한 것은 단일진입점에 대한 관리였다.

우리 서비스를 이용할 때 반드시 거치는 Nginx 서버와 SCG 서버가 존재한다. 이 두 서버는 우리의 단일진입점이었고 여기서 생각해야 하는 부분이 많았다.

일단 Nginx를 통해 HTTP 요청을 HTTPS 요청으로 TLS 암호화를 통해 중간 관리자 공격에 대비하였다. 송신되는 데이터를 탈취 당해도 암호화 되어있기 때문에 안전하다.

두번째로 Gateway 역할을 맡고 있는 Spring cloud Gateway에서는 스프링 생태계에 적합되어있기 때문에 Auth Service에서 발행해준 토큰을 검증하는 인증/필터 역할을 해주어 마이크로 서비스에 도달하기 전 필터링 해주는 역할을 하였다. 이렇게 기본적인 요청 흐름에서의 보안을 완료하였다.

또한 각각의 EC2의 보안 그룹을 3가지로 나누었다.
1. wizard-1 ( Front Server ) : 모든 요청에 대해서 허용한다.
2. wizard-2 ( SCG Server ) : Front Server의 IP만 허용한다.
3. wizard-3 ( Micro Servers ) : SCG Server의 IP만 허용한다.

이런 식으로 각각의 서버의 주소를 알아냈더라도 Front Server를 거쳐서만 올 수 있기 때문에 외부에서 우리 마이크로 서비스에 직접 접근 하는 것을 불가능하도록 설정하였다.

모니터링

GoAccess 설치로 단일 진입점인 Nginx 의 로그 확인


Docker 컨테이너가 삭제되어도 로그가 보존되고, 디스크 공간 확보를 하기 위해서 추가 볼륨을 연결하고 마운트를 시켜 놓았다.
또한 GoAccess 설치를 통해서 이 로그를 UI로 편하게 확인할 수 있도록 설정해놓았다.

이렇게 설정하여 문제 발생 시 원인 파악이 용이하고, 실제 사용자들이 어떤 행동을 하는 지 분석할 수 있게 되었다.
또한 보안 공격을 감지하고 성능 모니터링도 가능하게 미리 대비할 수 있었다.

자세한 내용
https://velog.io/@hks_0827/Infra-log-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0

결론

준비는 끝났고 이제 어떤 상황이 펼쳐질 지 모른다..
아직 준비한 기능은 많이 없지만 사용자들이 즐겨줬으면 좋겠고, 트래픽을 많이 받고 피드백을 많이 받고 싶다.
준비를 열심히 했기 때문에 크리티컬한 버그만 생기지 않는다면 만족할 것 같다.

https://corazyarcade.site/

profile
기록하고 공유하는 개발자

0개의 댓글