졸업 작품을 만드는데, langchain을 사용해야했다. 하지만 랭체인은 java에서는 지원되지 않고 파이썬에서만 지원된다. 하지만 벡엔드는 전부 java 기반으로 구현했다. 그래서 한번 호출할건데, fastapi를 쓸 지, aws lambda를 사용할 지 고민하다가, 두개 다 구현은 해보았고, 비용이 덜 드는 쪽으로 선택할 예정이다.
AWS Lambda는 서버리스 컴퓨팅 서비스로, 개발자가 서버를 관리하지 않고도 코드를 실행할 수 있게 해준다. 함수 단위로 코드를 실행하고 사용한 컴퓨팅 시간에 대해서만 비용을 지불하면 된다. API 요청, 파일 변경 같은 이벤트에 반응해서 자동으로 실행되고 필요에 따라 자동으로 스케일링된다.
Lambda 주요 장점
AWS Lambda 콘솔에 들어가서 함수 생성 버튼을 누르면 아래 화면을 볼 수 있다.

함수 이름과 런타임, 아키텍쳐를 선택해준다.

"함수 생성" 버튼 누르기 후 필요한 설정을 완료하면 함수가 생성된다.

구성 → 환경변수 → 편집에 들어가서, 환경변수 설정을 해준다.

원래는 아래와 같이 패키지를 설치하려고 했다.
# 디렉토리 생성
mkdir lambda_package
# 필요한 패키지 설치
pip install -t lambda_package requests>=2.28.0 langchain>=0.1.0 langchain-o...
# 코드 파일 복사
Copy-Item paste.txt lambda_package/lambda_function.py
# 패키지 압축 (Windows PowerShell 방식)
Compress-Archive -Path lambda_package\* -DestinationPath lambda_deployment.zip
근데 langchain, requests, dotenv가 임포트가 안되는 오류가 발생해서, 그냥 openai를 직접 불러오고, requests 모듈 대신에 urllib을 사용했다. 그리고 dotenv 대신에 환경변수는 하드코딩했다.
Lambda 콘솔에서 "계층" 버튼을 누르고 "계층 생성" 버튼을 클릭한다.



ADD A LAYER 버튼을 누르고, 사용자 지정 계층 openai_310, 버전 3을 선택하고 추가 버튼을 클릭한다.



구성 → 일반구성 → 편집에서 제한 시간을 알맞게 늘려준다.


HTTP API 구축 버튼을 눌러 API Gateway를 생성한다.

POST 방식의 요청을 할 것이므로 POST를 선택하고 계속 다음 눌러서 생성 버튼을 누른다.




이제 API Gateway가 생성되고 Lambda 함수와 연결된다.

이제 API 게이트웨이로 요청이 들어오면 요청이 schedule-extraction-api로 전달된다.
Lambda 함수 코드를 작성한 후 테스트 케이스를 만들어서 테스트해본다.


테스트 이름과 테스트 케이스를 Event Name과 Event JSON에 입력한 후 Save 버튼을 눌러서 저장한다.

실행 버튼을 누르고 결과를 확인하면 Status: Succeeded가 나오는 것을 확인할 수 있다.

Lambda와 API Gateway를 조합하면 서버 관리 없이도 Java 백엔드에서 Python 코드를 실행할 수 있어서 편리하다. 비용도 사용한 만큼만 내기 때문에 자주 호출하지 않는 기능이라면 이렇게 구현하는 게 좋은 선택일 수 있다.