aimmo 과제 회고

위코드와 원티드가 함께 주관하는 프리온보딩 코스에 참여하였다.

첫 번째 과제는 aimmo기업의 과제였다.

내용은 간단한 게시판 구현(CRUD)및 배포를 3명에서 한 팀으로 하는 것이었다.
혼자서 할 때는 느끼지 못한 문제점들을 회고하면서 적어보려고 한다.

"Mongodb"

우리가 첫 번째로 맞닥뜨린 어떻게 보면 가장 큰 고민이었다.

주로 쓰던 기술이 Django/mysql 조합이었는데
필수 데이터베이스로 mongodb가 쓰여있었다.

일단 팀원분들 중에 mongodb를 아는 사람이 있을수도 있어 물어보았지만
사용한 사람이 없다고 하였다.

그래서 우선 조금 찾아보니 기존에 사용하던 RDBMS의 방식이 아닌
NoSQL방식이었다.

처음에 들었을 때는 Mongodb의 개념은 물론 NoSQL이라는 개념 자체가 잡혀있지 않아서 1시간 정도 각자 개념이나 이론 등을 서치해보고 다시 만나자고 제안하였다.

"Flask" vs "Django"

두 번째로 맞닥뜨린 고민이었다.

데이터베이스는 필수사항이어서 mongodb를 사용하였지만, 프레임워크는 필수가 아니었다.
서치를 해보니 장고와 플라스크는 유사한 부분이 많다고 하였다.
플라스크는 17000줄의 코드로 쓰여진 가벼운 장고 정도로 이해하였다.

장고를 했던 사람이면 1시간이면 플라스크를 다룰 수 있다고 쓰여있었는데, 문제는 시간이었다.

  1. 월요일 오후 5시부터 수요일 오전 10시까지라는 짧은 시간
  2. 프리온보딩 과정에서의 첫 프로젝트
  3. 처음 배우는 개념인 NoSQL인 Mongodb

시간의 여유가 하루정도 더 있었으면 과제 자체는 간단한 CRUD이니
하루 정도 플라스크를 배워서 진행하였을것이다.

고민이 많이 되는 상황에서 나는 우선순위를 먼저 생각해보았다.

  1. CRUD 완성 및 제출
  2. aws 배포
  3. 데이터 1000만개 넣기
  4. 선호 기술인 flask사용하기

나의 우선 순위가 이런 상황에서 나는 장고를 사용하는 편이 더 좋다고 생각하였다.

하지만 협업의 묘미이자 문제가 남아있었다.

생각의 차이

사람마다 각자 다른 생각을 하고 있어 인간관계는 어렵고, 내 고정관념과 생각을 다른 사람에게 맞추는 것은 더욱 어렵다.

하지만 이런 프로젝트에서는 그런 일이 비일비재 일어난다.

  1. framework
  2. convention
  3. git commint message
  4. end-point
  5. 초기 셋팅
  6. git feature/ 이름
  7. 역할 분담

위쪽에서 적은 것들 말고도 몇 시부터 몇 시까지 모일 것인지, 깃 초기 셋팅은 누가 하고 리포스토리지는 누가 팔것인지 정말 세세한 부분까지도 정해야할 것이 많았다.

프로젝트는 혼자 하는 것이 아니라는 글들이 떠올랐다.

"프로젝트는 여러 명의 사람이 1인분씩 하는 것이 아닌 함께 하나를 하는거다."

얘기가 많이 돌아왔지만 결국 플라스크를 사용하고 싶어하는 사람도 있었고
나처럼 안전하게 장고를 사용하고 싶은 사람들도 있었다.

나는 정답은 없다고 생각하였다.
단지 뭐가 됐든 빠르게 결정하고 실행하는 것이 전체적으로 이득이라고 생각하였다.

결국 우리 팀은 django를 사용하기로 하였다.

Django/Mongodb

이번 프로젝트에서 가장 힘들었던 점을 꼽으라면 장고와 nosql의 조합이었다.

일단 정보가 너무너무너무너무 없었다.....(후에 flask mongodb라 검색했을 때에는 수 많은 결과나 나왔다.. 여러 언어를 알아야하는 이유를 느꼈다.)

초반에는 djongo 사용하면 알아서 다 해주겠지
장고에서도 지원 되나보다! 라고 생각하고 했던 내가 조금 미련했다는 걸 느꼈다.

안 맞는 두 퍼즐을 억지로 끼워 넣으려고 하니 끼워지긴 하는데 전체적으로 어색했다.

CRUD만 할 줄 알면 사실상 이번 과제는 끝인데
CRUD하는 법을 찾는데 가장 큰 시간을 투자하였다.

AWS , Atlas

이제 내가 맡았던 로그인/회원가입/인증/인가 부분을 다 끝내고 배포를 하려고 aws에 접속하여 데이터베이스 생성을 하려고 들어갔다.
(시간이 조금 남은 상황이어서 빨리 끝내고 데이터베이스 넣을 생각 중이었다.)

그런데

??????

어...

없었다....

당연히 있을거라고 생각하였다.

항상 mysql로 배포하여서 다른 것들은 신경쓰고 있지 않았다.

mongodb atlas라는 것을 깔고 힘겹게 진짜 힘겹게 ec2로 결국 배포를 하였다.
영어는 잘 못하지만 공식 문서 영어로 된 유튜브 안본게 없다.

항상 웹서핑을 하면서 느끼지만 처음은 벨로그나 티스토리 기술 블로그를 들어가서 빠르게 하려고 하지만

정확한 정답은 공식 사이트 문서에 다 나와있었다. aws 문서가 공식 번역이 돼 있어서 읽고 따라했다.

그래도 새로운 데이터베이스로 처음 배포한 거였고 거기에서 발생한 다양한 문제와 오류들도 많이 알 수 있었다.

항상 다 하고나면 쉬운 길이 분명 존재하는데 처음에는 그 방법을 못찾고 귀신같이 빙빙 돌아서 도착하는 것 같다.
하지만 그 과정에서 수많은 배움을 얻었다.

데이터베이스 1000만개

사실 이번 프로젝트에서의 가장 큰 blocker이다.

처음 들었을 때도 답이 없어보였는데 실제로 해보니 더 큰일이었다!!

with transaction.atomic() :
    User.objects.bulk_create([
        User(
            name=fake.name(),
            email=fake.email(),
            password=fake.password()
            ) for _ in range(10000)])

처음에는 for문의 길이를 10000개로 하였는데 10초만에 데이터가 들어갔다.

오 얼마 안걸리겠는데? 몇 시간만 켜놓고 있으면 될 거같다라는 생각이 들어
10만개를 넣으려고 하였다.

10000개에 10초니까 10만개면 2분 안에 되겠다라는 생각을 가지고 기다렸다.
.
.
.
5분이 지나도 실행이 안돼서 실행을 종료하고 다시 10000개를 넣었는데
이 번엔 작동이 잘 되었다.

후에 찾아보니 총 메모리를 for문 마지막 개수로 잡는데 메모리가 초과하여 에러가 날수도 있다는 것이었다...

제너레이터를 이용하면 중간 중간 끊어서 실행해서 된다고 하는 글도 봤지만, 시간적 여유가 없고 방법도 생각이 나지 않아 이것은 하지 못하였다. 사실 10000개씩 1000번 넣으려다가 포기했다.

후에 리팩토링할 때 1순위로 할것이다 무엇보다 방법이 너무 궁금하다.

글을 마치며 이제 처음 프로젝트이고 4주간의 협업 과제가 아직 남아있다.

다음부터는 좀 더 초반 과정들을 빠르게 하여서 끝까지 끝내고 싶다.
이제 어떻게 하는지 감이 잡혔으니 새로운 프레임 워크나 데이터베이스도 너무 쫄지 않고 도전해보고싶다!!!!

좋은 웹페이지 즐겨찾기