2022/02/27 웹 개발 개론

김석진·2022년 2월 27일
0

스프링입문

목록 보기
2/5

웹 개발 개론

웹 이란 무엇인가

(World Wide Web, WWW, W3)은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다

Web의 용도는 다양하게 나눌 수 있다

Web Site

google,naver,daum 등 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)

어플리케이션 컨트롤 , GET,POST,PUT,DELETE,OPTIONS,HEAD,TRACE,CONNECT

HTML(Hyper Text Markup Language)

하이퍼미디어 포맷이며 XML을 바탕으로한 범용 문서 포맷이다. 이를 이용하여 Chrome, Safari 등에서 사용자가 알아보기 쉬운 형태로 표현

REST API

REST(Representational State Transfer: 자원의 상태 전달)- 네트워크 아키텍처

  1. Client,Server: 클라이언트와 서버가 서로 독립적으로 분리되어 있어야 한다
  2. Stateless: 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다
  3. Cache: 클라이언트는 서버의 응답을 Cache(임시저장) 할 수 있어야한다.
    클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다.
  4. 계층화(Layered System): 서버와 클라이언트 사이에, 방화벽,게이트웨이,Proxy등 다양한 계층 형태로 구성이 가능해야 하며, 이를 확장 할 수 있어야함
  5. 인터페이스 일관성: 인터페이스의 일관성을 지키고, 아키텍처를 단순화시켜 작은 단위로 분리하여, 클라이언트,서버가 독립적으로 개선될 수 있어야 한다
  6. Code on Demand(Optional):자바 애플릿, 자바스크립트, 플래시 등 특정한 기능을 서버로 부터 클라이언트가 전달받아 코드를 실행 할 수 있어야함

인터페이스의 일관성

다음의 인터페이스 일관성이 잘 지켜졌는지에 따라,REST를 잘 사용했는지 판단할 수 있다.
1. 자원의 식별:
2. 메시지를 통한 리소스 조작
3. 자기 서술적 메세지
4. 애플리케이션 상태에 대한 엔진으로써 하이퍼미디어

자원의 식별

웹 기반의 REST에서는 리소스를 접근을 할 떄 URI를 사용하는데 URI에 자원을 식별할 수 있는 정보가 담겨있어야한다.

메시지를 통한 리소스 조작

Web에서는 다양한 방식으로 데이터를 전달 할 수 있다.
그중에서 가장 많이 사용하는 방식은 HTML,XML,JSON,TEXT등이 있다.
이중에서 어떠한 타입의 데이터인지 알려주기 위해 HTTP Header 부분에 content-type을 통해서 데이터의 타입을 지정해 줄 수 있다.
또한 리소스 조작을 위해서 데이터 전체를 전달하지 않고, 이를 메시지로 전달한다.

자기 서술적 메시지

요청하는 데이터가 어떻게 처리되어져야 하는지 충분한 데이터를 포함 할 수 있어야 함
HTTP 기반의 REST에서는 HTTP Method와 Header 정보, 그리고 URI의 포함되는 정보로 표현할 수 있다.

Application 상태에 대한 엔진으로써 하이퍼미디어(현업에서 잘 사용하지 않음)

REST API를 개발할 때 단순히 Cleint요청에 대한 데이터만 응답해 주는것이 아닌 관련된 리소스에 대한 Link 정보까지 같이 포함되어져야 한다.
이러한 조건들을 잘 갖춘 경우 RESTFul하다고 표현하고 이를 REST API라고 부른다.

URI 설계 패턴

URI(Uniform Resource Identifier)

인터넷에서 특정 자원을 나타내는 주소값, 해당 값은 유일하다(응답은 달라질 수 있음)
ex) 요청: https://www.fastcampus.co.kr/resource/sample/1
응답: fastcampus.pdf 등등 여러가지의 형태가 올 수 있다.

URL(Uniform Resource Locator)

인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
요청: https://www.fastcampus.co.kr/fastcampus.pdf

URL은 URI의 하위 개념

URI 설계 원칙(RFC-3986)

  • 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
  • URI 마지막 문자로(/)는 포함하지 않는다.
  • 하이픈(-)은 URI의 가독성을 높이는데 사용한다
  • 밑줄(_)은 사용하지 않는다.
  • URI 경로에는 소문자가 적합하다.
  • 파일 확장자는 URI에 포함하지 않는다.
  • 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
  • 구현에 의존적인 경로를 사용하지 않는다.
  • 세션 ID를 포함하지 않는다.

    세션 ID 특정사용자의 특정 경로라고 볼 수 있고 다른사람이 취득할 경우 다른 사람의 정보를 얻을 수 있기때문에 포함 X
  • 프로그래밍 언어의 Method 명을 이용하지 않는다.
  • 명사에는 단수형 보다는 복수형을 사용해야한다. 컬렉션에 대한 표현은 복수로 사용
  • 컨트롤러 이름으로는 동사나 동사구를 사용한다.
  • 경로 부분 중 변하는 부분은 유일한 값(Path Variable)으로 대체한다.
  • CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.
  • URI Query Parameter 디자인
    URI 쿼리부분으로 컬렉션 결과에 대해서 필터링 할 수 있다.
  • URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다.
  • API에 있어서 서브도메인은 일관성 있게 사용해야한다
  • 클라이언트 개발자 포탈 서브 도메인은 일관성 있게 만든다.

HTTP Protocol

  • HTTP(Hyper Text Transfer Protocol)로 RFC 2616에서 규정된 Web에서 데이터를 주고받는 프로토콜
  • 이름에는 하이퍼텍스트 전송용 프로토콜로 정의되어 있지만 실제로는 HTML,XML,JSON,Image,Voice,Javascript,PDF등 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송 가능
  • HTTP는 TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜이다.

HTTP는 반드시 메세지를 주고(Request)받는(Response)형태의 통신 방법이다.

클라이언트는 서버에 요청을 하고 서버에서 일정시간동안 응답이 오지않거나 일정시간동안 서버와 connection이 맺어지지 않으면 취소한다.

HTTP의 요청을 특정하는 Method는 8가지가 있다

REST를 구현하기 위한 인터페이스

  • GET: 리소스 취득(정보를 얻어올때 사용), CRUD에서 R, 멱등성O, 안정성 O, PathVariable O, QueryParameter O ,Databody X
  • POST: 리소스 생성,추가 CRUD에서 C, 멱등성X, 안정성 X, PathVariable O, QueryParameter 권장하지않음 ,Databody O
  • PUT: 리소스 갱신,생성 CRUD에서 C/U, 멱등성O, 안정성 X, PathVariable O, QueryParameter 권장하지 않음 ,Databody O
  • DELETE: 리소스 삭제 CRUD에서 D, 멱등성O, 안정성 X, PathVariable O, QueryParameter O ,Databody X
  • HEAD : 헤더 데이터 취득 멱등성 O
  • OPTIONS: 지원하는 메소드 취득 멱등성 O
  • TRACE :요청메시지 반환 멱등성 O
  • CONNECT: 프록시 동작의 터널 접속으로 변경 멱등성 X

    멱등성: 몇번을 요청을 해도 같은 응답이 내려오는것

HTTP Status Code

서버가 클라이언트한테 처리를 하고 응답의 상태를 나타내는 코드이다.

자주사용 되는 코드

profile
주니어 개발자 되고싶어요

0개의 댓글