학습
JavaScript 서버리스 아키텍처 이해
JavaScript 서버리스 아키텍처 이해 — 고급
서버리스 아키텍처 이해
1. 도입 (왜 배워야 하는가)
서버리스 아키텍처는 현대 웹 개발에서 매우 중요한 개념으로 자리 잡고 있습니다. 이를 통해 개발자는 서버 관리에 대한 부담을 덜고, 비즈니스 로직에 집중할 수 있습니다. 예를 들어, 대규모 트래픽을 처리해야 하는 쇼핑몰을 운영할 때, 서버 관리를 신경 쓰지 않고도 시스템을 확장할 수 있는 장점이 있습니다.
서버리스 아키텍처를 모르면, 자원 과다 사용이나 관리 비용 증가, 서버 다운타임으로 인한 사용자 경험 저하 등 여러 문제가 발생할 수 있습니다. 그래서 이 개념을 이해하고 활용하는 것이 필수적입니다.
2. 핵심 개념 설명
서버리스 아키텍처는 개발자가 서버를 직접 관리하지 않고 클라우드 제공업체가 모든 서버 관리 및 운영을 맡기는 모델입니다. 이를 통해 개발자는 코드 작성에 집중할 수 있습니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| Function as a Service (FaaS) | 서버리스 아키텍처의 일종으로, 특정 기능을 수행하는 코드 조각을 클라우드에서 실행하는 모델 |
| Backend as a Service (BaaS) | 데이터베이스, 사용자 인증 등 백엔드 서비스를 클라우드에서 제공하는 모델 |
| 이벤트 기반 | 특정 이벤트가 발생했을 때 자동으로 실행되는 코드 실행 방식 |
비유하자면, 서버리스 아키텍처는 식당에서 요리를 하는 것과 같습니다. 요리사가 요리를 만들지만, 주방의 모든 기계와 장비는 식당 주인이 관리하는 것과 비슷합니다. 요리사는 요리하는 데만 집중할 수 있습니다.
3. 기본 코드 예제
AWS Lambda를 활용한 간단한 서버리스 함수 예제를 보여드리겠습니다. 아래 코드는 사용자가 요청한 수를 제곱하는 함수입니다.
exports.handler = async (event) => {
const number = event.number; // 이벤트에서 숫자를 가져옴
const result = number * number; // 숫자의 제곱을 계산
return {
statusCode: 200,
body: JSON.stringify({ result }), // 결과를 JSON 형태로 반환
};
};
실행 결과
{
"statusCode": 200,
"body": "{\"result\": 25}"
}
코드 한 줄씩 동작 설명
exports.handler는 AWS Lambda에서 사용할 수 있는 기본 함수 구조입니다.const number = event.number;는 이벤트 객체에서 입력된 숫자를 가져옵니다.const result = number * number;는 가져온 숫자를 제곱합니다.return {...}는 HTTP 응답 형태로 결과를 반환합니다.- 이벤트 데이터 누락
- 비동기 처리 오류
- HTTP 상태 코드 관리
- 서버리스 아키텍처는 서버 관리 부담을 덜어주고 비즈니스 로직에 집중할 수 있는 환경을 제공합니다.
- Function as a Service(FaaS)와 Backend as a Service(BaaS)는 서버리스 아키텍처의 두 가지 주요 구성 요소입니다.
- 서버리스 함수는 이벤트 기반으로 트리거되며, 이를 통해 다양한 비즈니스 로직을 구현할 수 있습니다.
- 다음에 학습하면 좋은 주제는 AWS Lambda와 API Gateway 연동, DynamoDB와의 데이터 연동 등이 있습니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니
쇼핑몰에서 장바구니에 제품 추가 기능을 서버리스로 구현할 수 있습니다. 사용자가 제품을 추가할 때마다 Lambda 함수가 호출되어 장바구니 업데이트를 처리합니다.
exports.handler = async (event) => {
const cart = event.cart; // 장바구니 정보
const product = event.product; // 추가할 제품
cart.push(product); // 제품을 장바구니에 추가
return {
statusCode: 200,
body: JSON.stringify(cart), // 업데이트된 장바구니 반환
};
};
예제 2: 사용자 인증
사용자가 로그인 요청을 할 때, Lambda 함수가 호출되어 데이터베이스에서 사용자 정보를 확인하고 인증 결과를 반환합니다.
exports.handler = async (event) => {
const { username, password } = event; // 사용자 정보
const user = await getUserFromDB(username); // DB에서 사용자 정보 조회
const isAuthenticated = user.password === password; // 비밀번호 확인
return {
statusCode: isAuthenticated ? 200 : 401, // 인증 결과 반환
body: JSON.stringify({ authenticated: isAuthenticated }),
};
};
5. 흔한 실수와 주의사항
- 잘못된 코드:
const number = event.num; // 'num'이라는 잘못된 키 사용
- 올바른 코드:
const number = event.number; // 올바른 키 사용
- 잘못된 코드:
const result = await someAsyncFunction(); // 비동기 함수 호출 누락
- 올바른 코드:
const result = await someAsyncFunction(); // 비동기 함수 올바르게 호출
- 잘못된 코드:
return { body: JSON.stringify(result) }; // 상태 코드 누락
- 올바른 코드:
return {
statusCode: 200,
body: JSON.stringify(result), // 상태 코드 포함
};