SOOJLE
수즐 커뮤니티
수즐 커뮤니티
  • SOOJLE Document
  • 프로젝트 요약
  • Untitled
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 URL 대상 목록
        • 세종대학교 직할
        • 세종대학교 학과
        • 공식 공지사항
        • 세종대 평생교육원
        • 외부 웹사이트
      • 학습 모델 사전조사
        • LSA - 잠재 의미 분석
        • LDA - 잠재 디리클레 할당
        • Word2Vec - 워드투벡터
        • FastText - 패스트텍스트
    • 의사결정
      • 사용자 인증 방식 의사결정
      • 데이터베이스 의사결정
        • MySQL vs MongoDB 성능 분석
      • 토픽별 의사결정
      • 부가 기능 의사 결정
  • 프로젝트 설계
    • 시스템 구조 설계
    • 핵심 기능 설계
      • 데이터 크롤러 설계
      • 게시물 토픽 정의 및 분류
      • 사용자 관심분야 측정
      • 뉴스피드 설계
        • 사용자-문서 유사도(Recommendation Score)
        • FaS (관심 분야 및 유사도 측정 - 추가)
        • 토픽 뉴스피드 목록
      • 검색 알고리즘 설계
        • 검색 알고리즘 1차 설계
        • 검색 알고리즘 1차 개선안
        • 검색 알고리즘 2차 설계
    • 요구사항 목록
      • DB 요구사항
      • 기능 요구사항
      • 품질 요구사항
      • 관리 요구사항
  • DB
    • 구조 설계
    • 테이블 명세
  • 데이터 크롤러
    • 데이터 크롤러 개요
    • 크롤링 URL 선정
    • 크롤러 구현을 위한 사전조사
    • 크롤러 개발 과정
      • 크롤러 프로그램 설계
      • 크롤러 규격화
      • 크롤러 정규화
      • 데이터 정제 과정
      • 에러 핸들러 구현
      • 배포 환경 이식을 위한 Porting
    • Issue & Exception
    • 결과 보고
  • 인공지능 개발
    • 인공지능 개발 개요
    • NLP 스터디
      • Bag of Words(BoW)
      • Document Term Matrix(DTM)
      • TF-IDF(Term Frequency-Inverse Document Frequency)
      • 문서 유사도(Document Similarity)
    • 데이터 전처리 과정
    • 개발 과정
      • 토크나이저 구현
      • LDA 모델 학습 및 구현
    • LDA 학습 모델링
      • 1차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 2차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 3차 파라미터 튜닝 결과 (NUM_TOPICS)
      • NUM_TOPICS 파라미터 의사결정
      • 4차 파라미터 튜닝 결과 (PASESS, ITERATION)
      • 최종 학습 모델 명세
    • Word2Vec(FastText) 학습 모델링
    • Issue & Exception
    • 성능 분석 결과
  • BackEnd
    • 서버 구축 및 배포
      • SOOJLE 서버 구조
      • 상용 서버 (UWSGI + NGINX) 구축
      • HTTPS 서버 구현
    • API 문서 개요
    • API 목록
      • Analysis
      • Auth API
      • Newsfeed API
      • Post API
      • Search API
      • Admin API
    • 세종 Auth API
    • 통계 기능 설계
    • Issue & Exception
    • 성능 분석 결과
  • FRONTEND
    • 프론트엔드 설계 개요
    • 디자인 설계 의사결정
      • 디자인 컨셉 및 기능 정의
      • 컴포넌트 디자인
      • Logo Variation
    • 화면 흐름도
    • 페이지 UI 명세
      • Main Page
      • Header
      • Footer
      • Mobile Control Bar
      • Login Page
      • Timeline Page
      • Menu Page
      • Hyperlink Icons Page
      • Search Component & Mobile Search Modal
      • Search Page
      • Post Block
      • Snackbar
  • 프로그램 배포
    • 프로그램 개요
    • 시스템 아키텍쳐
    • 주요 기능 및 명세
    • 프로그램 테스트
    • 구현 결과물 배포
  • 마무리
    • References
  • SOOJLE AI
  • SEJONG AUTH
  • IML Tokenizer
  • SOOJLE Crawler
  • SOOJLE Frontend
  • SOOJLE Backend
Powered by GitBook
On this page
  • 개요
  • UWSGI 설치 및 구성
  • UWSGI 설정 파일 및 유닉스 소켓 생성
  • NginX 설치 및 구성

Was this helpful?

  1. BackEnd
  2. 서버 구축 및 배포

상용 서버 (UWSGI + NGINX) 구축

PreviousSOOJLE 서버 구조NextHTTPS 서버 구현

Last updated 5 years ago

Was this helpful?

개요

기존 Python Flask로 디버깅용 서버를 실행하면, 항상 싱글 스레드로 서버가 작동된다. 본 프로젝트는 서버를 멀티 스레드로 운용을 하기 위해 서버 프레임워크인 UWSGI를 사용했다.

UWSGI는 위에서 구축해 놓은 Ubuntu위에서 진행한다. 보편적인 이유로는 UWSGI가 리눅스에서 더 적합하다는 이유도 있지만, 가장 큰 이유는 Windows는 Python에서 구현한 서버가 UWSGI를 통하여 작동하는 것에 호환이 되지 않는다.

UWSGI 설치 및 구성

pip install uwsgi

UWSGI 설치는 Python의 pip를 통하여 쉽게 설치할 수 있다. 그리고 기존에 구현을 해두었던 Python Flask application을 설치한 UWSGI와 연동해준다. 따라서 앞으로 서버는 방금 연동한 UWSGI를 통하여 실행된다.

uwsgi --socket 0.0.0.0:5000 --protocal=http --wsgi-file wsgi.py
# 연동한 UWSGI 를 통한 서버실행

UWSGI 설정 파일 및 유닉스 소켓 생성

UWSGI는 상용 웹 서버를 구동시키기 위한 프레임워크이기 때문에 각종 다양한 부가 옵션들이 있다. (프로세스/스레드 제어, 소켓 권한, 버퍼 사이 즈, 로그 파일, 서버 모니터링 재시작 등) 때문에 SOOJLE 서비스에 맞게 필요한 부가 기능들을 설정해 주었다.

특히 socket 설정을 보면, 기존 명령에서는 socket 옵션에 IP나 PORT 번호를 입력하여 실행한다. 하지만 위 코드처럼 소켓 파일(유닉스 소켓) 을 사용을 하게 되면 더 좋은 성능을 낼 수 있다.

NginX 설치 및 구성

UWSGI만을 이용하여 서버를 구동하게 되면 유닉스 소켓이기 때문에 HTTP 프로토콜을 사용할 수 없다. 물론, 이외에도 다른 문제점들이 있지만 이번 프로젝트에서는 HTTP 프로토콜을 사용해야 하기 때문에 NginX와 UWSGI를 연결하여 상용 서버를 구동했다.

위에서 만든 SOOJLE.conf 파일을 통해 NginX는 미디어 및 정적 파일에 접 근하여 Flask를 제어할 수 있다. 따라서 해당 설정 파일을 NginX가 사용할 수 있도록 NginX 디렉토리와 SOOJLE.conf 파일을 심볼릭 링크로 이어주면 설정 이 마무리가 된다.

uwsgi_parmas.ini
SOOJLE.conf