프로젝트 회고

[협업 회고, TIL] : 2nd 협업 일지, 미니 프로젝트 회고 12/2~12/9

Veams 2022. 12. 9.

https://velog.io/@lsjnl22/10조-KPT회고

 

10조 KPT회고

프로젝트 이름 : 아파트 커뮤니티구현한 기능 : 회원가입 , 로그인 , 로그아웃 , 회원정보 , 파일 업로드&다운로드 , 다른 홈페이지 조회 , 게시글 작성&수정&삭제 , 등이승준 : 이번이 두번째 지만

velog.io


본격 백엔드 개발학습을 위한 미니프로젝트


- 프로젝트 요구 기능 :
회원가입 및 로그인, CRUD-뉴스피드 형식(+pagination), 마이페이지, 회원정보 수정, 세션관리, 파일업로드 및 다운로드
이 밖에 logging 시스템(구현 못함) 등.

# 컨셉 : 아파트 입주민 커뮤니티 웹사이트

사용 기술 스택, 서비스
html, css, javascript
python - flask
MySQL, AWS
git, github

1. 내가 구현해본 기술

# 회원별 로그인에 따른 세션 구현
- 회원별 마이페이지를 구현을 담당하였는데, 마이페이지를 구현하기 위해서는 '세션'에 대한 개념을 알아야 했다.
- 세션을 구현하고 이를 여러 기능에 적용하는 법을 습득했는데, 크게 어렵지 않으면서도 상당히 유용한 거 같다.
- 페이지를 로드하는 라우트 작성시, 기능이 작동하는 함수의 내용으로 조건문을 사용했다.
- 세션 딕셔너리에 해당 유저의 특정 값이 저장되어있는지 여부에 따라서 기능이 작동(혹은 페이지를 로드)하도록 하다.
- 프로젝트 본격 시작한지 2일동안 python - flask에서 세션구현하는 방법을 찾질 못해서 굉장히 무기력했다. 3일차에 발견해서 그때부터 여기저기 적용시켜서 다시 몰입할 수 있었다.

# 이때, 세션을 적용한 기능
1) 게시글 작성시, 게시글마다 가입 유저에 따른 고유값 부여하여,
2) 게시글 수정 및 삭제가 가능하도록 만듦
3) 회원의 개인페이지 구현,
- 회원 개인정보 출력(아이디, 닉네임, 이메일)
- 회원 정보 수정(닉네임, 이메일, 비밀번호)
4) 개인페이지에 프로필 이미지 업로드 및 출력, 다운로드
- 이미지 업로드시 파일명을 회원이름으로 변경되도록 함.
- 이미지는 회원 DB에 저장하는 방법 대신, 로컬 static 하위 경로 폴더에 저장하는 방식으로 구현함.

5) 세션이 작동하는 시간은 10분으로 한정(10분이 지나면 자동 로그아웃)

2. 구현한 웹페이지 페이지의 작동 영상

https://youtu.be/lln3fvoxH4s

3. 우리 팀 프로젝트에서 개인적으로 기능상 아쉬운점

- 기능은 대강 구현했지만, 디테일이 많이 떨어진다.


회원 가입 및 회원 정보 관리
- 회원가입시 가입 아이디 값의 unique를 적용했으나, 이메일란의 형식 및 글자 수 등 validator 적용x. 유저가 원활하게 가입할 수 있도록 가이드하는 지시 알림이 없음.
- 서버에 문제가 있는지 회원가입 시 때때로 어느 컴퓨터에서는 즉각적으로 DB에 쌓이질 않음. 서버를 재가동하면 문제가 임시적으로 해결됨. (게시글 CRUD는 실시간으로 적용되는 것과 달리)

- 비밀번호에 암호화 적용x
- 영상 막바지에 보듯, 탈퇴 기능에 에러가 생긴듯 작동이 되다 말기 시작함.

게시판 페이지
- 게시글이라고 하기도 좀 뭐할 정도로 방명록 형태이다.
- 게시글의 뉴스피드 형식 구현 못함
- 수정 및 삭제 버튼이 작성자에게만 보이는 것도 내가 구현할 수 있었을 것 같은데, 그것까지는 시간안에 해내지 못함
- 자신이 작성한 글만 따로 모아서 보는 페이지를 만들 수도 있었을 것 같다.

마이페이지
- 프로필 이미지가 보이는 부분은 default 형태를 줄 수 있었을 것 같음.
- 가입 직후에는 이미지가 없다보니, 이미지가 보이는 부분에 엑스박스 형태로 존재하던 것을 볼 수 있었음
- 업로드 페이지로 굳이 넘어갈 필요가 없었음.
- 다운로드 기능도. 목록에서 단순 버튼 클릭으로 가능한 상태로 변화를 주고 싶다.


백엔드 개발 코스이다 보니, 프론트 부분의 심미적인 부분은 손을 거의 대질 못했다.
그런데 위에 내가 적은 아쉬운 점 +@ 를 모두 구현한 팀도 꽤 됐었다. 완성도가 대단했다.
우리 팀과 같은 기간이 주어졌는데도, 그 팀들은 백엔드 기능에 더하여 프론트까지도 웬만큼 잘 만들어서 놀랐다.

어떤 결과물을 내야하는 상황에 놓인다면, 개인의 (시간 및 에너지) 자원을 가능한 더 투입해서
제대로 해내는 것을 목표로 하는 게 좋을 것이다. 성취감과 만족감이야 말로, 어떤 학습을 지속할 수 있는 힘을 준다.


4. 캠프 참여 중 학습 방식에 대한 고민

1) 부트캠프에 참여시 캠프 프로그램에 의존하고 싶은 마음으로 갈등하기도 했다.
부트캠프는 왜 존재하고, 나는 이 부트캠프에 참여했는가에 대한 질문을 하게 된다.

개발을 배우기 전 나의 백그라운드가 심리상담 및 교육 분야이기도 하고,
앞으로 나부터 개발자로서 어느 정도 역량을 쌓고나서 주니어 개발자들의 성장을 돕는 사람으로 살기로 하였으니 ,
커리큘럼을 구성하는 이런 고민을 할 수밖에 없었다.

사실, 이번 미니 프로젝트에 앞서,
목표기능 구현에 대한 사전 공부가 거의 없는 상태였고,
프로젝트를 완성하기 위해서는 각자가 알아서 구글링을 하거나 튜터님께 물어보며 탐색을 해야했다.

기한 내에 무언가를 성과를 내야한다는 압박감이 생기는 것은 예비개발자로서 당연한 감정이라고 생각한다.
그러다보니 무엇을 어떻게 해야할지 막막하다보니, 탐색하는데 시간을 쏟는 내내 초조할 수밖에 없었다.

처음엔 회사에서 제공하는 학습 커리큘럼에 대한 아쉬움이 컸다.
html/css/JS, Python의 Flask, MySQL 을 이용하는 미니 프로젝트인데,
회원가입, CRUD, 세션 등 기본적인 기능을 구현하는 것에 대해서 기본 가이드 강의를 회사측에서 좀 해주고
미니프로젝트에 참여할 수 있게 도왔으면 어떨까 싶었다.

미니 프로젝트 시작 전에 이런 기능에 대한 가이드가 주어지고, 각자 학습할 수 있는 시간을 가졌으면
미니프로젝트를 하면서 삽질을 덜 할 수 있고, 더 완성도 있고, 성취감이나 자신감도 더 많이 갖게 되지 않을까 생각이 들기 때문이다.


2) 미니 프로젝트 전에 MySQL 사용하는 것에 대해 실시간 강의를 해주긴 했다.
실시간 강의이다보니 강사님도 코드를 짜다보면 에러가 날 수가 있는데,
어떤 때는 에러의 정체를 찾는데 시간이 한없이 소요되기도 해서, 강의에 집중이 어려운 경험을 했다.
이론 강의가 아닌 이상, 실시간 강의는 웬만했으면 지양했으면하는 바람이 생겼다.

(대개 학교에서 다루는) 조건과 해답이 정해져있는 문제를 푸는 것과는 달리,
개발을 하는 것은 개발 환경에 따라 에러가 날 수 있는 변수가 더 많은 것 같다.

강사는 물론 학습자에게도 실습 도중 에러가 나면,
바로 따라가질 못할 수가 있다.
그렇게 되면 그순간부터는 에러를 해결하는데 시간을 쏟을 것인가, 강의내내 가만히 강사가 하는 것을 지켜볼 것인가 선택을 해야한다.
그래서 실습을 하는 강의들은 웬만하면 미리 강의로 제작이 됐으면 더 간결하고 효율적이지 않을까 생각이 든다.


3) 물론 이런 덕분에 자기주도적인 학습하는 능력을 더 쌓게 된다.
발표날 조별마다 기능 구현 수준이 너무 다른 것을 보고,
같은 내용을 배웠는데, 왜 팀마다, 혹은 팀원마다 이런 차이가 날까 생각도 들었다.

사전에 개발 공부를 하고 부트캠프에 참여한 사람들이 있었겠지만, 그래봤자 뭐 얼마나 차이가 났겠는가?
프로젝트를 완성하기 위해서 자기 나름대로 학습자로서 자신의 상황과 문제를 잘 파악해나가는 차이도 있었을 것이고
또 더 끈기 있게 매달리고, 몰입한 것의 차이가 아닐까 생각도 들었다.

4) 어쨌든 협업 프로젝트 하고나면 실력이 크게 늘어나는 경험을 하게 된다.
씨름하고 있던 목표 기능이 구현될 때마다 짜릿한 경험은 개발 공부를 하는데 큰 힘을 가져다 준다.

부트캠프에서 가치를 찾아본다면
부트캠프의 에센스는 협업 프로젝트가 아닐까 싶다.
그래서 더 자주 협업을 하는 형태가 되면 좋을 것 같다.

팀원끼리 같이 으쌰으쌰 하기도 하고, 서로 코드 짜는데 도움을 주고 받기도 하고,
열정적인 다른 팀이나 팀원에게 자극을 받기도 하고, 회의 중에 새로운 아이디어도 생기고...

매번 팀이 새롭게 구성되면, 팀원간의 좀 어색한 분위기도 있지만
프로젝트가 진행되면서 기능 구현이 조금씩 되고,
마침내 발표전에 결과물을 볼 때 힘을 많이 얻는다.

5) 어떤 교육 플랫폼에 아무리 좋은 강의가 있다고 하더라도,
혼자서 학습을 한다면 고독할 것이고, 긴장감도 좀 적을지도 모르겠다.
물론 학습 스타일에 대해서 개인차가 있겠지만,
협업 방식에 비하여 혼자 공부하는 것이 진도나 학습량이 적을 것 같다.

이제 다음 주부터 Node.js 강의를 수강하면서 3주간 공부를 하는데,
Node.js 언어를 공부할 때는 이번에 파이썬 flask로 CRUD 및 회원가입 기능을 다루어봤던 것을
Node.js언어로 구현하면서 학습을 해보는 것이 목표로 설정한다.

현재시점에서 그 목표 결과물은 개인 블로그가 되지 않을까 싶은데,
사실 이렇게 좀 무난하고 재미없는 것보다는, 좀 쌈박한 건 없는지 다른 생각도 해봐야할 것 같다.
발표 때 보니,  기능구현이 덜 되어도 확실히 스토리가 있는 웹사이트가 재미있고 흥미가 있어보였다.

5. 프로젝트 개인 일지.

12/2 금요일
- 팀 구성, 뉴스피드 형식의 웹페이지 구현 계획에 대한 회의

12/5 월요일~ 12/7 수요일 낮 - 소득없이 계속 되는 기능구현 탐색기간
- git main에 각자 브랜치 생성
- 본격 팀 미니프로젝트 시작
- 개인페이지 이미지 업로드 및 출력을 위하여 업로드 및 다운로드 기능을 월요일에 구현
- 그 뒤, 거의 3일동안 목표 기능(with 세션)에 대해서 구글링 등 탐색을 했으나, 여전히 어떻게 구현할지 감이 안 와서 죽을맛. 지속되는 무기력감...

12/7 수 오후 - 진전
- flask를 활용한 외국인의 기초 강의를 찾게 되고 감을 찾아, 같은 기능을 탐색했던 동료 팀원과 내용을 공유 한후, 기능 개발에 돌입
- 무기력감에서 탈출, 몰입하면서 많은 진전이 생겼다.
- 라우팅을 하면 단순 페이지만 넘기는(야매식) 로그인 및 로그아웃 기능에 세션을 적용함
- 세션에 따른 개인페이지 첫 구현.

12/8 목 - git사용의 여전한 어려움
- 이전까지 구현된 CRUD 기능이 로그인을 하지 않아도 작동하였으나, 로그인 한 상태에서만 게시글 작성 및 수정, 삭제를 가능하게 만듦

밤 : github을 이용한 코드 merge... 시작.
- 사실 월요일에 일찍이 브랜치를 생성했으나, 유명무실한 상황.
- 깃헙 활용법을 여전히 모르는 상태라서 팀원간 pull, push가 목요일 오전까지 계속 없었다. 팀원이 계속 번갈아가며 pull을 push를 하면서 코드를 완성해가는...이 단순한 방식의 중요성을 잘 모르고 있었다.
- 그 전까지는 각자 기능 구현 연습을 하다가, 프론트가 구현된 팀원의 소스코드를 git clone으로 받아오고 , 그 코드에 맞춰 다시 코드를 구현하던 저차원의 방식을 유지함.
- 8일 저녁에 다시 통합을 하려는데 나의 푸시가 에러를 계속 뿜어서, 코드를 압축 파일로 만들어서 직접적으로 넘길 수밖에 없었다.

12/9 금
- 발표를 준비하던 오전에도 짬을 내서, 개인페이지에 업로드한 이미지파일을 페이지 내에서 출력되도록 함.
- 로그인한 유저 네임이 업로드한 파일명으로 저장되게 함.
- 오후에는 발표 시간...

 

https://github.com/vividnow/2nd_mini.NBC_B-10

 

GitHub - vividnow/2nd_mini.NBC_B-10

Contribute to vividnow/2nd_mini.NBC_B-10 development by creating an account on GitHub.

github.com

 

댓글