HTTP 통신 네트워크 !

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • Ogi
      참가자
      • 글작성 : 2
      • 답글작성 : 5

      안녕하세요 Ogi입니다~~~!
      AFNetworking 하기 전에, HTTP 통신을 먼저 공부해야 할 것 같아 정리했습니다.
      HTTP 프로토콜은 하이퍼텍스트 전송 프로토콜로 애플리케이션에 데이터를 전송받기 위해 사용하는 프로토콜 또는 규칙들의 집합으로 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번 입니다.
      데이터 캐싱을 잘 해야 앱 또는 웹을 효율적으로 관리 및 사용 할 수 있게 되는데요
      HTTP는 클라이언트가 원하는 동작을 나타내는데에 필요한 요청 메서드를 이용합니다.

      1. GET: 웹페이지와 같은 데이터를 검색 후 존재하는 자원에 대한 요청
      2. POST: 서버로 데이터를 보내고 새로운 자원을 생성을 하는 과정인 형식을 채우고, 제출(submit)을 클릭할 때 사용합니다.
      3. PUT: 구체적으로 제공된 위치에 데이터를 보내므로 존재하는 자원에 대한 변경을 합니다.
      4. DELETE: 구체적으로 지정된 위치인 존재하고 있는 데이터를 삭제합니다.
        여기서부터 웹또는 앱은 ‘클라이언트’ 라고 하겠습니다 ~

      클라이언트는 요청을 보내는 쪽을 의미하므로 브라우저 정도일 테고, 서버는 요청을 받는 쪽을 의미하므로 데이터를 보내주는 원격의 컴퓨터 정도가 될 것 같습니다.
      서버와 클라이언트가 통신을 할 때마다 서버는 클라이언트가 누구인지 계속해서 인증을 해야하는데, 그 이유는 HTTP 프로토콜이 ‘Connectionless’, ‘Stateless’한 특징이 있기 때문입니다.

      • Connectionless: 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
      • Stateless: 통신이 끝나면 상태를 유지하지 않는 특징(독립적인 관리 가능)

      두가지 특징은 장점이 될 수도 있고, 단점이 될 수도 있지요. 장점이라면 세션과 같은 별도의 추가 정보를 관리하지 않아도 된다는 점이지만, 연결을 끊어버린다면 똑같은 수행을 여러번 해야하는게 불편할 수도 있잖아요 ?
      다행스럽게도 HTTP는 확장 가능하기 때문에 수년 간에 걸쳐 웹의 점점 더 많은 기능들을 제어하도록 허용되어 왔는데요.
      인증 메서드는 HTTP에 초기부터 제어해어 왔던 기능이고, HTTP를 사용하여 제어 가능한 대표적인 기능으로 쿠키와 세션 이 있습니다.
      쿠키와 세션을 사용하게 되면, 자동로그인과 같은 기능을 구현할 수 있게 되는데요.
      쿠키와 세션 모두 사용자가 최초에 로그인을 하게 되면 서버는 그 사용자에 대한 인증을 유지할 수 있는 기능을 수행할 수 있게 됩니다.
      같은 기능을 수행하지만 방식은 다른 쿠키와 세션에 대해 정리를 해보도록 하겠습니다.
      쿠키 (Cookie)
      쿠키는 클라이언트에서 관리되는 기록 정보 조각을 말합니다.
      쿠키에는 자동로그인과 같은 기능을 수행할 때에 사용자 인증을 언제까지 가능하도록 할 지에 대한 시간을 명시할 수 있으며, 한번 유효 시간이 정해지면 브라우저를 끄더라도 인증이 유지된다는 특징이 있습니다.(ex. 짧다면 인터넷 뱅킹 서비스, 길다면 인터넷 쇼핑몰 !)
      1) 쿠키의 구성요소
      이름: 각각의 쿠키를 구별할 때에 사용되는 이름
      값: 쿠키가 갖고 있는 값
      만료 날짜: 쿠키가 유지되어지는 시간
      도메인: 쿠키를 어디로 전송할지에 대한 도메인
      경로정보: 쿠키를 전송할 요청 경로
      2) 쿠키의 동작 방식
      클라이언트가 페이지를 요청
      서버에서 쿠키를 생성
      HTTP Request Header에 쿠키 정보를 포함시켜 응답
      브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
      (그렇기에 사용자 정보가 클라이언트 컴퓨터에 파일로 남고, 여기에 접근할 수 있는 사람이라면 누구든지 정보 확인이 가능하기에 보안상 좋지 않아요)
      쿠키가 존재하면 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보내서 요청
      서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 경우, 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
      3) 쿠키의 사용 예
      방문 사이트의 자동 로그인시 “아이디와 비밀번호를 저장하시겠습니까” or “오늘 더 이상 이 창을 보지 않음” 팝업
      쇼핑몰의 장바구니에 보관 기능
      세션 (Session)
      세션은 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.
      서버에 저장되면 쿠키와는 달리 사용자 정보가 쉽게 노출되지 않아 보안상 좋지만, 사용자가 많아지면 서버에 메모리가 많이 차지됩니다.
      서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
      물론 세션도 쿠키처럼 접속 시간에 대한 제한을 두어 일정 시간 응답이 없다면 세션을 끊도록 설정이 가능합니다
      세션의 동작 방식
      클라이언트에서 사용자가 로그인을 할 때 id와 pw를 입력하고 로그인 버튼을 누른다면, 서버에서는 접속을 확인을 합니다.
      서버에서는 서버의 메모리에 유일한 세션 ID를 쿠키를 사용하여 생성 후 사용자 ID와 매핑되는 정보를 저장합니다.
      클라이언트가 서버에 다시 접속할 때 이 쿠키를 이용해서 세션 ID값을 서버에 전달합니다.
      세션의 특징
      각 클라이언트마다 고유 ID 생성
      세션 ID를 갖고 클라이언트를 구분 후 각 클라이언트의 요구에 맞는 정보 제공
      정보가 서버에 저장되기 때문에 쿠키보다 우수한 보안
      세션의 단점
      사용자가 많아질 수록 서버 메모리를 많이 차지하게 된다
      HTTP는 복잡한 바이너리 데이터가 아닌 단순 텍스트를 통해 이루어지므로 메세지 내용이 그대로 보이기 때문에 보안상으로 좋지 않습니다.
      그렇기 때문에 HTTPS를 사용하기도 하는데,, 글이 너무 길어지니까 일단 간략하게 정리하겠습니다 ㅜ
      HTTPS는 HTTP와 같은 통신 프로토콜이고 메세지를 전송하는 것 또한 HTTP와 비슷합니다.
      다른 점은 HTTP에서 메세지 내용이 그대로 보이는 단점을 보완하고자 암호화를 한다는 점이 차이라고 볼 수 있습니다.
      클라이언트와 서버가 서로 교환하는 모든 컨텐츠들을 암호화합니다. 그래서 뭐 해킹을 하거나 패킷을 가로채는 상황이 발생한다고 해도, 암호화된 내용이 보이기 때문에 보안상을 안전하며, 공유된 대칭키를 모르는 상황에서는 암호화를 풀 수 있는 방법이 모든 경우의 키를 대입해야 하는데 평균적으로 2의 512승 번을 해봐야 한다고 하네요 … 아주 쉽지 않죠
      HTTP와 HTTPS를 구분하여 사용하는 이유는 !
      HTTPS 암호화를 하려면 웹 서버에 부하가 생길 수도 있고, 인증서를 만드는 생산비용또한 무시 못할 이유 중 하나이므로 국내에서는 HTTP를 사용하는 사이트.. 적지 않습니다.
      사내 프로젝트들은 서버에서 데이터를 받아오는 일들이 꽤 많네요…
      감사합니다.
      출처 :
      [1] https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
      [2] https://ko.wikipedia.org/wiki/HTTP
      [3] https://joshua1988.github.io/web-development/http-part1/
      61

    • Ogi
      참가자
      • 글작성 : 2
      • 답글작성 : 5

      이상한 부분, 수정할 부분 있으면 언제든지 피드백 주세요 !!

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 580

      Ogi님!
      정성스런 정리글 고맙습니다 ㅎㅎ

    • nobleidea
      참가자
      • 글작성 : 5
      • 답글작성 : 8

      잘 읽었습니다 !

3 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom