들어가며
최근 들어, fast api 실습을 진행했었다. 실습을 진행하며, api 서버가 열리지 않는? 경험을 했었다. 그 이유는 내가 host라는 개념에 대해서 명확히 인지하지 못하고 있었기 때문!
관련해서, fast api 앱을 실행하는 예제와 host개념에 대해서 간단히 정리하려고 한다.
fast-api 예제
우선, fast api와 uvicorn을 설치해준다.
pip install fastapi
pip install uvicorn
다음으로, 간단한 main.py를 만들어준다.
https://fastapi.tiangolo.com/ko/tutorial/first-steps/
예제는 여기서 가져왔다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello World"}
그리고, 터미널에서 uvicorn을 이용해 main.py를 실행해주면
uvicorn app:main.py --reload
API 서버에 접속할 수 없다고 나온다! 왜 그럴까?
에러 해결
일단, 내 환경에 대해서 먼저 설명하겠다.
현재, 내컴퓨터(mac)에서 GCP VM instance 터미널을 이용하고 있는 상황이다. 그렇다면, 여기서 질문 앞선, 코드를 실행하면 host는 기본적으로 localhost가 된다. (127.0.0.1은 로컬호스트를 나타내는 특별한 IP 주소이다.)
uvicorn app:main.py --reload
그렇다면, 여기서 질문 내 컴퓨터(=맥)와 GCP Server의 호스트는 같을까 다를까?
당연히! 다르다. 즉, API접속이 안됐던 이유는 앱 실행 디폴트 호스트 값이 로컬 호스트인데 GCP서버의 로컬호스트와 내 컴퓨터의 로컬 호스트가 다르기 때문이다.
그래서, 아래와 같이 코드를 수정해주어야 한다.
uvicorn app:main.py --reload --host 0.0.0.0 --port 8000
0.0.0.0은 IPv4체계의 모든 IP주소를 의미한다. 즉, 누구나 여기 API앱에 들어와도 된다는 의미이다. 이후, GCP의 공인IP(=외부)주소와 8000포트를 입력하면 fastAPI 앱에 접속할 수 있게 된다. http://공인IP:8000
Host 뭐길래?
그래서, 지금까지 내용을 정리해보자면 GCP서버의 로컬호스트와 내 컴퓨터의 로컬호스트가 다르기 때문에 앱 실행을 못했다!이다. 그렇다면, 호스트가 뭐길래?
호스트라는 의미는 매우 광범위한데, IP(Internet Porotocol)안에서 보자면 호스트 = 컴퓨터이다. 즉, 인터넷이라는 도구를 매게로 각각의 호스트들이 양방향으로 정보를 교환하는 것이다.
다시, 앞선 코드를 살펴보자.
uvicorn app:main.py --reload --host 0.0.0.0 --port 8000
여기서 host(=컴퓨터) 라고 생각했을 때, 앱을 실행한 서버의 "공인IP"주소만 알면 누구나, 8000포트로 들어오라는 의미가 된다. host=가 주인이라는 뜻이 있으니.. 마치 host가 앱의 "주인"이 아닌가? 라는 헷갈림이 처음에 있었는데, host를 우리가 사용하는 각각의 컴퓨터로 생각하면 편할 것 같다.
'딥상어동의 딥한 프로그래밍 > 엔지니어링' 카테고리의 다른 글
[도커] 컨테이너 삭제 (0) | 2022.12.08 |
---|---|
[ubuntu] ssh connection timed out (0) | 2022.08.16 |
오라클 클라우드(2) - VM 생성기(Compartment, VCN) (0) | 2022.08.07 |
오라클 클라우드(1) - 계정 생성, 공짜를 누리려는 자 그 무게를 견뎌라 (0) | 2022.08.07 |
Ganglia Web Interface 관련 링크 모음 (0) | 2022.07.29 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!