오늘의 나보다 성장한 내일의 나를 위해…












:pushpin: 0.0.0.0의 의미


책으로 웹 개발을 하다보면 아주 가끔 0.0.0.0이라는 IP를 사용할 때가 있다.

해당 IP를 그저 모든 IP에 접근하기 위해 사용한다 정도로만 알고 있었다. 하지만 왜 서버 측에서 0.0.0.0으로 접근하는데 local의 웹 서버로 접근이 되는지 이해가 되지 않았다.

이에 대한 좋은 영문 글이 있다 What is the Difference Between 127.0.0.1 and 0.0.0.0?


해당 글을 보면 다음과 같은 문구가 나온다.


In the context of servers, 0.0.0.0 means all IPv4 addresses on the local machine. If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs


이 문구를 보면, 0.0.0.0local machine의 모든 IPv4 address를 의미하기 때문에 0.0.0.0로 접근하면 로컬 호스트의 모든 IPv4로 되어있는 호스트에 접근이 가능하다는 의미이다.

조금 더 설명을 붙이자면, 정확한 address가 할당되어 있지 않다면, 각각의 host는 그 address를 자신이라고 주장하게 되고 이에 따라 웹 서비스에서 0.0.0.0을 지정하면 자신의 IP를 그 address로 지정하게 되어 local로 접근이 되는 것이다.


:pushpin: 간단한 예시


간단한 flask 서버로 예시를 들어보자.


from flask import Flask

app=Flask(__name__)

@app.rout("/")
def index():
  return "Hello, world!"

if __name__ == "__main__":
  app.run(host="127.0.0.1")



위는 127.0.0.1:5000 으로 접근하게 되면 단순하게 Hello, world! 문구를 웹으로 띄워준다.



이제 cmd에 들어가 ipconfig를 통해 자신의 IP 주소를 확인해 보자.



위 사진을 통해 현재 내 IP가 192.168.1.16인 것을 확인할 수 있다. 그렇다면 아까 서버를 킨 채로 다시 이 IP와 5000번 포트로 접근해보자.



보시다시피 접근이 안된다. 코드를 조금 수정해 보자.


from flask import Flask

app=Flask(__name__)

@app.rout("/")
def index():
  return "Hello, world!"

if __name__ == "__main__":
  app.run(host="192.168.1.16")



서버를 재가동하게 되면 위의 사진처럼 192.168.1.16:5000으로 Running되고 있다는 표시가 뜰 것이다.



기대했던 되로 제대로 접근이 된다. 하지만 127.0.0.1:5000으로 접근하게 되면 또 다시 찾을 수 없다는 표시가 뜰 것이다.



코드를 다시 수정해보자.


from flask import Flask

app=Flask(__name__)

@app.rout("/")
def index():
  return "Hello, world!"

if __name__ == "__main__":
  app.run(host="0.0.0.0")



위와 같이 수정하고 서버를 재가동한다.


이제는 192.168.1.16:5000, 127.0.0.1:5000, 0.0.0.0:5000 세개 다 접근이 가능한 것을 볼 수 있다.




YoungKyonYou

Integration of Knowledge