[DNS]ip 주소와 hosts 파일

서비스를 제공하는 서버 컴퓨터에 접속을 하기 위해서는 서버의 ip 주소를 알아야 한다. 또한 서버가 클라이언트에게 서비스를 제공하려면 서비스를 받을 클라이언트 또한 ip 주소를 가져야한다.

즉, 인터넷에 연결되어 있는 장치들은 통신을 하기 위해서 ip를 가져야한다.(컴퓨터 뿐만 아니라 모든 장치들에 해당한다.) 이렇게 인터넷에 연결된 장치들을 host라고 부르며 네트워크에 연결되어 있는 컴퓨터 또는 장치라고 생각하면 된다.

ip주소는 숫자로 되어 있기 때문에 기억하기 어렵다는 단점이 있는데, 이를 해소하기 위해 hosts 파일을 사용한다.

hosts 파일은 핸드폰의 전화번호부와 비슷하다고 생각하면 된다. 전화번호에 이름을 부여해서 사용하는 것처럼 컴퓨터는 hosts 파일에 ip주소에 해당하는 도메인 주소를 부여해서 저장하고 관리한다.

추후에 example.com에 접속하면 사용자의 컴퓨터는 DNS를 거치지 않고 hosts 파일에 저장되어 있는 내용을 통해 example.com이 가르키는 ip로 접속할 수 있다.

또한 별거 아닌 것 같지만 hosts 파일의 보안에 신경써야한다. 만약 hosts 파일이 변조되어 example.com의 ip 주소가 피싱하려고 만든 서비스의 ip주소로 바뀌면 어떻게 될까? 사용자는 example.com를 제대로 입력했다고 생각했기 때문에 정상적인 사이트로 판단하고 피싱을 당할 지도 모른다.

정리

DNS에 대해 알아보기 전에 DNS에 비슷한 역할을 하는 hosts 파일에 대해서 알아보았다. hosts 파일은 ip주소와 도메인 주소를 매칭시켜주는 역할을 하며, 클라이언트가 서비스에 접속하기 위해서 ip 주소를 외워야 하는 불편함을 간단하게 해소시켜준다.


[참고]
https://opentutorials.org/module/3421/20296
https://www.youtube.com/watch?v=viy1MV_vNXA&list=PLuHgQVnccGMCI75J-rC8yZSVGZq3gYsFp&index=2

Share

[Web]쿠키와 세션

쿠키와 세션은 HTTP를 가지고 통신할때 발생할 수 있는 단점들을 보안할때 자주 사용되곤 한다.

HTTP의 두 가지 특성은 아래와 같다.

  • 비연결성(connectionless)

HTTP 통신은 소켓 통신과 다르게 클라이언트와 서버가 한 번 연결을 맺은 후 연결을 종료한다. 즉, 계속해서 연결을 유지하지 않으며 리소스의 낭비를 줄일 수 있어 장점이 될 수 있다.

  • 비상태성(stateless)

통신이 끝나면 상태를 유지하지 않음. 한 번의 통신이 끝난 이후 상태를 저장하지 않음. 예를 들면 쇼핑몰에서 페이지를 전환할때마다 새로운 커넥션이 생성되기 때문에 계속 로그인을 해야할 수도 있다.

HTTP는 비연결성과 비상태성이라는 특징 때문에 불특정 다수와의 통신을 가볍게 할 수 있다는 장점이 있다. 하지만 통신할때마다 새로운 커넥션을 생성하고 이전의 상태를 저장하기 않기 때문에 클라이언트가 계속해서 인증해야 한다는 단점이 발생한다. 이러한 단점을 해결하기 위해 쿠키와 세션이 사용될 수 있다.

1. 쿠키(Cookies)

클라이언트에 저장되는 key: value 형식의 작은 데이터 파일이다. 예를 들면 이름, 값, 만료 날짜, 경로 정보 등이 저장된다. 브라우저 사용자가 웹 사이트를 방문할 때 서버에서 쿠키를 생성하여 사용자의 컴퓨터에 기록한다. 클라이언트가 저장하고 관리하기 때문에 보안에 취약할 수 있다.

1-1. 제약 조건

  • 클라이언트에 총 300개의 쿠키만 저장 가능
  • 하나의 도메인당 20개의 값만 가질 수 있음
  • 하나의 쿠키 값은 최대 4096Byte까지 가능

1-2. 쿠키의 작동방식

https://valuefactory.tistory.com/707

  1. 브라우저를 통해 웹 페이지 접속
  2. 서버에서 쿠키 생성 및 Set-Cookie를 통해 HTTP 헤더에 쿠키를 포함하여 클라이언트로 전송
  3. 이후의 클라이언트의 모든 요청은 Cookie를 HTTP 헤더에 포함하여 전송

1-3. 쿠키의 사용 예

  • 쇼핑몰 장바구니
  • “7일간 보지않기”와 같은 팝업 해제
  • 아이디 / 비밀번호 저장

2. 세션(Session)

클라이언트와 서버간의 네트워크 연결이 지속적으로 유지되는 상태. 브라우저가 웹 페이지에 접속하면 서버는 요청한 클라이언트를 유일하게 식별할 수 있는 세션ID를 만들어 부여함. 이 세션 ID를 쿠키로 클라이언트에게 전송하며 클라이언트는 세션 ID만을 쿠키로 가지고 있어 보안상 더 나은 수단이라고 볼 수 있다.

2-1. 세션의 작동방식

https://valuefactory.tistory.com/707

  1. 브라우저를 통해 웹 페이지 접속
  2. 서버는 세션 ID(JSESSIONID)를 만들고 DB또는 RAM에서 저장하여 관리함. 그리고 세션 ID를 쿠키로 클라이언트에게 전송.
  3. 이후의 클라이언트의 모든 요청은 세션 ID를 가진 쿠키와 함께 전송되고 서버는 이 세션 ID를 통해 클라이언트를 구분할 수 있음.

2-2. 세션 사용의 예

  • 로그인

정리

쿠키와 세션은 저장위치 / 보안 / 생명주기 / 속도의 방면에서 차이점이 존재한다.

  • 저장위치

    • 쿠키: 클라이언트
    • 세션: 서버
  • 보안

    • 쿠키: 클라이언트에 저장되기 때문에 보안에 취약
    • 세션: 쿠키를 이용해 세션 ID만 저장하고 세션 ID를 통해 서버에서 구분하므로 비교적 안전
  • 생명주기

    • 쿠키: 만료시간이 있지만 파일로 저장되기 때문에 계속해서 남아있을 수 있다.
    • 세션: 세션도 만료시간이 있지만 브라우저를 종료하면 같이 삭제
  • 속도

    • 쿠키: 실제 정보가 클라이언트에 있어서 빠름
    • 세션: 실제 정보를 얻기 위해 서버를 거쳐야 함으로 비교적 느림

[참고]
https://valuefactory.tistory.com/707
https://soul0.tistory.com/353
https://hees-dev.tistory.com/43
https://jcon.tistory.com/62

Share

안드로이드 AVD 에뮬레이터를 통해 axios 사용할때 발생하는 문제점

리액트 네이티브를 통해 앱 개발을 할때 http 패키지로서 보통 axios를 사용하는 것 같다. AVD를 띄우고 로컬호스트로 돌아가는 장고 서버에 HTTP 요청을 하려고 했는데 항상 network error를 뱉었다. 유효하지 않은 요청이 아니라 아예 요청 자체가 들어가지 않는 현상이었다. 정확한 문제의 원인은 찾지 못했지만 AVD를 통해 안드로이드 시뮬레이터를 사용중이라면 localhost의 주소를 아래의 주소로 변경해보라는 답을 발견했고 문제를 해결할 수 있었다.

10.0.2.2


[참고]
https://github.com/axios/axios/issues/973

Share