Web이란 ?
World Wide Web(WWW, W3)은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간
Web의 용도
- Web Site
: google, nave, daum, facebook 등 HTML로 구성된 여러 사이트들
- API(Application Programming Interface) * Web Service
: Kakao Open API, Google Open API, Naver Open API 등
- User Interface
: Chrome, Safari, Explorer, Smart Watch, IP TV 등
Web의 기본 3가지 요소
- URI (Uniform Resource Identifier)
리소스 식별자
모든 정보에 접근할 수 있는 정보
- HTTP (Hypertext Transfer Protocol)
어플리케이션 컨트롤
- HTML (Hyper Text Markup Language)
하이퍼미디어 포멧
XML을 바탕으로 한 범용 문서 포맷
사용자가 알아보기 쉬운 형태로 표현
REST (Representational State Transfer : 자원의 상태 전달) - 네트워크 아키텍처
1. Client, Server
: 클라이언트와 서버가 서로 독립적으로 분리 되어 있어야 한다.
2. Stateless
: 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다.
3. Cache
: 클라이언트는 서버의 응답을 Cache(임시저장)할 수 있어야 한다.
클라이언트가 Cache를 통해 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다.
4. 계층화 (Layered System)
: 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다양한 계층 형태로 구성가능해야 하며,
이를 확장할 수 있어야 한다.
5. Code on Demand (Optional)
: 자바 애플릿, 자바스크립트 플래시 등 특정한 기능을 서버로부터 클라이언트가 전달바당 코드를 실행할 수 있어야 한다.
다음의 인터페이스의 일관성이 잘 지켜졌는지에 따라 REST를 잘 사용했는지 판단 가능
- 자원의 식별
- 메시지를 통한 리소스 조작
- 자기 서술적 메시지
- 애플리케이션 상태에 대한 엔진으로써 하이퍼 미디어
이러한 조건들을 잘 갖춘 경우 REST ful 하다고 표현하고, 이를 REST API 라고 부름
URI 설계
1. URI
: 인터넷에서 특정 자원을 나타내는 주소 값, 해당 값은 유일함. (응답은 달리질 수 있음)
2. URL
: 인터넷 상에서 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
URL은 URI의 하위 개념
URI 설계 원칙 ( RFC-3986)
- 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
- URI 마지막 문자로 (/) 는 포함하지 않음
- 하이픈(-)은 가독성을 높이는 데 사용
- 밑줄(_)은 사용하지 않음
- URI 경로에는 소문자가 적합
- 파일 확장자는 URI에 포함하지 않음
- 프로그래밍 언어에 의존적인 확장자 사용하지 않음
- 구현에 의존적인 경로를 사용하지 않음
- 세션 ID를 포함하지 않음
- 프로그래밍 언어의 Method명을 이용하지 않음
- 명사에 단수형보다는 복수형 사용. 컬렉션에 대한 표현은 복수로 사용
- 컨트롤러 이름으로는 동사나 동사구를 사용
- 경로 부분 중 변하는 부분은 유일한 값으로 대체
- CRUD 기능을 나타내는 것은 URI에 사용하지 않음
- URI Query Parameter 디자인
URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링할 수 있음
- URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용
- API에 있어서 서브 도메인은 일관성 있게 사용
- 클라이언트 개발자 포탈 서브 도메인은 일관성 있게 만듦
HTTP Protocol
HTTP는 TCP 기반으로 한 REST의 특징을 모두 구현하고 있는 Web 기반의 프로토콜
HTTP는 메시지를 주고(Request) 받는(Response) 형태의 통신 방법
*멱등성 : 몇 번을 요청하더라도 같은 값이 오는 것
응답의 상태를 나타내는 코드
자주 사용되는 코드
'기타' 카테고리의 다른 글
Singleton Pattern (0) | 2023.03.17 |
---|---|
디자인 패턴이란? (0) | 2023.03.17 |
Process 용어 (0) | 2022.08.02 |
Eclipse 단축키 정리 (0) | 2022.08.02 |
댓글