그 서버를 어떻게 구축 / 구성해야할까? 선택지는 1.물리서버와 2. 가상 서버(클라우드서버) 가 있다.
🔷물리 서버(데이터센터, On-Premise)
기업의 요구사항에 맞춰 직접 중소형 데이터센터를 구축 및 유지보수 비용 발생
고정 비용(서버 구축) + 직접 운영과 관리
물리서버 호스팅 업체: 카페24 AWS가 없던 시절 카페 24에서 물리 서버를 대여해주었다 따라서 서버에 뭔가를 배포하려고하면 카페24 호스팅이 필요.
[물리서버 단점]
건물 유지 비용, 서버 구매 비용, 유지보수 등
다수 서버(컴퓨팅 시스템을 위한 하드웨어: 데스크탑 조립해서 GPU없이 사용)
네트워크 장비(다수 서버를 권역별, 용도별로 나누어 네트워크 IP 할당, Private / Public 설정)
장소(물리적 장소 ~= 건물, 요즘같이 전월세 비싼 시절에 비용 문제)
한번 구매, 설정하면 수요에 상관없이 계속 보유, 관리 필요
전원(전기 시스템) 및 냉방 공급(전기가 불안정하면 일부 서버 혹은 서버 모두 문제 발생)
백업 시스템
운영 인력
물리서버를 언제 사용해야하는가? -> 금융거래
금융 결제는 가상서버로 운영하면 안된다는 원칙이 있다고 한다.
🔷가상 서버(클라우드 서버)
이미 구축된 초거대 데이터센터에서 사용하 부분만 온디맨드 임대
데이터센터 임대에 따른 온디맨드 비용 + AWS가 대신 운영 및 관리
가상 서버(클라우드 서버) 호스팅 업체: AWS, Azuer
그림은 물리 서버를 사용했을 때 최대 피크에 해당하는 서버 구축으로 낭비되는 자원이 너무 많다. 클라우드는 피크에 해당하는 비용만 지불하면 되어서 낭비되는 자원에 따라 낭비되는 비용 미발생
[가상 서버의 장점]
매우 간편한 설정: 필요에 따라 원하는 네트워크 및 서버 구축을 몇 초안에 완료
몇 번의 클릭으로 리소스 확보 가능
고정되지 않은 유동적인 비용
필요할 때만 쓰고 비용을 지불하니까 비용 절감
✅서버리스(serverless)
직역하면 서버가 없다는 소리인데... 무슨 말일까 물리적 서버와 달리 서버를 사고 조립하지 않아도 되는 클라우드 서버를 표현하는것이 아니다. 오해하지 말자 CPU, 메모리 등 자원 설정을 하지 않고 함수만 제공한다. 서버를 선택하지 않고 서브를 준다고 해서 서버리스라고 한다고 한다.
물리적 서버든 클라우드 서버든 이 서버들을 구매하지 않고도 작업을 수행할 수 있는 것을 serverlsee라고 한다. AWS에서 제공하는 람다도 serverless의 일종이다.
물리적 서버나 클라우드 서버나 시간에 따른 과금이 발생 -> 서버가 계속 떠있으니까(=구동되고 있으니까)
serverless는 서버가 존재하지 않기 때문에 시간이 아닌 요청 횟수에 따른 과금
요청이 들어오면 기존에 떠있는 서버가 받아서 처리하는게 아니라
요청이 들어오면 처리를 위해 먼저 서버를 만들어서 -> 수행 -> 서버를 죽인다.
요청 하나당 비용이 높다 -> 호출 단가가 높다
AWS Lambda는 EC2보다 가용성이 낮다. 따라서Lambda를 사용하면 애플리케이션 문제가 아니라 알 수 없는 에러가 생기기도 함
💡Serverless 사용 예시 사용 예시로는 가장 가깝게는 Vercel 을 통해 Next.js 배포 시 모든것이 Serverless 로 돌아간다 다른 예시로는 백엔드 서버 로직 중 호출 횟수가 적은데, 자원이 생각보다 큰 작업의 경우 Serverless 로 처리 🔹 웹 서버에게 필요로 하는 Memory 자원은 100MB 인데 🔹웹 서버 작업 중 이미지 관련 로직(함수)가 써야하는 Memory 자원은 1GB 라면 🔹웹 서버에서 해당 이미지 로직을 수행하기 위해 하루에 단 몇번의 호출을 위해 1GB Memory 로 배포
그래서 이미지 작업만 Serverless Function (1GB Memory) 으로 수행한다면 웹 서버는 불필요하게 높은 자원으로 배포할 필요가 없다
🔷AWS lambda를 사용해서 serverless를 사용해보자
람다 함수를 이용해서 결과를 반환하는 과정
위 두개의 주소는 lambda 함수 url이다. 이 url을 호출하면 서버리스를 사용하는 것이다.
그럼 이제 AWS lambda 함수url을 생성하는 방법을 알아보자.
난 이미 jiyeon이라는 함수를 생성해서 사용하고 있다.
create function 버튼을 클릭해서 함수를 만들어준다
람다 함수를 처음 생성했다면 functions URL에 아무것도 안뜰것이다.
이 function URL을 호출해서 서비리스 기능을 사용할 것이므로 function URL을 생성해주면 된다.
funcion URL 설정은 아래와 같이 설정해 주었다. 참고로 CORS를 해야하는 경우 CORS설정을 함수에 적용해주면 되는데 설정 관련 글을 참고해서 해결하자. CORS설정이 안되어 있다면 아래 사진에서 CORS(enable)이라고 뜰 것이다. 나는 설정을 해주었기 때문에 enable이라고 뜨지 않는다.