동대문 Friends 소개

목차


<aside>

  1. 프로젝트 개요
  2. 사용 기술 스택
  3. 기술 및 아키텍처
  4. 공통 설계 구조
  5. 서비스 별 기능 및 흐름
  6. 트러블 슈팅
  7. 개선점 및 향후 계획 </aside>

1. 프로젝트 개요


소개

친구들과 함께 여러가지 컨셉의 글을 쓰고 공유 할 수 있는 현재 운영 중인 웹사이트를 구축 했습니다. 실제 운영하며 마주한 이슈들과 사용자들의 피드백을 받아 현재도 개선하고 확장해 나가고 있습니다.

개발 기간

2025-04 ~ 운영 및 유지 보수 및 개선 중

프로젝트 목적 및 배경

“기획부터 운영 설계까지 실제 서비스 환경을 목표로”

개발 뿐만이 아니라 배포, 모니터링, 장애 대응까지 서비스 라이프 사이클 전반을 경험하고자 개발하게 되었습니다.

https://github.com/hyunbindev/dongdaemunfriends-portfolio

2. 사용 기술 스택


Back-End

SpringBoot , JPA, MongoDB, My-SQL, Redis, MinIO, OAuth2, Jwt

인프라 및 기타

Docker, Docker Compose, Nginx, Certbot, Git/GitHub

Front-End

React, TypeSrcript, Axios, Redux Toolkit, React Router Dom, React Activation, React Intersection Observer

3. 기술 및 아키텍처


전체 시스템 아키텍처

100000010000077F0000045CFFA40530.png

https://github.com/hyunbindev/dongdaemunfriends-portfolio/blob/master/docker-compose.yml

주요 기술 도입 이유

<aside>

Docker

개발은 주로 Windows 환경에서 진행되었으나, 실제 서비스 배포는 Linux 환경에서 이루어졌습니다. Docker 컨테이너를 이용하여 각기 다른 환경에서의 불일치를 해소하고 격리시켜 운영체제와 환경의 차이로 인한 개발환경과 운영환경의 괴리를 최소화 하고자하였습니다.

초기 각 컨테이너를 따로 올리는 형태였으나 DockerCompose를 활용하여 여러 컨테이너를 효율적으로 관리하고 환경 간 일관성을 유지하여 빠른 배포와 확장을 가능하게 하였습니다.

</aside>

<aside>

Git & GitHub

개발 PC와 개발 서버 간의 소스 코드 동기화를 안정적으로 관리하고, 외부 환경에서도 제약 없이 개발을 이어 나갈 수 있는 환경을 구축하기 위해 도입하였습니다.

또한, 버전 관리와 안정적인 배포를 위해 Master/Dev/Feature Branch 전략을 적용 하였습니다.

</aside>

<aside>

MongoDB

MongoDB는 초기 개발 단계에서 추상화된 계획을 구체화하는 과정에서, 유연하게 변화하는 데이터 구조에 효과적으로 대응하기 위해 도입되었습니다. 또한, 향후 서비스 확장에 따른 분산 데이터 처리의 용이성도 고려하였습니다.

</aside>

<aside>

MY-SQL

회원 정보 같은 개발 도중 데이터 구조가 변화하지 않을 것이라고 예상되고, 연관관계 등 데이터 정합성이 중요한 데이터를 위해 도입하였습니다.

</aside>

<aside>

MinIO

MinIO는 추후 클라우드 환경으로의 확장 혹은 온프레미스 환경에서 Nas, Das를 이용한 분산데이터 처리확장을 고려하여, 확장성과 유연성을 갖춘 오브젝트 스토리지로서 도입하였습니다.

</aside>

<aside>

DNS Server

도메인 네임 관리를 위해 별도의 DNS 서버를 연동하였으며, 서비스 접속의 안정성과 편리성을 높였습니다.

</aside>

<aside>

Nginx

Nginx의 로드밸런서를 활용하여 이중화된 Spring WAS에 트래픽을 분산시켰으며, 빌드된 React 와 정적 자원 서빙 , SSL 통신 종료를 담당하여 서버 안정성과 보안성을 동시에 향상시켰습니다.

또한, 리버시프록시를 통해 다양한 서비스로 트래픽을 분기하는 역할도 수행 하고 있습니다.

</aside>

<aside>

Redis

이중화된 WAS 환경에서 JWT 리프레시 토큰 관리와 조회수 등 조회 및 저장이 빈번한 데이터 캐싱을 위해 Redis를 도입하였습니다.

</aside>

4. 공통 설계 구조