serverless란?

dev.dave·2023년 7월 24일

개발지식

목록 보기
7/53

vercel 이나,
netify 에서,
호스팅으로 서버를 관리하고있다.
즉, 호스팅 플랫폼이고,
우리는 그 플렛폼을 이용을 하면된다.
플렛폼에서 알아서 관리함.
즉,
클라우드상의 서버에서
우리 소스코드를 동작하게하는 개발 방식, 모델임.
개발자가 직접 서버를 구축 관리할 필요는 없다.
클라우드 측에서 알아서 관리를 해줌.

왜 요즘 이런 플랫폼을 이용하냐면,

기존 서버 개념은,
개발자가 서버를 직접 관리를 하고,
그런건데
알아서 해줌.

어플리케이션 목적과,
사용 빈도수,
트레픽에 따라서,
얼마나 큰 cpu 와 Ram을 사용할껀지 일일히 설정을 다 해줘야되고,
운영체제, 사용하고있는 소프트웨어 보완 패치 나오면, 일일이 유지보수 해줘야함.
서버가 잘 동작하고 있는지 모니터링하는 시스템을 별도로 마련해 두어야함.
사용자가 많아지고, 감소했을떄, 업, 다운 스케일링을 직접 해줘야한다.
사용자가 있으나 없으나 서버를 항상 운영을 해야하기떄문에, 여기서 발생하는 비용도 무시못함.

그럼
플랫폼(서버리스)는, 어떻게 동작을 하냐?
Serverless computing or FaaS(function as a Service) 라고도 함.
쉽게 말해 개발자는 코드를 구성하는 함수 하나만 만들면 된다.
예) 데이터베이스에서 제품의 정보를 읽어오는 함수를 하나 만들고,
그리고 그 함수를,
netify 나 vercel과 AWS 같은 클라우드 호스팅 플랫폼에 등록해줍니다.
여기 내 함수가 있는데, 제품에 대한 get요청이 들어오면, 이걸 실행해줘 라고 하고,
내 함수를 언제 실행하면 되는지만, 플랫폼에 명시해주면 된다.
그러면, 플랫폼에서는 자동으로 get 요청이 들어올떄,
함수를 실행해서 데이터 베이스에서, 제품에대한 정보를 읽어와서, 사용자에게 보내줌

이 플렛폼에서는 , 어떤cpu, 어떤memory, 어떤 서버를 사용하고 있는지 확장은 어떻게 할껀지를
전혀 신경쓰지 않아도, 이 함수를 만드는 것에서 집중하면됨.

그리고 우리는 이플랫폼에 실제로,
내 함수가 사용한 만큼의 cpu와 메모리 시간만큼 별로 비용을 지불하면됨.
즉,
장점은
더이상 개발자가,
서버를 구축하고 관리할 필요가 없다.
스케일링 등도,, 플랫폼에서 알아서 해줌 확장이 쉬움,

이벤트가 하나 발생하면 하나가 실행될 꺼고,
만개의 이벤트가 발생하면, 만개가 실행됨.
즉, 클라우드 자체적으로도, 확장하기가 너무 쉽다.
그리고
항상 운영하는것이 아니라,
함수가 실행된 만큼(사용한 만큼만) 비용을 측정해서 청구함. 합리적임.

그럼 단점은?
문제는?
첫번쨰,
cold start 입니다.

클라우드에 등록된 함수가, 이벤트 즉, 요청이 온다고 해서, 바로 실행이 될 수 있는건 아니고요.
이 함수의 코드를 다운로드 받고, 실행할 수 있는 환경을 조성하고,
인스턴스를 실행하는데까지, 시간이 좀 걸린다
즉,
서버가 계속 운영되고있는게 아니라,
이 클라우드 상에,
요청이 올떄마다,
어 이함수가 필요하네, 하면,
이거 준비해야겠다. 하고 실행준비를 하는거죠.

AWS의 람다가 주장하기를,
자신들에게 등록된 함수중에,
실제로 cold start에 빠지는 함수의 케이스는, 1% 도 안된다 라고하는데요.
그리고 간혹 후기를 보면, 내 함수 시작하는데 1초 이상 걸린다 라는 후기도 있다.
즉,
각각의 플렛폼 마다,
내 함수를 수행하기위한 환경을, 얼마동안 어떻게 캐싱을 하냐에 따라서,
전략에 따라 달라진다.라는 점입니다.

두번째는,
리소스의 한계입니다.
람다함수로 등록할수 있는, 함수의 메모리 사이즈가 정해져 있다.
128mb to 10,240 mb, in 1-mb increments.

그리고,
함수가 시작되고, 끝날떄까지
function timeout 은,
900 seconds(15 minutes)
이 정도 주어진 시간이 있다.
즉, 15분을 초과하면,
timeout 이 발생함.

funtion enviroment variables 가
4 kb, for all enviroment variable associated with the function , in aggregate
무거운 일을 하는, 너무 뚱뚱한 함수는 적합하지 않다 라는 뜻임.

그리고

내 함수를 만들떄, 상태가 없는, 독립적인/ 개별적인 함수로 만들어야 합니다.
서버리스 함수는 상태를 가질 수 없다.

서버리스 함수는 특정한 이벤트가 발생하면,
독립적으로, 개별적으로 수행이 되기 때문에, 함수내부에서 전역데이터를 참조하거나, 상태를 가지거나 할 순없다.
다만, 함수 내부에서 다른 베이터베이스에 접근해서, 데이터를 읽고 쓰고하는건 가능.
기존에 레스포 api를 만드셨다면, 상태가 없는 함수로 만드셨으니까, 이부분은 크게 걱정하지않아도됨.

요즘 웹개발자들이 많이 사용하는,
netlify나 vercel도
서버리스를 지원하고있고,
이 두개회사의 호스팅도 결국 내부적으로는,
AWS LAMDA 펑션을 사용하고 있음.

리액트를 베이스로한, NEXT.js프레임 워크 사용해서 웹, 또는 앱을 만들고,
그걸 vercel 이런곳에, 클라우드 플렛폼에 배포만 해두면,
아주 간편하게 프론엔드,백엔드를 풀스택으로 만들 수 있음
이게 가능한 이유는,
nextjs에서 제공하는, API Routes 와 Middleware 가, 결국은 서버리스 함수로 동작하기 때문이죠.

프론트개발자의 스펙트럼이 넓어지면서,
나도 모르게 풀스택까지 개발하고있는 요즘 이런 트렌드가 진행중이다.

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글