티스토리 뷰

Python(파이썬)

-> 귀도 반 로섬이 개발한 쉽고 간결한 문법을 가진 프로그래밍 언어

 

Flask

-> 파이썬으로 웹 서버를 만들기 위한 마이크로 웹 프레임워크

// 복잡한 도구 없이 최소한의 기능만 제공


# Flask에 /hello  만들고 브라우저에서 요청 보내면 화면에 나오도록 해보기

(mac기준)

VS Code 터미널

-> python3 -m venv venv (venv 폴더 생성)

-> pip3 install flask (Flask 설치) 

-> 코드 작성

from flask import Flask
//설치한 flask라는 라이브러리에서 Flask라는 도구 가져와서 쓸거야
app = Flask(__name__)
//Flask 애플리케이션 객체 생성
//__name__은 현재 실행 중인 파일 이름 저장하는 특별한 변수(서비스 시작 기준점)

@app.route('/hello')
//Decorator, 특정주소(URL)를 함수와 연결하는 안내판
def hello(): 
// def = define, 함수정의 선언
return "<h1>Hello, Flask!</h1>""
//함수가 끝날 때 브라우저에게 돌려줄 결과물 (html 태그 섞어서 보내면 큰 글씨)

if __name__ == "__main__":
//이 파일 직접 실행될 때만 아래 코드 실행해라
app.run(debug=True)
// 서버 가동
// debug=True는 코드 수정 후 저장하면 알아서 재시작, 에러이유도 알려줌(배포시 꺼야함)

 

서버 실행 및 확인

터미널에 python3 app.py를 입력 (venv폴더에 넣으면 안 됨)

터미널에 Running on http://127.0.0.1:5000 이라는 문구가 뜨면

브라우저 열고 주소창에 http://127.0.0.1:5000/hello 를 입력

화면에 **Hello, Flask!**가 나오면 성공

 


API(Application Programming Interface)

-> 컴퓨터와 컴퓨터, 혹은 프로그램 간에 소통하기 위한 약속(인터페이스)

-> 식당 비유 // 손님(클라이언트)가 메뉴판(API 사양) 보고 점원(API 서버)에게 주문

 

API : 서버가 어떤 특정한 서비스를 버튼화 시킨 것 (이전 정리 ver)

 

# HTTP 주요 메소드(서버에 요청)

 

1. GET (데이터 조회, Read)
-> 서버에서 데이터를 가져올 때 사용

-> 바디 없음 (보통 URL에 파라미터 포함)

-> 여러번 요청해도 결과 동일(멱등성 있음)

-> 캐싱 가능(성능 최적화)

// URL에 데이터가 그대로 노출됨 -> 민감한 정보는 GET으로 보내면 안 됨

<조회 API 전부 - 게시글 목록, 유저 정보 등>

 

ex. /users?id=1 
// ?id=1 -> 파라미터임

// 멱등 : 같은 요청을 여러 번 보내도 결과가 똑같음

2. POST (데이터 생성, Create)

-> 서버에 새 데이터를 생성할 때 사용

-> 요청 바디 사용(JSON 등)

-> 여러번 요청하면 중복 생성 가능(멱등성 없음)

-> 캐싱 안 함

<회원가입, 글 작성, 결제 요청 등>

 

ex. POST /users

Body: { "name": "kim" }

// 데이터가 요청 바디 안에 들어감

 

3. PUT (데이터 전체 수정, Replace) // 리소스 아예 갈아치울 때

4. PATCH (데이터 일부 수정) // 이름, 나이 등 특정 부분만 수정할 때

5. DELETE (데이터 삭제) // 리소스 제거, 멱등성 있음


# HTTP 데이터 전송 방식 (Content-Type)

1. query string

GET /users?id=1name=kim

-> URL에 붙어서 전달

-> 주로 GET 요청

-> Content-Type 없음 (URL 파라미터)

 

2. application/x-www-form-urlencoded

POST /users

id=1&name=kim

-> HTML form 기본 방식

-> key=value 형태

// 공백은 +로, 특수문자는 인코딩해서 전송

(ex. '@' -> '%40', '&' -> '%26'으로 변환)

 

3. multipart/form-data

POST /upload

(file + text 섞어서 전송)

-> 파일 업로드용

-> 데이터가 여러 파트로 나뉨

-> 이미지, 파일 포함 가능

 

4. application/json

POST /users

Body: { "id": 1, "name": "kim" }

-> 가장 많이 사용 (REST API 표준)

-> 구조화된 데이터 전달

// 프론트 ↔ 백엔드 기본 방식


#  Flask에서 받는 방식 차이

전송 방식 Content-Type Flask에서 받기
query string 없음 request.args
form-urlencoded application/x-www-form-urlencoded request.form
multipart/form-data multipart/form-data request.form, request.files
JSON application/json request.json

#추가과제

Gemini API키 발급을 받아서, Flask에서 Gemini 이용해서 메세지 주고 받는걸 간략한 API (형태로) 구현

// Gemini를 직접 쓰는 게 아니라 Flask 서버가 중간에서 API 역할을 하는 구조

 

1. Gemini API 키 발급

// Google AI Studio 접속 -> Get API Key (키 생성 후 복사)

 

2. Flask 서버 만들기

// 라이브러리 설치(Gemini 통신을 위한)

pip3 install google-generativeai python-dotenv

// app.ay와 같은 폴더에 .env 파일 만들고 발급받은 키 넣어줌

GEMINI_API_KEY=여기에_발급받은_실제_키_입력

 

3. 메시지 주고받는 API 구현

gemini가 작성해준 코드

 

4. API 테스트 (작동 구조)

Flask 서버를 실행(python3 app.py)한 뒤, POST 메소드로 테스트를 진행

-> Extensions에서 Postman 설치 (왼쪽 사이드바 로고 아이콘 생김)

-> 로그인 후 새로운 요청 만들기 (매소드를 GET -> POST로 변경)

-> URL 입력창에 http://127.0.0.1:5000/api/chat을 입력

// 내 컴퓨터(127.0.0.1)의 수많은 프로그램 중 5000 포트로 들어가서, 그 안의 /api/chat이라는 기능을 찾아가는 경로

 

데이터(Body) 담기:

입력창 아래 탭 중에서 **[Body]**를 선택

형식을 **raw**로 선택 -> 오른쪽 끝의 드롭다운에서 **JSON**을 선택

아래 내용을 입력창에 넣기

 

{

"message": "안녕! API 연결 테스트 중이야."

}

 

보내기(Send):

오른쪽의 파란색 [Send] 버튼을 누르기

하단 Response 창에 Gemini의 답변이 담긴 JSON 데이터가 나오면 성공


[문제해결]

 

계속 아래와 같은 에러 메시지 뜸.

{
    "error": "404 models/gemini-1.5-flash is not found for API version v1beta, or is not supported for generateContent. Call ListModels to see the list of available models and their supported methods."
}

 

gpt랑 gemini한테 물어봐도 해결이 안 되서

에러메시지 영어로 구글링 함. 

해외 개발자 사이트 댓글 보고 해결함.

 

" the gemini-1.5 are close, but, modelos, 2.5-flash, 2.5 pro, 2.0.flash working "

 

위 코드에서 모델만 2.5 flash로 변경.

model = genai.GenerativeModel('gemini-2.5-flash')

 

2.0-flash는 전에도 시도 해봤었고, 재시도에서도 안 됨

확인 결과 2.5-flash2.5-pro는 작동함

 

성공!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함