wisePocket

[Flask] Flask Framework 02 첫 사용 (서버만들기 -2), MacOS Port 5000 오류 해결 본문

Python&Flask Tutorials, AWS EB/4th WEEK Flask, GET&POST

[Flask] Flask Framework 02 첫 사용 (서버만들기 -2), MacOS Port 5000 오류 해결

ohnyong 2023. 7. 8. 16:21

실습하고자하는 폴더를 venv로 가상환경을 잡은 것 까지 진행되었다.

본격적으로 Flask를 설치하고 사용해보자.

 

 

1. 패키지 매니저를 통한 Flask 설치

pip(Package Installer for Python)로 Flask Framework를 가상환경에 설치 할 수 있다.

원하는 폴더와 (venv)로 가상환경 터미널인지 확인한 후,

pip install flask

성공적으로 설치 된다.

 

 

2. 설치된 Flask Framework 임포트와 첫 사용

통상적으로 Flask framework를 사용할 때 가장 기본이되는 python파일을 app.py로 명칭한다.

변경 가능하나 통상적으로 사용하니 그대로 따라하자.

아래 기본 코드를 기억하고 실행해본다.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'This is Home!'

if __name__ == '__main__':  
   app.run('0.0.0.0',port=5000,debug=True)

서버가 정상적으로 실행되지 않는다. 오류 코멘트를 읽어보면 Port 5000이 이미 사용중이라 나타난다.

 

3. "Port 5000이 이미 사용중" 오류 해결

Java과정에서도 Oracle DB 포트 중복 문제가 있었다.

MacOS에서 Docker 가상환경 내에 Oracle 서버를 돌리는데,

Mac의 포트, Docker의 포트가 항상 겹치게 되었다.

 

해결 방법은 몇가지 있다.

해당 포트를 사용하는 PID를 찾아서 정지하고 실행

sudo lsof -i :5000

sudo kill -9 494

이 문제는 계속 컴퓨터를 부팅 했을때마다 발생하게 될 것이다. 해당 프로세스가 맥의 AirPlay와 관련된 서비스라고한다.. 중요한 문제는 아니니 깊게 알 필요는 없고, 어쨋든 이 서비스는 기본적인 프로그램이라 (시작프로그램 유사) 항상 5000포트를 사용할 것이다..

그런데 이렇게 강제 중지하는 경우에 그 PID를 사용하는 프로세스가 뭔지 모르면 컴퓨터 필수 기능일 수도 있어서 자제하는 것이 좋아보인다..

윈도우도 마찬가지다. 사용자가 어떤 응용프로그램이 설치된지에 따라 서버로 사용하고자하는 포트번호가 사용중일수도 있는데 해당 포트를 찾아가서 중지시키고 서버를 실행하면 문제가 해결된다. Windows는 GUI, CLI 가 상이하니 검색해서 해보도록하자.

 

중요한건 그냥 5000번말고 그냥 내가 빈 포트 번호로 설정하면 되는 문제이다.

다만 협업시 다른 포트를 쓰는 팀원과 app.py가 다른 포트번호에 따른 충돌이 발생할 수 있다.

큰 문제는 아니지만 매번 병합과정에서 병합충돌을 발생시키므로 이것 또한 매우 귀찮다.

따라서 협업시 해당 문구(if __name__ == ... : 문)을 gitignore에 등록하면 계속해서 문구가 다른것에 대해서 충돌을 피할수도 있다.

 

요약하면 포트번호를 5001 처럼 다른것을 사용하고, 협업할때는 gitignore에 해당 부분을 넣어주면 좋다 정도로 해결하면 깔끔하다.

 

4. 서버 다시 실행과 간단 테스트

이제 포트를 5001로 설정하고 다시 실행해본다.

정상적으로 서버가 실행되고 있는 것을 확인 할 수 있고

실제로 브라우저에 localhost:5001로 접속하면 메인 페이지를 접속 할 수 있다.

 

추가적으로 '/mypage' 를 넣어보았다.

@app.route('/')
def home():
   return 'This is Home!'

@app.route('/mypage')
def mypage():
   return 'This is Mypage!'

localhost:5001/mypage 에도 접근 할 수 있는 것을 확인 할 수 있다.

이번엔 텍스트가 아니라 <button> 태그를 넣어보자.

@app.route('/')
def home():
   return 'This is Home!'

@app.route('/mypage')
def mypage():
   return '<button>Button</button>'

버튼이 생성되었다. 이 말은 뷰페이지로 작업한 <html>태그도 들어갈 수 있다는 말과 같다.


 

해당 스터디는 아래 깃을 통해 업데이트 되고 있습니다.

https://github.com/yzpocket/Sparta99training

 

GitHub - yzpocket/Sparta99training

Contribute to yzpocket/Sparta99training development by creating an account on GitHub.

github.com