티스토리 뷰
반응형
최근 안드로이드 개발을 하다가 너무나도 당연하게 Retrofit으로 API 통신을 시도하는 저를 보며 문득 이런 생각이 들더라구요.
나는 HTTP 통신의 개념에 대해 알고 사용하는 걸까...?
생각해보면, 얼추 개념과 왜 사용하는지 정도는 알고 있지만 누군가에게 설명하기에는 얼버무릴 수 밖에 없는 것 같더라구요. 그래서 항상 사용하는 것이지만 최소한의 개념 정도는 이해하고, 생각하면서 사용을 해야겠다고 결심하고 공부를 해보았습니다.
반응형
1. 통신이란 무엇인가?
- 클라이언트(앱)에서 가장 많이 수행하는 처리 중 하나로 서버에 데이터를 요청하고 받아온 데이터를 화면에 표시
- 크게 소켓연결과 HTTP 연결의 두가지 방식으로 나뉨
2. 소켓연결
- 네트워크 상의 두 프로그램 사이에서 일어나는 양방향 통신
- 양방향 통신 중 한 쪽의 엔드포인트(통신단자)를 소켓이라고 하며, P와 Port로 이루어져 있음
- 클라이언트와 서버가 특정 포트를 통해 연결을 유지하며, 실시간으로 양방향 통신이 가능
- 주로 동영상 스트리밍, 채팅, 온라인 게임 등에서 많이 사용되는 방식
- 계속해서 Connection을 들고 있기 때문에 HTTP통신에 비해 많은 리소스가 소모됨
3. HTTP 연결
- HTTP : Hyper Text Transfer Protocol
- 80번 포트 사용, 웹 상에서 정보를 주고받을 수 있는 프로토콜
- 클라이언트가 서버에 헤더와 바디로 이루어진 메시지를 요청
- 서버에서 이 요청을 처리하고 응답코드와 함께 응답을 반환함
- 클라이언트의 요청이 있을 때, 서버가 응답하는 방식으로 단방향 통신
- 최근 Keep Alive 옵션으로 일정 기간 Connection을 유지하는 방식으로 통신이 가능 해짐
- HTML 파일을 전송하는 프로토콜이라는 의미를 가지며, 웹브라우저에서 통신이 일어남
- 현재는 JSON, Image 파일 등 또한 전송 가능함
- Connectionless
- 소켓을 사용해서 접속을 만들지만, 용건이 있을때만 연결했다가 용건이 끝나면 끊음
- 서버에 여유가 생겨 더 많은 접속요구에 대응할 수 있음
- Stateless
- 기본적으로 서버가 클라이언트를 식별할 수 없음
- 쿠키나 세션, 혹은 토큰을 사용해야 식별 가능
4. HTTP Method
- 클라이언트가 서버에 메시지를 보낼 때 어떠한 목적을 가졌는지 밝히는 것
- 아래와 같은 메서드 들이 있음
Method | 설명 |
GET | 서버에 존재하는 리소스를 요청, 서버를 수정하지 않기 때문에 safe method 로 분류 |
HEAD | GET과 같지만 서버가 본문(body)을 포함하지 않음 |
POST | 클라이언트에서 요청한 URL에 본문의 내용으로 새로운 리소스를 생성 |
PUT | 클라이언트가 요청한 내용으로 서버의 전체 리소스를 수정(갱신) |
DELETE | 서버에 존재하는 리소스를 삭제 |
CONNECT | 요청 리소스에 대해 양방향 연결을 수립, 예로 프록시를 통한 SSL 연결수립에 사용될 수 있음 |
OPTIONS | 웹 서버가 어떤 HTTP 메소드를 지원하는지 확인할 경우 사용 |
TRACE | 메시지의 변조여부 확인을 위해, 서버가 수신한 클라이언트의 메시지를 반환하도록 함 |
PATCH | 해당 리소스의 일부만을 수정 |
5. RESTful API
- REST : Representational State Transfer
- HTTP 기반으로 필요한 자원에 접근하는 방식을 정해놓은 네트워크 아키텍처
- 다음과 같은 기준을 만족하면 RESTful 하다고하며 RESTful하게 작동하도록 만든 API를 RESTful API라고 함
- 클라이언트와 서버의 분리
- 무상태(Stateless)
- 캐시 처리가 가능해야 함
- 시스템이 계층화(Layered) 되어있어야 함
- 일관성 있는 인터페이스
HTTP Method | CRUD | Entire Collection (e.g. /customers) |
Specific Item (e.g. /customers/{id}) |
POST | Create | 201 (Created) ‘Location’ header with link to /customers/{id} containing new ID. |
404 (Not Found), 409 (Conflict) if resource already exists. |
GET | Read | 200 (OK) list of customers. Use pagination, sorting and filtering to navigate big lists. |
200 (OK) single customer. 404 (Not Found) if ID not found or invalid. |
PUT | Update/ Replace |
405 (Method Not Allowed) unless you want to update/replace every resource in the entire collection. |
200 (OK) or 204 (No Content). 404 (Not Found0 if ID not found or invalid. |
PATCH | Update/ Modify |
405 (Method Not Allowed) unless you want to modify the collection itself. |
200 (OK) or 204 (No Content). 404 (Not Found) if ID not found or invalid. |
DELETE | Delete | 405 (Method Not Allowed) unless you want to delete the whole collection not often desirable. |
200 (OK). 404 (Not Found) if ID not found or invalid. |
이번 포스팅에서는 간단하게 개념에 대해서만 정리를 해보았습니다.
다음에는 HTTP Request, Response의 구조와 그 사용법들에 대해 공부를 해볼까 합니다.
* Reference
- https://cliearl.github.io/posts/android/android-http-library-review/
반응형
'ETC > Summary' 카테고리의 다른 글
접근제어자(private/default/protected/public) (0) | 2019.03.06 |
---|---|
객체지향의 개념(추상화, 캡슐화, 상속성, 다형성) (0) | 2019.03.06 |
추상화 / 추상 클래스 (0) | 2019.03.05 |
DAO와 VO(-DTO) 개념정리 (0) | 2019.02.26 |
REST ful 이란? (0) | 2019.02.19 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 아이폰
- Xcode
- 격파르타 후기
- 함수
- 아이폰앱개발
- Swift
- FLUTTER
- 연산자
- Java
- 스위프트
- ~=
- 자바
- .toml
- Android
- 격파르타 장점
- rotation
- rotate
- NoAnimation
- IOS
- 안드로이드
- dart
- sqld 자격증 합격
- 변수
- 코틀린
- gem update
- 음성재생
- 버전카타로그
- 격파르타 합격후기
- Kotlin
- toml
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함