FastAPI를 이용한 DB 조회 API 제작

Michael Kim·2022년 7월 26일
0

Intro

기술 면접에서 이러한 질문을 받은 적이 있다.

"API 제작해본 경험이 있을까요?"

백엔드 경험이 거의 없던 나는 역시 '아니오'라고 대답할 수 밖에 없었다.(Elasticsearch의 CRUD API를 이용한 데이터 조회 경험이라도 말해볼 걸 그랬다...)

간단한 API 제작해보는 경험도 필요할 것 같다.

어떤 API를 제작할 것인가?

이번에 HTTP와 REST API에 대해 공부도 할 겸, 간단하게 백엔드 프레임워크를 사용하여 API를 제작해보려고 한다.

Q. 그렇다면 어떤 API를 제작해볼 것인가? 현업에서는 실제 어떤 API 요청이 들어올까?

  • 다른 ML 엔지니어나 분석가로 부터 데이터를 조회 및 검색하는 API 제작 주문이 들어올 수 있다고 한다.
  • 그렇다면 Oracle SQL을 공부하는 김에 Oracle DB를 조회하는 API를 제작하면 좋을 것 같다. (나중에 알게된 사실인데 ORDS 라는 Oracle에서 제공하는 REST API가 존재한다고 한다...)

Q. 프레임워크는 FastAPI를 사용할 예정이다. 왜 FastAPI인가?

  • 일단 나는 Python 사용자고, 선택지로는 Django, Flask, FastAPI가 있었다.
  • Django는 다른 둘과 비교하자면 매우 복잡한 편이다.
  • Flask와 FastAPI는 간단하게 API를 만들 수 있어서 지금 프로젝트에는 둘 다 적합하다.
  • FastAPI가 막 뜨고 있는 툴이면서 훨씬 성능이 좋다고하니 FastAPI를 선정하게 되었다.

정리하자면, FastAPI를 이용하여 Oracle DB를 조회하는 API를 제작해보려고 한다.

orcl.py : Oracle 연결

  • Oracle에서는 python 사용자를 위해 cx_oracle 모듈을 제공한다. 해당 모듈을 이용하여 Oracle DB에 접근이 가능하다.
  • 접속에 필요한 정보를 connect 함수에 넣고 cursor를 생성한다. cursor.execute 함수를 통해 sql을 입력할 수 있게 된다.
  • 그리고 fetchall 함수를 이용하여 sql 쿼리 결과 테이블을 가져온다.

main.py : FastAPI 서버

  • get 메서드를 통해 table을 조회할 수 있도록 하였다.
  • 'host:port/<테이블이름>'
    • 쿼리를 입력하지 않을 경우, oracle에 'SELECT * FROM <테이블이름>' sql 쿼리를 보내면서 테이블을 모두 조회하도록 설정하였다.
  • 'host:port/<테이블이름>?empno=<숫자>'
    • empno 쿼리를 이용할 경우 테이블에서 empno 값과 매칭되는 레코드들을 가져오도록 설정하였다.

서버 실행 및 테스트

uvicorn main:app --reload --host 0.0.0.0 --port 8000
  • uvicorn 명령어를 통해 모든 host에서 8000 포트로 접속 가능하도록 서버를 실행시켰다.

  • 위와 같이 다른 환경에서 URL을 통해 API가 작동하는 것을 확인할 수 있었다.
profile
정리하고 복습하고 일기도 쓰고

0개의 댓글