본문 바로가기
항해99/WIL

[항해 99] WIL 1주차 - 미니 프로젝트, 알고리즘 (후기)

by lucian 2022. 7. 17.

서론

  • 7.11~ 부터 본격적인 항해99 프로젝트 시작
  • 아침 9시 ~ 저녁 9시까지 하루 총 12시간(+알파)  

일정

  • 7.11 (월): 미니 프로젝트팀 배정 및 OT
  • 7.11 (월) ~ 7.14 (목): 미니 프로젝트 제작
  • 7.15 (금) : 알고리즘 문제 풀이 팀 배정 및 OT
  • 7.15 (금) ~ 7.16 (토): javascript 알고리즘 문제 풀이 (난이도 하, 하중)

미니 프로젝트

  • 항해99를 하기 전 부여받은 웹개발 프로젝트 강의를 바탕으로 회원가입, REST API 기능을 구현
  • 코로나19상황도 풀렸지만 항해99 참여 덕분에 갈 수 없는 여행을 웹서비스에 녹여보자 생각 
  • 글/이미지 서버단에 올리기, 로그인/회원가입, 댓글 작성, 페이지 전환(URL 파라미터), 글 삭제 기능 구현
  • Python, Flask, Jinja2, Ajax, HTML, JS, CSS

미니프로젝트 간단 설명

  • 메인페이지 : 유저들이 올린 사진과 글을 한눈에 볼 수 있는 페이지
  • 글작성 페이지 : 글/사진을 업로드하여 메인페이지에 카드 생성
  • 댓글 작성 및 보기 페이지 : 자신이 가입한 아이디로 댓글을 작성하고 카드마다 올린 댓글을 보여주는 페이지 
  • 로그인/회원가입 페이지 : 회원가입으로 아이디 생성 후 로그인 시 글 작성 및 댓글 기능이 가능
  • 글 삭제 : 메인페이지에서 원하지 않는 카드를 삭제하기

최종적으로 구현한 기능들

  • 글/이미지 서버단에 올리기, 로그인/회원가입, 댓글 작성, 페이지 전환(URL 파라미터), 글 삭제 기능 구현
  • 기술 스택 : Python, Flask, Jinja2, Ajax, HTML, JS, CSS, AWS, MongoDB

배운점

  • 팀원들과의 협업
  • GitHub/ Git
    • github/git의 pull / commit / push 등의 흐름을 살펴보고 사용해봄.
    • branch의 기능을 알고 왜 쓰는지를 알게됨.(main에 넣을 시 프로젝트가 폭파됨을 확인함ㅋㅋ)
  • JWT vs 세션 - 쿠키 (로그인/ 로그아웃)
    • JWT은 Json Web Tocken의 약자
      • 구성 방식은 Encoded Header + "." + Encoded Payload + "." + Verify Signature 로 구성 ( "."이 얘네들을 구분함)    -    보통 Header에는 암호화한 방식, 타입  /  Payload에는 id와 exp(유효 기간)   /   verify Signature에는 Secret Key, Base64방식으로 인코딩한 헤더와 페이로드가 들어간다.

      • 진행 방식 : 사용자가 로그인하면 서버에서 JWT를 생성 후 클라에게 쿠키에 첨부하여 발급    >   클라는 JWT를 저장했다가 인증이 필요할 때 쿠키에 JWT를 첨부하여 서버에 전송    >     서버는 Verify signature를 Secret Key로 복호화 후 조작여부나 유효기간을 따져 검증이 완료되면 Payload를 디코딩하여 사용자에게 맞는 데이터를 가져온다.

      • 장/단점 : 편하다, 세션처럼 별도의 저장소가 필요가 없다!, 확장성이 뛰어나다.(토큰기반이면 다른 시스템에도 접근이 가능하다 - 서버들끼리 협의를 봤을 때...왠만한 협의 바랍니다. 3주후에 뵙죠.)      /      이미 발급된 JWT를 돌이킬 수 없다.(유효기간이 끝날때까지 사용 가능) , 이 시간 동안 악의적인 사용자는 정보를 탈탈 털 수 있다고함,  토큰의 길이가 겁나게 김
    • Session
      • 진행 방식 : 클라가 로그인 요청할 때, 서버는 확인 후 사용자의 고유한 ID값을 부여하여 세션 저장소에 저장 후 클라에게 쿠키에 세션 ID를 첨부하여 전송함     >     클라는 서버에게 필요할 때마다 세션ID를 쿠키에 첨부하여 보냄     >    서버는 쿠키의 세션ID를 받아 세션 저장소에서 대조한 후 대응되는 정보를 가져옴    >    인증이 완료되면 서버는 클라에게 맞는 데이터 전송

      • 장/단점 : 세션ID자체에 유의미한 값이 없어서 안전함,  ID,PW를 한번 확인하면 세션ID를 생성하기 때문에 일일이 회원정보를 확인할 필요가 없이 세션저장소에서 세션ID만 확인함        /       세션ID를 탈취당해도 안에 정보가 없어서 안전하지만 그 ID를 이용해서 서버에 클라인척 정보를 요청할 수 있음(세션 하이재킹 공격),   서버에 세션저장소가 필요하기에 서버의 부하가 높아짐
  • API
    • API는 서버와 클라가 서로 통신할 수 있게 하는 일종의 약속된 메커니즘? 이라 생각한다.
    • 다양한 통신 방법이 있는데 대표적인 걸로 GET, POST방식이다.
      • GET은 클라가 정보를 주지 않고 요청하여 서버가 데이터를 클라에게 전송해준다.
      • POST는 클라가 가진 정보를 주면서 요청하면 서버는 그에 알맞게 데이터를 클라에게 전송해준다.
      • Ajax나 Jinja2 등 다양한 통신 방법이 있음(Jinja2는 html 문서 내에서 파이썬 언어를 쓸 수 있게 해줌)(
      • Ajax는 js 단에서 작성되는 듯)
      • 이 두가지 요청으로 삽입, 삭제, 수정 등 다양한 것들이 가능하다.
  • Mongo DB
  • JQuery, Jinja2 템플릿
  • CSS, 부트스트랩, Bulma

나의 생각과 이야기

  • 이제 본격적인 시작을 느꼈다. 9to9는 정말 사람을 피폐하게 만든다. 그만큼 공부하는 양도 많기에 건강과 정신을 갉아 실력을 쌓는 느낌
  • 새로운 분들과 바로 프로젝트를 하는 것이 예전 대학생 때의 조별과제 같지만 함께 해야할 업무를 수행하는 직장 동료느낌이 강하다. 협업의 느낌을 체험하고 있다.
  • 나의 빈약한 의지를 알아서 챙겨준다ㅋㅋㅋㅋ WIL도 강제적이라 좋다 ㅎㅎㅎ ㅋㅋㅋㅋㅋ
  • 다들 열심히 하는 분위기이기 이 분위기에 휩쓸리기 너무 좋다. 좋은 환경은 사람을 변화시키지
  • 잘하는 분들이 너무 많다. 나름 열심히 했음에도 불구하고 깔끔하게 코딩하고 깔끔한 결과를 보여준 조들이 많다. 함께 하려면 분발해야겠다....
  • 금요일부터 주특기 언어로 알고리즘 문제풀이가 시작됐다. 난이도가 낮은 것들이라 예전에 조금 했던 것들이 도움이 되지만 한편으론 걱정이다. 다음 주에 시작될 주특기를 사전에 공부해야 하는 것 아닐까...Node.JS
  • 첫 프로젝트를 진행한 동료들에게 고마움을 느낀다. 열심히 해주셨고 즐겁게 했다.
  • 또한 알고리즘 팀도 재밌다 ㅋㅋㅋ 드립을 잘 쳐보고 싶다. 

댓글