AWS Lambda와 Python LangChain 활용하기

나근민·2025년 4월 11일

AWS Lambda와 Python LangChain 활용하기

졸업 작품을 만드는데, langchain을 사용해야했다. 하지만 랭체인은 java에서는 지원되지 않고 파이썬에서만 지원된다. 하지만 벡엔드는 전부 java 기반으로 구현했다. 그래서 한번 호출할건데, fastapi를 쓸 지, aws lambda를 사용할 지 고민하다가, 두개 다 구현은 해보았고, 비용이 덜 드는 쪽으로 선택할 예정이다.

AWS Lambda란?

AWS Lambda는 서버리스 컴퓨팅 서비스로, 개발자가 서버를 관리하지 않고도 코드를 실행할 수 있게 해준다. 함수 단위로 코드를 실행하고 사용한 컴퓨팅 시간에 대해서만 비용을 지불하면 된다. API 요청, 파일 변경 같은 이벤트에 반응해서 자동으로 실행되고 필요에 따라 자동으로 스케일링된다.

Lambda 주요 장점

  • 서버 관리 없음
  • 자동 확장
  • 사용한 만큼만 지불
  • 여러 프로그래밍 언어 지원 (Node.js, Python, Java, Go 등)
  • 다른 AWS 서비스와 쉽게 통합

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 계층(Layer) 추가하기

Lambda 콘솔에서 "계층" 버튼을 누르고 "계층 생성" 버튼을 클릭한다.

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

제한 시간 변경

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

API Gateway 설정

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

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

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

이제 API 게이트웨이로 요청이 들어오면 요청이 schedule-extraction-api로 전달된다.

테스트 케이스 작성과 실행

Lambda 함수 코드를 작성한 후 테스트 케이스를 만들어서 테스트해본다.

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

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

배운 점

  1. Lambda에서 패키지 관리할 때는 계층(Layer)을 잘 활용해야 한다.
  2. 임포트 오류가 생기면 기본 라이브러리로 대체할 방법을 찾아보자.
  3. 환경변수는 개발할 때만 하드코딩하고 배포할 때는 반드시 환경변수로 빼자.
  4. 배포 전에 다양한 입력으로 테스트해보는 게 중요하다.

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

profile
개발 공부중인 학생입니다~

0개의 댓글