1. 인터넷 통신
1) 컴퓨터1 - 인터넷 - 컴퓨터2
- 1에서 2로 데이터를 보내면 인터넷 망에서 무수히 많은 노드들을 거치게 된다.**
2) IP(프로토콜)
- IP주소로 전달하는데 패킷이라는 단위로 전송
- IP 패킷
- 정보
- 출발지 IP
- 도착지 IP
- 특징 혹은 문제점
- 패킷의 데이터 크기가 크면 나누어서 보낸다.
- 중간 노드를 거치면서 패킷이 소실될 가능성 존재.
- 중간 노드를 거치면서 패킷의 순서가 바뀔 가능성 존재
- 정보
3) TCP
- 패킷이 가진 한계점을 해결해줌.
- TCP/IP 패킷
- 정보
- IP패킷 정보 안에 포함된다.
- 출발지 PORT
- 도착지 PORT
- 전송 제어
- 순서
- 검증 정보
- 전송 데이터
- 정보
4) UDP
- HTTP3와 함께 쓰임.
- TCP가 하는 작업들을 개발자가 직접 컨트롤해 속도를 더 빠르게 향상할 수 있음.
2. HTTP
1) HTTP 메서드
(1) GET
- http 스펙상 GET도 메시지 바디를 써서 데이터를 보낼 수 있다.
- 하지만 지원하지 않는 서버도 많고, 그렇기 때문에 실무에서는 권장하지 않는 방식이다.
- form으로 데이터를 보내면 http 바디가 아니라 쿼리 파라미터에 들어간다.
(2) POST
- FORM
- form으로 데이터를 보내면 http 메시지를 생성을 해준다.
- key=value 스타일로 데이터를 만들고 http 바디에 넣는다.
- encrype=“multipart/form-data”
- 여러 데이터를 전송할 때 사용.
- 주로 바이너리 데이터 전송에 사용(사진, 엑셀 파일 등)
- 파일 업로드를 한다면 form-data를 해야 한다는 것을 기억해야 함**
2) HTTP 메서드 설계
(1) API 설계
- POST 기반 Collection
- 실무에서는 이 컬렉션을 대부분 사용한다.*
- POST는 모델 생성 시 id값(PK)을 서버에서 직접 만듦.
- PUT 기반 store
- 실무에서는 이 스토어를 거의 사용하지 않는다.*
- PUT은 모델 생성 시 id값을 클라이언트에서 보내준 값을 가지고 작업만 해줌.
- 수정
- PATCH 가 제일 좋다
- PUT은 완전히 덮을 수 있을 때 사용해야 한다.
- 둘 다 사용하기 애매할 때 POST를 사용.
(2) HTML FORM 사용
- get, post 만 사용 가능
- delete?
- /members/{id}/delete (컨트롤 URL)
- method: POST로 보내야 한다.
- /members/{id} : method: DELETE로 보내는 게 가장 좋지만 form 사용 시 방법이 POST밖에 없기 때문이다.
- /members/{id}/delete (컨트롤 URL)
(3) 컨트롤 URI
- 최대한 resource와 HTTP 메서드를 활용해서 작업을 하고,
- HTTP 메서드를 사용하기 애매할 때 컨트롤 URI(new, edit, delete etc)를 사용해야 한다.**
- 그리고 이름은 동사를 사용해야 한다. resource에 대한 행위 이므로,
(4) URL 설계 팁
- 먼저 resource만 가지고 설계 (복수 이름 사용)
- 만약 이것 가지고 해결이 안 되는 상황이 있다면,
- 그때 컨트롤러 URL로 해결할 것*
3) HTTP 상태 코드
- 상태 코드는 너무 많으므로 보통 범위를 정해서 사용하는 것이 좋다.
- 실무에서는 2xx 경우 200만 사용하는 경우도 많고, 201까지도 가끔 사용한다.
- status 코드를 서버에서 직접 지정해서 사용할 수 있다.
(1) 2xx
(2) 3xx
- 301~308까지가 중요
- 자동 리다이렉트
- 예전 /event 경로를 주면 이 경로가 아닌 새로운 경로 /new_event 로 바꿔서 서버에 다시 요청 후 결과값(200)을 받는다.
- 301, 308 은 거의 사용하지 않음.
- Temporary Redirect 302,307,303- 213p
- 302,307,303 기능은 다 동일. 특징만 약간 다름
- 이 temporary redirect를 많이 사용
- 307,303을 많이 사용하길 희망하지만, 실무에서는 아직도 302를 많이 쓰고,
- 이렇게 해도 별 문제가 되지 않는다.
- 사용법
- POST로 주문 요청한다면, 서버에서 302 Found 상태 코드를 넘겨주면, 새로고침 시 POST가 아닌 GET으로 요청이 가서 다시 또 주문하는 것이 아니라 결과 화면만 새로고침이 되는 형태가 된다.
- 304 Not Modified
- 많이 사용함.
(3) 4xx
- 서버 개발자는 철저하게 validation 체크를 해서 클라이언트가 잘못했다면 4xx 코드번호를 리턴해줘야 한다.*** 서버 쪽 코드번호가 아니라,
- 이렇게 정확하게 잘못된 쪽을 가려야 어디를 확실하게 확인할지 정할 수 있다.
- 4xx 에러는 http 스펙을 잘못 맞추거나 인증이 안된 케이스가 많다.
(4) 5xx
- 500으로 내보내면 된다 거의
- 500 에러는 진짜 서버에 뭔가 문제가 있을 때 내야 한다.*
- null pointer exception, db가 내려가거나 등등 진짜 서버에 문제가 있을 때 500 에러를 내야 한다.
- 나머지 에러들은 400이나 200으로 해결해야 한다.*
- 이러한 에러 종류는 500 에러로 내면 안된다.
- 고객이 잔액이 부족한 경우
- 미성년자가 19+를 구매하려고 하는 경우
- etc
4) HTTP 헤더1
(1) 전송 방식
- 분할 전송
- Transfer-encoding: chunked
- chunked는 여러 개로 쪼개서 보낸다는 의미.
- 이때에는 content-length를 보내면 안 됨 (예상 불가이므로)
- Transfer-encoding: chunked
5) HTTP 헤더2 - 캐시와 조건부 요청
(1) 브라우저 개발자 도구에 network -> Status에서 상태 코드(ex 200)가 연한 것(약간 회색)은 캐시에서 불러온 것이다.*
(2) Cache-control
- 확실한 캐시 무효화 응답
- 캐시를 적용을 안 해도 GET 요청의 경우 웹브라우저가 임의로 캐시를 하기도 한다.
- 그래서 이 페이지는 절대 캐시가 되면 안 된다면 cache-control: no-cache, no-store, 등을 넣어줘야 한다.
- 그래서 서버 쪽에서 http 응답 코드를 만들 때, no-cache, no-store, must-revalidate까지 넣어줘야 한다.*
- 이러한 것들은.. 필요하다면 http 응답 코드를 서버에서 이렇게 보내줘야 정확하게 내가 원하는 대로 통신을 할 수 있다.
마지막으로.. 모든 프레임워크는 http 기반에 맞춰져서 돌아간다.
'WebInfo' 카테고리의 다른 글
웹사이트 검색 노출 설정 방법 (0) | 2022.09.19 |
---|---|
nginx 이해 (0) | 2022.07.10 |
proxy server 이해 (0) | 2022.07.10 |
서버를 어떻게 안전하게 운영할 수 있을까? (0) | 2022.05.13 |
JWT(Json Web Token) (0) | 2022.04.19 |