# SOOJLE 서버 구조

## 개요

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuqZ2OugFYO7w2CN8q0%2F-LuqZ_NFIQt4xV0RRuQV%2Fimage.png?alt=media\&token=31602b3b-4e11-4f09-95bc-59f590216324)

* application.py : SOOJLE 서버 메인
* apps: 각각의 서비스 API 집합소
* database: SOOJLE DB의 초기화 및 DB와 데이터 통신을 위한 함수 보관소
* error.py: 프로토콜 에러 핸들러 집합소
* global\_func.py: 공통 함수 집합소
* requirments.txt: 필수 모듈 집합소
* static: 프론트엔드 코드 집합소
* templates: 각 페이지 HTML 집합소
* SJ\_Auth: 해당 폴더는 세종대학교 포털로그인 크롤러 API이다. 프로젝트를 진행하면서 개발한 API는 앞으로 이렇게 따로 Import하여 사용/관리 한다.

**자세한 소스코드는 깃허브 참고 (**[**https://github.com/837477/SOOJLE**](https://github.com/837477/SOOJLE)**)**

## Database(MongoDB + Pymongo)

SOOJLE의 데이터베이스는 저번 주 의사결정에 의하여 최종 MongoDB로 결정되었다. 따라서 앞으로의 개발을 위해 서버에 MongoDB를 연결하는 작 업이 필요하다.

### MongoDB 와 Pymongo 연결

Python에서 MongoDB를 컨트롤하기 위하여 Pymongo를 이용.

![init\_database.py](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuSoJD219o94Jul-hYJ%2F-LuSokCvPgs2Ba_YM2zc%2Fimage.png?alt=media\&token=3ad376b4-1190-4902-a378-e1a6a18c3fa2)

서버 구조 파일(.py) 중 어디에서나 DB에 접근할 수 있도록, Flask 모듈의 'g' 전역 변수 MongoDB의 커서를 연결시켜 두었다. 이로써 Flask가 import된 곳이라면 언제든지 DB의 커서에 접근을 할 수 있다.

![SOOJLE application.py의 DB관련 Decorator](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LuSoJD219o94Jul-hYJ%2F-LuSoqLQDmr_RJZu5q-P%2Fimage.png?alt=media\&token=536c23de-3082-4889-9aa5-4c1b85d2bede)

단, g 전역 변수는 Flask의 내부 변수이므로 Request 시에만 사용할 수 있다. 따라서 데코레이터를 이용하여 서버에 요청이 올 때마다 전역변수 g에 DB 커서를 연결을 해줌으로써 위 코드와 같이 바로 DB 커넥션에 연결할 수 있게 된다. 또한 요청이 끝나게 되면 DB 연결을 해지한다.

### &#x20;MongoDB 관리자 계정 잠금

MongoDB는 초기 관리자 계정 잠금 기능이 비활성화되어있다. 따라서 데이터 보안을 위해, 관리자 계정만 DB에 접근할 수 있도록 계정 설정을 해야 한다. MongoDB Server에 관리자 계정이 설정되었기 때문에 Pymongo 접속 또한 관리자 계정을 통해서 접속을 해야 DB에 접근이 가능하다.
