IT 기초: 아키텍처 설계
4주 과정, 하루 1시간

IT 기초: 아키텍처 설계

아키텍처 그림을 읽고, 고객에게 비기능 요구사항을 묻고, 늘어나도 고장 나도 버티는 구조를 그려 구글 클라우드로 옮겨 설명하기까지. 위에서부터 하나씩 체크하세요.

다음 할 일

…

실습 방법 보기
전체 진행0 / 0
진행 상황: 이 브라우저에 저장

공부하는 방법

매일 1시간몰아서 8시간보다 매일 1시간이 오래 남습니다. 과제마다 예상 시간이 적혀 있습니다.
읽기 20%, 손 80%개념을 읽었으면 바로 종이나 슬라이드에 상자와 화살표로 직접 그려 보고, 실습이 있는 과제는 WSL 터미널에서 쳐 봅니다.
일부러 부수기설정을 틀리게 바꾸고, 에러 메시지만 보고 원인을 찾습니다.
소리 내 설명하기단계 끝의 자가 점검에 답을 보지 않고 말해 봅니다. 막히면 그 과제로 돌아갑니다.
맥북에서 실습하기Windows에서 한다면 건너뛰세요

맥에서는 Ubuntu 가상 머신(VM)을 하나 띄워 그 안에서 실습합니다. 그러면 이 사이트의 명령을 Windows(WSL)와 똑같이 쓸 수 있습니다. 사이트에 "WSL Ubuntu 터미널"이라고 나오면 "VM 터미널"로 읽으세요.

  1. Homebrew 설치 (맥용 설치 관리자)회사 맥이면 설치 전에 IT팀 승인을 확인하세요.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Ubuntu 가상 머신 만들고 들어가기Multipass는 무료입니다. 이 VM이 Windows의 WSL 역할을 합니다.
    brew install --cask multipass                                  # 가상 머신 관리 도구 설치
    multipass launch --name ubuntu --cpus 2 --memory 4G --disk 20G  # Ubuntu VM 만들기 (쿠버네티스는 --memory 8G 권장)
    multipass shell ubuntu                                          # VM 터미널로 들어가기
    # 여기서부터 사이트의 "WSL Ubuntu 터미널" 명령을 그대로 실행
  3. 맥 브라우저에서 VM 안의 서비스 열기WSL과 달리 localhost가 자동으로 연결되지 않습니다.
    multipass info ubuntu | grep IPv4  # VM의 IP 확인 (예: 192.168.64.5)
    # 브라우저에서 localhost 대신 http://<VM IP>:<포트> 로 접속
    # kubectl port-forward 는 --address 0.0.0.0 을 붙여야 맥에서 열림
  4. 끝나면 정리VM은 켜 두면 맥의 메모리를 계속 씁니다.
    multipass stop ubuntu            # VM 끄기 (내용은 남음)
    multipass start ubuntu           # 다시 켜기
    multipass delete --purge ubuntu  # 완전히 삭제

Git과 Python은 VM 없이 맥에서 바로 해도 됩니다 (xcode-select --install, brew install python). 서버, 네트워크, DB처럼 리눅스 명령이 나오는 사이트는 VM에서 하세요.

WSL 설치, PowerShell 명령건너뜁니다. 위 2번 VM이 대신합니다.
Apple Silicon(M1 이후) 맥VM에서 uname -m이 aarch64면 다운로드 주소의 amd64를 arm64로 바꿉니다. arm64 버전이 없는 이미지는 exec format error가 날 수 있습니다.
Docker Desktop맥도 큰 회사는 유료입니다. VM 안의 Docker Engine을 쓰고, 맥에서 직접 쓰려면 무료인 Colima를 씁니다.
파일 주고받기multipass transfer 파일 ubuntu: 또는 multipass mount ~/study ubuntu:/home/ubuntu/study
브라우저로 열기localhost 대신 VM IP를 씁니다 (위 3번).

VM 없이 맥에서 바로 하고 싶다면 brew install kubectl kind helm colima docker 로 도구를 깔 수 있습니다. 단, 리눅스 내부(namespace, cgroup, systemd, iptables)를 들여다보는 실습은 VM에서만 됩니다.

처음 보는 용어

시스템 아키텍처시스템을 이루는 구성 요소와 그 연결, 그리고 그렇게 고른 이유를 정한 설계입니다. 가게를 차리기 전 그리는 매장 배치도입니다.
비기능 요구사항기능이 아니라 얼마나 잘 해야 하는지(가용성, 성능, 확장성, 보안, 비용, 운영성)에 대한 요구입니다.
가용성과 나인(9)서비스를 쓸 수 있는 시간의 비율입니다. 99.9%는 9가 세 개라 스리 나인이라 부르고, 한 달 약 43분 중단을 허용합니다.
SLA와 SLOSLO는 스스로 정한 서비스 목표(예: 가용성 99.9%)이고, SLA는 고객과 계약으로 약속하고 못 지키면 보상하는 수준입니다.
지연 시간과 p95요청부터 응답까지 걸린 시간이 지연 시간입니다. p95는 100번 중 95번이 이 값보다 빠르다는 뜻으로, 평균보다 느린 꼬리를 잘 보여 줍니다.
수직 확장과 수평 확장수직 확장은 서버를 더 큰 것으로 바꾸기, 수평 확장은 같은 서버를 여러 대로 늘리기입니다.
무상태(stateless)앱 서버가 세션 같은 상태를 자기 메모리에 두지 않는 것입니다. 그래야 서버를 자유롭게 늘리고 줄일 수 있습니다.
로드밸런서와 헬스 체크로드밸런서는 요청을 여러 서버에 나눠 주는 안내 데스크이고, 헬스 체크는 서버가 살아 있는지 주기적으로 확인해 죽은 서버를 빼는 기능입니다.
CDN사용자 가까운 곳에 콘텐츠 복사본을 두어 빠르게 전달하는 네트워크입니다. 동네마다 있는 물류 창고입니다.
캐시와 캐시 무효화캐시는 자주 읽는 데이터를 빠른 메모리에 둔 복사본이고, 무효화는 원본이 바뀌었을 때 캐시의 옛 값을 지우는 일입니다.
샤딩데이터를 기준(예: 회원 번호)에 따라 여러 DB로 쪼개 나눠 담는 방법입니다. 장부를 가나다순으로 여러 권으로 나누는 것입니다.
메시지 큐보내는 쪽이 메시지를 넣어 두면 받는 쪽이 자기 속도로 꺼내 처리하는 중간 보관함입니다. 식당의 주문표 꽂이입니다.
멱등성같은 요청을 여러 번 처리해도 결과가 한 번 처리한 것과 같은 성질입니다. 재시도와 중복 메시지에 대비하는 핵심입니다.
단일 장애 지점(SPOF)하나만 고장 나도 전체 서비스가 멈추는 곳입니다. 열쇠를 가진 직원이 한 명뿐인 가게입니다.
지수 백오프와 지터재시도 간격을 두 배씩 늘리고(지수 백오프) 무작위로 흩뜨려(지터) 한꺼번에 몰리는 재시도를 막는 방법입니다.
서킷 브레이커계속 실패하는 상대를 잠시 호출하지 않고 바로 대체 응답을 주어 연쇄 장애를 막는 장치입니다. 두꺼비집입니다.
RTO와 RPORTO는 복구까지 허용되는 최대 시간, RPO는 잃어도 되는 데이터의 최대 양(시간 단위)입니다.
마이크로서비스기능별로 작게 나눠 따로 개발하고 배포하는 구조입니다. 가게마다 주방이 따로 있는 푸드코트입니다.
서버리스서버 관리 없이 요청이 올 때만 실행되고 쓴 만큼 내는 방식입니다. 손님이 올 때만 불이 켜지는 매장입니다.
트레이드오프하나를 얻으려면 다른 하나를 내주는 관계입니다. 가용성을 올리면 비용이 오르는 것처럼, 설계는 늘 이 균형을 고르는 일입니다.

계속 쓰게 될 자료