RESTful API
REST API(RESTful API, 레스트 풀 API)란 REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 뜻합니다. REST는 Representational State Transfer의 줄임말입니다.
REST에 적용되는 6가지 제약 조건
1. Uniform Interface(인터페이스 일관성)
: 일관적인 인터페이스로 분리되어야 한다.
2. Stateless(무상태)
: 서버에서 클라이언트의 상태 정보를 저장하지 않고 들어오는 요청에 대해서만 처리하여 구현을 단순화하는 것이다.
3. Cacheable(캐시 처리 가능)
: WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다. Last-Modified, E-Tag를 이용하여 캐시 구현이 가능하다.
4. Layered System(계층화)
: 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성 향상에 유용하다.
5. Client-Server 구조
: 아키텍처를 단순화시키고 작은 단위로 분리함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다.
6. Code on demand
: 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.
RESTful 하게 API를 디자인한다는 것은?
1. 리소스와 행위를 명시적이고 직관적으로 분리한다.
2. Message는 Header와 Body를 명확하게 분리해서 사용한다.
3. API 버전을 관리한다.
4. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
장점
- Open API를 제공하기 쉬움.
- 멀티플랫폼 지원 및 연동이 용이.
- 원하는 타입으로 데이터를 주고받을 수 있음.
- 기존 웹 인프라(HTTP)를 그대로 사용 가능
단점
- 사용할 수 있는 메소드가 4가지 밖에 없음.
- 분산 환경에는 부적합.
- HTTP 통신 모델에 대해서만 지원
TDD(Test-Driven-Development)
매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성하고 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞게 리팩토링 한다.
장점
- 재설계 시간 단축
- 디버깅 시간 단축
- 추가 구현 용이
단점
- 생산성 저하
프로세스와 쓰레드 차이
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위 입니다.
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받고, 쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다.
쓰레드를 사용하는 이유는 운영체제에서 더 효율적으로 시스템 자원을 관리하기 위해 사용된다고 할 수 있습니다.
멀티 프로세스로 진행되는 작업을 멀티 쓰레드로 수행하게 되면 시스템 콜이 줄어들기 때문에 자원을 효율적으로 관리 할 수 있고 프로세스의 통신비용보다 쓰레드간의 통신 비용이 적다는 이점도 있습니다.
단 쓰레드간의 자원공유는 전역변수를 이용하므로 동기화 문제에 신경을 써야하며 멀티쓰레드 프로그래밍은 프로그래머의 주의를 요구합니다.