선발대

2022년 03월 회고: 마지막 프로젝트 시작! 본문

사담/WIL

2022년 03월 회고: 마지막 프로젝트 시작!

신선한 스타트 2022. 3. 1. 00:00
[1주차] 03.01(화) ~ 03.06(일)

 

 

  03.01 (화) 03.02 (수) 03.03 (목) 03.04 (금) 03.05 (토) 03.06 (일)
  팀 프로젝트
네 번째 (8)
팀 프로젝트
네 번째 (9)
팀 프로젝트
네 번째 (10)
프로젝트
가이드 발제
팀 프로젝트
파이널 (2)
팀 프로젝트
파이널 (3)
  삼일절   프로젝트
발표회
팀 프로젝트
파이널 (1)
  주간회고록
작성
      스파르타
튜터님 특강
     

 

후기

  3월 3일(목)  

 

네 번째 프로젝트가 끝났다. 발표회는 2시부터 4시까지 진행되었다. 약 1주일은 빠듯한 프로젝트 기간이었을 텐데, 다른 조의 결과물을 보니 다들 퀄리티가 대단했다. django channels를 이용해서 웹 미니게임을 만든 조도 있었고, 명화 경매장을 만든 조도 있었다. 미술관이나 컵 헤드로 콘셉트를 잡은 조도 있었다. 이번에도 발표자를 맡아서 우리 팀의 프로젝트를 소개했는데, 모두의 반응이 좋아서 다행이었다. 튜터님들의 피드백에서도 GAN을 이용한 머신러닝 구현에 큰 점수를 주셨지만, 아쉬웠던 점은 모델을 구동하는데 시간이 오래 걸려서 사용자의 대기시간이 길다는 점이었다. 다음 프로젝트가 최종이고 준비 기간은 지금까지의 프로젝트 중에서 제일 긴데, 그때의 결과물이 기대된다.

 

 

  3월 4일(금)  

 

이제 스파르타코딩클럽 내일배움캠프의 마지막 프로젝트가 시작되었다. 새로운 팀원들과 만나서 서로 인사를 하고 각자 짧은 소개를 했다. 마지막 프로젝트이기 때문에 각자 열정이 가득한 것 같아서 좋다. 이번에는 지금까지 배운 머신러닝 중 추천 시스템을 이용해서 서비스를 구현하는 것이 최종 목표이다. 최종 발표회에서는 기획 단계도 발표해야 하기 때문에 배경에 대한 사전 조사도 필요했다. 각자 주말 동안 조사하고 오기로 했다. 마지막 프로젝트도 화이팅!

 

 


[2주차] 03.07(월) ~ 03.13(일)

 

 

03.07 (월) 03.08 (화) 03.09 (수) 03.10 (목) 03.11 (금) 03.12 (토) 03.13 (일)
팀 프로젝트
파이널 (4)
팀 프로젝트
파이널 (5)
팀 프로젝트
파이널 (6)
팀 프로젝트
파이널 (7)
팀 프로젝트
파이널 (8)
팀 프로젝트
파이널 (9)
팀 프로젝트
파이널 (10)
      S.A
제출마감
타임어택
NST
   
             

 

후기

  3월 7일(월)  

 

앞으로의 최종 프로젝트에서 어떤 프로젝트를 할지 각자 주제를 조사해와서 투표로 정했다. 팀별 회의는 매일 13시 30분으로 하기로 했다. 추천 시스템이 들어가야 하고, 배경도 필요하기 때문에 그런 것들을 고려해서 결정했다. 주제는 총 7개가 나왔다. 그중에서 최종으로 결정된 것은 날씨 API의 정보에 따라 사용자의 코디를 추천해주는 서비스였다. 이런 종류로 이미 구현된 비슷한 서비스는 있었지만, 새롭게 기능을 추가해서 다른 서비스로 구현해보기로 했다.

 

노션으로 문서를 공유해서 각자 자신들이 원하는 기능을 적는 시간을 가졌다. 기능은 35개 정도 나왔고, 이 중에서 꼭 구현하고 싶은 것들만 선택하고 나머지는 '보류'로 정했다. 절반의 기능이 날아갔다. 나중에 튜터님이 오셔서 보여드렸더니, 거기에서 또 절반이 날아갔다. 아무래도 3월 31일까지 중간발표를 완료해야 하므로, 완성도에 더 우선을 두기로 했다. 내일도 화이팅~

 

 

  3월 8일(화)  

 

어제 적었던 기능들 중에 최종의 기능만 뽑아서 정리했다. 그래도 많아 보이기는 하는데, 공부해서 얻는 것도 많을 것 같아서 좋다. 아직 장고 닌자를 파악하지는 못했지만, 열심히 해보자~

 

 

  3월 9일(수)  

 

저녁에 있던 튜터링 시간에 튜터님 말씀을 듣고 최소한의 기능을 가진 서비스를 빠른 시간 안에 만들고 점차 기능을 추가하기로 했다. 이런 걸 MVP (Minimum Viable Product, MVP)라고 부른다고 알려주셨다. 3월 31일까지 1차, 2차 인수 테스트가 있고, 각각 기준을 정해서 기간 내에 완성하기로 했다. 1차 인수 테스트는 다음 주 수요일에 마감하기로 했다. 우선은 머신러닝은 2차 때 추가하고 지금은 기본 기능을 완성도 높게 마무리하기로 했다. 화이팅~

 

 

  3월 10일(목)  

 

각자 맡은 템플릿 파일을 작성하는 시간을 가졌다. 총 5개의 html 파일을 만들어서 각각 만들었고, 합치는 역할을 맡았다. 다른 분들은 2명씩 조를 짜서 한 조는 공통 파일 구조를 만들고, 다른 조는 어제 하던 API 문서 작성을 이어서 맡았다. html 파일 합치는 과정이 빠르게 끝날 줄 알았는데, 5명 모두 각자의 스타일대로 작성한 파일이다 보니 생각보다 시간이 오래 걸렸다.

 

그래도 html은 완성되었으니 이제 백엔드를 시작하면 되는데, 이번에 django-ninja를 사용하기로 해서 각자 다음 주 월요일까지 로그인 기능을 만들어보기로 했다. 월요일의 코드 리뷰도 화이팅~

 

 

  3월 11일(금)  

 

오늘부터 django-ninja를 각자 공부하기로 했다. 저번에 장고 심화 강의를 듣다가 프로젝트 시작되어서 중간 부분까지만 들었는데, 이번에 다시 처음부터 듣기로 했다. 1주 차부터 듣고 있었는데, poetry 설치에서 갑자기 에러가 발생했다. (이건 오늘의 에러 노트에 적어두었다.) cp949 문제가 또 발생해서 인코딩에서 에러가 난 건가 확인하다가 시간이 엄청 흘렀다.

 

슬랙에서 검색해보니 마침 전에 같은 팀이었던 분이 예전에 같은 질문을 남기신 걸 확인했다. 알고 보니 지난 프로젝트에서 poetry로 정말 많은 시도를 하신 분이셔서 내 화면 공유를 보자마자 순식간에 문제를 해결해주셨다. 야호~ 오늘의 팁, 그냥 GUI로 안될 때는 CLI가 답이다. 다 해결되니 시간이 꽤 늦었지만, 아직 갈 길이 멀기 때문에 다시 강의를 들으면서 하루를 마무리했다. 

 

 


[3주차] 03.14(월) ~ 03.20(일)

 

 

03.14 (월) 03.15 (화) 03.16 (수) 03.17 (목) 03.18 (금) 03.19 (토) 03.20 (일)
팀 프로젝트
파이널 (11)
팀 프로젝트
파이널 (12)
팀 프로젝트
파이널 (13)
팀 프로젝트
파이널 (14)
팀 프로젝트
파이널 (15)
팀 프로젝트
파이널 (16)
팀 프로젝트
파이널 (17)
      알고리즘
풀이
알고리즘
풀이
   
             

 

후기

  3월 14일(월)  

 

장고 심화 강의를 들으면서 생각보다 많은 에러를 겪었기에 오늘도 이어서 듣기로 했다. 일단 Schema, Service, Router의 개념은 잡았는데, 실제로 사용하는 게 아직 익숙하지 않다. 우선 간단한 create 쿼리를 이용해서 회원정보를 만들고 로그인하는 기능을 구현해보기로 했다. 모든 건 다 러닝바이두잉이다. 

 

 

  3월 15일(화)  

 

점심 먹고 언제나처럼 13시 30분에 회의를 했다. 다 같이 모인 김에 팀장님이 RDS 연결하라고 하셨다. 전부 연결한 뒤에 SELECT NOW(); 를 입력했더니 이상하게 내 컴퓨터는 UTC 시간으로 적용되었다. 강의에서 봤던 것처럼 serverTimezone을 Asia/Seoul로 변경해도 그대로였다. 알고 보니 settings.py 파일에도 UTC로 적용되어있었는데 아직은 테스트로 만드는 기간이라 나중에 수정하기로 하고, 나도 다른 팀원 분처럼 임시로 장고에서 제공하는 db를 사용하기로 했다. 이미 깃허브에 모델이 대부분 작성된 상태라, 마이그레이션으로 RDS와 동일하게 구성할 수 있었다. 

 

오늘 각자 맡을 기능을 배분했다. 내가 맡은 기능은 게시물의 CRUD 였다. 게시물을 수정하고 삭제하는 기능은 로그인이 된 상태에서만 가능하게 해야 하는데, 그러기 위해서는 미니 회원가입, 로그인 기능을 구현해야 했다. 장고랑 비슷할 것으로 생각하고 찾아봤는데, 아직 Schema가 어렵다. Pydantic 모델의 존재 이유가 아직은 아리송하고, 에러는 계속 뜬다. 그래도 어제보다 많이 나아졌다. 계속 이 흐름대로 공부하면 차차 숙련되겠지 화이팅~ 

 

 

  3월 16일(수)  

 

팀장님이 장고 닌자 공식문서에서 schema를 간편하게 작성할 수 있는 create_schema 함수를 사용하라고 하셨다. 처음에는 어떻게 적용하는지 헤맸는데 오늘 중에 쓰고 보니까 간편해서 좋았다. 모든 건 다 공식문서에 있었다! 오늘 20시 30분에 있었던 튜터링 시간에도 url reverse를 어떻게 구현하는지 질문했는데 정답은 공식 문서였다. 튜터님이 하신 말씀대로 백과사전으로 공부하는 것 잘못된 공부법이지만, 참조해서 공부하면 정말 든든한 것 같다. 항상 모르는 것이 생기면 습관적으로 구글링 하면서 개인 블로그 글이나 유튜브 강의를 찾아봤는데 이제부터는 우선순위를 변경해야겠다.

 

장고 닌자로 간단한 로그인, 회원가입은 구현했는데 게시물 작성하고 '작성' 버튼을 눌렀을 때 form 태그로 전달이 안됐다. 템플릿 파일을 보니 form 태그 안에 {% block %}을 이용해서 헤더와 바디로 나눠져 있었고, 각각 부분에 제출 버튼과 input 태그도 분리되어있었다. 팀장님께 여쭤보니 전체를 form 태그로 감싸는 건 힘들 것 같고, 아마 Ajax 통신으로 넘기던지 아니면 JS로 넘기는 방법이 있다고 하셨다.

 

얼른 장고 닌자 사용설명서를 다시 읽고 게시물 CRUD를 다시 도전해야겠다. 장고 닌자는 한국어로 된 자료가 많이 없어서 영어로 찾아야 그나마 내가 찾는 내용을 발견할 수 있었다. 지금 깃허브에도 django ninja tutorial로 검색했더니, 다행히도 개인 정리용으로 작성된 repo도 많았다.

 

그러고 보니, 오늘까지 카운트하면 프로그래밍 공부를 시작한 지 거의 3개월이 지났다. 딱 처음 시작한 12월에는 프론트랑 백엔드의 차이도 모르고, 함수 작성법도 몰랐는데 어떻게든 하니까 조금씩 되는 것 같다. 아직도 두루뭉술하게 아는 게 많고, 흩어진 개념들을 선으로 연결하는 작업이 필요하지만 부지런히 하면 될 것 같다. 어제보다 더 많은 지식을 가지도록 화이팅~

 

 

  3월 17일(목)  

 

오늘부터 아침 9시부터 10시까지 알고리즘 문제를 푸는 시간이 있다. 첫날이라서 그런지 난이도는 초급이었고 다른 사람들도 금세 풀어서 올린 듯했다.

 

장고 닌자 공식문서를 봤는데 좀 더 자세하게 나온 예시가 없을까 찾아봤더니, 유튜브에 전체적인 CRUD를 잘 정리한 영상이 마침 어제 올라왔었다. 그걸 참고해서 일단 게시물 DB와 관련된 CRUD는 거의 구현할 수 있었다. 그런데 update, delete의 router의 경우에는 redirect를 return 했을 때 계속 Method now allowed 라는 창이 떠서 수정이 필요하다. 반면에, 메시지로 해서 보내는 경우에는 잘 나오는 것 같으니 이걸 프론트에서 받아서 보여주는 방식을 써야 할 듯하다.

 

 

  3월 18일(금)  

 

오늘은 미니 배포를 위해 팀원들의 코드를 병합했다. 우선 공용의 develop 브랜치를 만들고 거기에 각자의 브랜치를 PR 했다. 내 순서가 거의 마지막이었는데, 서로 충돌하는 코드가 많아서 시간이 좀 걸렸다. 매번 공동작업을 할 때 Git을 사용하는 건 조금 긴장된다. 특히 push 하거나, merge 할 때 내가 다른 분들의 코드를 날려버리는 건 아닐지 걱정되어서 정신 똑바로 차리게 된다. 어쨌든 무사히 병합하고 팀장님이 통합된 코드를 받아서 mypy를 실행했는데 오류가 엄청나게 많이 나왔다.

 

21시에 튜터님이 오셔서 mypy로 생긴 에러들을 봐주셨는데, 처음 보는 type들이 많아서 아리송했다. 오히려 타입에 맞추려 하니 코드를 수정하게 되어서 나중에는 # type:ignore을 알려주셨다. 아직 Type hints는 어렵다. 아직 익숙하지 않아서 그런 것 같기도 하다. 거의 3시간 동안 mypy 에러만 쳐다봤다. 주말에는 오늘마저 풀지 못한 알고리즘 문제를 해결해야겠다.

 

 

  3월 19일(토)  

 

오늘은 어제 못 풀고 넘겼던 알고리즘 문제를 이어서 풀었다. 초반에 혼자 힘으로 풀어보려고 여러 가지 함수들을 이용해서 했었는데, 3시간 동안 이 방법, 저 방법을 시도해도 잘 모르겠어서 다시 찾아보니 엄청 간단한 방법이 있었다. set 함수를 사용하면 간단히 구현할 수 있었다. 나중에 비슷한 문제가 나오면 다시 써보고 싶다.

 

이번 주 내내 allauth로 고생하신 팀원 분이 계시는데 오늘 튜터님이 오셔서 도와주셨다. 우리가 구현한 서비스에서 allauth의 문제점은 카카오톡으로 로그아웃을 하고 다시 로그인 버튼을 누르면 인증절차 없이 다시 로그인이 된다는 점이었다. DB에서 토큰을 만료시키거나 해야 하는데, 카카오 계정을 로그아웃하면 카카오 계정으로 연동된 모든 서비스에서 로그아웃이 되는 것도 하나의 문제점이었다. 사실 이번에 처음 본 코드라서 바로 이해는 어려웠지만, 아마 월요일에 모든 팀원들이 모여있을 때 다시 설명해주실 것 같다. 대부분의 웹서비스는 소셜 로그인 연동을 지원하는데, 그런 곳은 어떻게 구현했는지도 궁금하다.

 

 


[4주차] 03.21(월) ~ 03.27(일)

 

 

03.21 (월) 03.22 (화) 03.23 (수) 03.24 (목) 03.25 (금) 03.26 (토) 03.27 (일)
팀 프로젝트
파이널 (18)
팀 프로젝트
파이널 (19)
팀 프로젝트
파이널 (20)
팀 프로젝트
파이널 (21)
팀 프로젝트
파이널 (22)
팀 프로젝트
파이널 (23)
팀 프로젝트
파이널 (24)
      HTTPS
특강
     
             

 

후기

 

  3월 21일(월)  

 

이제 프론트 2명, 백엔드 2명, AI 1명으로 나누어서 각자 작업을 진행하기로 했다. 이번에는 프론트를 맡게 되었고, 각자 PC 버전과 모바일 버전을 맡아서 구현하기로 했다. 내가 맡은 PC 버전은 아직 구현된 것이 아무것도 없어서 우선 피그마로 틀을 잡기로 했다. 내일까지 피그마로 구상을 완료하고 코딩을 시작해야겠다. 참고해야 할 자료들을 많이 찾아봐야 한다.

 

 

  3월 22일(화)  

 

백엔드 쪽에서 수정(Put)이나 삭제(Delete)를 했을 때, swagger에서 redirect, render가 적용이 되지 않아 튜터님께 여쭤봤다. 튜터님과 함께 하나씩 디버깅하면서 장고 닌자 내부의 파일을 뜯어보는데 이렇게 분석하는 방법도 있구나 하고, 새롭게 배울 수 있었다. 디버깅 경로를 따라가 보니 Post로 요청받아서 Post로 보내면, 다른 곳에서 또 Post로 받고 또 Get으로 변환해주는데 왜 그렇게 2번씩 돌아서 진행하는지 잘 모르겠다. 장고 닌자 공식문서랑 장고 문서를 찾아본 결과, form 태그를 이용하는 경우에는 Post, Get만 사용할 수 있다고 했다. 결론: form 태그랑 Put 같이 못 쓴다.

 

Django 공식문서

 

이렇게 되니 http에 대해 궁금해진다. http는 문자열일 뿐이고, http 응답은 글자가 돌아온 것이니 그걸 다시 클라이언트 쪽에서 해결해야 한다고 하셨다. 장고의 역할은 거기서 끝이었다. 튜터님께서 재미는 없지만 큰 도움이 된 책인 'Http 완벽 가이드'를 추천해주셨다. 인터넷에 읽는 방법이 돌아다닌다고 하셨다. 새로운 것들을 많이 배워보자. 

 

 

  3월 23일(수)  

 

내일 HTTPS 특강이 있어서 사전 과제를 진행했다. HTTPS를 구현하기 위해서는 SSL 인증서가 필요하다. 내일 특강에서는 HTTPS를 직접 ACM으로 구현해보는 것을 배운다. 우선 Route 53으로 도메인을 구입했다. 도메인 등록을 기다리며 Elastic Beanstalk로 배포를 진행했는데 여기에서 문제가 생겼다. 설치 후 eb init을 터미널에 입력했는데 거기에서부터 에러가 났다. 직접 파일 경로로 들어가 인코딩 문제는 해결했는데 뭔가 잘못 건드렸는지 새로운 에러가 나왔다. 계속 지우고 설치하고 새로운 환경에서 다시 실행하고, 파이썬 버전을 변경하거나 환경 설정을 다시 확인해도 별다른 해결책을 찾지 못해서 튜터님께 찾아갔고, 그냥 초기화하고 실행했는데 바로 됐다. 아마 초기에 건드린 파일에서 무슨 문제가 있었던 것 같다. 나머지 공부도 화이팅~  

 

 

  3월 26일(토)  

 

우리 팀은 모바일과 PC 버전 2가지를 만드는데, 나는 그 두 가지는 별개의 화면이라고 생각했다. 서로 다른 기기에서 다른 버전의 화면이 보이지 않는다고 생각했다. 그러나 PC 버전에서도 작은 화면일 경우 모바일 버전 화면을 보여주는 반응형을 구현해야 했던 것이다. 우리가 처음에 모바일 버전부터 만들 때 가로폭을 360px 정도로 예상하고 구현했는데 PC 버전에서는 가로가 500px 이하로 줄어들지 않아서 아예 분리되었다고 생각했다. 어서 수정하자~ 화이팅~

 

 

  3월 27일(일)  

 

html 파일을 전부 통합하기로 했다. 처음부터 그렇게 했어야 했는데 지금까지 작업해온 것이 있어서 다른 방법을 찾아보고 있었다. 클래스명이나 구조가 다른 html 파일을 하나로 합치는 건 생각보다 시간이 많이 걸리는 일이었다. 우선 각각의 구성요소가 무슨 의미인지 그림을 그려서 정리하고 하나씩 맞춰갔다. 그렇게 월요일 아침 8시까지 하고 나니 기존의 모든 파일을 수정할 수 있었다. 다음부터는 반응형을 만들 때 확장성을 잘 생각하고 만들어야겠다. 자바스크립트 공부를 시작했다. 기초를 잘 모르니 기능 구현에서 겪는 불편함이 컸다. 피곤하지만 할 일이 많다. 화이팅~

 

 


[5주차] 03.28(월) ~ 03.31(목)

 

 

03.28 (월) 03.29 (화) 03.30 (수) 03.31 (목)      
팀 프로젝트
파이널 (25)
팀 프로젝트
파이널 (26)
팀 프로젝트
파이널 (27)
팀 프로젝트
파이널 (28)
     
      중간 발표회      
             

 

 

후기

  3월 28일(월)  

 

일요일부터 밤을 새우고, 프론트엔드 템플릿 작업을 얼추 끝냈다. 아직 곳곳에 링크 연결이나 실제로 사용하면서 맞지 않는 css들을 수정해야 해서 완벽히 끝난 것은 아니다. 그래도 우리 팀의 깃헙의 develop 브랜치에 전부 올려서 일단 공유할 수 있도록 했다. 이제 남은 건 모바일 메인 페이지를 그대로 무한 스크롤을 살리며 옮기는 것인데 아직 잘 감이 안 온다. 내일 부지런히 해서 끝낼 수 있도록 해야겠다. 

 

이번에는 시간 관계상 마이페이지와 프로필 수정 페이지를 빼고, 다음 2차 발표 때 넣기로 했다. 대신에 날짜 페이지를 넣어서 위치, 날씨, 기온, 강수 확률 등을 받아올 수 있도록 했다. 공부할 것이 많다. 화이팅~

 

 

  3월 31일(목)  

 

오늘은 줌 회의로 14시부터 중간 발표가 있었다. 이전 발표회는 원하는 팀만 발표를 했는데, 중간 발표회는 모든 팀이 참여했다. 다들 발표 PPT 준비, https SSL 인증, 노션 정리 등을 마무리하느라 새벽 6시까지 밤을 샜다. 이번에는 발표회에 AI 음성인식 관련 기업이 참관했는데, 한 팀씩 피드백을 주다보니 발표회가 4시간 넘게 진행되었다. 기업 참관이 있다는 소식은 어제 오후에 들었다. 다들 중간발표 때는 완성도를 60~70% 정도로 생각했기에 아직 완벽한 서비스가 구현되지는 않았다. 우리 조도 마이페이지, 프로필 수정, 머신러닝이 완성되지 않아서 일정을 최종 발표회 전까지 완성하는 것으로 수정했었다. 어쨌든 발표회는 무사히 잘 끝났고 피곤한 팀원들과 함께 오늘은 쉬기로 했다.

Comments