Publish:

νƒœκ·Έ: , , , ,

μΉ΄ν…Œκ³ λ¦¬:

AWS TechCamp μ„œλ²„λ¦¬μŠ€ κ΄€λ ¨ μ›Œν¬μƒ΅ μš”μ•½ 정리

μ‹€μŠ΅ κ³Όμ • μš”μ•½

img_3.png

각 μ„œλΉ„μŠ€μ˜ μ—­ν• 

  • S3 : 정적 μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…
  • DynamoDB : κ°„λ‹¨ν•œ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μš©λ„. no-sql 기반.
  • API Gateway : μ—”λ“œν¬μΈνŠΈμ™€ REST API λ₯Ό 관리함. μ‚¬μš©μžκ°€ μ„€μ •ν•œ λΌμš°νŒ… 섀정에 따라 각 μ—”λ“œν¬μΈνŠΈλ₯Ό λŒ€λ¦¬ν•˜μ—¬ μš”μ²­κ³Ό 응닡을 λ°›λŠ” ν”„λ‘μ‹œ 역할을 ν•œλ‹€. lambda 와 μ—°κ²°.
  • Lambda : μ•± μ„œλ²„

DynamoDB 생성

RDBMS 의 경우, μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•˜κ³  이 μŠ€ν‚€λ§ˆλ₯Ό μ΄μš©ν•΄ 데이터λ₯Ό μ €μž₯ν•˜κ²Œ λœλ‹€. κ·ΈλŸ¬λ‚˜ DynamoDB 와 같은 NoSQL λ°μ΄ν„°λ² μ΄μŠ€λŠ” μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•  ν•„μš” 없이 key-value ν˜•νƒœλ‘œ 자유둭게 데이터λ₯Ό μ €μž₯ν•  수 μžˆλ‹€. img_3.png

ν…Œμ΄λΈ” 생성 λ²„νŠΌμ„ 눌러 ν…Œμ΄λΈ” 이름과 νŒŒν‹°μ…˜ ν‚€λ₯Ό μž…λ ₯ ν•œλ‹€. νŒŒν‹°μ…˜ ν‚€λŠ” 검색에 ν•„μš”ν•œ ν‚€κ°’μœΌλ‘œ ν•„μˆ˜μ μœΌλ‘œ μž…λ ₯ν•΄μ•Ό ν•œλ‹€.

  • ν…Œμ΄λΈ” 이름 : hello-member
  • νŒŒν‹°μ…˜ ν‚€ : name

Lambda 생성

img_3.png Lambda λ₯Ό μ΄μš©ν•΄ λ°±μ—”λ“œ μ„œλΉ„μŠ€ μ½”λ“œλ₯Ό λ§Œλ“€μˆ˜ μžˆλ‹€.

AWS 의 λŒ€ν‘œμ μΈ μ„œλ²„λ¦¬μŠ€ μ„œλΉ„μŠ€. μ„œλ²„μ— λŒ€ν•œ μ„€μ •μ΄λ‚˜ 관리λ₯Ό κ³ λ―Όν•  ν•„μš” 없이 κ°„λ‹¨ν•˜κ²Œ μ„œλ²„λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ λ§Žμ€ μš”μ²­ λ°œμƒ μ‹œ μžλ™μœΌλ‘œ ν™•μž₯되고, κ΄€λ¦¬λ˜λ―€λ‘œ μ„œλΉ„μŠ€μ—λ§Œ 집쀑할 수 μžˆλ‹€. κ°„λ‹¨ν•˜κ³  λΉ λ₯΄κ²Œ μ„œλ²„λ₯Ό λ§Œλ“€κ³  싢은 경우 μ‚¬μš©ν•  수 μžˆλ‹€.

ν•¨μˆ˜ 생성 λ²„νŠΌμ„ 눌러 μ•„λž˜μ™€ 같이 μž…λ ₯ν•œλ‹€. img_3.png

  • 선택 μ˜΅μ…˜ : μƒˆλ‘œ μž‘μ„±
  • ν•¨μˆ˜ 이름 : api-service-create
  • λŸ°νƒ€μž„ : Python 3.9

ν•¨μˆ˜μ— λŒ€ν•œ κΆŒν•œ μ„€μ • 뢀뢄은 μ•„λž˜μ™€ 같이 μ§„ν–‰ν•œλ‹€. img_4.png

이 ν•¨μˆ˜λŠ” μΆ”ν›„ DynamoDB 에 μ—°κ²°ν•  μ˜ˆμ •μ΄λ‹€. AWS μ„œλΉ„μŠ€λΌλ¦¬ μ„œλ‘œ μ—°κ²°ν•˜κ±°λ‚˜ μ΄μš©ν•˜κ±°λ‚˜ ν˜ΈμΆœν•˜κ±°λ‚˜ ν•  λ•Œμ—λŠ” κΆŒν•œμ΄ ν•„μš”ν•˜λ‹€.

  • μ—­ν•  이름 : my-lambda-role
  • μ •μ±… ν…œν”Œλ¦Ώ : λ‹¨μˆœ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κΆŒν•œ - DynamoDB

μ½”λ“œ 뢀뢄에 μ•„λž˜μ™€ 같이 μž…λ ₯ ν›„ Deploy λ²„νŠΌμ„ λˆ„λ₯Έλ‹€. img_3.png

μ½”λ“œλ³΄κΈ°

이 μ½”λ“œλŠ” λ©€λ²„μ˜ 이름과 κΈ°λΆ„ μƒνƒœλ₯Ό 랜덀으둜 λ§€ν•‘μ‹œμΌœμ£Όκ³ , 이λ₯Ό DynamoDB에 μ €μž₯ν•˜λŠ” κΈ°λŠ₯이닀.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import json
import boto3
import random
import json

def lambda_handler(event, context):
   
   member_name = ['Ama','Jone','Zon','Penny','Jessie']
   member_status = ['Happy','Sad','Serious','Satisfied','Free']
   
   dynamodb = boto3.resource('dynamodb',endpoint_url='http://dynamodb.ap-northeast-2.amazonaws.com')
   member_table = dynamodb.Table('hello-member')
   
   name = member_name[random.randint(0,4)]
   status = member_status[random.randint(0, 4)]
   
   member_table.put_item(
      Item={
           'name': name,
           'status': status,
       }
   )
   
   documents = {'name':name,'status':status}
   
   print(documents)
   
   return {
       'statusCode': 200,
       'headers': {'Access-Control-Allow-Origin': '*'},
       'body': json.dumps(documents)
   }

Test λ²„νŠΌμ„ 눌러 μ•„λž˜μ™€ 같이 ν…ŒμŠ€νŠΈ 이벀트λ₯Ό ꡬ성 ν›„ μ €μž₯ λ²„νŠΌμ„ λˆ„λ₯Έλ‹€. img_3.png

  • 이벀트 이름 : my-api-test
  • ν…œν”Œλ¦Ώ : hello-world

ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ μ•„λž˜μ™€ 같은 ν˜•μ‹μœΌλ‘œ λ‚˜μ˜¨λ‹€λ©΄ μ œλŒ€λ‘œ μ„€μ •λœ 것이닀. img_3.png

이제 DynamoDB 에 데이터가 잘 λ“€μ–΄κ°”λŠ”μ§€ ν™•μΈν•΄λ³΄μž. DynamoDB 둜 이동해 hello-member ν…Œμ΄λΈ”μ„ λˆ„λ₯Έλ‹€. img_3.png

ν‘œ ν•­λͺ© 탐색을 λˆ„λ₯Έλ‹€. img_3.png

μ•„λž˜μ™€ 같이 Lambda 의 μ½”λ“œκ°€ μ‹€ν–‰λ˜μ–΄ DynamoDB 에 값이 잘 λ“€μ–΄κ°€ μžˆλ‹€. img_3.png

μ—¬κΈ°κΉŒμ§€ Lambda 와 DynamoDB λ₯Ό λ§Œλ“€κ³ , 잘 λ™μž‘λ˜λŠ” 것을 ν™•μΈν–ˆλ‹€. 이제 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 이 Lambda 의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλ„λ‘ μ—”λ“œν¬μΈνŠΈλ₯Ό μ œκ³΅ν•΄μ•Ό ν•œλ‹€.

API Gateway κ΅¬μ„±ν•˜κΈ°

μ„œλΉ„μŠ€μ—μ„œ API Gateway λ₯Ό 검색 ν›„ REST API μœ ν˜•μ„ μ„ νƒν•œλ‹€. img_3.png

μƒˆ API λ₯Ό μ„ νƒν•˜κ³  API 이름에 my-api λ₯Ό μž…λ ₯ν•œλ‹€. img_3.png

my-api 선택 ν›„ λ©”μ„œλ“œλ₯Ό μƒμ„±ν•œλ‹€. img_3.png

μ•„λž˜μ™€ 같이 λ©”μ„œλ“œ μ„ΈλΆ€ 정보λ₯Ό μ„€μ • ν›„ λ©”μ„œλ“œλ₯Ό μƒμ„±ν•œλ‹€.

  • λ©”μ„œλ“œ μœ ν˜• : GET
  • 톡합 μœ ν˜• : Lambda ν•¨μˆ˜
  • Lambda ν”„λ‘μ‹œ 톡합 ν† κΈ€ ON
  • Lambda ν•¨μˆ˜ μ„ νƒμ—μ„œ 기쑴에 λ§Œλ“€μ–΄ λ‘μ—ˆλ˜ api-service-create λ₯Ό μ„ νƒν•œλ‹€.

img_3.png

μƒμ„±ν•œ API의 λ¦¬μ†ŒμŠ€ λ©”λ‰΄μ—μ„œ 방금 μƒμ„±ν•œ GET λ©”μ„œλ“œλ₯Ό λˆ„λ₯΄λ©΄ μ΄μ œλŠ” 였λ₯Έμͺ½μ— ν•΄λ‹Ή λ©”μ„œλ“œμ— κ΄€λ ¨λœ 정보가 보이게 λœλ‹€. ν…ŒμŠ€νŠΈ 탭을 선택 ν›„ ν…ŒμŠ€νŠΈλ₯Ό μ€€λΉ„ν•œλ‹€.

img_3.png

ν…ŒμŠ€νŠΈ λ²„νŠΌμ„ 눌러 API ν˜ΈμΆœμ„ ν…ŒμŠ€νŠΈ ν•΄λ³Έλ‹€. μ„œλΉ„μŠ€κ°€ λ³΅μž‘ν•΄μ§€λ©΄ Request Body λ‚˜ Header 에 값을 μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€. img_3.png

ν…ŒμŠ€νŠΈ 성곡 μ‹œ μƒνƒœ μ½”λ“œμ— 200 κ³Ό ν•¨κ»˜ 응닡 본문에 Lambda ν•¨μˆ˜ μ‹€ν–‰ κ²°κ³Όκ°€ μ˜¬λ°”λ₯΄κ²Œ 좜λ ₯λœλ‹€λ©΄ 성곡이닀. img_3.png

CORS μ„€μ •

API gateway λ₯Ό λ§Œλ“€μ—ˆμ§€λ§Œ, λ°”λ‘œ ν˜ΈμΆœν•˜λ©΄ CORS κ΄€λ ¨ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰ν•˜λŠ” 슀크립트의 μš”μ²­μ„ ν—ˆμš©ν•˜λ €λ©΄ API에 λŒ€ν•œ CORS(cross-origin resource sharing)λ₯Ό κ΅¬μ„±ν•΄μ•Όν•œλ‹€. CORSλŠ” λ‹€λ₯Έ λ„λ©”μΈμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•  λ•Œ λ°œμƒν•˜λŠ” λ³΄μ•ˆ 정책이닀. API Gateway에 λ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ—ˆλ‹€ ν•˜λ”λΌλ„, κΈ°λ³Έμ μœΌλ‘œλŠ” CORSκ°€ ν—ˆμš©λ˜μ§€ μ•ŠμœΌλ―€λ‘œ λΈŒλΌμš°μ €μ—μ„œ λ‹€λ₯Έ 도메인(예: ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„μ™€ API μ„œλ²„μ˜ 도메인이 λ‹€λ₯Ό 경우)으둜 μš”μ²­μ„ 보낼 λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

λ¦¬μ†ŒμŠ€ λ©”λ‰΄μ—μ„œ / 경둜λ₯Ό 선택 ν›„ CORS λ₯Ό ν™œμ„±ν™” ν•œλ‹€. img_3.png

CORS μ„€μ • ν™”λ©΄μ—μ„œ Access-Control-Allow-Methods 에 GET λ©”μ„œλ“œλ₯Ό μ„ νƒν•œλ‹€. GET μš”μ²­μ— λŒ€ν•΄ λ¦¬μ†ŒμŠ€ 접근을 ν—ˆμš©ν•œλ‹€. img_3.png

참고둜 μœ„ μ‚¬μ§„μ—μ„œ Access-Control-Allow-Methods ν•­λͺ©μ— OPTIONS λ©”μ†Œλ“œκ°€ κΈ°λ³Έκ°’μœΌλ‘œ ν¬ν•¨λ˜μ–΄ μžˆλŠ”λ°, μ΄λŠ” ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­(Preflight Request) 이닀. ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­ν•˜λ €λŠ” URL이 μ™ΈλΆ€ 도메인일 경우, λΈŒλΌμš°μ €λŠ” μ•ˆμ „ν•˜μ§€ μ•Šμ€ HTTP μš”μ²­(예: POST, PUT, DELETE)을 보내기 전에 OPTIONS λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ— ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­μ„ 보낸닀. μ„œλ²„κ°€ 이 μš”μ²­μ— λŒ€ν•΄ μ μ ˆν•œ 응닡을 ν•˜μ§€ μ•ŠμœΌλ©΄ λΈŒλΌμš°μ €λŠ” CORS μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. μ‹€μ œ μš”μ²­μ΄ μœ νš¨ν•œμ§€ μ„œλ²„κ°€ 미리 νŒŒμ•…ν•  수 μžˆλ„λ‘ ν•˜λŠ” μˆ˜λ‹¨μ΄λ‹€.

CORS 섀정을 마쳀으면 API 배포 λ²„νŠΌμ„ 눌러 이 api λ₯Ό μ‹€μ œ μ‚¬μš©ν•  수 있게 μ€€λΉ„ν•œλ‹€.

  • μŠ€ν…Œμ΄μ§€ : μƒˆ μŠ€ν…Œμ΄μ§€
  • μŠ€ν…Œμ΄μ§€ 이름 : dev img_3.png

배포가 μ™„λ£Œλ˜λ©΄ 호좜 URL 이 ν‘œμ‹œλœλ‹€. img_3.png

이 URL 을 λΈŒλΌμš°μ €μ— λΆ™μ—¬λ„£κ³  ν˜ΈμΆœν•˜λ©΄ μ•„λž˜μ™€ 같은 응닡을 얻을 수 μžˆλ‹€.

img_3.png

Lambda 에 API gateway λ₯Ό μ—°κ²°ν•΄ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ μ—”λ“œν¬μΈνŠΈλ₯Ό λ§Œλ“œλŠ” μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이제 이 데이터λ₯Ό S3 의 정적 μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ… κΈ°λŠ₯을 μ‚¬μš©ν•΄ html νŽ˜μ΄μ§€μ— ν‘œμ‹œν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

S3 μ›Ήμ„œλ²„ κΈ°λŠ₯ μ‚¬μš©ν•˜κΈ°

AWS μ„œλΉ„μŠ€μ—μ„œ S3 λ₯Ό 검색 ν›„ 버킷을 μƒμ„±ν•œλ‹€. λ²„ν‚·μ˜ 이름은 κ³ μœ ν•΄μ•Ό ν•œλ‹€. img_3.png

μ•„λž˜μͺ½μœΌλ‘œ λ‚΄λ € 퍼블릭 μ—‘μ„ΈμŠ€ 차단 섀정을 ν•΄μ œν•œλ‹€. 정적 μ›Ή ν˜ΈμŠ€νŒ… μš©λ„λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  접근을 ν—ˆμš©ν•΄μ•Ό ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)μ—μ„œ html νŒŒμΌμ„ 내렀받을 수 μžˆλ‹€. img_3.png

버킷 생성을 λˆ„λ₯΄κ³  생성이 μ™„λ£Œλ˜λ©΄ ν•΄λ‹Ή 버킷을 눌러 λ“€μ–΄ κ°„λ‹€. κ·Έ ν›„ μ•„λž˜μ™€ 같은 html μ½”λ“œλ₯Ό index.html 파일둜 λ§Œλ“€μ–΄ 버킷에 μ—…λ‘œλ“œ ν•œλ‹€.

μ½”λ“œλ³΄κΈ°

μ•žμ—μ„œ API gateway 둜 λ§Œλ“  url 둜 ajax ν˜ΈμΆœμ„ ν•˜κ³ , 데이터λ₯Ό 가져와 화면에 λΏŒλ¦¬λŠ” 역할을 ν•˜λŠ” κ°„λ‹¨ν•œ html μ½”λ“œλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<html>

<head>
    <meta charset="utf-8" name="viewport"
        content="width=device-width, height=device-height, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <title>Hello World!</title>
    <style>
        #title {
            font-family: arial;
            font-size: 2em;
            color: #eb971a;
            margin-top: 50px;
            text-align: center;
        }

        button {
            background-color: #eb971a;
            border: none;
            color: white;
            border-radius: 5px;
            width: 40%;
            height: 35px;
            font-size: 13pt;
            margin-top: 30px;
            text-align: center;
        }

        #sentence {
            font-size: 17pt;
            margin-top: 30px;
            font-weight: bold;
            color: #eb971a;
        }
    </style>
</head>

<body>
    <p id="title">Hello World From <b>Lambda</b></p>
    <hr id="lambda-line" width="800px" align="center" color="#eb971a;">
    <center><button onclick="checkEvent();">Who are you?</button></center>
    <center>
        <div id="sentence"></div>
    </center>
</body>
<script type="text/javascript">
    function checkEvent() {
        $.ajax({
            type: "GET",
            url: "URLμ„μž…λ ₯ν•˜μ„Έμš”",
            dataType: 'json',
            success: function (data) {
                document.getElementById('sentence').innerHTML = data.status + "&nbsp;&nbsp;" + data.name
            },
            error: function (error) {
                alert('ERROR::');
                console.log(error)
            }
        });
    }
</script>

</html>

img_3.png

img_3.png

index.html νŒŒμΌμ„ μ—…λ‘œλ“œ ν–ˆμœΌλ©΄ 정적 μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ… κΈ°λŠ₯을 ν™œμ„±ν™” ν•˜κ³ , κΆŒν•œμ„ λΆ€μ—¬ν•΄μ•Ό ν•œλ‹€. img_3.png

속성 νƒ­μ—μ„œ 맨 μ•„λž˜μͺ½μœΌλ‘œ μŠ€ν¬λ‘€ν•˜λ©΄ 정적 μ›Ή μ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ… κΈ°λŠ₯이 μžˆλ‹€. img_3.png

νŽΈμ§‘μ„ 눌러 ν™œμ„±ν™” ν•œλ‹€. μ›Ήμ‚¬μ΄νŠΈ 처음 μ§„μž… μ‹œ κΈ°λ³Έ νŽ˜μ΄μ§€κ°€ 될 νŒŒμΌμ„ μž…λ ₯ν•œλ‹€.(index.html) img_5.png

λ³€κ²½ 사항 μ €μž₯을 λˆ„λ₯΄λ©΄ 정적 μ›Ή μ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…μ΄ μ‹œμž‘λœλ‹€. img_3.png

κ·ΈλŸ¬λ‚˜ ν•΄λ‹Ή URL 클릭 μ‹œ 아직 κΆŒν•œμ΄ μ—†μ–΄ 접속이 μ•ˆλœλ‹€. μ™ΈλΆ€μ—μ„œ νŒŒμΌμ„ 읽어 λ“€μΌμˆ˜ μžˆλ„λ‘ κΆŒν•œμ„ λΆ€μ—¬ν•΄μ•Ό ν•œλ‹€. λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 κΆŒν•œ νƒ­μ—μ„œ 버킷 정책에 JSON 으둜 μž‘μ„±λœ κΆŒν•œ 섀정을 ν•΄μ€€λ‹€.

JSON μ„€μ •
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "Version": "2024-09-18",
  "Statement": [
    {
      "Sid": "Stmt1709405011428",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::my-bucket-238423",    // 본인버킷 번호
        "arn:aws:s3:::my-bucket-238423/*"    // 본인버킷 번호
      ],
      "Principal": "*"
    }
  ]
}

img_3.png

κΆŒν•œ 섀정이 마무리되면 S3 호좜 URL 둜 μ΄λ™ν•œλ‹€. index.html 의 화면이 잘 λ‚˜μ˜€κ³  λ²„νŠΌμ„ λˆ„λ₯Όλ•Œλ§ˆλ‹€ Lambda 둜 ajax ν˜ΈμΆœν•΄ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 것을 λ³Ό 수 μžˆλ‹€.

κ²°κ³Ό

result

μ„œλ²„λ¦¬μŠ€ μ‚¬μš© 이전엔 spring 을 톡해 μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λ₯Ό λ°°ν¬ν•˜κ³€ ν–ˆλ‹€. REST API λ₯Ό μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λ„λ‘ λ§Œλ“€κ³ , 이 λ°±μ—”λ“œ μ„œλ²„λ₯Ό AWS EC2 같은 ν΄λΌμš°λ“œμ— 배포해 κΈ°λ™μ‹œν‚€λŠ” ν˜•νƒœμ˜€λ‹€.

κ·ΈλŸ¬λ‚˜ μ„œλ²„λ¦¬μŠ€ 아킀텍쳐λ₯Ό ν™œμš©ν•˜κ²Œ 되면 μ„œλ²„ κ΅¬μ„±μ΄λ‚˜ 관리에 λŒ€ν•œ μ„€μ •/μ½”λ“œ 등을 μž‘μ„±ν•  ν•„μš” 없이 κ·Έλƒ₯ μ„œλΉ„μŠ€ μ½”λ“œλ₯Ό Lambda 에 넣어놓고 이λ₯Ό ν˜ΈμΆœν•˜λ„λ‘ κ΅¬μ„±ν•˜λ©΄ λœλ‹€. λ˜ν•œ API gateway λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ API λ₯Ό μ œκ³΅ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ Lambda 의 μ½”λ“œμ™€ 연동이 κ°€λŠ₯ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

μ„œλ²„λ¦¬μŠ€λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ 가진닀.

  • νŠΉμ • μž‘μ—…μ„ ν˜ΈμΆœν• λ•Œμ—λ§Œ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” 원리이닀 λ³΄λ‹ˆ 호좜된 만큼만 λΉ„μš©μ„ μ§€λΆˆν•œλ‹€.
  • 인프라 관리에 μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†λ‹€.
  • λ„€νŠΈμ›Œν¬ μ²˜λ¦¬λŸ‰μ— 따라 μ„œλ²„μ˜ 갯수λ₯Ό μžλ™μœΌλ‘œ λŠ˜λ €μ€€λ‹€. (auto-scaling)
  • ν•œ ν•¨μˆ˜κ°€ ν•œλ²ˆ ν˜ΈμΆœλ λ•Œ μ œν•œμ΄ μžˆλ‹€.(1500MB, 300초) 즉, μ›Ήμ†ŒμΌ“ 같이 계속 μΌœλ†”μ•Ό ν•˜λŠ” μž‘μ—…μ€ ν•˜κΈ° νž˜λ“€λ‹€.
  • 둜컬 데이터에 μ ‘κ·Ό λΆˆκ°€λŠ₯ν•˜λ‹€. μ΄λŠ” Lambda κ°€ stateless ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. Lambda ν•¨μˆ˜λŠ” 싀행될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³ , λžŒλ‹€ ν•¨μˆ˜ λ‚΄μ—μ„œλŠ” λ‚΄λΆ€μ μœΌλ‘œ λ³€μˆ˜ κ°’μ˜ 변화등을 μ €μž₯ν•˜κ±°λ‚˜ μΆ”μ ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ 호좜 사이에 μƒνƒœλ₯Ό μ €μž₯ν•˜κ±°λ‚˜ κ³΅μœ ν•  ν•„μš”κ°€ μžˆλ‹€λ©΄ S3 λ‚˜ DynamoDB, RDS 등을 μ—°λ™ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

이런 νŠΉμ§•λ“€μ„ μ‚΄νŽ΄λ³΄λ©΄, 단일 μž‘μ—…μ„ ν•˜λŠ” κ°„λ‹¨ν•œ μ„œλ²„ 같은 κ²½μš°λŠ” μ„œλ²„λ¦¬μŠ€λ₯Ό 톡해 μ‰½κ²Œ λ§Œλ“€ 수 μžˆλ‹€λŠ” μž₯점이 μžˆλŠ” 것 κ°™λ‹€. κ·ΈλŸ¬λ‚˜ κ·Έλ ‡λ‹€κ³  μŠ€ν”„λ§κ³Ό 같은 ν”„λ ˆμž„μ›Œν¬κ°€ ν•„μš” μ—†λ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹ˆλ‹€. λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 가진 μ—”ν„°ν”„λΌμ΄μ¦ˆ κΈ‰μ˜ 톡합 μ‹œμŠ€ν…œμ—μ„œλŠ” λͺ¨λ“  λ‘œμ§μ„ ν•¨μˆ˜λ‘œ λ‚˜λˆ„μ–΄ 관리할 경우 관리가 μ–΄λ €μ›Œ 질 수 μžˆλ‹€. λ˜ν•œ, 이미 μŠ€ν”„λ§ 같은 ν”„λ ˆμž„μ›Œν¬λŠ” ν’λΆ€ν•œ μƒνƒœκ³„λ₯Ό 가지고 μžˆμ–΄ λ‹€μ–‘ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ κ°œλ°œν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λŒ“κΈ€,지적,ν”Όλ“œλ°± μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜Š

λŒ“κΈ€λ‚¨κΈ°κΈ°