Home

    [미니터] 인증 - 인증 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. 로그인 ..

    [미니터] 인증

    1. 인증 : 사용자의 신원을 확인 애플리케이션에서 사용자가 로그인 할 때 아이디와 비밀번호를 확인하는 절차 가입 : 사용자의 아이디와 비밀번호 생성 가입한 사용자의 아이디와 비밀번호는 암호화 해서 저장 DB에 저장 로그인 시 본인의 아이디와 비밀번호 입력 비밀번호 입력 시 DB에 저장된 암호화 되어있는 비밀번호와 비교 비밀번호 일치 시 로그인 성공 로그인 성공 시 API 서버가 access token을 클라이언트에게 전송 로그인 성공 후 프론트엔드 서버에서 access token을 첨부하여 request를 서버에 전송 (매번 로그인 하지 않도록) 2. 사용자 비밀번호 암호화 암호화 하는 이유 : 외부 해킹공격, 내부의 DB 접근 시 비밀번호를 모르게 하기 위함 암호화 방법 : 단방향 해시 함수 사용 (..

    [미니터] DB연결 - 타임라인

    [미니터] DB연결 - 타임라인

    1. DB연결 함수 생성 def get_timeline(user_id): timeline = current_app.database.execute(text(""" SELECT t.user_id, t.tweet FROM tweets t LEFT JOIN users_follow_list ufl ON ufl.user_id = :user_id WHERE t.user_id = :user_id OR t.user_id = ufl.follow_user_id """), { 'user_id' : user_id }).fetchall() return [{ 'user_id' : tweet['user_id'], 'tweet' : tweet['tweet'] } for tweet in timeline] 2. HTTP 요청 http -..