본문 바로가기
카이스트 정글

미니 프로젝트

by hjy00n 2024. 8. 10.

입소 후, 당일 곧바로 0주차 미니 프로젝트가 발제되었다.

 

이 프로젝트는 간단한 웹 서비스를 구축하는 것으로, 입학 시험에서 사용한 기술 스택을 활용해 3박 4일 동안 진행되었다. 팀은 무작위로 편성된 3인 1팀으로 구성되었으며, 팀원들과의 협력을 통해 제한된 시간 안에 과제를 완수해야 했다.

 

우리 팀은 간단한 물품 공유 서비스를 개발하기로 결정했다. 먼저 기능 명세를 작성하고, 서비스의 전체적인 구조를 그리기 위해 와이어프레임을 제작했다. 이후 각자의 역할을 분담하여 효율적인 작업이 이루어지도록 했다. 나는 인프라 세팅과 Git 레포지토리 초기 설정, 그리고 채팅 기능 구현을 맡아 프로젝트의 기술적인 기반을 구축하는 역할을 담당했다.

 

다음은 본 프로젝트에서 사용된 와이어프레임 툴, Excalidraw의 화면이다. 

 

 

팀원의 추천으로 처음 사용해 보았는데, 개인적으로 매우 만족한다. 사용법이 매우 간편하고 직관적일 뿐만 아니라, 웹상에서 실시간으로 팀원들과 화면을 공유할 수 있어 아이디어를 빠르게 공유하고 시각화하는 데 큰 도움이 되었다.

 

비록 주제 선택은 자유로웠지만, 사용해야 할 기술 스택에는 몇 가지 제한이 있었다. 프로젝트는 입학 시험에서 사용한 Python Flask 프레임워크와 MongoDB를 기반으로 개발해야 했으며, 로그인 기능 구현에는 JWT와 HTTP Authorization 헤더를 반드시 활용해야 했다. 또한, 디자인 측면에서는 Tailwind CSS 프레임워크를 사용하는 것이 필수였고, 템플릿 엔진으로는 Jinja2를 사용해야 했다.

 

더 나아가, 우리 팀의 프로젝트에는 채팅 기능이 포함되어 있었기 때문에, 나는 이를 구현하기 위해 Socket.IO를 활용하기로 결정했다.  HTTP long-polling과 같은 다른 방법도 고려할 수 있었지만, 개인적으로 실시간 통신에 대한 경험이 많지 않았기 때문에 Socket.IO를 실험적으로 사용해 보고 싶었다.

 

다음은 본 프로젝트의 전체 아키텍처 구조를 도식화한 것이다.

 

 

우선, 도메인의 경우 팀원에게 양해를 구하고 기존에 구매한 개인 도메인을 활용하기로 결정했다. 구체적으로 기존 도메인에 서브도메인을 설정하여 서비스를 연결시켰다. 도메인을 구매할 때 이용한 도메인 등록 기관은 GoDaddy 이지만, AWS 클라우드 서비스를 주로 사용하고 있으므로 도메인의 DNS 설정을 AWS로 변경했다.

 

또한 HTTPS 프로토콜 사용하기 위해 Certbot을 이용하여 SSL 인증서를 발급받았고, 리버스 프록시 서버인 Nginx에 SSL 인증서를 통합하여 설치했다.

 

그리고 Flask 애플리케이션 성능을 향상시키기 위해 Gunicorn을 사용했다. 이와 함께, 비동기 네트워킹 라이브러리인 Gevent를 워커 클래스로 통합하여 I/O 작업을 최적화하고, 애플리케이션의 반응성과 처리 능력을 더욱 강화했다.

 

마지막으로, 관리의 편의성을 위해 MongoDB를 Docker 컨테이너 환경으로 구축했다.

 

다음은 물품 요청 글을 올린 사람과 1:1 대화를 할 수 있는 기능이다. 이는 Socket.IO 를 사용해 구현되었다.

 

그 외, 로그인 및 회원가입 기능, 물품 공유 게시글의 생성, 조회, 수정, 삭제(CRUD) 기능 그리고 Tailwind CSS를 활용한 디자인 등을 팀원들이 완벽히 구현해주었다.

 

비록 3박 4일이라는 제한된 시간 내에 모든 초기 설계 사항을 완벽하게 구현하는 것은 어려웠지만, 이번 경험을 통해 처음 함께한 팀원들과 팀웍을 맞춰봤다는 것에 의의를 둔다.

'카이스트 정글' 카테고리의 다른 글

컴퓨팅 사고로의 전환  (0) 2024.08.31
리눅스 왜 써요?  (0) 2024.08.27
지식을 소화한다는 것  (0) 2024.08.23
[BOJ 2261] 가장 가까운 두 점  (0) 2024.08.17
찬찬히 나를 돌아보는 시간  (0) 2024.08.10