이번 포스팅은 엘리스 AI 트랙에서의 두번째 프로젝트인, 데이터분석+웹 팀 프로젝트에 관한 내용입니다.
프로젝트 1주차(14주차)
1. 애자일 코칭 및 프로젝트 안내
사실 저희가 처음에 가장 어렵게 생각했던 부분 중 하나는, 애자일 방법론이었습니다. 폭포수(waterfall), 애자일(agile),, 다양한 방법론들이 있는데 제가 짧게 인턴 경험을 했던 곳도 애자일을 사용했고 대부분의 팀이나 스타트업에서 애자일 방법론을 채택하고 있는 것 같습니다. 아마 엘리스 측에서도 프로그램 후에 애자일 문화에 잘 적응할 수 있도록 의도하신 것 같습니다.
애자일 방법론(스크럼 프레임워크)
애자일 방법론에서 가장 중요한 것은 스크럼과 스프린트입니다.
스크럼은 매일 하는 짧은 미팅인데요, 앨리스에서 제공해준 슬라이드의 내용처럼 어제 한 일, 오늘 할 일, 장애 현상 등을 공유합니다. 인턴 할 때는 간략하게 채팅으로 어제 한 일, 오늘 할 일 등만 공유하기도 했습니다.
"스프린트는 1~4주 동안의 기간 동안 단거리 전력질주(sprint)를 하듯 집중하여 결과를 만들어내는 기법"이라고 합니다. 제가 느낀 대로 설명해보자면 하나의 프로덕트(혹은 프로그램)을 만들기 위해 필요한 일들을 가장 작은 개발단위(task)로 나눠서 하나씩 빠르게 해결해나가는 것인데요, 이때 저 가장 작은 개발단위 task들이 스프린트 백로그에 해당하는 것 같습니다.
+TMI) 인턴을 했던 회사에서는 Azure를 사용했었는데, AWS에서도 비슷한 기능이 있는지 모르겠지만 이런 스크럼 방식 채택을 위한 board 같은 게 잘 되어있었습니다.
2. 기획서 작성
기획서 작성이 지금까지 프로젝트 기간 중 가장 힘들었던 것 같습니다. ㅋㅋ
엘리스에서 제공해준 깃랩과 템플릿이 있긴 했습니다만, 이번 프로젝트의 주제와 목표를 만족하는 글을 6명이서 작성하려니 힘들더라구요. 아이디어 짜내기, 일단 나온 아이디어를 엘리스 프로젝트 주제에 끼워맞추기, 어떻게든 끼워맞춘 걸 글로 옮기기.... 그리고 위 과정들을 위해 일당 7시간의 실시간 회의 + 오피스아워까지..
3. 스토리보드 작성
기획서 작성이라는 산을 넘으니 스토리보드 작성이라는 산이 있었습니다. 저 아이디어를 실제 프로덕트에서 어떻게 표현해야할지 생각하니까 어렵더라구요. 그리고 6명이 다 머릿속에서 그려둔 프로덕트의 모습이 달라 모두 합의할만한 디자인을 만드는 것이나 whimsical같은 툴의 사용법을 모르는 것도 어려운 부분이었습니다. 그래도 이런 툴들은 대부분 직관적으로 만들어놔서 그나마 다행이었습니다.
나중에 큰 가닥이 잡히고 스토리보드 팀과 기획 팀으로 나눠서 진행하니 의사결정자가 반으로 줄어서 더 빠르게 진행되었습니다.
프로젝트 2주차(15주차) - 웹 개발
2주차 부터는 웹 개발을 진행하였는데요, 어려웠던 부분들 위주로 정리해보겠습니다
1. Git branch 사용하기
- 제가 첫 단추를 잘못 꿰맨 부분 중 하나인데, 제가 처음 생각했떤 이미지는 위에서 아래로 내려오면서 브랜치가 생겨나고, 아래에서 개발을 끝내면 위로 보고가 올라가듯 merge하는 걸 생각했습니다.
- 그런데 그게 아니고 브랜치는 옆으로 빠졌다가 다시 합류하는 그런 느낌이라 제가 생각했던 이미지랑 다르더라구요. 앞으로는 개발단위로 브랜치를 생성해야 될 것 같습니다.
2. 파이썬과 DB(mysql, mongoDB) 연결하기
- URI라는 게 참 헷갈렸습니다. 계정이랑 비밀번호는 뭐고, 지금 내 ip는 뭐고 포트가 뭐고, 포트포워딩은 뭐고... 그리고 제가 wsl을 사용하고 있어서 거기에 mysql을 설치했더니 또 윈도우에서는 접속이 안 되더라구요. wsl에서 또 포트포워딩을 해줘야 한다 어쩌고 저쩌고 해서 걍 포기하고 윈도우에 설치했습니다.
- 코치님께서 docker를 통해 VM에 DB를 설치하고 구동시키는 걸 도와주셔서 망정이지 안 그랬으면...(끔찍)
- 이런 db를 docker로 구동시킴으로써 중소규모의 어플리케이션에 대해서 빠르고 효과적으로 DB를 구축할 수 있다는 것이 장점이지만, 기업규모 혹은 규모가 큰 프로젝트에 대해서는 workload를 부담할 수 있는 docker 컨테이너가 없다고 합니다. (이해 못 함)
- 그냥 리눅스에서 돌리는 걸 어디서든 돌릴 수 있게 한 거라고 생각했는데 마냥 그런 건 또 아닌가봅니다. 도커의 원리에 대해서 더 알게 된다면 이해할 수 있을 것 같네요.
How to Set Up & Configure a MySQL Docker Container {Tutorial}
3. 필요한 API 정의하기, 명세서 작성하기
- 본격적인 개발에 착수하려고 하니, 뭘 개발해야할지, 유저가 해당 페이지를 보기 위해서 어떤 데이터를 넘겨줘야할지를 정의해야겠더라구요, 그래서 API명세서라고 부르기는 조금 애매한 무언가를 작성했습니다. 과정은 다음과 같았습니다.
- 페이지별로 DB에서 꺼내줘야하는 데이터(리턴)를 정의
- DB에서 맞는 데이터를 꺼내기 위한 arguments를 정의
- 1,2를 통해 나온 요소들을 하나 or 여러개의 함수로 정의
- 3에서 도출된 함수들의 url, method, 함수명, arguments, return 등을 테이블에 정리
다양한 툴들이 있지만, 무료이면서 익숙한 툴인 노션을 활용하여 한번 작성해보았습니다.
5. 참조 문제
- 저번 개인 프로젝트와 디렉토리 구조가 달라져서인지, 참조과정에서 문제가 발생했다.
from ..models.movie import Movie
### 에러 ###
Traceback (most recent call last):
File "add_movie.py", line 15, in <module>
from ..models.movie import Movie
ImportError: attempted relative import with no known parent package
이런 식으로 모델을 참조했더니 해당 스크립트가 제대로 Movie를 못찾아서 애를 먹었는데, 다음 코드를 위에 덧붙이고 코드를 수정해서 해결했습니다. 상대경로 절대경로에 대한 문제였는데, 구체적인 원인에 대해 아직 이해를 못 해서 다음에 공부를 해야될 것 같습니다.
import sys
from os import path
sys.path.append(path.dirname( path.dirname( path.abspath(__file__) ) ))
동아리를 통해서 스터디를 한 적은 있었지만, 이렇게 product를 만드는 건 처음이었습니다. 남은 일주일 동안 빠르고 효율적으로 개발을 해서 프로젝트를 잘 마치고 그간 필요했던 것들, 어려운 것들을 공유하는 컨텐츠를 만들어보도록 하겠습니다. 읽어주셔서 감사합니다~
'교육, 대외활동, 봉사 > 엘리스 AI 트랙 2기' 카테고리의 다른 글
[엘리스] AI트랙 레이서들을 위한 <레이서 홈커밍 데이> (0) | 2021.11.08 |
---|---|
[엘리스] 데이터 분석 웹 서비스 프로젝트를 하며 느낀 점, 앞으로 공부할 것 (0) | 2021.10.24 |
[엘리스] Docker, 팀 스터디, 팀 프로젝트 (13주차, 방학) (0) | 2021.09.26 |
[엘리스] 엘리스에서의 첫 프로젝트 (0) | 2021.09.11 |
[엘리스 AI 트랙 2기] Day 18~20 - ORM과 Flask (12) | 2021.07.18 |
댓글