미니터가 제공하는 핵심 기능들
사용자에게 이름, 이메일, 비밀번호 등의 기본적인 회원 정보를 HTTP 요청을 통해 받은 후 시스템상에 저장한다.
필요한 정보들
다음은 회원가입 기능을 구현하는 엔드포인트이다.
from flask import Flask, jsonify, request
app = Flask(__name__)
app.users = {}
app.id_count = 1
@app.route("/sign-up", methods=['POST'])
def sign_up():
new_user = request.json
new_user["id"] = app.id_count
app.users[app.id_count] = new_user
app.id_count = app.id_count + 1
return jsonify(new_user)
from flask import Flask, jsonify, request
app.users = {}
app.id_count = 1
@app.route("/sign-up", methods=['POST'])
new_user = request.json
new_user["id"] = app.id_count
app.users[app.id_count] = new_user
app.id_count = app.id_count + 1
return jsonify(new_user)
📌 3번에서의 id 값을 증가시키는 방식은 문제가 있을 수 있다.
만일 HTTP 요청들이 동시에 전송될 경우 id 값이 잘못 지정될 가능성이 있다.
이러한 문제를 예방하기 위해서 atomic increment operation
을 사용해야 한다.
하지만 추후에 데이터베이스에 데이터를 저장할 것이고, id 값은 데이터베이스에서 자동 생성을 해준다.
*atomic increment operation
: 여러 스레드(thread)가 동시에 값을 증가시킬 수 없고, 한 번에 한 스레드만 값을 증가시키는 것
이전 게시글에서 만들었던 app.py 파일에서 "/ping" 엔드포인트 아래에 회원가입 엔드포인트를 다음과 같이 추가한다.
from flask import Flask, jsonify, request
app = Flask(__name__)
app.id_count = 1
app.users = {}
@app.route("/ping", methods=['GET'])
def ping():
return "pong"
@app.route("/sign-up", methods=['POST'])
def sign_up():
new_user = request.json
new_user["id"] = app.id_count
app.users[app.id_count] = new_user
app.id_count = app.id_count + 1
return jsonify(new_user)
터미널을 열고 app.py 가 위치한 디렉토리로 이동하여 아래의 명령을 입력해보자.
이제 실제로 회원가입 요청을 보내 보자.
앞서 했던 것처럼 httpie를 사용하여 터미널에서 회원가입 HTTP 요청을 보내 보자.
📌️ httpie를 사용해서 POST로 JSON 데이터를 보내는 것은 아주 간단하다.
HTTP 요청을 보내는 엔드포인트 주소 다음에 field=value의 형태로 보내면 된다.
깔끔한 파이썬 탄탄한 백엔드 / 저자: 송은우