본문 바로가기
Archive/우당탕탕 개발 일지

[개발일지] 프로젝트 X 중간평가 및 후기

by sebinChu 2024. 5. 1.

개요

4학년 과목으로 수강 중인 프로젝트 X 중간평가 후기다.
플젝X는 학생들이 모여 원하는 프로젝트를 만드는 것이고, 이에 대해 학교의 빵빵한 지원을 받을 수 있다. 
 
우리학교에 koala라는 알고리즘 학회가 있는데, 운영진들은 매번 카톡/노션을 활용해서 스터디원들을 관리한다.
이를 웹사이트로 만들어보자는 운영진이 있었고, 운좋게 참여하게 되었다~!
 
 
 

크게 내가 지금까지 한 건 다음과 같다.

  • ERD 개념적 스키마 설계 참여
  • 보안성, 가용성을 고려한 AWS 세팅
  • Jenkins + Docker 조합으로 CI/CD POC 진행
  • EB + Github actions CI/CD
  • 개발 서버 운영 - shell script 정의
  • 도메인 구매 및 세팅
  • 작업 문서화
  • 팀프로젝트에 대한 운영

1. ERD 개념적 스키마 설계 참여

처음 프로젝트 X에 투입될 때, 인프라 세팅 및 관리 역할을 맡았지만 서비스 이해를 위해 와이어프레임, ERD 설계에 참여하였다.
매주 토의를 통해 와이어프레임 작업을 확인 및 피드백하고, 구현할 서비스에 대한 이해도를 높였다. 이를 바탕으로ERD 설계에도 참여하였다.
 


 

2. AWS 사용자 그룹 / IAM 관리

프로젝트 X의 주요 목표는 "실무와 같은 인프라를 구축해 보는 것"이었다. 인턴으로 DevOps 작업을 맡았고, 꽤 흥미를 많이 느끼며 회사에 기여도 하였다. 인턴십을 수행한 회사에서는 GCP 호스팅 서비스를 사용했기 때문에, AWS 서비스도 실무처럼 사용해보고 싶은 학습 욕구가 있었다. 이를 통해서 전반적인 클라우드 컴퓨팅에 대한 지식을 함양하고, 프로그래머로서 성장하고자 하였다.

 

따라서 최대한 실무에서 배운 그대로를 구현하려고 하였다. 또한, 이 프로젝트는 학습 도구로 만들어져서 실제로 사용하고자 하는 사람이 분명히 있을 거라는 기대가 있었다. 따라서 더욱이 실무자 관점으로 프로젝트에 투입되기 위해 노력하였다.

 

 

첫 번째 단계로, Udemy(www.udemy.com) 강의를 수강하며 AWS의 IAM 관리를 세팅하였다. IAM은 icrosoft, AWS, Red Hat 등 주요 SW 회사에서도 강조하는 중요한 보안사항이다.

 

Algoitzy 팀에서 AWS 서비스를 주로 이용하는 admin 그룹과 frontend 그룹을 각각 설정하였다. frontend 그룹은 프론트 프로젝트 배포에 필요한 권한만 할당함으로써 보안을 강화하였다.

 
 
 


 

3. Security Group, Subnet 분리

“실무처럼 구축하기”에서 또 중요한 것은 보안 강화를 위한 SG 설정과 서브넷 분리다.
따라서 다음과 같은 아키텍처를 설계하였다.

이미지 출처:  https://joosjuliet.github.io/private-public-subnet/

 
사용자는 직접적으로 private Subnet에 존재하는 EC2와 RDS에 접근할 수 없다.
 
Security Group 또한 필요한 요청 포트만 허용해줌으로써 보안을 강화하였다.
이외의 모든 포트에 대한 요청은 막혀있어서, 처음에는 이를 필요할 때마다 할당하는 것이 번거로웠지만 보안 강화를 위한 중요한 작업이기에 더 신경써서 했고, 학습이 잘 되었다.
 


 

4. Jenkins + Docker 조합으로 CI/CD POC

 
위 아키텍처 대로 POC를 진행하였다. 결과적으로는 이 POC 내용이 프로젝트에 적용되지 않았다. 이 서비스는 만들어지면 바로 사용자가 생기고, 또한 항공대 소프트웨어학과가 유지되는 이상 계속 사용될 서비스였기에 Jenkins 특성을 고려하여 불발되었다.
 
그럼에도 불구하고 개인적인 학습은 만족스럽게 이루어졌으며, 훗날 KAU 코알라 후배들이 서비스를 업그레이드 하게될 때를 대비하여 테스트했던 내용을 문서로 정리해두었다.
 

*문서 일부 발췌

 
 


 
 

5. 프로덕션 실서버 CI/CD

위와 같은 단계를 거쳐, Github Actions로 CI/CD를 세팅하기로 결정되었다. 그런데 이 작업이 생각보다 오래걸렸다. 이유는 다음과 같다.

  • 멀티 모듈에 대한 이해도 부족
  • Elastic Beanstalk 이해도 부족
  • Github Actions 동작 방식

보통 구글링을 통해 알 수 있는 Github Actions CI/CD는 단순하게 하나의 레포지토리, 하나의 서버에 대한 CI/CD다. 그런데 이번 프로젝트에 적용한 설계는 멀티모듈이라, 널린 학습 자료들이 적용이 되지않았다.
 
 
이를 깨닫는 과정까지 많은 시도가 있었다. 단순히 구글링을 통해 따라해보는 것이 아닌, 직접적인 학습과 지식 습득이 필요하다고 판단하여 개발 일정을 늦추게 되었다.
 
현재는 멀티모듈, EB, GA에 대한 학습을 진행하고 있으며 적어도 9주차 이전에 완성하는 것을 목표로 집중하고 있다.
 

  • Trouble Shooting을 위해 정리한 문서들

 
 

  • 학습 내용

 
 


 
 

6. 개발 서버 운영, shell script 정의

백엔드 개발은 구조상 총 3개의 저장소가 멀티 모듈화가 되어있다.

  • module-admin
  • module-core
  • module-user

admin, user는 독립적으로 존재하는 모듈로, 각각이 독립적으로 배포된다.
 

 
 
이를 위해서는 서버가 2개가 필요한데, 개발 테스트 서버까지 2개를 구축하는 것은 자원낭비일 수있다.
따라서 각 배포 단위를 포트 별로 분류하여 하나의 서버에서 관리한다.
 


 

7. 작업 문서화

모든 작업은 최대한 문서화를 통해 남기고 있다.
 

 
 

8. 작업 관리

업무 히스토리와 매주 회의를 통해 작업사항을 공유하고 있다.

 
 
 
 


 

현재 팀 프로젝트에 대한 개인 의견

  1. 좋은 점
    • 팀원 모두 소통이 원활하고 적극적이다.
    • 프로젝트의 성공적인 마무리를 위해 각자 포지션 별로 노력하고 있는 게 느껴진다.
    • 매주 회의에서 스크럼을 하는데, 이 또한 실무에서 진행하는 것과 비슷해서 좋은 경험이다. 피드백 또한 구체적이어서 회의 준비를 위해서라도 매주 할당된 업무에 집중하게 된다.
  2. 아쉬운 점
    • 멀티 모듈에 대한 이해도가 부족하여 CI/CD를 구성하는 과정에서 허들이 많았다. 원래 목표는 중간평가 전 모든 과정을 자동화하는 것이었는데, 일정이 늦어졌다. 적어도 10주차 안에는 완성을 하는 것이 목표다.
  3. 기대되는 점
    • AWS 서비스를 학습하고 싶었던 욕구가 충족되어, 이 프로젝트가 끝날 시점에서는 대표적인 클라우드 컴퓨팅 서비스 GCP, AWS 모두 기본적인 지식이 쌓여 개인적인 학습면에서 많이 기대된다.
    • 멀티 모듈에 대해 배울 수 있었으며, 앞으로의 개발 지식에 있어서 좋은 경험이 될 것같다.

 
 
 
 
인턴십에서 멀티모듈 구조에서 개발도 하고 서버 관리도 했는데 직접 구축하는 건 역시 다르다.. 열심히 해야겠다!!!!

댓글