์ „์ฒด ๊ธ€ (164)

๋ฐ˜์‘ํ˜•
01
08

โ–ถ ์œ ํ˜•

  • ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ(Manhattan Distance)๋Š” ๋„์‹œ ๋ธ”๋ก์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ˆ˜ํ•™์—์„œ์˜ ๊ฑฐ๋ฆฌ ๊ณต์‹์ด๋ž‘์€ ๋‹ค๋ฅธ๋ฐ, |x1 - x2| + |y1 - y2| ๋กœ ๋‘ ์  ์‚ฌ์ด์˜ x์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’๊ณผ y์ขŒํ‘œ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’์˜ ํ•ฉ์„ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ฆ‰ ๊ฒฉ์žํ˜• ๊ตฌ์กฐ์—์„œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์ขŒํ‘œํ‰๋ฉด์ด๋‚˜ ๋Œ€๊ฐ์„ ์„ ๊ณ ๋ คํ•˜์ง€์•Š๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ ์ˆ˜์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทผ๋ฐ ์ด๊ฑธ ์—ฌ๋Ÿฌ ์ ๋“ค ์‚ฌ์ด์—์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์†Œ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์ค‘์•™๊ฐ’์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

โ–ถ ์ „๋žต

1์ฐจ์›, 2์ฐจ์›์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๊ฒ ๋‹ค.

 

1์ฐจ์›์—์„œ ์—ฌ๋Ÿฌ ์ ๋“ค๋กœ๋ถ€ํ„ฐ์˜ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ ์ด ์ค‘์•™๊ฐ’์ธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž.

์ˆ˜ํ‰์„ ์— n๊ฐœ์˜ ์  xโ‚, xโ‚‚, ..., xโ‚™์ด ์žˆ์„ ๋•Œ, ๊ฑฐ๋ฆฌ ํ•ฉ์„ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด 

  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ์ž‘์œผ๋ฉด: -1 ๊ธฐ์—ฌ
  • p๊ฐ€ ์–ด๋–ค ์  xแตข๋ณด๋‹ค ํฌ๋ฉด: +1 ๊ธฐ์—ฌ

๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ตœ์ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์ค€ ์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์€ ์ ๋“ค์˜ ๊ฐœ์ˆ˜, ํฐ ์ ๋“ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ง€์ ์— ๋†”์•ผํ•˜๋Š”๋ฐ, ์ด ๋ง์€ ๊ณง ์ค‘์•™๊ฐ’์ด๋ผ๋Š” ์–˜๊ธฐ๊ฐ€๋œ๋‹ค.

 

๋‹ค์‹œ ๋งํ•˜์ž๋ฉด, ์ˆ˜ํ‰์„ ์—์„œ

์ค‘์•™๊ฐ’์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ณ 
์ค‘์•™๊ฐ’์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™: ์˜ค๋ฅธ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ์ค„์ง€๋งŒ, ์™ผ์ชฝ ์ ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ค‘์•™๊ฐ’์ด ์ด ๋•Œ ์ตœ์ ์ ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

 

๊ทธ๋Ÿผ 2์ฐจ์›์œผ๋กœ ๊ฐ€๋ณด์ž

2์ฐจ์›์€ ์ˆ˜ํ‰์„ ์ด ๋‹จ์ˆœํžˆ 2๊ฐœ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ณง x์ถ•๊ณผ y์ถ•์ด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ 1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ์ตœ์ ์  ์ฐพ๋“ฏ ํ•˜๋ฉด ๋œ๋‹ค.

 

์ฆ‰ x์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’๊ณผ y์ขŒํ‘œ์˜ ์ค‘์•™๊ฐ’์ด ๋งŒ๋‚˜๋Š” ์ ์ด ์ „์ฒด ์ตœ์ ํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐ”๋กœ ๋ฌธ์ œ ํ’€์–ด๋ณด์ž.

 

https://www.acmicpc.net/problem/18310

1์ฐจ์› ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ํ•ฉ ์ตœ์ ์ ์„ ์ฐพ๋Š” ๋ฌธ์ œ๋‹ค.

 

๋‚œ ์ฒ˜์Œ์— ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

public static void go() {
    int[] target = new int[n];
    for (int i = 0; i < n; i++) {
        target[i] = point[i];
    }
    Arrays.sort(target);
    int min = Integer.MAX_VALUE;
    int minT = Integer.MAX_VALUE;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int center = (target[j] + point[i]) / 2;
            int dist = 0;
            for (int k = 0; k < n; k++) {
                int d = Math.abs(point[k] - center);
                dist += d;
            }
            if (min > dist) {
                min = dist;
                minT = center;
            }
            // System.out.println("dist: " + dist + " minT: " + minT + " center: " + center);
            // System.out.println();
        }
    }
}

์ง„์งœ ์™„์ „ํƒ์ƒ‰ ๋ฐฉ์‹์œผ๋กœ ํ‘ผ๊ฑด๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณด๋‹ค์‹œํ”ผ O(n^3)์ด๋‹ค.

n์ด 20๋งŒ์ด๋ผ ์ ˆ๋Œ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

์ˆ˜ํ‰์„  ์ตœ์ ์ ์„ ์ƒ๊ฐํ•˜๋ฉฐ ๋‹ค์‹œ ํ’€๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์งง์€ ํ’€์ด๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

public static void go() {
    Arrays.sort(point);
    System.out.println(point[(n - 1) / 2]);
}

 

์ด๊ฑธ 2์ฐจ์›์œผ๋กœ ๋“ค๊ณ  ๊ฐ€๋ฉด ์•„๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

https://www.acmicpc.net/problem/1090

์ฒ˜์Œ์— ์ค‘์•™๊ฐ’์ด ํ•ญ์ƒ ์ตœ์ ์ธ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ณ , ์ฃผ์–ด์ง„ ์ ์„ ํ™œ์šฉํ•ด์„œ ๊ฑฐ๋ฆฌํ•ฉ์„ ๊ตฌํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ์—์„œ 0 2 4 6์ด ๋‚˜์˜ค๋ฉฐ ํ‹€๋ฆฐ ๋‹ต๋งŒ ๋‚ด๋†“๋Š”๋‹ค.

 

๊ทธ๋ž˜์„œ x ์ถ•, y ์ถ•์„ ๋ถ„๋ฆฌํ•ด ๊ฐ ์ขŒํ‘œ๋ฅผ ๋–ผ์–ด๋‚ด์–ด ์กฐํ•ฉํ•ด์•ผ๋œ๋‹ค.

์ฒ˜์Œ ์ž‘์„ฑํ•  ๋•Œ ์ค‘์•™๊ฐ’ ๋น„๊ต๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณ„์† ํ‹€๋ ธ๋‹ค.

public static void go() {
    for (int k = 1; k <= n; k++) {
        // k์ผ๋•Œ ์ตœ์†Œ๊ฑฐ๋ฆฌํ•ฉ
        int res = Integer.MAX_VALUE;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int centerX = checker[i][0]; // ์› ๋Œ€์ƒ์˜ X
                int centerY = checker[j][1]; // ๋น„๊ต ๋Œ€์ƒ์˜ Y

                int[] dist = new int[n];
                for (int p = 0; p < n; p++) {
                    dist[p] = Math.abs(checker[p][0] - centerX) + Math.abs(checker[p][1] - centerY);
                }
//                    System.out.println(Arrays.toString(dist));
                Arrays.sort(dist);

                int sum = 0;
                for (int d = 0; d < k; d++) {
                    sum += dist[d];
                }

                res = Math.min(res, sum);
            }
        }
        sb.append(res).append(" ");
    }
}

์›๋Œ€์ƒ์˜ X์ขŒํ‘œ, ๋น„๊ต ๋Œ€์ƒ์˜ Y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉฐ k ๋งŒํผ์˜ ํ•ฉ์„ ๊ณ„์† ๋งŒ๋“ค์–ด๊ฐ€๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค. ๋‚˜๋Š” ๋‚œ์ด๋„๋ฅผ ๋ชจ๋‘ ๊ฐ€๋ฆฌ๊ณ  ํ’€๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒŒ ํ”Œ๋ ˆ๋ผ๋Š” ๊ฑธ ์•Œ๊ณ  ์ข€ ๋†€๋ž๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT
 
01
07

โ–ถ ์œ ํ˜•

  • ๋ชจ๋…ธํ†ค ์Šคํƒ์€ ์Šคํƒ์˜ ์š”์†Œ๋“ค์ด ํ•ญ์ƒ ๋‹จ์กฐ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‹จ์กฐ ๊ฐ์†Œํ•˜๋„๋ก ์œ ์ง€๋˜๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์กฐ ์Šคํƒ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๋ชจ๋…ธํ†ค ์Šคํƒ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํŠน์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง„ ๋‹ค์Œ/์ด์ „ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋ฅผ ์„ ํ˜• ์‹œ๊ฐ„์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ธ๋ฐ, ๊ฐ ์›์†Œ๋Š” ์ตœ๋Œ€ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์Šคํƒ์— ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์ด ๋  ์ฝ”๋“œ๊ฐ€ O(n)์œผ๋กœ ์œ ์ง€๋œ๋‹ค., ์ด๊ฒŒ ์—„์ฒญ ํฐ ์žฅ์ ์ด๋‹ค.
  • ๋ฐฐ์—ด์—์„œ ๊ฐ ์›์†Œ์˜ ๋‹ค์Œ์œผ๋กœ ํฐ ์ˆ˜ ์ฐพ๊ธฐ, ํžˆ์Šคํ† ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜• ๋„“์ด ๊ตฌํ•˜๊ธฐ, ์˜จ๋„๊ฐ€ ๋” ๋†’์•„์ง€๋Š” ๋‚ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ผ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ ๊ฐ™์€ ์œ ํ˜•์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
flowchart TD
    Start([์‹œ์ž‘]) --> Init[์Šคํƒ ์ดˆ๊ธฐํ™”]
    Init --> InputCheck{์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€<br>์žˆ๋Š”๊ฐ€?}
    
    InputCheck -->|Yes| StackEmpty{์Šคํƒ์ด<br>๋น„์–ด์žˆ๋Š”๊ฐ€?}
    InputCheck -->|No| End([์ข…๋ฃŒ])
    
    StackEmpty -->|Yes| PushElement[์Šคํƒ์— ์›์†Œ ์ถ”๊ฐ€]
    StackEmpty -->|No| CompareTop{์Šคํƒ top๊ณผ ๋น„๊ต}
    
    CompareTop -->|์กฐ๊ฑด ์œ„๋ฐฐ| PopElement[์Šคํƒ์—์„œ<br>top ์›์†Œ ์ œ๊ฑฐ]
    CompareTop -->|์กฐ๊ฑด ๋งŒ์กฑ| PushElement
    
    PopElement --> ProcessPopped[์ œ๊ฑฐ๋œ ์›์†Œ๋กœ<br>๊ฒฐ๊ณผ๊ฐ’ ๊ณ„์‚ฐ]
    ProcessPopped --> CompareTop
    
    PushElement --> InputCheck

โ–ถ ์ „๋žต

์˜ค๋ฆ„์ฐจ์ˆœ์ด๋ฉด ๋“ค์–ด๊ฐ€๋ ค๋Š” ์ˆ˜๊ฐ€ top ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ pop์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ฉด ๋“ค์–ด๊ฐ€๋ ค๋Š” ์ˆ˜๊ฐ€ top ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ pop์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ตฌํ˜„๋œ๋‹ค.

[2, 1, 4, 3, 5]๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

๋จผ์ € 2๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๊ทธ ๋‹ค์Œ 1์ด ๋“ค์–ด์˜ค๋Š”๋ฐ, 1์€ 2๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ 2๋ฅผ popํ•˜๊ณ  1์„ pushํ•œ๋‹ค. push ์ „์— top๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ํ•ต์‹ฌ์ด๋‹ค.

 

4๋Š” 1๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ pushํ•˜๊ณ , 3์ด ๋“ค์–ด์™€์•ผ๋˜๋Š”๋ฐ 3์€ 4๋ณด๋‹ค ์ž‘์œผ๋‹ˆ๊นŒ 4์„ pop ํ•˜๊ณ  3์„ pushํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ž…๋ ฅ ๋ฐฐ์—ด์ด [2, 3, 5, 1] ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

5๊นŒ์ง€ ๋‹ด์•˜์„ ๋•Œ 1๊ณผ ๋น„๊ตํ•˜๋ฉด 5๊ฐ€ pop๋˜์•ผํ•œ๋‹ค. ์—ฌ์ „ํžˆ top์ด 1๋ณด๋‹ค ํฌ๋ฏ€๋กœ 3๋„ pop, 2๋„ popํ•˜๋ฉด ์Šคํƒ์ด ๋นˆ ์ƒํƒœ๋กœ 1์ด push ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰ ์Šคํƒ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ธฐ ์ „์— k ์ด์ƒ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  k๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

 

https://www.acmicpc.net/problem/1725

์–˜๋ฅผ ํ•œ๋ฒˆ ํ’€์–ด๋ณด์ž.

for (int i = 1; i <= n; i++) {
    // ํ˜„์žฌ ๋ง‰๋Œ€(arr[i])๋ณด๋‹ค ํฐ ๋†’์ด์˜ ๋ง‰๋Œ€๋“ค์„ ์ฒ˜๋ฆฌ
    while (!st1.isEmpty()) {
        if (st1.peek() > arr[i]) {
            long nowVal = st1.pop();     // ํ˜„์žฌ ์ฒ˜๋ฆฌํ•  ๋†’์ด
            st2.pop();                   // ํ•ด๋‹น ๋†’์ด์˜ ์œ„์น˜๋„ ํ•จ๊ป˜ ์ œ๊ฑฐ
  
            // ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ๊ฒฝ๊ณ„ ์ฐพ๊ธฐ
            int leftIdx = -1;
            if (st2.isEmpty())
                leftIdx = 1;             // ์Šคํƒ์ด ๋น„์—ˆ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ
            else
                leftIdx = st2.peek() + 1; // ์ด์ „ ๋ง‰๋Œ€ ๋‹ค์Œ ์œ„์น˜๋ถ€ํ„ฐ
            
            // ์ง์‚ฌ๊ฐํ˜•์˜ ์˜ค๋ฅธ์ชฝ ๊ฒฝ๊ณ„๋Š” ํ˜„์žฌ ์œ„์น˜ ์ง์ „๊นŒ์ง€
            int rightIdx = i - 1;
            
            // ๋„“์ด ๊ณ„์‚ฐ
            long width = rightIdx - leftIdx + 1;
            long area = width * nowVal;
            
            max = Math.max(max, area);
        } else {
            break;  // ํ˜„์žฌ ๋ง‰๋Œ€๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋†’์ด๋ฅผ ๋งŒ๋‚˜๋ฉด ์ค‘๋‹จ
        }
    }
    
    // ํ˜„์žฌ ๋ง‰๋Œ€์˜ ์ •๋ณด๋ฅผ ์Šคํƒ์— ์ถ”๊ฐ€
    st1.push(arr[i]);
    st2.push(i);
}

๋ฉ”์ธ ๋กœ์ง์ด๋‹ค.

์ž…๋ ฅ ๊ฐ’๊ณผ top์„ ๋น„๊ตํ•˜๋Š”๋ฐ, top์ด ๋” ํฌ๋ฉด popํ•˜๊ณ , idx๋ฅผ ๋“ค๊ณ ์žˆ๋˜ ์Šคํƒ๋„ popํ•œ๋‹ค.(๋™๊ธฐํ™”)

์ง€๊ธˆ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ์ง์‚ฌ๊ฐํ˜•์˜ ๋†’์ด๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ธ๋ฑ์Šค์˜ ์ฐจ์ด๋งŒํผ์ด ๋„ˆ๋น„๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ pop๋˜๋Š” ์‹œ์ ์˜ ๋ฐ”๋กœ ์ด์ „ ์ธ๋ฑ์Šค๊ฐ€ top์ด ์œ ์ง€๋˜๊ณ ์žˆ๋Š” ์ธ๋ฑ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฑธ ๋„ˆ๋น„๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋๋‚œ๋‹ค. ๋ฌผ๋ก  ์ด ์ž‘์—… ํ›„์—, ์•„์ง ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์„ ๋น„์›Œ์ฃผ๋Š” ์ž‘์—…๋„ ํ•„์ˆ˜๋‹ค. ๊ทผ๋ฐ ์ด๋ฏธ ํƒ์ƒ‰์„ ๋ชจ๋‘ ํ•œ ์‹œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฅธ์ชฝ ๋์„ n์œผ๋กœ ์žก๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.

// ๋‚จ์€ ์Šคํƒ ์ •๋ฆฌ
while (!st1.isEmpty()) {
    Long nowVal = st1.pop();
    st2.pop();
    int rightIdx = n; // ์˜ค๋ฅธ์ชฝ ๋
    int leftIdx = -1;
    if (st2.isEmpty()) {
        leftIdx = 1;
    } else {
        leftIdx = st2.peek() + 1;
    }
    long width = rightIdx - leftIdx + 1;
    long area = width * nowVal;
    max = Math.max(max, area);
}

 

์ด ๋ฌธ์ œ๋Š” ๋‹จ์กฐ ์ฆ๊ฐ€๋กœ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ์—์„œ ๋‹จ์กฐ ์ฆ๊ฐ€, ๊ฐ์†Œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋‹จ์กฐ์ฆ๊ฐ€์™€ ๋‹จ์กฐ๊ฐ์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•ต์‹ฌ์€ "์š”๊ตฌ์‚ฌํ•ญ"์— ๋‹ฌ๋ ค์žˆ๋‹ค.
๋จผ์ € ๊ฒฐ๊ณผ๊ฐ’์˜ ์กฐ๊ฑด์„ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค. ์ฐพ๋Š” ๊ฐ’์ด "๋” ํฐ ์ˆ˜"์ธ์ง€ "๋” ์ž‘์€ ์ˆ˜" ์ธ์ง€ ๊ตฌ๋ถ„ํ•ด์•ผ๋œ๋‹ค.

  • "๋” ํฐ ์ˆ˜"๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ → ๋‹จ์กฐ๊ฐ์†Œ ์Šคํƒ ์œ ์ง€
  • "๋” ์ž‘์€ ์ˆ˜"๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ → ๋‹จ์กฐ์ฆ๊ฐ€ ์Šคํƒ ์œ ์ง€

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ,

https://www.acmicpc.net/problem/2493 
ํƒ‘ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด, ์ด์ „ ์Šคํƒ์— ๋” ํฐ ์ˆ˜๊ฐ€ ์ˆ˜์‹  ๊ธฐ๋‘ฅ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์กฐ๊ฐ์†Œ ์Šคํƒ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static int[] input;
    public static ArrayDeque<Integer> stack;
    public static ArrayDeque<Integer> idx; // idx
    public static int n;
    public static int[] res;

    public static void main(String[] args) throws Exception {
        // System.setIn(new FileInputStream("res/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        n = Integer.parseInt(br.readLine());
        input = new int[n + 1];
        res = new int[n + 1]; // idx ๋ฒˆ ๊ธฐ๋‘ฅ์ด ์ˆ˜์‹ ํ–ˆ์Œ์„ ๊ธฐ๋กํ•˜๋ ค๊ณ 
        // idx ๊ณ„์‚ฐ 1๋ถ€ํ„ฐ
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 1; i <= n; i++) {
            input[i] = Integer.parseInt(st.nextToken());
        }
        // ์ž…๋ ฅ ๋
        stack = new ArrayDeque<>();
        idx = new ArrayDeque<>();
        go();
        for (int i=1; i<=n; i++){
            sb.append(res[i]).append(" ");
        }
        System.out.println(sb);
    }

    public static void go() {
        for (int i = 1; i <= n; i++) {
            // ๋‹จ์กฐ ๊ฐ์†Œ ์Šคํƒ์œผ๋กœ ๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
            int now = input[i];
            while (!stack.isEmpty()) {
                if (stack.peek() < now) { // top์ด ๋” ์ž‘์œผ๋ฉด ๋นผ์•ผ๋œ๋‹ค
                    stack.pop();
                    idx.pop();
                } else {
                    // ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ˆ˜์‹ ํ•œ ๊ฒƒ
                    res[i] = idx.peek();
                    break;
                }
            }
            stack.push(now);
            idx.push(i);
        }
    }
}

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!
๋ฐ˜์‘ํ˜•
COMMENT
 
01
03

์˜ค๋Š˜ ๋ถ€ํ„ฐ ์˜คํ”ˆ์†Œ์Šค ์›น ํ†ต์‹  ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์—ฌ์ •์„ ๋– ๋‚˜๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ผ๋‹จ ์ œ์ผ ๋จผ์ € TCP ํ†ต์‹ ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉฐ, ๋„คํŠธ์›Œํฌ ์ง€์‹์„ ๋” ๊นŠ๊ฒŒ ๊ฒฝํ—˜ํ•ด๋ณด๋Š” ๊ฒŒ ์ฒซ๋ฒˆ์งธ ๋ชฉํ‘œ๋‹ค.

 

# TCP

TCP(Transmission Control Protocol)๋Š” ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ ์Šค์œ„ํŠธ์˜ ํ•ต์‹ฌ ํ”„๋กœํ† ์ฝœ๋กœ, ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋ณด์žฅํ•œ๋‹ค. ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด๋ผ ํ•˜๋ฉด, ๋ณด๋‚ด๊ณ  ๋ฐ›์•˜๋‹ค๋Š” ๊ฒŒ ํ™•์ธ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์—ฐ๊ฒฐํ•  ๋•Œ๋Š” 3-way handshake, ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ๋•Œ๋Š” 4-way handshake๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

sequenceDiagram
    participant C as Client
    participant S as Server
    
    Note over C,S: 3-Way Handshake (์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ)
    C->>S: SYN (seq=x)
    Note right of C: ํด๋ผ์ด์–ธํŠธ: ์—ฐ๊ฒฐ ์š”์ฒญ
    S->>C: SYN + ACK (seq=y, ack=x+1)
    Note left of S: ์„œ๋ฒ„: ์š”์ฒญ ์ˆ˜๋ฝ & ๋™๊ธฐํ™”
    C->>S: ACK (ack=y+1)
    Note right of C: ํด๋ผ์ด์–ธํŠธ: ์—ฐ๊ฒฐ ํ™•์ธ
    
    Note over C,S: ๋ฐ์ดํ„ฐ ์ „์†ก
    C->>S: Data Transfer
    S->>C: ACK
    S->>C: Data Transfer
    C->>S: ACK
    
    Note over C,S: 4-Way Handshake (์—ฐ๊ฒฐ ์ข…๋ฃŒ)
    C->>S: FIN
    Note right of C: ํด๋ผ์ด์–ธํŠธ: ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์š”์ฒญ
    S->>C: ACK
    Note left of S: ์„œ๋ฒ„: ์ข…๋ฃŒ ์š”์ฒญ ํ™•์ธ
    S->>C: FIN
    Note left of S: ์„œ๋ฒ„: ์„œ๋ฒ„๋„ ์ข…๋ฃŒ ์ค€๋น„ ์™„๋ฃŒ
    C->>S: ACK
    Note right of C: ํด๋ผ์ด์–ธํŠธ: ์ข…๋ฃŒ ํ™•์ธ

3way handshake์˜ ๊ฒฝ์šฐ์—๋Š” ์—ฐ๊ฒฐ ์‹œ๋„, ์—ฐ๊ฒฐ ํ™•์ธ ๋ฐ ์Šน์ธ ์š”์ฒญ, ์ตœ์ข… ํ™•์ธ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

SYN์„ C-> S๋กœ ์ „๋‹ฌํ•˜๊ณ , ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ž‘ ๊ฐ™์ด ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„๋Š” SYN๊ณผ ๋ฐ›์€ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ , ์„œ๋ฒ„ ์ชฝ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ€ ์ค€ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์— +1 ํ•ด์„œ ACK์œผ๋กœ ๋ณด๋‚ธ๋‹ค. ๋งŒ๋“ค์–ด์ง„ ACK + ํด๋ผ์ด์–ธํŠธ ๊ฐ€ ์ค€ SYN์„ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋ฉด ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ด๋ฒˆ์—๋Š” ์„œ๋ฒ„์˜ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์— 1์„ ๋”ํ•ด ACK๋กœ ์‘๋‹ตํ•ด์ค€๋‹ค. ์ด๊ฒŒ ์„œ๋ฒ„์— ๋„์ฐฉํ•˜๋ฉด ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋œ๋‹ค.

 

4way handshake๋Š” ์กฐ๊ธˆ ๋ณต์žกํ•œ๋ฐ ์‹ ๋ขฐ์„ฑ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋“ค๊ณ ๊ฐ€๋ฉด ๋˜‘๊ฐ™๋‹ค.

์‹œ์ž‘์€ ์—ฌ์ „ํžˆ ํด๋ผ์ด์–ธํŠธ๋‹ค. ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๊ณ  FIN์„ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•˜์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ACK๋ฅผ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„ ์ž์ฒด๋„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๊ณ  FIN์„ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์˜ ์ข…๋ฃŒ ์‘๋‹ต์„ ๋ฐ›๊ณ  ACK๋ฅผ ๋‹ค์‹œ ์„œ๋ฒ„์— ์ „ํ•ด์ฃผ๋ฉฐ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋œ๋‹ค. ์–‘์ชฝ ๋ชจ๋‘ ๋”์ด์ƒ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋‹ˆ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ด์•ผํ•˜๋Š”๋ฐ, ์ƒํƒœํ™•์ธ์„ ํ•œ๋‹ค์Œ์— ๋Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ ์ด UDP ํ†ต์‹ ๊ณผ ๋‹ค๋ฅธ ๊ฒƒ์ด๋‹ค.

ํ๋ฆ„์ œ์–ด๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ํ˜ผ์žก ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ํŒจํ‚ท์˜ ์ฒดํฌ์„ฌ์„ ์‚ฌ์šฉํ•ด ์˜ค๋ฅ˜ ๊ฒ€์ถœ๊ณผ ์†์ƒ ํŒจํ‚ท ์žฌ์ „์†ก ๊ธฐ๋Šฅ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ†ต์‹ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

interface TcpServer { // ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ์šฉ ์ธํ„ฐํŽ˜์ด์Šค
    fun start(port: Int)
    fun stop()
    fun isRunning(): Boolean
}

์‹œ์ž‘, ์ข…๋ฃŒ, ์ƒํƒœํ™•์ธ์šฉ ํ•จ์ˆ˜๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด ์‹œ์ž‘ํ–ˆ๋‹ค.

private val isRunning = AtomicBoolean(false)
private var serverSocket: ServerSocket? = null
private val threadPool = Executors.newCachedThreadPool()

์†Œ์ผ“ ํ†ต์‹ ์˜ ๊ตฌํ˜„์ฒด๋กœ๋Š” ServerSocket์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. AtomicBoolean๊ฐ€ ๋ฉ€ํ‹ฐ์Šค๋ ˆํŠธ ํ™˜๊ฒฝ์—์„œ race condition ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค๊ณ  ํ•ด์„œ ์ด๊ฑธ ์ƒํƒœ ํ™•์ธ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ์“ฐ๋ ˆ๋“œ ํ’€์„ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋๋‚œ๋‹ค.

cacheThreadPool์ด๋ผ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , 60์ดˆ๊ฐ„ ์‚ฌ์šฉ๋˜์ง€์•Š๋Š” ์Šค๋ ˆ๋“œ๋Š” ์ œ๊ฑฐํ•ด์ค€๋‹ค.

public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
}

start๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•œ๋‹ค.

override fun start(port: Int) {
    if (isRunning.get()) {
        throw IllegalStateException("Server is already running")
    }

    serverSocket = ServerSocket().apply {
        bind(InetSocketAddress(port), backlog)
    }
    isRunning.set(true)

    threadPool.submit {
        while (isRunning.get()) {
            try {
                val clientSocket = serverSocket?.accept() ?: break
                handleNewConnection(clientSocket)
            } catch (e: Exception) {
                if (isRunning.get()) {
                    e.printStackTrace()
                }
            }
        }
    }
}

private fun handleNewConnection(clientSocket: Socket) {
    threadPool.submit {
        try {
            connectionHandler.handle(clientSocket)
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            try {
                clientSocket.close()
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
}

ServerSocket๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒŒ TCP/IP๊ณ„์ธต์—์„œ LISTEN์ƒํƒœ๋กœ ์ง„์ž…ํ•˜๋Š” TCP ์—ฐ๊ฒฐ์˜ ์‹œ์ž‘์ ์ด๋‹ค. OS๊ฐ€ ์ €๊ธฐ์„œ ๋ฐ›๋Š” port์— ๋Œ€ํ•œ TCP ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  baklog์—๋Š” ๋Œ€๊ธฐ์—ด์„ ์ฒ˜๋ฆฌํ•  TCP์˜ SYN ํ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค. ์ด๊ฑธ ๋ฐฑํ”„๋ ˆ์…”๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

SYN ํ์— ์™„๋ฃŒ๋˜์ง€์•Š์€ ์—ฐ๊ฒฐ์š”์ฒญ๋“ค์ด ์Œ“์—ฌ์žˆ์„ ์˜ˆ์ •์ด๋‹ค. 

public Socket accept() throws IOException {
    if (isClosed())
        throw new SocketException("Socket is closed");
    if (!isBound())
        throw new SocketException("Socket is not bound yet");
    Socket s = new Socket((SocketImpl) null);
    implAccept(s);
    return s;
}

์‹คํ–‰์ค‘์ด๋ผ๋ฉด ๊ณ„์† ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ `serverSocket?.accept()`๋ถ€๋ถ„์ด 3way handshake๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. accept ์ž์ฒด๊ฐ€ ์—ฐ๊ฒฐ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

TCP์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ๊ทธ ์—ฐ๊ฒฐํ•œ ์†Œ์ผ“์—์„œ ํ†ต์‹ ์„ ์ด๋ฃฌ๋‹ค. ์ปค๋„ฅ์…˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋‚˜๋ฆ„์ธ๊ฑธ๋กœ ํ•ด๋‘์—ˆ๋Š”๋ฐ ์ผ๋‹จ ๋‹จ์ˆœ ์—์ฝ”์šฉ์œผ๋กœ๋งŒ ์ž‘์„ฑํ–ˆ๋‹ค. TCP์ด ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋™์ž‘ํ•˜๋‹ˆ๊นŒ inputstream, outputstream์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

class EchoConnectionHandler : ConnectionHandler {
    override fun handle(socket: Socket) {
        val input = socket.getInputStream().bufferedReader()
        val output = socket.getOutputStream().bufferedWriter()

        input.lineSequence().forEach { line ->
            output.write("$line\n")
            output.flush()
        }
    }
}

์ปค๋„ฅ์…˜ ๋ฉ”์„œ๋“œ์—์„œ์˜ `clientSocket.close()` ๋Š” accept์™€ ๋ฐ˜๋Œ€๋กœ 4way handshake๋ฅผ ๋ฐœ๋™์‹œํ‚จ๋‹ค.

telnet์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋ฉด, ํ•œ๊ธ€์€ ๊นจ์ ธ์„œ ์˜ค์ง€๋งŒ ์ผ๋‹จ ์ž…๋ ฅํ•œ๊ฒŒ ์‘๋‹ต์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ง€๊ธˆ ๊ตฌํ˜„ํ•ด๋‘”๊ฑด ์“ฐ๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•˜๊ธด ํ–ˆ์ง€๋งŒ blocking I/O ๋ฐฉ์‹์ด๋ผ ๊ฐ ์—ฐ๊ฒฐ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ํ•„์š”๋กœํ•œ๋‹ค. ์ปค๋„ฅ์…˜์ด ์—ด๋ฆฌ๋Š” ๋งŒํผ ์Šค๋ ˆ๋“œ๋ฅผ ์—ด์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ ๋น„์šฉ์ด 1MB ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์ธ๊ฑธ ๊ฐ์•ˆํ–ˆ์„ ๋•Œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

# ๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น, ๋™๊ธฐ, ๋น„๋™๊ธฐ

์ผ๋‹จ ๋ธ”๋กœํ‚น I/O๋ž‘ ๋…ผ๋ธ”๋กœํ‚น I/O์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด์ž. ๋งค์šฐ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…๋“ค์ธ๋ฐ, ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น๊ณผ ๋™๊ธฐ/๋น„๋™๊ธฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋…์ธ๊ฑธ ์•Œ๊ณ  ๋“ค์–ด๊ฐ€์•ผ๋œ๋‹ค.

 

๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น์€ ํ˜ธ์ถœ ํ•จ์ˆ˜๊ฐ€ ์ œ์–ด๊ถŒ์„ ๋ฐ”๋กœ ๋Œ๋ ค์ฃผ๋Š” ์ง€, ์•„๋‹ˆ๋ฉด ๋Œ€๊ธฐ ์‹œํ‚ค๋Š” ์ง€์— ๋Œ€ํ•œ ์ฐจ์ด๊ณ , ๋™๊ธฐ ๋น„๋™๊ธฐ๋Š” ์ž‘์—…์™„๋ฃŒ์˜ ํ†ต์ง€ ๋ฐฉ์‹ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ทธ๋ž˜์„œ ๋™๊ธฐ๋Š” ์ง์ ‘ ์™„๋ฃŒ๊ฐ€ ๋๋‹ค๊ณ  ํ†ต์ง€๋ฅผ ํ•ด์ฃผ๊ณ , ๋น„๋™๊ธฐ๋Š” ์ฝœ๋ฐฑํ˜•์‹์œผ๋กœ ํ†ต์ง€๋ฅผ ํ•ด์„œ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ถ„๋ฆฌ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ์‹œ๋ฅผ ์นดํŽ˜๋กœ ๋“ค์–ด๋ณด๋ฉด ์ข€ ๋” ์ดํ•ด๊ฐ€ ์ž˜ ๋œ๋‹ค. ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋Š” ๊ฒŒ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ๋‹ค.

  • ๋ธ”๋กœํ‚น์€ ์ฃผ๋ฌธ ๋ฐ›์•˜์œผ๋‹ˆ ์นด์šดํ„ฐ์—์„œ ์ปคํ”ผ ๊ธฐ๋‹ค๋ฆฌ๋ผ๊ณ  ์‹œํ‚ค๋Š” ๊ฒƒ
  • ๋…ผ๋ธ”๋กœํ‚น์€ ์ง„๋™๋ฒจ์„ ์ฃผ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ
  • ๋™๊ธฐ๋Š” ์ปคํ”ผ๊ฐ€ ๋‚˜์™”์„ ๋•Œ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ(์•Œ๋ ค์ค„ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ๋œ๋‹ค)
  • ๋น„๋™๊ธฐ๋Š” ์ง„๋™๋ฒจ์ด ์šธ๋ ธ์„ ๋•Œ ์ฐพ์•„๊ฐ€๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ

์ด๋ ‡๊ฒŒ 4๊ฐ€์ง€๋กœ ์ •๋ฆฌ ํ•˜๊ฒ ๋‹ค.

 

์œ„์—์„œ ๋‚ด๊ฐ€ Tcp์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์€ ๋ธ”๋กœํ‚น ๋ฐฉ์‹์ด๋‹ค. ๊ฐ ์ปค๋„ฅ์…˜ ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•ด์„œ ํ˜ธ์ถœ์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT
 
12
30

๊ฐœ์ธ์ ์œผ๋กœ ๊ธฐ์ถœ๋ฌธ์ œ 300๋ฌธ์ œ๋ณด๋‹ค ์ด๊ฑฐ ํ•˜๋‚˜๊ฐ€ ๋” ์–ด๋ ค์› ๋‹ค

 

์ „์†ก ์ค‘์ธ ๋ฐ์ดํ„ฐ์— SSL์„ ์‚ฌ์šฉํ•˜๋„๋ก RDS๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

์ „์†ก ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ๋ณด์•ˆ์†Œ์ผ“๊ณ„์ธต/์ „์†ก๊ณ„์ธต๋ณด์•ˆ(SSL/TLS) ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Amazon RDS๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋  ๋•Œ ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ DB ์ธ์Šคํ„ด์Šค์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. MySQL์˜ ๊ฒฝ์šฐ, --ssl_ca ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MySQL ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ณต์šฉ ํ‚ค๋ฅผ ์ฐธ์กฐํ•ด์„œ ์—ฐ๊ฒฐ์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. SSL์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ PostgreSQL DB ์ธ์Šคํ„ด์Šค ๊ฐ„์— PostgreSQL ์—ฐ๊ฒฐ์„ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ PostgreSQL DB ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์ด SSL์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon API Gateway, Amazon SQS, Amazon Kinesis

Amazon API ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํ† ํฐ ํ•˜๋‚˜๊ฐ€ ์š”์ฒญ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜๋Š” ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ถ„์˜ API์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์Šค๋กœํ‹€๋งํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ๋Š”, API ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ณ„์ •์— ์žˆ๋Š” ๋ชจ๋“  API์— ๋Œ€ํ•ด ์ •์ƒ ์ƒํƒœ(steady-state) ์†๋„ ๋ฐ ์š”์ฒญ ์ œ์ถœ ๋ฒ„์ŠคํŠธ์— ์ œํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฒ„์ŠคํŠธ(burst)๋Š” ์ตœ๋Œ€ ๋ฒ„ํ‚ท ํฌ๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

Amazon SQS - Amazon Simple Queue Service(SQS)๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ, ์„œ๋ฒ„๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””์ปคํ”Œ๋งํ•˜๊ณ  ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ดํ™” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. Amazon SQS๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์žƒ๊ฑฐ๋‚˜ ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ์ผ์‹œ์ ์ธ ๋ณผ๋ฅจ ํญ์ฆ์„ ๋งค๋„๋Ÿฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฒ„ํผ๋ง ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Amazon Kinesis - Amazon Kinesis๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œํ™”, ๋ฒ„ํผ๋ง, ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์—”๋“œํฌ์ธํŠธ๋Š” ์ง€์›๋˜๋Š” AWS ์„œ๋น„์Šค๋ฅผ ํ–ฅํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ผ์šฐํŠธ ํ…Œ์ด๋ธ”์— ํƒ€๊นƒ์œผ๋กœ ์ง€์ •ํ•œ ๊ฒŒ์ดํŠธ์›จ์ด์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์„ ์Šค๋กœํ‹€๋งํ•˜๊ฑฐ๋‚˜ ๋ฒ„ํผ๋งํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

30์ผ ๋’ค์— ๊ฐ์ฒด๋ฅผ Amazon S3 One Zone-Infrequent Access(S3 One Zone-IA)๋กœ ์ „ํ™˜ํ•˜๋„๋ก ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ •์ฑ…์„ ์„ค์ •ํ•œ๋‹ค. 

S3 One Zone-IA๋Š” ์•ก์„ธ์Šค ๋นˆ๋„๊ฐ€ ๋‚ฎ์ง€๋งŒ ํ•„์š”ํ•  ๋•Œ๋Š” ๋น ๋ฅธ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ 3๊ฐœ์˜ ๊ฐ€์šฉ ์˜์—ญ(AZ)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋‹ค๋ฅธ S3 ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ, S3 One Zone-IA๋Š” ํ•˜๋‚˜์˜ AZ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  S3 Standard-IA์— ๋น„ํ•ด ๋น„์šฉ์ด 20% ์ ๊ฒŒ ๋“ญ๋‹ˆ๋‹ค. S3 One Zone-IA๋Š” ์•ก์„ธ์Šค ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์žฌ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‚ฎ์€ ๋น„์šฉ ์˜ต์…˜์„ ์›ํ•˜์ง€๋งŒ S3 Standard ๋˜๋Š” S3 Standard-IA์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ํšŒ๋ณต์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ณ ๊ฐ๋“ค์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ ๋ณด๊ด€ ๊ธฐ๊ฐ„์€ 30์ผ์ด๋ฉฐ ๊ทธ ์ „์— ์—ฌ๋Ÿฌ๋ถ„์€ ๊ฐ์ฒด๋ฅผ S3 Standard์—์„œ S3 One Zone-IA๋กœ ์ด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -> ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค ์ตœ์†Œ ๋ณด๊ด€ ๊ธฐ๊ฐ„์€ 30์ผ์ด๋‹ค!

S3 One Zone-IA๋Š” S3 Standard์™€ ๊ฐ™์€ ๋†’์€ ๋‚ด๊ตฌ์„ฑ, ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„, ๋‚ฎ์€ ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ GB๋‹น ์ €์žฅ ๊ฐ€๊ฒฉ ๋ฐ GB๋‹น ๊ฒ€์ƒ‰ ์š”๊ธˆ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค. S3 ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ˆ˜์ค€์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  S3 Standard, S3 Intelligent-Tiering, S3 Standard-IA, S3 One Zone-IA์— ๊ฑธ์ณ ์ €์žฅ๋œ ๊ฐ์ฒด๋“ค์„ ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. S3 ๋ผ์ดํ”„์‚ฌ์ดํด ์ •์ฑ…์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ€๊ฒฝ ์—†์ด ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋“ค ๊ฐ„์— ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon GuardDuty๋ฅผ ์‚ฌ์šฉํ•ด S3์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•…์˜์ ์ธ ์‹œ๋„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , Amazon Macie๋ฅผ ์‚ฌ์šฉํ•ด S3์— ์ €์žฅ๋œ ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

Amazon GuardDuty๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด AWS ๊ณ„์ •, ์›Œํฌ๋กœ๋“œ, Amazon S3์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ์œ„ํ˜‘ ํƒ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GuardDuty๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ณ„์ •์—์„œ ์ƒ์„ฑ๋œ ์—ฐ์†์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ๋ฐ AWS CloudTrail ์ด๋ฒคํŠธ, Amazon VPC ํ”Œ๋กœ์šฐ ๋กœ๊ทธ, DNS ๋กœ๊ทธ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋„คํŠธ์›Œํฌ ํ™œ๋™์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•Œ๋ ค์ง„ ์•…์„ฑ IP ์ฃผ์†Œ ๋ฐ ์ด์ƒ ํƒ์ง€, ๋”์šฑ ์ •ํ™•ํ•˜๊ฒŒ ์œ„ํ˜‘์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋จธ์‹ ๋Ÿฌ๋‹ ๋“ฑ ํ†ตํ•ฉ ์œ„ํ˜‘ ์ธํ…”๋ฆฌ์ „์Šค๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

Amazon Macie๋Š” ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ํŒจํ„ด ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ Amazon S3์— ์žˆ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š” ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๋ฐ ๋ฐ์ดํ„ฐ ํ”„๋ผ์ด๋ฒ„์‹œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. Macie๋Š” ์ด๋ฆ„, ์ฃผ์†Œ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ์˜ ๊ฐœ์ธ์‹๋ณ„๊ฐ€๋Šฅ์ •๋ณด(PII) ๋“ฑ ์ ์  ๋Š˜์–ด๊ฐ€๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ชฉ๋ก์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Amazon S3์— ์ €์žฅ๋œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ์˜ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ผ์ด๋ฒ„์‹œ์— ๋Œ€ํ•œ ๊ณ„์†์ ์ธ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Redis AUTH๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

Amazon ElastiCache for Redis๋Š” ์ธํ„ฐ๋„ท ์Šค์ผ€์ผ์˜ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ€๋ฆฌ ์ดˆ ๋ฏธ๋งŒ์˜ ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฒˆ๊ฐœ์ฒ˜๋Ÿผ ๋น ๋ฅธ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์ž…๋‹ˆ๋‹ค.

Amazon ElastiCache for Redis๋Š” ์บ์‹ฑ, ์ฑ—/๋ฉ”์‹œ์ง•, ๊ฒŒ์ด๋ฐ ๋ฆฌ๋”๋ณด๋“œ, ์ง€๋ฆฌ๊ณต๊ฐ„, ๋จธ์‹ ๋Ÿฌ๋‹, ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ, ๋Œ€๊ธฐ์—ด, ์‹ค์‹œ๊ฐ„ ๋ถ„์„๊ธฐ, ์„ธ์…˜ ์Šคํ† ์–ด ๋“ฑ ์‹ค์‹œ๊ฐ„ ํŠธ๋žœ์žญ์…˜ ๋ฐ ๋ถ„์„ ํ”„๋กœ์„ธ์‹ฑ ํ™œ์šฉ ์‚ฌ๋ก€์— ์•„์ฃผ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ElastiCache for Redis๋Š” ๊ตฌ์„ฑ ์—†์ด ๊ณง๋ฐ”๋กœ ๋ณต์ œ, ๋†’์€ ๊ฐ€์šฉ์„ฑ, ํด๋Ÿฌ์Šคํ„ฐ ์ƒค๋”ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ElastiCache๋Š” IAM Auth๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Redis ์ธ์ฆ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— Redis๊ฐ€ ํ† ํฐ(ํŒจ์Šค์›Œ๋“œ)์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์–ด ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

ElastiCache๋Š” IAM Auth๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ.

KMS๋Š” ์•”ํ˜ธํ™” ์‹คํ˜„์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ.

๋ณด์•ˆ๊ทธ๋ฃน = ๊ฐ€์ƒ ๋ฐฉํ™”๋ฒฝ

ํ†ตํ•ฉ ๊ฒฐ์ œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜๋‹ค. ์›” ์‚ฌ์šฉ ์š”๊ธˆ์ด ํ•œ ๋ฒˆ๋งŒ ์ฒญ๊ตฌ๋˜๋„๋ก ๋ชจ๋“  AWS ๊ณ„์ •์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ๊ฒฐ์ œ ์กฐ์ง ๋ฐ‘์— ๋‘ฌ์•ผ ํ•œ๋‹ค.

๋‹ค์ˆ˜์˜ AWS ๊ณ„์ •์ด ์žˆ๋‹ค๋ฉด AWS ๊ด€๋ฆฌ ์ฝ˜์†” ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ณ„์ •์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ตฌ๋…์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋‹ค์ˆ˜์˜ AWS ๊ณ„์ •๋“ค์„ AWS Shield Advanced์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS ๊ณ„์ •๋“ค์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ๊ฒฐ์ œ์— ์†ํ•ด ์žˆ๋Š” ํ•œ, ์—ฌ๋Ÿฌ๋ถ„์€ ์›” ์š”๊ธˆ์„ ํ•œ ๋ฒˆ๋งŒ ๊ฒฐ์ œํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ชจ๋“  AWS ๊ณ„์ •๊ณผ ๊ทธ ๊ณ„์ •๋“ค์˜ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

AWS Shield Standard๋Š” ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ๋ชจ๋“  AWS ๊ณ ๊ฐ์—๊ฒŒ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜๊ณ , AWS Shield Advanced๋Š” AWS ์™ธ๋ถ€์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•จ.

 

Amazon VPC ์ฝ˜์†” ๋งˆ๋ฒ•์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹จ์ผ ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” VPN - ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ์ด ๊ตฌ์„ฑ์—๋Š” ๋‹จ์ผํ•œ ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” ๊ฐ€์ƒ ์‚ฌ์„ค ํด๋ผ์šฐ๋“œ(VPC)์™€ ์ธํ„ฐ๋„ท์„ ํ†ตํ•œ ํ†ต์‹ ์„ ์‹คํ˜„ํ•˜๋Š” ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ๋‚˜ ๋‹จ์ˆœํ•œ ์›น์‚ฌ์ดํŠธ ๊ฐ™์€ ์‹ฑ๊ธ€ ํ‹ฐ์–ด ์ผ๋ฐ˜์šฉ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค
  2. ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” VPC(NAT) - ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ์ด ๊ตฌ์„ฑ์—๋Š” ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท ํ•˜๋‚˜์™€ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท ํ•˜๋‚˜๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ์‚ฌ์„ค ํด๋ผ์šฐ๋“œ(VPC)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ์œ ์ง€ํ•˜๋Š” ํ•œํŽธ ์ผ๋ฐ˜์šฉ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ˆ์—๋Š” ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์— ์›น ์„œ๋ฒ„๊ฐ€ ์žˆ๊ณ  ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ํ‹ฐ์–ด ์›น์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๋ณด์•ˆ๊ณผ ๋ผ์šฐํŒ…์„ ์„ค์ •ํ•˜์—ฌ ์›น ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” VPC์™€ AWS Site-to-Site VPN ์•ก์„ธ์Šค - ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ๊ตฌ์„ฑ์—๋Š” ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท๊ณผ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท, ๊ทธ๋ฆฌ๊ณ  IPsec VPN ํ„ฐ๋„์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ์™€์˜ ํ†ต์‹ ์„ ์‹คํ˜„ํ•˜๋Š” ๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ(VPC)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํด๋ผ์šฐ๋“œ๋กœ ํ™•์žฅํ•˜๊ณ  ๋˜ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ VPC์—์„œ ์ง์ ‘ ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ด์šฉํ•˜๋ฉด ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์— ์žˆ๋Š” ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅํ•œ ์›น ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ํ‹ฐ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ , IPsec AWS ์‚ฌ์ดํŠธ ๊ฐ„ VPN ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐ๋œ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์— ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท๋งŒ ์žˆ๊ณ  AWS ์‚ฌ์ดํŠธ ๊ฐ„ VPN ์•ก์„ธ์Šค๊ฐ€ ์žˆ๋Š” VPC - ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ๊ตฌ์„ฑ์—๋Š” ํ•˜๋‚˜์˜ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท, ๊ทธ๋ฆฌ๊ณ  IPsec VPN ํ„ฐ๋„์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ์™€์˜ ํ†ต์‹ ์„ ์‹คํ˜„ํ•˜๋Š” ๊ฐ€์ƒ ์‚ฌ์„ค ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ์‚ฌ์„ค ํด๋ผ์šฐ๋“œ(VPC)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์„ ํ†ตํ•œ ํ†ต์‹ ์„ ์‹คํ˜„ํ•˜๋Š” ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  Amazon์˜ ์ธํ”„๋ผ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํด๋ผ์šฐ๋“œ๋กœ ํ™•์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค
Site to Site VPN = IPsec VPN ์—ฐ๊ฒฐ

AWS Site-to-Site VPN์€ ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋„คํŠธ์›Œํฌ(์—ฌ๋Ÿฌ๋ถ„์˜ ํšŒ์‚ฌ ๋ฐ์ดํ„ฐ์„ผํ„ฐ๋‚˜ ์‚ฌ๋ฌด์‹ค)์™€ AWS VPC(Virtual Private Cloud) ์‚ฌ์ด์— ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ์„œ๋น„์Šค. ๊ตฌ์„ฑ์š”์†Œ ์„ธ๊ฐ€์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. Virtual Private Gateway (VGW)
AWS ์ชฝ์— ์œ„์น˜ํ•œ VPN ์—ฐ๊ฒฐ์˜ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค
VPC์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, VPN ํŠธ๋ž˜ํ”ฝ์˜ ์ง„์ž…์  ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค


2. Customer Gateway (CGW)
์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ์„ผํ„ฐ๋‚˜ ์‚ฌ๋ฌด์‹ค ์ชฝ์— ์žˆ๋Š” ์žฅ๋น„์ž…๋‹ˆ๋‹ค
๋ฌผ๋ฆฌ์ ์ธ ์žฅ๋น„์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค


3. VPN ํ„ฐ๋„
๋‘ ๊ฒŒ์ดํŠธ์›จ์ด ์‚ฌ์ด์— ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค
์ด์ค‘ํ™”๋ฅผ ์œ„ํ•ด ํ•ญ์ƒ 2๊ฐœ์˜ ํ„ฐ๋„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
IPsec ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค

Amazon GuardDuty ->VPC Flow Logs, DNS ๋กœ๊ทธ, CloudTrail ์ด๋ฒคํŠธ

Amazon GuardDuty๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ AWS ๊ณ„์ •, ์›Œํฌ๋กœ๋“œ, Amazon S3์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์•…์˜์ ์ธ ํ™œ๋™๊ณผ ๋ฌด๋‹จ ํ–‰๋™์„ ์—ฐ์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์œ„ํ˜‘ ํƒ์ง€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ •๊ณผ ๋„คํŠธ์›Œํฌ ํ™œ๋™์˜ ์ˆ˜์ง‘๊ณผ ์ง‘๊ณ„๊ฐ€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ณด์•ˆํŒ€์ด ์—ฐ์†์ ์œผ๋กœ ์ด๋ฒคํŠธ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ์œ„ํ˜‘์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GuardDuty๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ œ AWS์—์„œ ๊ฒฝ์ œ์ ์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์—ฐ์†์ ์œผ๋กœ ์Šค๋งˆํŠธํ•˜๊ฒŒ ์œ„ํ˜‘์„ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ๋จธ์‹ ๋Ÿฌ๋‹, ์ด์ƒ ํƒ์ง€, ํ†ตํ•ฉ ์œ„ํ˜‘ ์ธํ…”๋ฆฌ์ „์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž ์žฌ์ ์ธ ์œ„ํ˜‘์„ ์‹๋ณ„ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

GuardDuty๋Š” AWS CloudTrail ์ด๋ฒคํŠธ, Amazon VPC Flow Logs, DNS ๋กœ๊ทธ ๊ฐ™์€ ๋‹ค์ˆ˜์˜ AWS ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๊ฑธ์ณ ์ˆ˜๋ฐฑ์–ต ๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

AWS ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ ํด๋ฆญ ๋ช‡ ๋ฒˆ๋งŒ ํ•˜๋ฉด ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ํ•  ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด GuardDuty๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Amazon EventBridge ์ด๋ฒคํŠธ์™€ ํ†ตํ•ฉ๋œ GuardDuty ๊ฒฝ๋ณด๋Š” ์•ก์…”๋„ˆ๋ธ”ํ•˜๋ฉฐ ์†์‰ฝ๊ฒŒ ๋‹ค์ˆ˜์˜ ๊ณ„์ •๋“ค์„ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ธฐ์กด์˜ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ ๋ฐ ์›Œํฌํ”Œ๋กœ ์‹œ์Šคํ…œ์— ๊ณง๋ฐ”๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด ์˜ฌ๋ฐ”๋ฅธ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ , ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน์—์„œ ์ƒˆ๋กœ ๋งŒ๋“  ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ๊ธฐ์กด ์‹œ์ž‘ ๊ตฌ์„ฑ์€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ญ์ œํ•œ๋‹ค.

์‹œ์ž‘ ๊ตฌ์„ฑ์€ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน(ASG)์ด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์ธ์Šคํ„ด์Šค์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. Amazon Machine Image(AMI)์˜ ID, ์ธ์Šคํ„ด์Šค ํƒ€์ž…, ํ‚ค ์Œ, ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน, ๋ธ”๋ก ์žฅ์น˜ ๋งคํ•‘์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ผ๋‹จ ์ƒ์„ฑ๋œ ์‹œ์ž‘ ๊ตฌ์„ฑ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน์„ ๋ณ€๊ฒฝ(์ˆ˜์ •)ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์˜ ์‹œ์ž‘ ๊ตฌ์„ฑ์€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน์„ ์ด์šฉํ•˜์—ฌ, ์‚ฌ์šฉ๋˜๋Š” ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค!! 

VPC ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด Amazon SQS์— ์•ก์„ธ์Šคํ•œ๋‹ค.

AWS ๊ณ ๊ฐ์€ ๊ณต์šฉ IP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋˜ํ•œ ๊ณต์šฉ ์ธํ„ฐ๋„ท์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  VPC ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ๋“ค์˜ Amazon ๊ฐ€์ƒ ์‚ฌ์„ค ํด๋ผ์šฐ๋“œ(Amazon VPC)๋กœ๋ถ€ํ„ฐ Amazon Simple Queue Service(Amazon SQS)์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Amazon SQS์˜ VPC ์—”๋“œํฌ์ธํŠธ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์‚ฌ์ ์œผ๋กœ VPC๋ฅผ ์ง€์›๋˜๋Š” AWS ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ธฐ์ˆ ์ธ AWS PrivateLink๊ฐ€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Amazon VPC ์—”๋“œํฌ์ธํŠธ๋Š” ๊ตฌ์„ฑ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด, ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ฒˆ์—ญ(NAT) ์ธ์Šคํ„ด์Šค, VPN ์—ฐ๊ฒฐ ๋˜๋Š” AWS Direct Connect ์—ฐ๊ฒฐ ์—†์ด Amazon SQS์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ์—ฐ๊ฒฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. VPC ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ Amazon VPC์™€ Amazon SQS ๋Œ€๊ธฐ์—ด ๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ Amazon ๋„คํŠธ์›Œํฌ ์•ˆ์—์„œ ์ „์†ก๋˜์–ด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

AWS PrivateLink๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์šฉ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์ด ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค. AWS PrivateLink๋Š” Amazon ๋„คํŠธ์›Œํฌ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ VPC, AWS ์„œ๋น„์Šค, ์˜จํ”„๋ ˆ๋ฏธ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ์‚ฌ์  ์—ฐ๊ฒฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AWS PrivateLink๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๊ณ„์ •๊ณผ VPC ๊ฐ„์— ์„œ๋น„์Šค๋“ค์„ ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ƒ๋‹นํžˆ ๋‹จ์ˆœํ•ด์ง‘๋‹ˆ๋‹ค.

Amazon Neptune

Amazon Neptune์€ ๊ธด๋ฐ€ํžˆ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ์…‹๋“ค์„ ์ด์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. Amazon Neptune์˜ ํ•ต์‹ฌ์€ ๋ชฉ์ ์— ๋งž๊ฒŒ ๊ตฌ์ถ•๋œ ๊ณ ์„ฑ๋Šฅ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์œผ๋กœ์„œ ์ˆ˜์‹ญ์–ต ๊ฐœ์˜ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐ€๋ฆฌ ์ดˆ ๋‹จ์œ„์˜ ๋ ˆ์ดํ„ด์‹œ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Neptune์€ ์ถ”์ฒœ ์—”์ง„, ์‚ฌ๊ธฐ ํƒ์ง€, ์ง€์‹ ๊ทธ๋ž˜ํ”„, ์•ฝํ’ˆ ๋ฐœ๊ฒฌ, ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ๋“ฑ ๊ทธ๋ž˜ํ”„ ํ™œ์šฉ ์‚ฌ๋ก€์— ํž˜์„ ๋”ํ•ด ์ค๋‹ˆ๋‹ค.

Amazon Neptune์€ ์ฝ๊ธฐ ์ „์šฉ ๋ ˆํ”Œ๋ฆฌ์นด(read replicas), PITR(Point-In-Time Recovery), Amazon S3์— ๋Œ€ํ•œ ์—ฐ์†์ ์ธ ๋ฐฑ์—…, ๊ฐ€์šฉ ์˜์—ญ ๊ฐ„ ๋ณต์ œ ๋“ฑ ๊ฐ€์šฉ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. Neptune์€ HTTPS ์•”ํ˜ธํ™” ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ๋ฐ ์ €์žฅ ์ค‘ ์•”ํ˜ธํ™”(encryption at rest)๋ฅผ ์ง€์›ํ•˜์—ฌ ๋งค์šฐ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Neptune์€ ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ํ•˜๋“œ์›จ์–ด ํ”„๋กœ๋น„์ €๋‹, ์†Œํ”„ํŠธ์›จ์–ด ํŒจ์นญ, ์„ค์ •, ๊ตฌ์„ฑ, ๋ฐฑ์—… ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์ž‘์—…์„ ๋” ์ด์ƒ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Amazon Neptune์€ ๋งŽ์€ ์–‘์˜ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์„ธํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ๋น ๋ฅด๊ฒŒ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์†Œ์…œ ๋„คํŠธ์›Œํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Neptune์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„์˜ ๊ณ ๋„ํ™”๋œ ๋Œ€ํ™”ํ˜• ๋ฐฉ์‹ ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์…œ ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ๋ถ„์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณต๊ธ‰๋˜๋Š” ์†Œ์…œ ํ”ผ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค๋ฉด Neptune์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์กฑ์˜ ์ตœ์‹  ์—…๋ฐ์ดํŠธ, ‘์ข‹์•„์š”’๋ฅผ ํ•œ ์นœ๊ตฌ๋“ค์˜ ์—…๋ฐ์ดํŠธ, ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์นœ๊ตฌ๋“ค์˜ ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์šฐ์„ ์ˆœ์œ„ํ™”๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Lambda ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ AWS ์†Œ์œ ์˜ VPC์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์šฉ ์ธํ„ฐ๋„ท ์ฃผ์†Œ๋‚˜ ๊ณต์šฉ AWS API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. Lambda ํ•จ์ˆ˜๊ฐ€ VPC๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์—์„œ NAT ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•˜์—ฌ ํผ๋ธ”๋ฆญ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ AWS๊ฐ€ ์†Œ์œ ํ•œ VPC๋กœ๋ถ€ํ„ฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ๊ณต์šฉ ์ธํ„ฐ๋„ท ์ฃผ์†Œ์— ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•  ์™„๋ฒฝํ•œ ๋Šฅ๋ ฅ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ณต์šฉ AWS API์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ๋ถ„์˜ ํ•จ์ˆ˜๋Š” AWS DynamoDB API์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๊ธฐ๋ก๋ฌผ์„ PutItemํ•˜๊ฑฐ๋‚˜ Queryํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์— ์žˆ๋Š” ์‚ฌ์  ๋ฆฌ์†Œ์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•  ๋•Œ์—๋งŒ VPC ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. RDS ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ ํ•จ์ˆ˜์— VPC๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํ•จ์ˆ˜์—์„œ ๋‚˜์˜ค๋Š” ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์€ VPC/์„œ๋ธŒ๋„ท์˜ ๋ผ์šฐํŒ… ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ํ•จ์ˆ˜๊ฐ€ ๊ณต์šฉ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์˜ NAT ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŠธ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Lambda ํ•จ์ˆ˜๊ฐ€ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ ์‹คํ–‰(Concurrent Executions) ๋˜๋Š” ๋™์‹œ ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜ ์ง€ํ‘œ๊ฐ€ ์˜ˆ์ƒ ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ–ˆ์„ ๋•Œ ํŒ€์—๊ฒŒ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋„๋ก CloudWatch ๊ฒฝ๋ณด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์€ ๋™์‹œ์„ฑ์ด ๊ธ‰์ฆํ•˜๋ฉด ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ†ต์ œ์žฅ์น˜๋ฅผ ํ•ด๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ConcurrentExecutions ๋˜๋Š” Invocations ๊ฐ™์€ ํ•จ์ˆ˜ ์ง€ํ‘œ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ•œ๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒ€์—๊ฒŒ ์•Œ๋ฆฌ๋Š” CloudWatch ์•Œ๋žŒ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๋งค์ผ ๋น„์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก AWS Budget์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜์กด์„ฑ๋„ ํ•˜๋‚˜์˜ ๋žŒ๋‹ค ๋ฐฐํฌ ํŒจํ‚ค์ง€์— ํŒจํ‚ค์ง•๋จ

๋‘˜ ์ด์ƒ์˜ Lambda ํ•จ์ˆ˜์—์„œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ๊ฑฐ๋ผ๋ฉด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ Lambda ๊ณ„์ธต ์ƒ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 ์—ฌ๋Ÿฌ๋ถ„์€ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ ˆ์ด์–ด ํ˜•ํƒœ๋กœ ๋œ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ปค์Šคํ…€ ๋Ÿฐํƒ€์ž„ ๋˜๋Š” ๊ธฐํƒ€ ์˜์กด์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ZIP ์•„์นด์ด๋ธŒ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ๋ฐฐํฌ ํŒจํ‚ค์ง€์— ๋„ฃ์ง€ ์•Š๊ณ ๋„ ํ•จ์ˆ˜์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌ ํŒจํ‚ค์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ๊ฐœ๋ฐœ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋Š” ํ•œ ๋ฒˆ์— ๋ ˆ์ด์–ด๋ฅผ 5๊ฐœ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AWS Database Migration Service๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Amazon Redshift๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•œ๋‹ค.

AWS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ AWS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์— ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์šด์˜๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กดํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถˆ๊ฐ€๋™ ์‹œ๊ฐ„์ด ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค. AWS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†์ (์ง€์†์ )์œผ๋กœ ๋ณต์ œํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ Amazon Redshift ๋ฐ Amazon S3๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํŽ˜ํƒ€๋ฐ”์ดํŠธ ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon EMR์€ Apache Spark, Apache Hive, Apache HBase, Apache Flink, Apache Hudi, Presto ๊ฐ™์€ ์˜คํ”ˆ์†Œ์Šค ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—…๊ณ„๋ฅผ ์„ ๋„ํ•˜๋Š” Hadoop๊ธฐ๋ฐ˜ ํด๋ผ์šฐ๋“œ ๋น…๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ์ด๋‹ค.

VPN CloudHub

์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋‹ค์ˆ˜์˜ AWS ์‚ฌ์ดํŠธ ๊ฐ„ VPN ์—ฐ๊ฒฐ์ด ์žˆ๋‹ค๋ฉด, AWS VPN CloudHub๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ ๊ฐ„์— ๋ณด์•ˆ ํ†ต์‹ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์›๊ฒฉ ์‚ฌ์ดํŠธ๋“ค์ด VPC๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋กœ ๊ฐ„์— ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ์‚ฌ์„ค ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ AWS Direct Connect ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ๋“ค๋„ AWS VPN CloudHub์˜ ์ผ๋ถ€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. VPN CloudHub๋Š” VPC์™€ ํ•จ๊ป˜, ๋˜๋Š” VPC ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ˆœํ•œ ํ—ˆ๋ธŒ ์•ค ์Šคํฌํฌ(hub-and-spoke) ๋ชจ๋ธ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋‹ค์ˆ˜์˜ ์ง€์  ์‚ฌ๋ฌด์‹ค๊ณผ ๊ธฐ์กด ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์žˆ๊ณ  ๊ทธ๋Ÿฌํ•œ ์›๊ฒฉ ์‚ฌ๋ฌด์‹ค๋“ค ๊ฐ„์— ๊ธฐ๋ณธ ๋˜๋Š” ๋ณด์กฐ ์—ฐ๊ฒฐ์„ฑ์„ ์œ„ํ•ด ํŽธ๋ฆฌํ•˜๊ณ  ๋น„์šฉ๋„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ํ—ˆ๋ธŒ ์•ค ์Šคํฌํฌ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์„ค๊ณ„๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์ œ์‹œ๋œ ํ™œ์šฉ ์‚ฌ๋ก€์—์„œ ๊ธฐ์—… ๋ณธ์‚ฌ์—๋Š” VPC์— ๋Œ€ํ•œ AWS Direct Connect ์—ฐ๊ฒฐ์ด ์žˆ๊ณ  ์ง€์  ์‚ฌ๋ฌด์‹ค์—๋Š” VPC์— ๋Œ€ํ•œ ์‚ฌ์ดํŠธ ๊ฐ„ VPN ์—ฐ๊ฒฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ AWS VPN CloudHub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์  ์‚ฌ๋ฌด์‹ค๋“ค์€ ์„œ๋กœ ๊ฐ„์—, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์—… ๋ณธ์‚ฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VPC Endpoint

VPC ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด, NAT ์žฅ์น˜, VPN ์—ฐ๊ฒฐ ๋˜๋Š” AWS Direct Connect ์—ฐ๊ฒฐ ์—†์ด ์—ฌ๋Ÿฌ๋ถ„์˜ VPC๋ฅผ ์ง€์›๋˜๋Š” AWS ์„œ๋น„์Šค ๋ฐ AWS PrivateLink๊ฐ€ ์ œ๊ณตํ•˜๋Š” VPC ์—”๋“œํฌ์ธํŠธ์— ์‚ฌ์„ค๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ VPC ์•ˆ์˜ ์ธ์Šคํ„ด์Šค๋“ค์€ ์„œ๋น„์Šค์˜ ๋ฆฌ์†Œ์Šค์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์šฉ IP ์ฃผ์†Œ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AWS PrivateLink๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์šฉ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์ด ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด VPC ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ๋Ÿฌ๋ถ„์˜ VPC์™€ ๋‹ค๋ฅธ AWS ์„œ๋น„์Šค ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์€ Amazon ๋„คํŠธ์›Œํฌ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์„ ํƒ์ง€๋Š” ํšŒ์‚ฌ์˜ ์›๊ฒฉ ์ง€์  ์‚ฌ๋ฌด์‹ค๋“ค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

VPC Peering

VPC ํ”ผ์–ด๋ง(peering) ์—ฐ๊ฒฐ์€ ์‚ฌ์„ค IPv4 ์ฃผ์†Œ ๋˜๋Š” IPv6 ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ VPC ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋‘ VPC ๊ฐ„์˜ ๋„คํŠธ์›Œํ‚น ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค. ํ•œ VPC์˜ ์ธ์Šคํ„ด์Šค๋“ค์€ ๋งˆ์น˜ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VPC ํ”ผ์–ด๋ง์€ AWS ๋„คํŠธ์›Œํฌ ์•ˆ์— ์žˆ๋Š” ๋‘ VPC ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณด์กฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์„ ํƒ์ง€๋Š” ํšŒ์‚ฌ์˜ ์›๊ฒฉ ์ง€์  ์‚ฌ๋ฌด์‹ค๋“ค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Amazon Cognito ์‚ฌ์šฉ์ž ํ’€์„ ์‚ฌ์šฉํ•œ๋‹ค. -> ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜

์‚ฌ์šฉ์ž ํ’€์€ Amazon Cognito์˜ ์‚ฌ์šฉ์ž ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ Amazon Cognito ์‚ฌ์šฉ์ž ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์žฅ๋œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ Facebook, Twitter, Google+, Amazon ๊ฐ™์€ ์™ธ๋ถ€ ์ž๊ฒฉ ์ฆ๋ช… ์ œ๊ณต์ž์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋กœ๊ทธ์ธํ•˜๋“  ์ œ3์ž๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜๋“  ์‚ฌ์šฉ์ž ํ’€์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์›์€ ์—ฌ๋Ÿฌ๋ถ„์ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ(SDK)๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ํ”„๋กœํ•„์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. API ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ Amazon Cognito ์‚ฌ์šฉ์ž ํ’€์„ ๋งŒ๋“  ๋‹ค์Œ์— ์—ฌ๋Ÿฌ๋ถ„์€ ํ•ด๋‹น ์‚ฌ์šฉ์ž ํ’€์„ ์‚ฌ์šฉํ•˜๋Š” COGNITO_USER_POOLS ๊ถŒํ•œ ๋ถ€์—ฌ์ž๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๊ฒฉ ์ฆ๋ช… ํ’€์€ ๋‹ค๋ฅธ AWS ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ AWS ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์•„๋‹ˆ๋‹ค!

NAT ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฐ์Šค์ฒœ(bastion) ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ณด์•ˆ ๊ทธ๋ฃน์€ NAT ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
NAT ์ธ์Šคํ„ด์Šค๋Š” ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ์ง€์›ํ•œ๋‹ค.

NAT ์ธ์Šคํ„ด์Šค ๋˜๋Š” NAT ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท๊ณผ ์—ฌ๋Ÿฌ๋ถ„์˜ VPC์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋“ค์ด ์ธํ„ฐ๋„ท์„ ํ–ฅํ•ด ์•„์›ƒ๋ฐ”์šด๋“œ IPv4 ํŠธ๋ž˜ํ”ฝ์„ ๊ฐœ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐ์น˜ ๊ทธ๋ฃน (Cluster Placement Group)

ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ๋‹จ์ผ ๊ฐ€์šฉ ์˜์—ญ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค๋“ค์„ ์„œ๋กœ ๊ฐ€๊น๊ฒŒ ๋ฌถ์–ด๋‘๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งˆ์น˜ ์•„ํŒŒํŠธ์˜ ๊ฐ™์€ ์ธต์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ์„ธ๋Œ€๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ€์กฑ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ๊ฐ€์šฉ ์˜์—ญ ๋‚ด์—์„œ๋งŒ ์šด์˜๋จ
  • ๋งค์šฐ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„ (10๋งˆ์ดํฌ๋กœ์ดˆ ๋ฏธ๋งŒ)
  • ๋†’์€ ๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋Ÿ‰
  • ์ธ์Šคํ„ด์Šค๋“ค์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ€๊นŒ์ด ์œ„์น˜

์‚ฌ์šฉ ์‚ฌ๋ก€:

  • ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (Hadoop, Spark)
  • ๊ณ ์„ฑ๋Šฅ ์ปดํ“จํŒ…(HPC) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์‹œ์Šคํ…œ
ํŒŒํ‹ฐ์…˜ ๋ฐฐ์น˜ ๊ทธ๋ฃน (Partition Placement Group)

ํŒŒํ‹ฐ์…˜ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ์ธ์Šคํ„ด์Šค๋“ค์„ ๋…ผ๋ฆฌ์ ์ธ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒŒํ‹ฐ์…˜์€ ์ž์ฒด ๋ž™(ํ•˜๋“œ์›จ์–ด ์„ธํŠธ)์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ ํฐ ํšŒ์‚ฌ ๊ฑด๋ฌผ์—์„œ ๊ฐ ๋ถ€์„œ๊ฐ€ ๋‹ค๋ฅธ ์ธต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ์— ๊ฑธ์ณ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
  • ๊ฐ ํŒŒํ‹ฐ์…˜์€ ๋‹ค๋ฅธ ๋ž™์—์„œ ์‹คํ–‰๋˜์–ด ํ•˜๋“œ์›จ์–ด ์žฅ์•  ๊ฒฉ๋ฆฌ
  • ์ตœ๋Œ€ 7๊ฐœ์˜ ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ๊ฐ ํŒŒํ‹ฐ์…˜์€ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ.  ๊ฐ ํŒŒํ‹ฐ์…˜์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋Š” AWS ๊ณ„์ •์˜ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ œํ•œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง

์‚ฌ์šฉ ์‚ฌ๋ก€:

  • ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (Cassandra, HBase)
  • ์นดํ”„์นด์™€ ๊ฐ™์€ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ
  • ํ•˜๋“œ์›จ์–ด ์žฅ์• ์— ๋Œ€ํ•œ ๋‚ด๊ตฌ์„ฑ์ด ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน (Spread Placement Group)

์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ์ธ์Šคํ„ด์Šค๋“ค์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ตœ๋Œ€ํ•œ ๋ฉ€๋ฆฌ ๋–จ์–ด๋œจ๋ ค ๋ฐฐ์น˜ํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ ์žฌ๋‚œ ๋Œ€๋น„๋ฅผ ์œ„ํ•ด ํ•œ ํšŒ์‚ฌ์˜ ์‚ฌ๋ฌด์‹ค์„ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๋„์‹œ์— ๋ถ„์‚ฐ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๋ณ„๋„์˜ ํ•˜๋“œ์›จ์–ด ๋ž™์—์„œ ์‹คํ–‰
  • ๊ฐ€์šฉ ์˜์—ญ๋‹น ์ตœ๋Œ€ 7๊ฐœ์˜ ์ธ์Šคํ„ด์Šค ๋ฐฐ์น˜ ๊ฐ€๋Šฅ
  • ์™„๋ฒฝํ•œ ํ•˜๋“œ์›จ์–ด ๊ฒฉ๋ฆฌ ์ œ๊ณต
  • ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ์— ๊ฑธ์ณ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

์‚ฌ์šฉ ์‚ฌ๋ก€:

  • ๊ณ ๊ฐ€์šฉ์„ฑ์ด ํ•„์š”ํ•œ ์ค‘์š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ๊ธˆ์œต ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ
  • ๊ฐœ๋ณ„์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋“ค

๋ฐฐ์น˜ ๊ทธ๋ฃน ์„ ํƒ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ:

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ
    • ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋ฉด → ํด๋Ÿฌ์Šคํ„ฐ
    • ํ•˜๋“œ์›จ์–ด ์žฅ์•  ๊ฒฉ๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด → ์Šคํ”„๋ ˆ๋“œ
    • ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด → ํŒŒํ‹ฐ์…˜
  2. ๋น„์šฉ ํšจ์œจ์„ฑ
    • ํด๋Ÿฌ์Šคํ„ฐ: ๋‹จ์ผ ๊ฐ€์šฉ ์˜์—ญ์œผ๋กœ ๋น„์šฉ ํšจ์œจ์ 
    • ํŒŒํ‹ฐ์…˜/์Šคํ”„๋ ˆ๋“œ: ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ ์‚ฌ์šฉ์œผ๋กœ ์ถ”๊ฐ€ ๋น„์šฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  3. ํ™•์žฅ์„ฑ
    • ํด๋Ÿฌ์Šคํ„ฐ: ๋‹จ์ผ ๊ฐ€์šฉ ์˜์—ญ ๋‚ด ์ œํ•œ
    • ํŒŒํ‹ฐ์…˜: ๋Œ€๊ทœ๋ชจ ํ™•์žฅ ๊ฐ€๋Šฅ
    • ์Šคํ”„๋ ˆ๋“œ: ์ œํ•œ๋œ ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ง€์›
์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน

์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ๊ตฌ๋ถ„๋˜๋Š” ๋ž™์— ๋ฐฐ์น˜๋œ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์œผ๋กœ์„œ, ๊ฐ๊ฐ์˜ ๋ž™์—๋Š” ๊ณ ์œ ํ•œ ๋„คํŠธ์›Œํฌ ๋ฐ ์ „์›์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ณด๊ด€ํ•ด์•ผ ํ•  ํ•ต์‹ฌ์ ์ธ ์ ์€ ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๋“ค์ด ๊ฐ™์€ ๋ž™์„ ๊ณต์œ ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ์  ๊ณ ์žฅ์˜ ์œ„ํ—˜์ด ๊ฐ์†Œํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์€ ๋™์ผํ•œ ๋ฆฌ์ „(Region)์— ์žˆ๋Š” ๋‹ค์ˆ˜์˜ ๊ฐ€์šฉ ์˜์—ญ์— ๋ถ„์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฃน ๋ฐ ๊ฐ€์šฉ ์˜์—ญ(AZ)๋‹น ์ตœ๋Œ€ 7๊ฐœ์˜ ์‹คํ–‰ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์Šคํ”„๋ ˆ๋“œ ๋ฐฐ์น˜ ๊ทธ๋ฃน์— 15๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด ํšŒ์‚ฌ๋Š” 3๊ฐœ์˜ AZ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

aws S3 sync ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์Šค ๋ฒ„ํ‚ท์—์„œ ๋Œ€์ƒ ๋ฒ„ํ‚ท์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.

aws S3 sync ๋ช…๋ น์€ S3 ๋ฒ„ํ‚ท๋“ค ๊ฐ„์— ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด CopyObject API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. sync ๋ช…๋ น์€ ์†Œ์Šค์™€ ํƒ€๊นƒ ๋ฒ„ํ‚ท์„ ๋‚˜์—ดํ•˜์—ฌ ์†Œ์Šค ๋ฒ„ํ‚ท์—๋Š” ์žˆ์ง€๋งŒ ํƒ€๊นƒ ๋ฒ„ํ‚ท์—๋Š” ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ช…๋ น์€ ๋˜ํ•œ ํƒ€๊นƒ ๋ฒ„ํ‚ท์— ์žˆ๋Š” ๊ฐ์ฒด์™€ LastModified ๋‚ ์งœ๊ฐ€ ๋‹ค๋ฅธ ์†Œ์Šค ๋ฒ„ํ‚ท์˜ ๊ฐ์ฒด๋“ค๋„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ €๋‹๋œ ๋ฒ„ํ‚ท์— ๋Œ€ํ•œ sync ๋ช…๋ น์€ ํ˜„์žฌ์˜ ๊ฐ์ฒด ๋ฒ„์ „๋งŒ ๋ณต์‚ฌํ•˜๋ฉฐ ์ด์ „ ๋ฒ„์ „์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„์˜ AWS ๊ณ„์ •์—์„œ ์ ‘๊ทผํ†ต์ œ๋ชฉ๋ก(ACL)์ด FULL_CONTROL๋กœ ์„ค์ •๋˜๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ์ถ”๊ฐ€์ ์ธ ACL์ด ๋ชจ๋‘ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ์ด์ „์— ๋ณต์‚ฌํ•œ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•  ํ•„์š” ์—†์ด sync ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

S3 ๋ฐฐ์น˜ ๋ณต์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์ œ ๊ตฌ์„ฑ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ์žˆ์—ˆ๋˜ ๊ฐ์ฒด, ์ด์ „์— ๋ณต์ œ๋˜์—ˆ๋˜ ๊ฐ์ฒด, ๋ณต์ œ์— ์‹คํŒจํ–ˆ๋˜ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Batch Operations ์ž‘์—…์„ ์ด์šฉํ•˜์—ฌ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜จ๋””๋งจ๋“œ ์ธ์Šคํ„ด์Šค์™€ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด ์›ํ•˜๋Š” ๊ทœ๋ชจ, ์„ฑ๋Šฅ, ๋น„์šฉ์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด, ๊ฐ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์˜ ์šฉ๋Ÿ‰์„ ํ”„๋กœ๋น„์ €๋‹ํ•  ๋•Œ ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ(Launch Template)๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์€ Amazon Machine Image(AMI)์˜ ID, ์ธ์Šคํ„ด์Šค ํƒ€์ž…, ํ‚ค ์Œ, ๋ณด์•ˆ ๊ทธ๋ฃน, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์ด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ์ ์—์„œ ์‹œ์ž‘ ๊ตฌ์„ฑ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹œ์ž‘ ๊ตฌ์„ฑ ๋Œ€์‹ ์— ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค์ˆ˜์˜ ํ…œํ”Œ๋ฆฟ ๋ฒ„์ „์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์ด ์›ํ•˜๋Š” ์Šค์ผ€์ผ, ์„ฑ๋Šฅ, ๋น„์šฉ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์˜จ๋””๋งจ๋“œ ์ธ์Šคํ„ด์Šค์™€ ์Šคํฟ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ˆ˜์˜ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์— ๊ฑธ์ณ ์šฉ๋Ÿ‰์„ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์‹œ์ž‘ ๊ตฌ์„ฑ์€ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ทธ๋ฃน์ด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ํ…œํ”Œ๋ฆฟ์ด๋‹ค

์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(UserData)๋กœ ์ž…๋ ฅ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋กœ์„œ ์ž…๋ ฅ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ์— sudo ๋ช…๋ น์„ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ์„ฑํ•œ ๋ชจ๋“  ํŒŒ์ผ์€ ๋ฃจํŠธ๊ฐ€ ์†Œ์œ ํ•˜๋ฉฐ, ๋ฃจํŠธ ์‚ฌ์šฉ์ž ์ด์™ธ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ์ ˆํžˆ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ์˜ ๋ถ€ํŒ… ์ฃผ๊ธฐ ๋™์•ˆ๋งŒ ์‹คํ–‰๋œ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ์„œ, ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์Šคํฌ๋ฆฝํŠธ์™€ cloud-init ๋ช…๋ น์€ ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ตœ์ดˆ๋กœ ์‹คํ–‰ํ•  ๋•Œ ๋ถ€ํŒ… ์‚ฌ์ดํด ์ค‘์—๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์Šคํฌ๋ฆฝํŠธ์™€ cloud-init ๋ช…๋ น์ด ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon Simple Queue Service(SQS)

SQS๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ, ์„œ๋ฒ„๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””์ปคํ”Œ๋งํ•˜๊ณ  ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ดํ™” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. SQS๋Š” ๋ณต์žก์„ฑ์„ ์ค„์—ฌ์ฃผ๊ณ  ๋ฉ”์‹œ์ง€์—์„œ ์œ ๋ž˜๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด์˜ ๊ด€๋ฆฌ์™€ ์šด์˜์— ๊ด€๋ จ๋œ ๊ฒฝ์ƒ์šด์˜๋น„๋ฅผ ์ค„์—ฌ์ฃผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฐจ๋ณ„ํ™” ์—…๋ฌด์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ญ๋Ÿ‰์„ ๊ฐ•ํ™”ํ•ด์ค๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ SQS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์žƒ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ๋ชจ๋“  ๋ณผ๋ฅจ์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก, ์ €์žฅ, ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SQS๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋Œ€๊ธฐ์—ด์€ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๊ทน๋Œ€ํ™”๋˜๊ณ  ์ˆœ์„œ๊ฐ€ ์ตœ์ ํ™”๋˜๋ฉฐ ์ตœ์†Œํ•œ ํ•œ ๋ฒˆ ์ „๋‹ฌ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. SQS FIFO ๋Œ€๊ธฐ์—ด์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋œ ์ˆœ์„œ๋Œ€๋กœ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ์„œ, FIFO ๋Œ€๊ธฐ์—ด์€ ๋ฐฐ์นญ(batching)์„ ์ด์šฉํ•˜์—ฌ ์ดˆ๋‹น ์ตœ๋Œ€ 3,000๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์นญ ์—†์ด ์ดˆ๋‹น ์ตœ๋Œ€ 300๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(์ดˆ๋‹น 300ํšŒ์˜ ์ „์†ก, ์ˆ˜์‹  ๋˜๋Š” ์‚ญ์ œ ์ž‘์—…). ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐฐ์นญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ์ดˆ๋‹น ์ตœ๋Œ€ 3,000๊ฐœ์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์†๋„ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FIFO ๋Œ€๊ธฐ์—ด์˜ ์ด๋ฆ„์€ .fifo๋ผ๋Š” ์ ‘๋ฏธ์–ด๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๋ฏธ์–ด๋„ 80์ž๋ผ๋Š” ๋Œ€๊ธฐ์—ด ์ด๋ฆ„ ํ•œ๋„์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋Œ€๊ธฐ์—ด์ด FIFO์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด, ์—ฌ๋Ÿฌ๋ถ„์€ ๋Œ€๊ธฐ์—ด ์ด๋ฆ„์ด ๊ทธ ์ ‘๋ฏธ์–ด๋กœ ๋๋‚˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์ผ ํ‘œ์ค€ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๊ณ , FIFO ๋Œ€๊ธฐ์—ด์˜ ์ •๋ ฌ(ordering) ๋˜๋Š” ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ(exactly-once) ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ€๊ธฐ์—ด๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •ํ™•ํžˆ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ํ‘œ์ค€ ๋Œ€๊ธฐ์—ด์„ FIFO ๋Œ€๊ธฐ์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด FIFO ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ ํ‘œ์ค€ ๋Œ€๊ธฐ์—ด์„ ์‚ญ์ œํ•˜๊ณ  FIFO ๋Œ€๊ธฐ์—ด๋กœ์„œ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

EC2 ์‹œ์ž‘ ์œ ํ˜•์˜ ECS๋Š” EC2 ์ธ์Šคํ„ด์Šค ๋ฐ EBS ๋ณผ๋ฅจ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์š”๊ธˆ์ด ์ฒญ๊ตฌ๋œ๋‹ค.
Fargate ์‹œ์ž‘ ์œ ํ˜•์€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•˜๋Š” vCPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์–‘์— ๋”ฐ๋ผ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋œ๋‹ค.

Amazon Elastic Container Service(Amazon ECS)๋Š” ์™„๋ฒฝํžˆ ๊ด€๋ฆฌ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ECS๋ฅผ ์ด์šฉํ•˜๋ฉด AWS์—์„œ Docker ์ฝ˜ํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Fargate ์‹œ์ž‘ ํƒ€์ž…์„ ์„ ํƒํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•˜๋Š” vCPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค์˜ ์–‘์— ๋Œ€ํ•ด ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. vCPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹น๊ฒจ์˜จ ์‹œ๊ฐ๋ถ€ํ„ฐ Amazon ECS ์ž‘์—…*์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ๋˜๋ฉฐ, ์ดˆ ๋‹จ์œ„๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค. EC2 ์‹œ์ž‘ ํƒ€์ž…์„ ์„ ํƒํ•˜๋ฉด EC2 ์‹œ์ž‘ ํƒ€์ž…์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•œ AWS ๋ฆฌ์†Œ์Šค(์˜ˆ, EC2 ์ธ์Šคํ„ด์Šค ๋˜๋Š” EBS ๋ณผ๋ฅจ)์— ๋Œ€ํ•ด ์š”๊ธˆ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค.

AWS Global Accelerator๋ฅผ ์‚ฌ์šฉํ•ด ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋ฅผ ํŠน์ • ๋ฐฐํฌ๋กœ ๋ถ„์‚ฐํ•œ๋‹ค.

AWS ๊ธ€๋กœ๋ฒŒ ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ๋Š” AWS ๊ธ€๋กœ๋ฒŒ ๋„คํŠธ์›Œํฌ์— ๊ฑธ์ณ ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์ ์˜ ์—”๋“œํฌ์ธํŠธ๋กœ ์ธ๋„ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ธํ„ฐ๋„ท ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค. AWS ๊ธ€๋กœ๋ฒŒ ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค์ˆ˜์˜ AWS ๋ฆฌ์ „์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ๋„คํŠธ์›Œํฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ํƒ„๋ ฅ์  IP ์ฃผ์†Œ ๋˜๋Š” Amazon EC2 ์ธ์Šคํ„ด์Šค ๋“ฑ ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ๊ณ ์ •๋œ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋Š” ์ •์  ์• ๋‹ˆ์บ์ŠคํŠธ(anycast) IP ์ฃผ์†Œ๋ฅผ 2๊ฐœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

AWS ๊ธ€๋กœ๋ฒŒ ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜์˜ DNS ์บ์‹ฑ, ์ธํ„ฐ๋„ท ๋ฆฌ์กธ๋ฒ„, ํŠธ๋ž˜ํ”ฝ ๋‹ค์ด์–ผ๊ณผ ์ƒ๊ด€์—†์ด ์ฒญ์ƒ‰ ๋ฐ ๋…น์ƒ‰ ํ™˜๊ฒฝ ๊ฐ„์— ์ ์ง„์ ์œผ๋กœ ๋˜๋Š” ํ•œ๊บผ๋ฒˆ์— ํŠธ๋ž˜ํ”ฝ์„ ์ด์ „ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—”๋“œํฌ์ธํŠธ ๊ฐ€์ค‘์น˜ ๋ณ€๊ฒฝ์€ ๋ช‡ ์ดˆ ์•ˆ์— ์œ ํšจํ•ด์ง‘๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ Snowball Edge Storage Optimized ์žฅ์น˜๋กœ ์ „์†กํ•œ๋‹ค. Snowball Edge์—์„œ Amazon S3๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ , ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ •์ฑ…์„ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ AWS Glacier์— ๋ฐฑ์—…ํ•œ๋‹ค.

์ˆ˜ ํ…Œ๋ผ๋ฐ”์ดํŠธ ๋‚ด์ง€ ํŽ˜ํƒ€๋ฐ”์ดํŠธ๊ธ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ AWS๋กœ ์•ˆ์ „ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค๋ฉด Snowball Edge Storage Optimized๊ฐ€ ์ตœ์ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ HDD ์ €์žฅ์†Œ 80TB, vCPU 40๊ฐœ, SATA SSD ์ €์žฅ์†Œ 1TB๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ์ „์ฒ˜๋ฆฌ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด ์ตœ๋Œ€ 40Gb์˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 1PB๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด: 1,024TB ÷ 80TB = ์•ฝ 13๋Œ€์˜ Snowball Edge ์žฅ์น˜๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค. Snowball Edge ์žฅ์น˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” S3 ๋ฒ„ํ‚ท์— ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚˜์ค‘์— ๋ผ์ดํ”„์‚ฌ์ดํด ์ •์ฑ…์„ ํ†ตํ•ด AWS Glacier๋กœ ์ด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ Snowball Edge ์žฅ์น˜์—์„œ AWS Glacier๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•œ ๋’ค ์ฆ‰์‹œ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด Amazon S3๋Š” ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Amazon S3๋Š” ์„ฑ๋Šฅ์ด๋‚˜ ๊ฐ€์šฉ์„ฑ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง€์—ญ์  ๋ถ„๋ฆฌ๋„๋ฅผ ํฌ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์–ด๋– ํ•œ ์ถ”๊ฐ€ ๋น„์šฉ๋„ ์—†์ด ์ž๋™์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์“ฐ๊ธฐ ํ›„ ์ฝ๊ธฐ(read-after-write) ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์“ฐ๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ฐ์ฒด์— ๋ฎ์–ด ์“ด ํ›„์— ์ด๋ฃจ์–ด์ง€๋Š” ์ฝ๊ธฐ ์š”์ฒญ์€ ์ฆ‰์‹œ ๊ฐ์ฒด์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. S3๋Š” ๋˜ํ•œ ๋ฆฌ์ŠคํŠธ ์ž‘์—…์—๋„ ๊ฐ•๋ ฅํ•œ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์“ด ๋‹ค์Œ์— ์ฆ‰์‹œ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์—ฌ ๋ฒ„ํ‚ท์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ๋ชฉ๋กํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ•๋ ฅํ•œ ์“ฐ๊ธฐ ํ›„ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์€ ์—ฌ๋Ÿฌ๋ถ„์ด ์“ด ๋‹ค์Œ์— ์ฆ‰์‹œ ๊ฐ์ฒด๋ฅผ ์ฝ์–ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ๋ถ„์ด ์ž์ฃผ ์ฝ๊ณ  ๊ฐ์ฒด๋ฅผ ์“ด ๋‹ค์Œ์— ์ฆ‰์‹œ ๋ชฉ๋กํ™”๋ฅผ ํ•  ๊ฒฝ์šฐ์— ๊ฐ•๋ ฅํ•œ ์“ฐ๊ธฐ ํ›„ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์ด ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ๋ชจ๋“  S3์˜ GET, PUT, LIST ์ž‘์—…, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด์˜ ํƒœ๊ทธ, ACL ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์— ๊ฐ•๋ ฅํ•œ ์ผ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ๊ธฐ๋กํ•œ ๋ฐ”๋กœ ๊ทธ๊ฒƒ์„ ์ฝ๊ฒŒ ๋˜๊ณ , LIST์˜ ๊ฒฐ๊ณผ๋Š” ๋ฒ„ํ‚ท ์•ˆ์— ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

VPC ๊ณต์œ ๋ฅผ ์‚ฌ์šฉํ•ด AWS Organizations์—์„œ ๋™์ผํ•œ ์ƒ์œ„ ์กฐ์ง์— ์†ํ•œ ๋‹ค๋ฅธ AWS ๊ณ„์ •๊ณผ ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋ธŒ๋„ท์„ ๊ณต์œ ํ•œ๋‹ค.

VPC ๊ณต์œ (๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๋งค๋‹ˆ์ €์˜ ์ผ๋ถ€)๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์ˆ˜์˜ AWS ๊ณ„์ •์ด EC2 ์ธ์Šคํ„ด์Šค, RDS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, Redshift ํด๋Ÿฌ์Šคํ„ฐ, ๋žŒ๋‹ค ํ•จ์ˆ˜ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ๋˜๊ณ  ์ผ์›์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” Amazon ๊ฐ€์ƒ ์‚ฌ์„ค ํด๋ผ์šฐ๋“œ(VPC)๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด VPC๋ฅผ ์†Œ์œ ํ•œ ๊ณ„์ •(์˜ค๋„ˆ)์€ AWS ์กฐ์ง์˜ ๋™์ผํ•œ ์กฐ์ง์— ์†ํ•œ ๋‹ค๋ฅธ ๊ณ„์ •(์ฐธ์—ฌ์ž)๊ณผ ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋ธŒ๋„ท์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋„ˆ ๊ณ„์ •์€ VPC ์ž์ฒด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋ธŒ๋„ท์ด ๊ณต์œ ๋œ ํ›„์— ์ฐธ์—ฌ์ž๋Š” ๊ณต์œ ๋œ ์„œ๋ธŒ๋„ท์—์„œ ์ž์‹ ๋“ค์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์—ด๋žŒ, ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์€ ๋‹ค๋ฅธ ์ฐธ์—ฌ์ž ๋˜๋Š” VPC ์˜ค๋„ˆ์—๊ฒŒ ์†ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์—ด๋žŒ, ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ Amazon VPC๋ฅผ ๊ณต์œ ํ•˜์—ฌ, ๋†’์€ ์ˆ˜์ค€์˜ ์ƒํ˜ธ์—ฐ๊ฒฐ์„ฑ์„ ์š”๊ตฌํ•˜๊ณ  ๋™์ผํ•œ ์‹ ๋ขฐ์„ฑ ๊ฒฝ๊ณ„ ์•ˆ์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์œ„ํ•ด VPC ์•ˆ์˜ ์•”๋ฌต์  ๋ผ์šฐํŒ…(implicit routing)์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒญ๊ตฌ์™€ ์•ก์„ธ์Šค ํ†ต์ œ๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” ํ•œํŽธ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” VPC์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

AWS Elastic Beanstalk

AWS Elastic Beanstalk๋Š” Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker๋กœ ๊ฐœ๋ฐœํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๋ฅผ Apache, Nginx, Passenger, IIS ๋“ฑ์˜ ์œ ๋ช…ํ•œ ์„œ๋น„์Šค์— ๋ฐฐํฌํ•˜๊ณ  ์Šค์ผ€์ผ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„ํŽธํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ„๋‹จํžˆ ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด Elastic Beanstalk๊ฐ€ ์šฉ๋Ÿ‰ ํ”„๋กœ๋น„์ €๋‹, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์ž๋™ ์Šค์ผ€์ผ๋ง๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฑด์ „์„ฑ ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€ ๋ฐฐํฌ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๋Š” AWS ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์™„์ „ํ•œ ํ†ต์ œ๋ ฅ์„ ์œ ์ง€ํ•˜๊ณ  ์–ธ์ œ๋ผ๋„ ๊ทธ๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด AWS Elastic Beanstalk ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ๋•Œ ํ”Œ๋žซํผ ๋ฒ„์ „์— ํฌํ•จ๋œ ํ‘œ์ค€ Elastic Beanstalk AMI ๋Œ€์‹ ์— Amazon Machine Image(AMI)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค์Šคํ…€ AMI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ‘œ์ค€ AMI์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ํ™˜๊ฒฝ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ”„๋กœ๋น„์ €๋‹ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์  ์„ค์น˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ณจ๋“  ์ด๋ฏธ์ง€(Golden AMI)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. - Golden AMI๋Š” ๊ตฌ์„ฑ, ์ผ๊ด€๋œ ๋ณด์•ˆ ํŒจ์นญ, ๋ณด๊ฐ•์„ ํ†ตํ•ด ํ‘œ์ค€ํ™”ํ•˜๋Š” AMI์ž…๋‹ˆ๋‹ค. Golden AMI์—๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋กœ๊น…, ๋ณด์•ˆ, ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ์œ„ํ•ด ์Šน์ธํ•œ ์—์ด์ „ํŠธ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์‹œ๋œ ํ™œ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ๋ถ„์€ Golden AMI๋ฅผ ํ†ตํ•ด ์ด๋ฏธ ์„ค์ •ํ•œ ์ •์  ์„ค์น˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

EC2 ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ€ํŒ… ์‹œ์ ์— ๋™์  ์„ค์น˜ ๋ถ€๋ถ„์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•œ๋‹ค. - EC2 ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘์— ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ EC2 ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€ํŒ… ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋Œ€์‹ ์—, ๋ถ€ํŒ… ์‹œ ๋™์  ์„ค์น˜ ๋ถ€๋ถ„์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon S3 ๋ฒ„ํ‚ท ์ •์ฑ…์„ ์‚ฌ์šฉํ•œ๋‹ค.

Amazon S3์˜ ๋ฒ„ํ‚ท ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— ์žˆ๋Š” ๊ฐ์ฒด ์ผ๋ถ€ ๋˜๋Š” ์ „๋ถ€์— ๊ฑธ์ณ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ…์„ ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋˜๋Š” Amazon S3 ๋ฒ„ํ‚ท์— ๋ถ€์ฐฉํ•˜์—ฌ ๊ถŒํ•œ์„ ์ผ์›ํ™”ํ•ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํ‚ท ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ AWS ๊ณ„์ • ๋˜๋Š” ๋‹ค๋ฅธ AWS ๊ณ„์ •์— ์žˆ๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์—ฌ๋Ÿฌ๋ถ„์˜ Amazon S3 ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์ฒด์ ์ธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋”์šฑ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์€ ์š”์ฒญ ์‹œ๊ฐ„(๋‚ ์งœ ์กฐ๊ฑด), ์š”์ฒญ์ด SSL์„ ์ด์šฉํ•˜์—ฌ ์ „์†ก๋˜์—ˆ๋Š”์ง€์˜ ์—ฌ๋ถ€(๋ถˆ๋ฆฌ์–ธ ์กฐ๊ฑด), ์š”์ฒญ์ž์˜ IP ์ฃผ์†Œ(IP ์ฃผ์†Œ ์กฐ๊ฑด) ๋˜๋Š” ์š”์ฒญ์ž์˜ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋ฌธ์ž์—ด ์กฐ๊ฑด)์„ ๊ธฐ์ค€์œผ๋กœ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์กฐ๊ฑด๋“ค์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ •์ฑ… ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํ‚ท์— ๋Œ€ํ•œ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ) ์•ก์„ธ์Šค!!!

IAM ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ AWS ๊ณ„์ • ์•ˆ์— ์žˆ๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋งŒ ์—ฌ๋Ÿฌ๋ถ„์˜ Amazon S3 ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ๊ณ„์ • ์‚ฌ์šฉ์ž๋“คํ•œํ…Œ๋Š” ๋ถ€์—ฌ๊ฐ€ ์•ˆ๋œ๋‹ค!


S3 ์ „์†ก ๊ฐ€์†ํ™”(Transfer Acceleration)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉ์ ์ง€ S3 ๋ฒ„ํ‚ท์œผ๋กœ ๋” ๋น ๋ฅด๊ฒŒ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ๋‹ค.

 Amazon S3 Transfer Acceleration์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ์™€ S3 ๋ฒ„ํ‚ท ์‚ฌ์ด์˜ ๋จผ ๊ฑฐ๋ฆฌ์— ๊ฑธ์ณ ํŒŒ์ผ๋“ค์„ ๋น ๋ฅด๊ณ  ์‰ฌ์šฐ๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Transfer Acceleration์€ Amazon CloudFront์˜ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋ถ„ํฌ๋œ ์—ฃ์ง€ ์œ„์น˜๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฃ์ง€ ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ์ตœ์ ํ™”๋œ ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๊ฐ€ Amazon S3๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐํŒŒํŠธ(multipart) ์—…๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชฉ์ ์ง€ S3 ๋ฒ„ํ‚ท์œผ๋กœ ๋” ๋น ๋ฅด๊ฒŒ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ๋‹ค.

๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋ถ€๋ถ„๋“ค๋กœ์„œ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ถ€๋ถ„๋“ค์€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ์˜ ์ธ์ ‘ํ•œ ๋ถ€๋ถ„๋“ค์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๊ทธ๋Ÿฌํ•œ ๊ฐ์ฒด ๋ถ€๋ถ„๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์ˆœ์„œ๋กœ๋„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„์˜ ์ „์†ก์ด ์‹คํŒจํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๊ทธ ๋ถ€๋ถ„์„ ์žฌ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ด ์—…๋กœ๋“œ๋˜๋ฉด Amazon S3๋Š” ๊ทธ ๋ถ€๋ถ„๋“ค์„ ์กฐ๋ฆฝํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐ์ฒด ํฌ๊ธฐ๊ฐ€ 100MB์— ๋„๋‹ฌํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ํ•œ ๋ฒˆ์˜ ์ž‘์—…์œผ๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๋Œ€์‹ ์— ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ์ด์šฉ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ๋Š” ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๊ฐœ์„ ๋˜๋ฏ€๋กœ ๋” ๋น ๋ฅด๊ฒŒ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ ๊ฒฝ๊ณ„(Permissions boundary)๋ฅผ ์‚ฌ์šฉํ•ด ์ง์›์ด IAM ์ฃผ์ฒด์—๊ฒŒ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ถŒํ•œ์„ ์ œ์–ดํ•œ๋‹ค.

๊ถŒํ•œ ๊ฒฝ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์›๋“ค์ด ๊ทธ๋“ค์ด ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” IAM ์ฃผ์ฒด์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ถŒํ•œ ์ˆ˜(์ฆ‰ ์‚ฌ์šฉ์ž์™€ ์—ญํ• )๋ฅผ ํ†ต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IAM ๊ด€๋ฆฌ์ž๋กœ์„œ ์—ฌ๋Ÿฌ๋ถ„์€ ๊ด€๋ฆฌ๋œ ์ •์ฑ…์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ถŒํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์ง์›๋“ค์ด ์ด ๊ฒฝ๊ณ„ ์•ˆ์—์„œ ์ฃผ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์–ด์„œ ์ง์›๋“ค์€ ๊ทธ๋Ÿฌํ•œ ์ฃผ์ฒด์—๊ฒŒ ๊ถŒํ•œ ์ •์ฑ…์„ ๋ถ€์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ถŒํ•œ ๊ฒฝ๊ณ„์™€ ๊ถŒํ•œ ์ •์ฑ…์˜ ๊ต์ฐจ์ ์ด ์ฃผ์ฒด์˜ ํšจ๊ณผ์ ์ธ ๊ถŒํ•œ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์ฃผ์ฒด๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ •์˜ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ถŒํ•œ ๊ฒฝ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด ํ™œ์šฉ ์‚ฌ๋ก€์˜ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜

Lambda ํ•จ์ˆ˜์— S3 ๋ฒ„ํ‚ท์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” IAM ์—ญํ• ์„ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น IAM ์—ญํ• ์„ Lambda ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์—ญํ• ๋กœ ์„ค์ •ํ•œ๋‹ค. ๋ฒ„ํ‚ท ์ •์ฑ…์—์„œ Lambda ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์—ญํ• ์—๋„ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

๋™์ผํ•œ AWS ๊ณ„์ •์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ๋žŒ๋‹ค ํ•จ์ˆ˜์— ๋Œ€ํ•ด IAM ์—ญํ• ์„ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ, IAM ์—ญํ• ๊ณผ ๋ฒ„ํ‚ท ์ •์ฑ… ๋ชจ๋‘์— Amazon S3 ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ์—ฌ๋Ÿฌ๋ถ„์€ IAM ์—ญํ• ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ , ์ด์–ด์„œ ๋ฒ„ํ‚ท ์ •์ฑ…์ด ๋žŒ๋‹ค ํ•จ์ˆ˜ ์—ญํ• ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ฑฐ๋ถ€ํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IAM ์—ญํ• ๊ณผ ๋ฒ„ํ‚ท์ด ๋‹ค๋ฅธ ๊ณ„์ •์— ์žˆ๋Š” ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ๋ถ„์€ IAM ์—ญํ• ๊ณผ ๋ฒ„ํ‚ท ์ •์ฑ… ๋ชจ๋‘์— Amazon S3 ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๊ฒƒ์ด ์ œ์‹œ๋œ ํ™œ์šฉ ์‚ฌ๋ก€์—์„œ AWS Lambda์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Redshift Spectrum์„ ์‚ฌ์šฉํ•ด S3์— ์žˆ๋Š” ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Redshift ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค. ๋ถ„์„ ํŒ€์€ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜์—ฌ Redshift์˜ ์ผ์ผ ๋ณด๊ณ ์„œ์™€ ์ƒํ˜ธ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Amazon Redshift๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์˜ ์ €์žฅ๊ณผ ๋ถ„์„์„ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ํžˆ ๊ด€๋ฆฌ๋˜๋Š” ํŽ˜ํƒ€๋ฐ”์ดํŠธ ์Šค์ผ€์ผ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์ œํ’ˆ์ž…๋‹ˆ๋‹ค.

Amazon Redshift ์ŠคํŽ™ํŠธ๋Ÿผ์„ ์ด์šฉํ•˜๋ฉด Amazon Redshift ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•  ํ•„์š” ์—†์ด Amazon S3 ์•ˆ์˜ ํŒŒ์ผ์—์„œ ๊ตฌ์กฐํ™”/๋ฐ˜๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฟผ๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amaozn Redshift ์ŠคํŽ™ํŠธ๋Ÿผ์€ ์ „์šฉ Amaozn Redshift ์„œ๋ฒ„์— ์ƒ์ฃผํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋…๋ฆฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Redshift ์ŠคํŽ™ํŠธ๋Ÿผ์€ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง, ์ง‘๊ณ„์ฒ˜๋Ÿผ ์—ฐ์‚ฐ์ง‘์•ฝ์ ์ธ ๋งŽ์€ ์ž‘์—…์„ Redshift ์ŠคํŽ™ํŠธ๋Ÿผ ๋ ˆ์ด์–ด๊นŒ์ง€ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Redshift ์ŠคํŽ™ํŠธ๋Ÿผ ์ฟผ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์ฟผ๋ฆฌ์— ๋น„ํ•ด ์—ฌ๋Ÿฌ๋ถ„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ํ›จ์”ฌ ๋œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

EC2 ์ „์šฉ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์ „์šฉ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Amazon EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ „์šฉ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์šฉ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์— ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š”์ง€ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ํ†ต์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ค๋žซ๋™์•ˆ ๋™์ผํ•œ ๋ฌผ๋ฆฌ ์„œ๋ฒ„๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ „์šฉ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ Windows Server ๊ฐ™์€ ์„œ๋ฒ„์— ์—ฐ๊ณ„๋œ ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ธฐ์—…์˜ ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ๊ทœ์ œ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT