[항해99] Week 1 [6.20 - 6.25]

Hajun Song·2022년 6월 26일
0

Weekly I Learned

목록 보기
1/7
post-thumbnail

[항해99] Week 1 [6.20 - 6.25]

0. ✅훈련소에 입소하다.

내가 고민을 했던가. 언제 선택을 했던가. 전역한지 1달도 안되어 흐름에 몸을 맡겨 부트캠프에 들어왔다. 동작신속! 빨리빨리 만들어라! 니 팀 버려?! 그렇게 정신을 혼미하고 정신없이 보낸 1주차. 전역 후 게을렀던 지난 20일들을 벗겨냈다.


1. ✅미니 프로젝트 (금쪽같은 내 시티)

응애 나 애기 스파르탄. 0주차는 역시나 임시입교 기간이었나. 분위기가 180도 뒤바뀌었다. 그렇게 나는 시작하자마자 영화 300의 시작 장면마냥 절벽으로 던져졌다.

🐱‍💻 NOTE
협업은 바람과 같지, 늘 내곁에 있으니
현직에서 어느 누구와 협업을 하게 될 지 모르니 이렇게 무작위로 사람을 마주하는 시간들을 조금 더 의미있게 사용해야겠다. 그렇게 걷지도 못하는 신생아는 1주차 첫 프로젝트에서 조장을 당했다.

미니 프로젝트를 기획하며 가장 먼저 마주한 어려움은 프로젝트의 조건이었다.

  1. jinja2의 사이드 렌더링을 이용 할 것.
  2. JWT 방식으로 회원가입 / 로그인 기능을 구현 할 것.

1-0. 🔍Jinja2

Flask 프레임 워크에서 사용되는 템플릿 언어, 웹 브라우저 쪽에서 HTML을 완성할 수 있는 사이드 랜더링의 이점 뿐만 아니라, Html 코드 내부에서 파이썬 코드를 이용해 연산작업이 수행 가능하도록 한다.

🐱‍💻 NOTE
어두움엔 강하고 담대하게!
jinja2 문법의 꼬부랑 중괄호들에 시작부터 긴장했던 첫 날. '기능만 구현하고 강의 들어봐야지.' '저걸 꼭 써야하나?'. 이런 생각들을 할 시간에 정면으로 마주했으면 훨씬 많은 시간이 절약되었을 것이다. 물리보다 어려운건 생각보다 적을지도..

1-1. 🔍JWT

JSON Web Token의 줄임말로, JSON 객체를 이용해 정보를 전달하는 기능이다.
예시로 이번 프로젝트에서는 사용자가 로그인 시 사용자의 id와 로그인 유효시간을 담아 발급했다. 그 후 사용자가 서버에 특정 요청을 할 때 요청에 해당 토큰을 포함하여 전달, 토큰이 유효하고 인증되었는지 검증 후 서비스를 제공했다.

예시)

  • 로그인 시 token 제공 (id와 만료시간을 담은 payload를 JWT로 encode)
#app.py
@app.route('/sign_in', methods=['POST'])
def sign_in():

#	... 입력정보 받아오기

    if result is not None:	#DB에 입력정보가 있으면
        payload = {
            'id': username_receive,
            'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')

        return jsonify({'result': 'success', 'token': token})	#token 제공
    else:	# DB에서 입력정보를 찾지 못하면
        return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
//login.html
function sign_in() {
  
//	... 정보 입력 후
                success: function (response) {
                    if (response['result'] == 'success') {	//API 성공시
                        $.cookie('mytoken', response['token'], {path: '/'});
                      //쿠키에 token 입력.
                        window.location.replace("/")
                    } else {
                        alert(response['msg'])
                      //'msg': '아이디/비밀번호가 일치하지 않습니다.'
                    }
                }
            });
        }
  • 기능 이용시 token을 이용해 로그인 여부 및 userNickname 확인
@app.route("/team/write", methods=["POST"])
def ariticle_post():
    # 쿠키에서 로그인 토큰을 받아온다.
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        userNickname = payload['id']	#token을 활용한 글쓴이 확인

#		... 글 작성
    except(jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
        return jsonify({'msg': "글 작성은 로그인을 해야합니다."})	#로그인 필요 전달

🐱‍💻 NOTE
의미없는 배움은 없다!
내 담당은 아니었던 회원가입/로그인 기능. 하지만 Merge 후 내가 구현한 게시판과 연결을 위해서는 어느정도 필요한 만큼은 이해해야 할 필요가 있었다. 피하지 말고 자처해서 배움을 마주하자. 모든 배움엔 의미가 있다. 새내기 잡스의 서예 시간이 그러했듯.

1-2. 🔍API

클라이언트의 요청에 따라 갖가지 기능을 제공하는 서버 창구. 목적과 성질에 따라 대표적으로 GET과 POST로 나뉜다.(PUT, DELETE, PATCH 제외)

  • GET은 서버에게 데이터를 요청할 때 사용된다. URL을 이용해 정보를 전달한다.
  • POST는 서버에 데이터를 새로 생성하거나 업데이트 할 때 사용된다.

🐱‍💻 NOTE
우린 답을 찾을 것이다. 늘 그랬듯이.
어찌어찌 표현은 했지만 아래의 회고에 적혀있듯 중간중간 API에 많은 문제들이 있었다. 멍청하게도 팀별 뉴스 불러오기(GET메서드)를 구현 할 때 서버에 데이터(특정 팀 크롤링을 위한 팀 이름)를 보내는 방법을 몰랐던 것. URL을 이용해 기껏 서버로 받아온 데이터가 {{teamtitle}} 그대로였다나..

1-3. ✅미니 프로젝트 회고

🐱‍💻 NOTE
계획은 최대한 꼼꼼히!
레이아웃, 디자인, 기능, API설계, 파일명, 역할배분 그리고 시간배분 그 모든 계획이 허술했다. 계획이 있고 없고의 시간 차이는 하늘과 만덕역 차이였다. (부산 3호선, 한국에서 가장 깊은 지하철 역)


2. ✅시작 된 전투뜀걸음

미니 프로젝트에서 살아 돌아온 나. 응애. 애기 스파르탄.
이번엔 알고리즘 마라톤이다. 마라톤은 능력 향상을 위해 달렸던 것이 아니었다. 살기 위해 달렸던 것도 아니었다. 살리기 위해 달린 것이었다.

페이디피데스는 도망칠 수 있음에도 그리스를 위하여.
나에겐 무엇일까.
지금을 살기 위해 도망치지 말고, 내 미래를 살리는 것을 두고 달려봐야겠다.

🐱‍👤 TODO
하루하루 최선을 다하기.
┣ 새롭게 배우는 메서드, 해결방식 정리하기 - javascript 모아보기 (velog)
└ 도움 많이 받고, 도움 많이 주기. 나눌 수록 커진다. - 알고리즘 모아보기 (Github)

profile
일단 똥을 싸라, 그리고 박수칠 때 까지 닦아라.

0개의 댓글