IMCAT.DEV
로그인 가입
JavaScript 고급 DevOps

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}"
}

코드 한 줄씩 동작 설명

  1. exports.handler는 AWS Lambda에서 사용할 수 있는 기본 함수 구조입니다.
  2. const number = event.number;는 이벤트 객체에서 입력된 숫자를 가져옵니다.
  3. const result = number * number;는 가져온 숫자를 제곱합니다.
  4. return {...}는 HTTP 응답 형태로 결과를 반환합니다.
  5. 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. 흔한 실수와 주의사항

  6. 이벤트 데이터 누락
  7. - 잘못된 코드:

       const number = event.num; // 'num'이라는 잘못된 키 사용

    - 올바른 코드:

       const number = event.number; // 올바른 키 사용
  8. 비동기 처리 오류
  9. - 잘못된 코드:

       const result = await someAsyncFunction(); // 비동기 함수 호출 누락

    - 올바른 코드:

       const result = await someAsyncFunction(); // 비동기 함수 올바르게 호출
  10. HTTP 상태 코드 관리
  11. - 잘못된 코드:

       return { body: JSON.stringify(result) }; // 상태 코드 누락

    - 올바른 코드:

       return {
           statusCode: 200,
           body: JSON.stringify(result), // 상태 코드 포함
       };

    6. 정리

    • 서버리스 아키텍처는 서버 관리 부담을 덜어주고 비즈니스 로직에 집중할 수 있는 환경을 제공합니다.
    • Function as a Service(FaaS)와 Backend as a Service(BaaS)는 서버리스 아키텍처의 두 가지 주요 구성 요소입니다.
    • 서버리스 함수는 이벤트 기반으로 트리거되며, 이를 통해 다양한 비즈니스 로직을 구현할 수 있습니다.
    • 다음에 학습하면 좋은 주제는 AWS Lambda와 API Gateway 연동, DynamoDB와의 데이터 연동 등이 있습니다.