brunch

람다 api를 사용한 버전관리

aws 람다 lambda 함수 사용하기

by 홍기린
image (1).png


최근에 병원 직원들이 쓰는 관리자툴을 개발하고 있었다.

거의 막바지 개발에 접어들어서 병원 직원들의 테스트가 진행중인데, 버전 관리가 필요하더랬다. 왜냐면 수정하고 배포를 해도 사이트를 새로고침 하기 전까지는 수정사항이 반영이 안되기 때문이다. 이미 브라우저상에 초기에 로드한 html, css 리소스들을 캐싱하고 있기 때문에 새로운 배포가 적용되려면 한번은 사이트를 새로고침해주어야된다.


어떻게 할까 고민하다가

버전 관리를 위해 aws의 람다함수 (Lambda)를 사용해보기로 했다.

"버전 1.0.0" 같은 String 값을 웹앱 외부에서 관리해야 하기에 되기에 백엔드 api로 관리할 수도 있겠지만, 버전 관리처럼 간단한 건 그냥 람다 함수를 써보는 것도 좋은 것 같다.


처음 사용해본 소감은,

매우 쉽고 간단하다.




1. 람다 함수란?


* 일반적으로 '람다 함수'란 '이름이 없는 함수'로 JS에서 흔히 볼 수 있는 화살표 함수같은걸 람다함수로 생각하면 된다. 이 글에서 이야기하는건 람다 함수 서비스를 말함!


람다 함수라는 무시무시한(?) 이름에 겁먹기 전에, 이게 왜 나왔는지부터 알면 좋다. 일반적으로 웹/앱 서비스를 구축하려면 서버라는 것을 구현해야 한다. 쉽게 말하면 24시간 켜놓는 컴퓨터라고 생각하면 된다. 그래야 웹사이트를 방문하는 사용자들이 언제든지 들어와도 웹사이트를 볼 수 있다.


그러다가 개발자들이 생각하기를 '이런 서버 관리 너무 귀찮오. 컴퓨터 놓을 공간도 없어. 쓸데없이 비용이 많이 드는 것 같아' 라고 생각해서 "서버리스 Serverless" 서비스들이 많이 등장하기 시작했다. EC2 같은 클라우드방식으로 서버 공간을 대여해서 사용할 수 있는 것들이 있다. 물리적인 컴퓨터를 놓지 않더라도 컴퓨터방(?)을 대여할 수 있는 개념이다. 사용량에 따라 방의 크기도 자동으로 조정해준다.


하지만 인간의 욕심은 끝이 없고 개발자들은 더 귀찮아졌다. '그냥 코드 한줄 작성하고 싶을 뿐인데, 또 이런 클라우드 환경들을 언제 다 세팅해? 그냥 코드만 짜고싶어! 그리고 내가 필요할때 호출했을때만 그 코드가 실행되면 좋겠어. 간단하잖아?' 라는 니즈에서 탄생한 것이 바로 "람다 함수"이다. 말 그대로 실행할 수 있는 "함수" 코드만 작성하면 된다.


그래서 그냥 코드만 작성하고, URL만 복사해서 사용하면, 해당 함수를 사용할 수 있다! 끝!

마치 일회용 카메라로 사진을 찍는 것 같다. 사진을 찍고 싶을때 찍으면 바로 사진이 나온다. 사진관에 가서 필름을 맡기거나 그러지 않아도 된다.


완전 쉽쥬?






2. AWS 람다 함수 사용 예시


람다 함수 서비스들은 AWS 뿐 아니라 Vercel, Cloudflare 등 여러 곳에서도 제공하지만, 난 이미 프론트엔드를 amplify를 사용하고 있어서 AWS의 람다함수를 사용했다.

AWS의 람다함수의 페이지에 들어가서 [함수 생성]을 클릭한다.


3.png

함수 이름을 임의로 작성하고, 런타임 환경은 내가 원하는 언어에 맞는 환경을 선택한다. 나는 JS 기반인 Node를 선택했다. 아키텍처는 arm64로 선택했다. (비용 최적화가 필요할땐 arm이 좋다고 함. 특정 라이브러리 호환성이 필요할땐 x86_64가 좋다고 함)


4.png

생성후에, 코드 소스를 수정할 수 있다.

내가 원하는 결과물을 return하는 코드를 작성했다. 그냥 간단하다. 환경변수로 설정한 APP_VERSION을 return 하는 함수이다.


5.png

환경변수도 람다함수에서 설정할 수 있다. 나는 APP_VERSION을 여기서 관리하기로 했다. 앱을 업데이트할때마다 여기서 [편집]을 눌러서 버전을 바꿔주면, 리액트 앱에서 이 버전을 트래킹해서 버전 변경을 감지한다.


6.png

함수가 생성됐을 때 이런 URL이 생기는데, 이걸 복사해둔다.





3. 코드 적용 예시(React)


위에서 복사한 URL이 api endpoint와 같다고 생각하면 된다. get method로 call 하면 된다.

UpdateNotification이라는 컴포넌트를 생성하고, 1분마다 버전을 체크해서 기존 버전과 다르면 웹앱 상단에 바(Bar)를 띄어주는 기능을 구현했다. 기존 버전은 브라우저의 local storage에 저장했다.




.

.

.

사실, 이게 베스트는 아닌 것 같다. APP_VERSION을 일일이 람다 함수에 가서 업데이트를 해줘야 하는 번거로움이 있다. 자동으로 트리거 되도록 하는 것을 연구해봐야 할 것 같다.


keyword
매거진의 이전글쿠키, 세션, 스토리지