전체 글

전체 글

    [미니터] Test - 테스트 자동화

    [미니터] Test - 테스트 자동화

    1. 테스트의 종류 매뉴얼 테스트 : 사람이 직접 실행 장점 : 누구나 직관적으로 계획없이 가능 단점 : 실행 속도가 느리고 시간이 오래걸림. 자주 하기가 힘들고 정확도가 떨어진다. 테스트 자동화 : 반복적이고 자주 실행될 수 있도록 함 2. 테스트 방법 UI test / End-To-End test : 사용자가 실제로 사용하는 방식과 동일하게 시스템의 UI를 통해서 테스트한다. - 단점 : 프론트엔드에서 백엔드 까지 모든 시스템을 실행해야 할 수 있음. 시간이 많이 걸리며 속도도 느리다. 화면 렌더링을 모두 자동화 시키기 까다롭다. -> 자동화에 어려움이 있다. integration test : 테스트 하는 서버를 실제로 실행하며 테스트 HTTP 요청이나 서버 실행 요청 명령 등을 실행하여 테스트 - ..

    인증완료! 프론트엔드 구현!

    인증하는데 계~속 decode에러의 연속.. 덕분에 bcrypt가 암호화 하는 과정도 알게되었고 DB에 어떻게 들어가야되는지 비밀번호 확인은 어떤식으로 하는지도 알게 되었다. 에러는 오히려 공부에 도움이 된다! (하지만 만나고싶지 않다) 지난 프로젝트가 또 생각나는 하루였..다. 토큰과 쿠키에 대해서 잘 와닿지 않았는데 직접 요청 날리고 생성되는거 보니까 신기했다.! http 통신에 대해서 좀 더 알아봐야겠다. 그리고 네트워크도 공부해야지. 프론트엔드는 부트스트랩과 js로 만들어놓은 소스가 있어서 로컬 서버와 연결만 해주었다. 버튼을 계속 눌렀는데 내가 생각했던 것 처럼 되지 않아서 왜그런가 했더니 그냥 엔드포인트로 연결만 해주는거였고 데이터를 불러오지는 못했다. 앞으로 구현하는 방법이 나오지 않을까 싶..

    [미니터] 인증 구현시 ValueError : Invalid salt과 AttributeError: 'str' object has no attribute 'decode'에러

    1. ValueError : Invalid salt 에러 sign-up(회원가입) 후 로그인에서 비밀번호를 확인하는 과정에서 에러가 났다. # sign-in 엔드포인드 # json으로 들어온 값 중 password를 해시해서 DB insert new_user['password'] = bcrypt.hashpw(new_user['password'].encode('UTF-8'), bcrypt.gensalt()) # 사용자 로그인 엔드포인트 password = credential['password'] # 입력으로 들어온 비밀번호 저장 bcrypt.checkpw(password.encode('UTF-8'), user_credential['hashed_password'].encode('UTF-8')) hashpw(..

    [미니터] 인증 - tweet, follow, unfollow에 decorator 추가

    [미니터] 인증 - tweet, follow, unfollow에 decorator 추가

    app.py 코드 수정하기 # 트윗올리기 @app.route('/tweet', methods = ["GET","POST"]) @login_required # 인증 데코레이터 추가 def tweet() : user_tweet = request.json user_tweet['id'] = g.user_id # flask 객체 g tweet = user_tweet['tweet'] if len(tweet) > 300 : return '300자를 초과했습니다', 400 insert_tweet(user_tweet) return " " , 200 # 팔로우 @app.route('/follow', methods = ["GET","POST"]) @login_required # 인증 데코레이터 추가 def follow() ..

    [미니터] 인증 - 인증 decorator 함수

    인증 절차가 필요한 tweet, follow, unfollow 엔드포인트에 추가. 함수에서 같은 기능을 필요로 하는 경우 : 파이썬 데코레이터를 활용하여 구현. 파이썬 functools 모듈의 wraps decorator 함수를 사용한다. 엔드포인트에 추가할 decorator 함수 import jwt from functools import wraps from flask import current_app, request, Response def login_required(f) : @wraps(f) def decorated_function(**args, **kwargs) : access_token = request.headers.get('Authorization') if access_token is not ..

    [MySQL] JOIN

    [MySQL] JOIN

    JOIN : DB 내에 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블로 표현 1. JOIN (INNER JOIN) SELECT 컬럼 FROM 기준테이블명 별칭 JOIN 참조테이블명 별칭 ON 조건 ON 절의 조건을 만족하는 데이터만 가져옴, WHERE 절에서 사용할 수 있는 모든 조건 사용가능 2. LEFT JOIN SELECT * FROM 기준테이블 LEFT JOIN 참조테이블 ON 조건 기준 테이블을 기준으로 참조 테이블을 조합. ON 절의 조건을 만족하지 않은 경우 : 기준테이블의 값은 모두 가져오지만 참조테이블의 필드 값은 NULL로 표시 3. RIGHT JOIN SELECT * FROM 기준테이블 RIGHT JOIN 참조테이블 ON 조건 참조 테이블을 기준으로 기준 테이블을 조합 ON ..

    [MySQL] GROUP BY , HAVING, ROLLUP

    [MySQL] GROUP BY , HAVING, ROLLUP

    1. GROUP BY 그룹으로 묶어줌 집계함수를 함께 사용 AVG(): 평균 MIN(): 최소값 MAX(): 최대값 COUNT(): 행의 개수 등 효율적인 데이터 그룹화 AS를 사용하여 그룹화 된 컬럼명을 변경할 수 있음 2. HAVING WHERE과 비슷한 개념으로 조건 제한 집계 함수에 대해서 조건을 걸 때 반드시 GROUP BY 절 다음에 나와야 함 3. ROLLUP 총합 또는 중간합계가 필요할 경우 각 나라의 도시들의 인구 합을 합쳐서 중간에 보여줌

    [미니터] 인증 - sign-up, login

    1. 회원가입 시 비밀번호 암호화 import bcrypt @app.route("/sign-up", methods=['GET','POST']) def sign_up(): new_user = request.json new_user['password'] = bcrypt.hashpw( new_user['pasword'].encode('UTF_8'), bcrypt.gensalt() ) new_user_id = insert_user(new_user) new_user = get_user(new_user_id) return jsonify(new_user) Line 6-8 : hashpw() 함수를 사용하여 사용자의 비밀번호 UTF-8 엔코딩으로 byte로 변환 후 salting을 추가하여 암호화 한다. 2. 로그인 ..