Tech/Web

[Reminder] SSAFY 1학기 결실, 관통 프로젝트 회고(최우수상)

철테코 2023. 5. 30. 15:31

 

들어가며

 

"마음속 하나씩 있는 여행하고 싶은 마음을 계획하면서 키워보아요"
- Trip Seed -

 
SSAFY 입과한지 벌써 5개월이 지난 지금 1학기를 마치며 4주 동안 몰입하여 프로젝트를 진행했습니다.
"여행 계획 및 정보 공유 커뮤니티 플랫폼 Trip Seed"를 개발하며 1학기 간 배웠던 스프링, Vue, DB, 알고리즘 모든 기술을 적용하며 서비스를 개발했습니다.

페어와 둘이서 기획부터 아키텍처 설계, 구현까지 모든 일을 해야해서 시간이 부족한 감도 없지 않아 있었지만 집중력 있게 프로젝트를 진행할 수 있었습니다. 
SSAFY에 입과할 당시 부족한 백엔드 지식과 역량을 채우고자 하여 지원했었습니다.
실제로 지난 1학기간 서블릿, JSP 기반의 MVC 구조의 게시판 구현Spring 기반 Rest API 서버 개발을 통해 클라이언트 서버 구조의 웹 개발을 배우고 실습했습니다.
 
 

프로젝트

저는 프로젝트 시작 당시 목표를 다음과 같이 세웠습니다.

1. Restful API 설계와 서비스 개발

이전 프로젝트에서 아쉬웠던 부분이 Restful 한 API의 설계의 부재로 개발할 때에 그 행위에 대한 경계가 모호했었습니다. 그래서 이번 프로젝트에서는 더 명확한 REST 원리를 기반으로 Restful API를 설계하겠다는 목표를 세우고,
이를 기반으로 클라이언트 - 서버 개발 시 빠른 개발, 분리된 개발을 할 수 있도록 목표를 세웠습니다.

출처-https://velog.io/@kdh10806/REST-API-RESTful-API

 

2. Database 설계, 쿼리 설계

Database는 서비스의 성능을 크게 주도합니다. 그리고 개발 시 수정 및 보완 사항이 있을 경우 Critical 하게 작용합니다. 그래서 설계 시 더욱 명확히, 세분화하고 검증하여 DB의 수정을 최소화하자는 목표를 세웠습니다.

출처-https://velog.io/@roro

 

3. CI/CD 구축

클라우드 AWS에 대한 활용 능력을 키우고자 목표했고, 개발한 서비스를 실제 배포하여 지인들이나 가까운 사람들이 실제로 사용할 수 있는 서비스를 만들고 싶었습니다. 그리고 개발 시 변경 수정 사항에 대해서 즉각적인 반영 및 무중단 배포를 경험하고 그 필요성을 체감하기 위해 CI/CD 구축을 목표로 세웠습니다.

출처-https://velog.io/@pjh1011409/CI-CD

 
 

목표를 위한 과정

이러한 목표를 이루기 위해 다음과 같은 작업을 하였습니다.

1. Notion을 통한 기능 설계 및 Rest API 설계

Trip Seed API 명세서

페어와 함께 API를 설계하고 최대한 REST 원칙에 맞게 설계하기 위해 노력했습니다. 

  • 적절한 메서드 정의 
  • URI 설계 시 자원 식별을 위한 명사형 사용
  • 계층 구조 활용 
  • 복수형, 짧은 길이 유지

 
 

2. Amazon RDS로 협업 시 동일한 Database 환경 사용, Database 설계 및 정규화

Trip Seed Amazon RDS info

Local 환경에서 개발 시 테스트 데이터의 부재 및 테이블 컬럼 수정 및 추가적인 테이블의 사용 등 여러 변경 사항이 있을 때마다 페어와 함께 같은 환경을 유지하기가 어려웠고, 이에 따른 개발에 지연이 발생했습니다. 
저는 이러한 문제를 해결하고자 공통 DB 사용을 위해 Amazon RDS를 사용하여 기존 사용 중이던 MySQL을 구축하여, 페어와 제가 주로 사용하는 IP 주소를 보안 그룹에 설정해 주었습니다.
그 결과 동일한 데이터베이스 환경을 사용 및 테스트할 수 있었고 생산성이 증가했습니다. 
Database 설계 및 구축하면서 수정 사항을 최소한으로 하고 싶었으나 기능을 구현하면서 추가적인 기능의 발생 및 예약어 사용 등의 이슈로 수정 사항이 꽤 발생했습니다. 좀 더 명확한 기획과 기능 명세가 필요함을 느꼈습니다. 
 
 

3. Github Actions와 Docker, Amazon ECR, EC2를 통한 CI/CD 구축

Trip Seed CI/CD Pipeline

프론트엔드는 Vue로 작성된 코드로 Github에 업로드하여 변경 사항이 감지되면, Netlify가 해당 프로젝트를 자동으로 빌드하고 웹 서버에 배포합니다.
백엔드는 Spring Boot로 개발된 프로젝트로 Github에 올리면 GitHub Actions가 해당 프로젝트를 자동으로 빌드하고, 프로젝트 루트에 있는 Dockerfile을 사용하여 도커 이미지를 생성합니다.
다음으로, AWS 계정에 로그인한 후 도커 컨테이너 이미지를 Amazon ECR(Elastic Container Registry)에 등록합니다. 그 후 EC2 인스턴스에 접속하여 ECR에 등록된 이미지를 가져와 실행시킵니다.
이러한 CI/CD 구성은 프론트엔드와 백엔드 각각의 코드 변경을 자동으로 감지하고 빌드하며, 컨테이너 이미지를 생성하여 배포하는 일련의 과정을 통해 지속적인 통합 및 배포를 합니다.
다음은 프로젝트의 Github aciton flow입니다. 

Trip Seed - Github action flow

 
 

앞으로

이전에 Spring Cloud를 통한 MSA에 대한 스터디를 진행했습니다. 이제는 실제 Spring Cloud를 학습하고 Zull, 서비스 디스커버리, Eureka 등을 활용하고자 하는 목표를 세웠습니다.
저희는 다음 목표로 해당 프로젝트를 Micro Service Architecture로 개선하려고 합니다. 그것을 위해 다음과 같은 계획을 세웠습니다.

  1. 현재 JWT 토큰 기반 인증 서비스를 인증 서버로 분리
  2. API Gateway를 활용한 공통 인증 및 단일 접근 지점 생성
  3. 게시판 서비스, 여행 계획 서비스 분리, DB 분리
  4. 도커 기반 쿠버네티스를 통한 오토 스케일링 및 CI/CD 구축

 
 

마치며

"소규모 프로젝트에서 오는 즐거움과 더 큰 배움"

 
1학기를 마무리하며 관통프로젝트"여행 계획 및 정보 공유 커뮤니티 플랫폼 Trip Seed"를 개발했습니다. 
관통 프로젝트를 하며 특정 분야에만 치우친 개발이 아닌 프론트부터 백엔드, 인프라까지 A to Z를 경험할 수 있는 너무 좋은 기회였습니다.
이전 프로젝트에서는 분야를 나누어 개발하다 보니 수정사항이 발생할 때마다 절차가 까다로워 개발 속도가 많이 지연되었습니다. 하지만 이번에는 페어와 단 둘이 진행하다 보니 빠른 의사결정소통이 편안해 즐겁게 개발할 수 있었습니다.
또한 신기술 사용, 도전에도 적극적 일 수 있었습니다. 프로젝트의 규모가 비교적 작고, 인원도 적어서 새로운 기술을 도입하는 데 있어서 큰 부담이 없었습니다. 그래서 더 차근차근 진행할 수 있었던 것 같습니다.
하지만 인원이 적기 때문에 책임감이 더 커졌고  그 책임감으로 더 많이 배우고 성장하려고 노력했습니다.

 

결과

1학기 관통 프로젝트 최우수팀으로 선정되었습니다!!
아이디어가 우수한 팀, 어려운 기술을 많이 사용한 팀 등
모두가 열심히해서 수상은 어려울거라 생각했는데
많은 사람들이 우수한 팀으로 뽑아주어 선정되었습니다.
16반분들 감사합니다~!

 

 

프로젝트 메인화면