EP192: REST API란 무엇인가?
이번 주 시스템 디자인 복습:
- 놓치셨다면: URL 단축기는 어떻게 작동할까요? (Youtube 영상)
- 프롬프트 엔지니어링이란? (Youtube 영상)
- REST API란 무엇인가?
- Java HashMap은 어떻게 작동할까요?
- 가상화 설명: 베어메탈부터 호스트 하이퍼바이저까지
- SPONSOR US
REST API란 무엇인가?

REST(Representational State Transfer)는 통신을 위해 HTTP를 사용하는 API를 구축하기 위한 아키텍처 스타일입니다. RESTful로 간주되려면 API는 6가지 핵심 제약조건을 따라야 합니다:
- 클라이언트-서버: 사용자 인터페이스를 데이터 저장 및 처리와 분리합니다. 이를 통해 각 측면이 독립적으로 발전할 수 있습니다.
- 무상태(Stateless): 각 요청은 처리에 필요한 모든 정보를 포함합니다. 서버는 요청 사이에 세션 상태를 저장하지 않습니다.
- 균일한 인터페이스: API 전체에서 일관된 리소스 명명 및 형식을 사용합니다. 예: "/products", "/users".
- 캐시 가능: 응답은 성능 향상을 위해 캐시할 수 있는지 명시적으로 표시합니다(예: Cache-Control).
- 계층화 시스템: 요청은 API 서버에 도달하기 전에 여러 계층(로드 밸런서, 인증 서비스 등)을 거칠 수 있지만, 클라이언트에게는 단일 엔드포인트로 보입니다.
- 주문형 코드(선택사항): 서버는 기능을 확장하기 위해 실행 가능한 코드(JavaScript 등)를 클라이언트에 보낼 수 있습니다.
Over to you: 실제 API에서 가장 자주 간과되는 REST 제약조건은 무엇이라고 생각하시나요?
Java HashMap은 어떻게 작동할까요?
HashMap은 키-값 쌍을 저장하는 데이터 구조로, 빠른 조회, 삽입, 삭제를 가능하게 합니다. 해시 함수를 사용하여 각 키를 버킷 인덱스에 매핑함으로써 효율적인 접근을 가능하게 합니다.

작동 방식은 다음과 같습니다:
- 키가 HashMap에 전달됩니다
- 해시 함수가 각 키를 데이터 값을 가리키는 버킷 인덱스를 가리키는 숫자로 변환합니다
- 두 키가 동일한 버킷 인덱스에 매핑되면 충돌이 발생합니다
- 충돌은 동일한 버킷 내에서 항목을 체인으로 연결하여 처리됩니다. 이는 연결 리스트 또는 경우에 따라 트리를 사용하여 수행됩니다
- 마지막으로, 키를 해싱하고 올바른 버킷을 조회하여 값을 빠르게 검색합니다
Over to you: HashMap의 작동 방식을 더 잘 이해하기 위해 무엇을 추가하시겠습니까?
가상화 설명: 베어메탈부터 호스트 하이퍼바이저까지

컨테이너와 서버리스 이전에는 현대 클라우드 컴퓨팅의 기반인 가상화가 있었습니다. 베어메탈부터 호스트 하이퍼바이저까지, 가상화 작동 방식에 대한 간단한 분석입니다:
-
Type 1 / 베어메탈 하이퍼바이저: 하이퍼바이저가 하드웨어에서 직접 실행됩니다. 그 아래에 운영 체제가 없습니다. 하이퍼바이저가 운영 체제 계층입니다. VMware ESXi, Microsoft Hyper-V, KVM은 모두 Type 1 하이퍼바이저입니다. 물리 서버에서 부팅되어 하드웨어에 직접 접근하며 VM을 관리합니다.
각 VM은 자체 전체 운영 체제를 얻습니다. Windows, Fedora, Ubuntu. VM 간 완전한 격리. 하나가 충돌해도 다른 것들은 계속 실행됩니다.
이것이 데이터 센터와 클라우드 공급자에서 실행되는 방식입니다. AWS에서 EC2 인스턴스를 시작하면 Type 1 가상화에서 실행됩니다(현재는 자체 Nitro 하이퍼바이저를 사용하지만 개념은 동일합니다).
-
Type 2 / 호스트 하이퍼바이저: 하이퍼바이저가 호스트 운영 체제 위에서 애플리케이션으로 실행됩니다. Windows 또는 macOS를 실행한 다음 그 위에 VirtualBox 또는 VMware Workstation을 설치합니다.
게스트 VM은 여전히 전체 운영 체제를 얻지만 이제 추가 계층이 있습니다. VM이 하이퍼바이저와 통신하고, 하이퍼바이저가 호스트 OS와 통신하고, 호스트 OS가 하드웨어와 통신합니다.
더 많은 오버헤드, 약간 낮은 성능이지만 개발 및 테스트에 훨씬 편리합니다. 이것이 랩톱에서 사용하는 방식입니다. MacBook에서 Linux VM을 실행하시나요? 그것이 Type 2입니다.
Over to you: 로컬 개발을 위해 주로 사용하는 하이퍼바이저는 무엇인가요?
Thank you for reading.