Project/WOORIARTE 회고

📝 [WOORIARTE] 프로젝트 회고

mlnho 2024. 6. 18. 19:18

서론

2024.03~2024.05 약 7주동안 인생 첫 프로젝트를 진행했다.

기획, 설계, 구현, 테스트 등으로 이루어진 지난 7주의 시간은 정말 어떻게 흘러가는지 모르는 시간이었던 거 같다.

프로젝트를 기획,설계,개발,테스트 등의 절차 등을 거치며 힘든 부분도 물론 많았지만,,
수상이라는 결과를 만들어내며 더욱 유의미한 결과를 나은 거 같아 뿌듯한 거 같다.

그리고 이러한 시간을 망각하기 전에 블로그에 기록을 남기고자 한다.

 

 

 

📢 프로젝트 소개

클라우드를 이용한 전자상거래 클라우드 시스템 구축 
"전시 예매 및 중개 플랫폼 사이트 WOORIARTE"
https://github.com/mlnho/fisa-oheazy
  • 프로젝트 인원 : 5명 (프론트엔드 1명, 백엔드 2명, 인프라 2명)
    이 과정에서 백엔드 API 구현은 다 같이 나누어서 진행했다.

[기술 스택]

 

[서비스 아키텍처]

 

 

[인프라 아키텍처]

 

 

[CI/CD 아키텍처]

 

 

 

 

 

👨‍💻 나의 역할

팀에서 인프라 및 Figma제작, PPT 제작 및 발표를 담당했다.

내가 프로젝트를 진행하며 수행해 본 것은 다음과 같이 정리할 수 있다.

인프라

  • 3 Tier Architecture 구축 및 통신
  • 모든 애플리케이션 Private Subnet으로 구성
  • Bastion Host 대신 AWS SSM을 활용해서 Private Subnet EC2에 접속해 보기
  • 프론트엔드(React) & 백엔드 애플리케이션(Spring Boot) Docker 컨테이너화
  • Nginx와 React를 빌드스테이지를 이용해서 DockerImage로 만든 후 컨테이너화 시키기
  • Nginx https 적용 (with Let's Encrypt)
  • AWS ACM 인증서를 이용하여 서비스 https 적용
  • AWS Route 53을 사용해서 도메인 연결
  • AWS WAF를 통해서 SQL Injection 방어해 보기 with SQLMAP

WAF 통해 SQL-injection 차단된 모습 확인

 

  • AWS WAF를 통해서 해외 IP 차단하기

WAF 에서 해외 IP 차단된 것 확인

 

  • AWS ECS를 사용해서 3 Tier 아키텍처 구축 및 배포
  • Docker 컨테이너화 된 Jenkins 안에 Docker 명령어 가능하게 하기 (Docker Socket 사용)
  • Jenkins를 통해서 민감한 파일 Jenkins Secret file 로 관리
  • Jenkins 를 통해서 소스코드 Docker Image로 구성해서 AWS ECR에 푸시하기
  • ECS + Codedeploy를 통해서 ECS BLUE/GREEN 무중단 배포
  • Amazon CloudWatch, AWS Lambda를 사용해 Slack 알람 시스템 구성
  • Amazon CloudWatch와 Grafana를 이용하여 모니터링 시스템 구축

 

기타 

  • Figma 제작
  • PPT 제작 및 발표
  • CSS 작업 (팀원 전체 참여 파트 맡아서 진행)

Figma & PPT & CSS

 

프로젝트에서 이러한 역할들을 맡아 진행했고 왜? 이러한 것들을 했는지에 대해서 다음 목차를 통해서 정리하고자 한다.

 

 

Why?

1. 3 Tier Architecture 를 선택한 이유

먼저 3Tier Architecture란  애플리케이션을 3개의 독립적인 계층으로 나누어 설계하는 구조이다.

"클라우드를 이용한 전자상거래 구축 시스템"을 구축하는 주제였으며,
효율적인 관리확장성, 보안을 고려했을 때
3Tier Architecture로 구성하는 것이 주제 및 학습면에서 도움이 된다고 판단했습니다.

그리고 Medium이나 여러 Blog 글을 살펴보며 정리해 봤을 때 다음과 같은 결론이 나왔다.

1. 다른 계층에 영향을 주지 않으면서 확장 및 업데이트 가능
2. 여러 대의 서버로 나누어서 각 계층이 동작하기에 서버의 부하 줄여줄 수 있다.
3. 합리적인 스케일업이 가능하다.
4. 각 계층은 명확한 경계를 제공하기에 보안 부분을 더 탄탄하게 가져갈 수 있다.

 

그리고 AWS 관련 오픈카카오톡 채팅방에 들어가 현직자들의 조언을 구해봤으며
"3 티어로 학습을 해보는 것 경험이 취준생 입장에서 도움이 될 것이다"라는 조언이 많았다.

 

 

2. 모든 애플리케이션을 Docker로 컨테이너 화해서 운영한 이유

개발 및 배포의 효율성 및 일관성을 극대화하기 위해 Docker를 활용하여
애플리케이션의 이식성과 환경 동일성을 보장하고자 Docker로 모든 애플리케이션을 운영해 봤다.

 

또한 Jenkins도 Docker에 올려서 운영해 봤으며이 과정에서 Docker Socket을 활용해서
Docker로 구성된 Jenkins 안에서 Docker 명령어를 사용할 수 있는 과정도 겪어봤다.
(CI 과정에서 Docker  명령어 필요했다.)

 

3. EKS가 아닌 ECS를 선택한 이유는??

1. 비용 관련

지원 금액은 팀마다 할당되어 있었고 EKS는 비싼 서비스 이기 때문에 비용초과에 대한 겁도 많이 났다. 
실제로 다른 반에서 어마어마한 비용이 나왔다는 이야기도 있었기에,,,

 

2. 우리 서비스에 맞지 않았다.

ECS는 컨테이너식 애플리케이션의 배포, 관리 및 크기 조정을 간소화하는 완전관리형 컨테이너 오케스트레이션 서비스이며 우리는 모든 애플리케이션을 컨테이너화 하여 운영했기에 최적이라고 생각했다.

 

반면 EKS는 오픈 소스인 Kubernetes 기반 애플리케이션을 AWS에서 운영하는데 도움을 주는 서비스이며,
우리 팀은 쿠버네티스에 대한 지식이 부족하여 서비스 운용에 용이하지 못할 것이라 판단했다.

 

 

 

 

4. Blue/Green 배포 방식 채택한 이유?

ECS 서비스에서는 서비스 생성 시에 rolling update or Blue/Green 방식으로 update를 결정할 수 있다.

Blue/Green 방식 채택 이유는 다음과 같다.

1. 더 나은 사용자 경험 제공 가능 즉 무중단 서비스

2. 문제 발생 시 빠른 롤백이 가능하다.
    rolling update는 이전 버전을 바로 내려서 롤백 원할 시 업데이트를 한번 더 진행해야 하는 불편사항이 있다. 

3. 배포 프로세스 모니터링 가능 

 

이러한 이유 및 학습 목표에 있어서 Blue/Green 방식을 채택했고 정말 많은 트러블슈팅했던 기억이 난다.

실제 배포했을 당시 ... 여러 오류를 만나면서 정말 힘들었던 기억이 난다.

 

 

마무리

7주간의 시간이 정말 눈 깜짝할 사이에 지나간 것 같다..

매일 아침 9시 30분에 진행 상황을 서로 체크하고 하루의 할 일을 정리하며 하루를 시작했었고,

집에 돌아와 서둘러 저녁을 먹고 바로 프로젝트의 보완점과 하루 목표했던 할당량을 마치기 위해 노력했던 기억이 난다.

이 과정에서 머리를 부여잡으며 흰머리가 날 정도로 열심히 노력했었다.

정해진 기한 내에 프로젝트를 완수하고, 초반에 구상했던 목표를 이루기 위해 최선을 다했고,

목표를 달성할 수 있어서 다행이었고, 정~~말로 예상치 못하게 최우수상도 받게 되어 매우 뿌듯했습니다.

그리고 이번 프로젝트를 통해 왜 많은 회사들이 소통의 중요성을 강조하는지 몸소 느낄 수 있었던 소중한 시간이었습니다.