CODINGTEST

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณผ์ œ ํ’€์ด][์‹ค๋ฌด ์—ญ๋Ÿ‰ ๊ณผ์ œ] API ์„œ๋ฒ„ ๊ฐœ๋ฐœ ํŒŒ์ด์ฌ

๐Ÿฐํžˆํžˆ 2023. 10. 3. 15:32
๋ฐ˜์‘ํ˜•

https://school.programmers.co.kr/skill_check_assignments/430

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋“ค์–ด๊ฐ€๊ธฐ์ „์—

ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๊ณ  ํ”Œ๋ผ์Šคํฌ ์จ๋ณธ ๊ฒฝํ—˜ ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ๊ฐ™๋‹ค

 

ํŒŒ์ด์ฌ์œผ๋กœ ๊ณผ์ œ๋Š” ์ž˜ ์—†๊ธฐ๋„ํ•˜๊ณ  ํ•ด๋‹น ๋ฌธ์ œ๋„ ์ž๋ฐ”๋กœ ํ’€์ดํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์„œ ํŒŒ์ด์ฌ์œผ๋กœ ํ’€์ดํ•˜๋ ค ํ•œ๋‹ค.

 

main.py์— ๊ณผ์ œ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผํ•œ๋‹ค.

์ž‘์„ฑ ์™„๋ฃŒ ํ›„์—๋Š” python3 main.py๋กœ ์ฝ”๋“œ ์‹คํ–‰ ํ›„ ํ„ฐ๋ฏธ๋„์—์„œ curl๋ช…๋ น์–ด๋กœ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ํ›„ ์ฝ”๋“œ ์ œ์ถœ

 

์š”๊ตฌ ์กฐ๊ฑด

1. ์„œ๋ฒ„๋Š” ์ •์ƒ์ผ ๊ฒฝ์šฐ, 200 ๊ฐ’ ๋ฆฌํ„ด

2. body๋Š” JSON ํ˜•ํƒœ์ด๋ฉฐ,  `Content-Type`์„ `application/json` ์œผ๋กœ ์„ค์ •

3. IP ์ฃผ์†Œ๋Š” 0.0.0.0, PORT๋Š” 5678

 

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ

0.0.0.0:5678 ๋กœ ์ ‘๊ทผ ์‹œ 200 ๊ฐ’ ๋ฆฌํ„ด ๋ฐ jsonํ˜•ํƒœ๋กœ "message" : "server check" ๊ฐ’ ์œผ๋กœ ์‘๋‹ต

 

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ

0.0.0.0:5678/sum ๋กœ ์ ‘๊ทผ ์‹œ 200๊ฐ’ ๋ฆฌํ„ด ๋ฐ ์ฃผ์–ด์ง„ ํŒŒ์ผ์„ ์ฝ๊ณ  ํ•ด๋‹น ํŒŒ์ผ์—์„œ post_count ํ•„๋“œ์˜ ํ•ฉ์˜ ๊ฐ’ ๋ฆฌํ„ด

jsonํ˜•ํƒœ๋กœ "sum" : 0000

0000์€ ์ž„์˜์˜ ์ˆซ์ž ์ž„.

 

๋ฌธ์ œ ํ’€์ด

์šฐ์„  0.0.0.0, 5678ํฌํŠธ๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ Flask ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ํ•œ๋‹ค.

 

requirements.txt

Flask

 

ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ pip ๋ช…๋ น์–ด๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

pip3 install -r requirements.txt

 

host 0.0.0.0, port 5678๋กœ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์ด๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ python3 main.py ์ž…๋ ฅ ์‹œ ํ•ด๋‹น ํ˜ธ์ŠคํŠธ๋ž‘ ip๋กœ ๋œจ๋Š” ๊ฒƒ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    print("Hello World")


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5678,debug=True)

 

curl -X GET 0.0.0.0:5678 -H 'Content-Type: application/json'

200๊ฐ’๊ณผ message: server check ๋ฆฌํ„ด ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑํ•œ๋‹ค.

 

json๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํŒŒ์ด์ฌ ํ•จ์ˆ˜ return ํ•  ๋•Œ, jsonify๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

200๊ฐ’๋„ ๋’ค์— ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 return jsonify(data)

 

 

curl -X GET 0.0.0.0:5678/sum -H 'Content-Type: application/json'

200๊ฐ’๊ณผ sum: ???? ๋ฆฌํ„ด ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ jsonํŒŒ์ผ์„ ์ฝ๊ณ  ํ•„๋“œ ๊ฐ’ ์ค‘ post_count ๊ฐ’๋งŒ ๋ˆ„์ ํ•˜์—ฌ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

import json
post_count = 0

file_path = "./data/input/user.json"
with open(file_path, 'r', encoding="utf8") as file:
    json_data = json.load(file)

for data in json_data:
    post_count += (data['post_count'])

print(post_count)

 

 

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ ์ ˆํžˆ main.py์— ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•