오늘의 나보다 성장한 내일의 나를 위해…
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?
해당 글을 보면 다음과 같은 문구가 나온다.
이 문구를 보면, 0.0.0.0은 local machine의 모든 IPv4 address를 의미하기 때문에 0.0.0.0로 접근하면 로컬 호스트의 모든 IPv4로 되어있는 호스트에 접근이 가능하다는 의미이다.
조금 더 설명을 붙이자면, 정확한 address가 할당되어 있지 않다면, 각각의 host는 그 address를 자신이라고 주장하게 되고 이에 따라 웹 서비스에서 0.0.0.0을 지정하면 자신의 IP를 그 address로 지정하게 되어 local로 접근이 되는 것이다.
간단한 예시
간단한 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 세개 다 접근이 가능한 것을 볼 수 있다.