본문 바로가기
1인 프로젝트/나만의 도서관

Elasticsearch와 Flask 애플리케이션을 시스템 서비스로 설정

by kirope 2024. 7. 31.
반응형

매번 나만의 도서관을 사용 할 때마다 elasticsearch도 켜야 하고 app.py도 켜야 하는 건가? 뭔가 번거롭고 잊어버리기 쉬운데? 내가 최종적으로 원하는 건 아이콘을 누르면 따로 서버를 수동으로 켤 필요 없이 서비스를 이용하는 거야.

 

매번 "나만의 도서관" 애플리케이션을 사용할 때마다 Elasticsearch와 Flask 애플리케이션(app.py)을 수동으로 실행하는 것은 번거로울 수 있습니다. 이를 자동화하거나 더 쉽게 관리하는 방법이 있습니다.

 

각 방법의 장단점을 비교한 표를 제시하고, 귀하의 요구사항에 가장 적합한 방법을 추천해 드리겠습니다.

서비스로 설정 - 시스템 부팅 시 자동 시작
- 백그라운드에서 실행
- 시스템 관리 도구로 쉽게 관리 가능
- 초기 설정이 복잡할 수 있음
- 시스템 리소스를 지속적으로 사용
배치 파일 사용 - 설정이 간단함
- 필요할 때만 실행 가능
- 커스터마이징이 쉬움
- 수동으로 실행해야 함
- 백그라운드 실행이 기본적으로 불가능
Docker 사용 - 환경 일관성 보장
- 쉬운 배포 및 확장
- 격리된 환경에서 실행
- Docker 학습 곡선이 있음
- 시스템 오버헤드가 있을 수 있음

### 1. 서비스로 설정

Elasticsearch와 Flask 애플리케이션을 시스템 서비스로 설정하면, 시스템 부팅 시 자동으로 시작되도록 할 수 있습니다.

#### Elasticsearch 서비스 설정 (Windows)

1. **Elasticsearch 설치 디렉토리로 이동**:
   ```cmd
   cd C:\path\to\elasticsearch\bin
   ```

2. **Elasticsearch 서비스 설치**:
   ```cmd
   elasticsearch-service.bat install
   ```

3. **Elasticsearch 서비스 시작**:
   ```cmd
   elasticsearch-service.bat start
   ```

4. **Elasticsearch 서비스 상태 확인**:
   ```cmd
   elasticsearch-service.bat manager
   ```

#### Flask 애플리케이션 서비스 설정 (Windows)

Windows에서 Flask 애플리케이션을 서비스로 실행하려면 `nssm`(Non-Sucking Service Manager) 도구를 사용할 수 있습니다.

1. **nssm 다운로드 및 설치**:
   - [nssm 다운로드 페이지](https://nssm.cc/download)에서 적절한 버전을 다운로드합니다.
   - 압축을 풀고 `nssm.exe` 파일을 시스템 경로에 추가합니다.

2. **Flask 애플리케이션 서비스 설치**:
   ```cmd
   nssm install MyFlaskApp
   ```

3. **서비스 설정**:
   - `Application` 탭에서 `Path`에 Python 실행 파일 경로를 입력합니다. 예: `C:\Python39\python.exe`
   - `Startup directory`에 Flask 애플리케이션 디렉토리를 입력합니다.
   - `Arguments`에 `app.py` 파일 경로를 입력합니다. 예: `C:\path\to\app.py`

4. **서비스 시작**:
   ```cmd
   nssm start MyFlaskApp
   ```

### 2. 배치 파일 (Batch File) 사용

배치 파일을 사용하여 Elasticsearch와 Flask 애플리케이션을 동시에 실행할 수 있습니다.

1. **배치 파일 생성**:
   - 메모장을 열고 다음 내용을 입력합니다:
     ```cmd
     @echo off
     start "" "C:\path\to\elasticsearch\bin\elasticsearch.bat"
     timeout /t 10
     start "" "C:\Python39\python.exe" "C:\path\to\app.py"
     ```

2. **배치 파일 저장**:
   - 파일을 `start_services.bat`로 저장합니다.

3. **배치 파일 실행**:
   - 배치 파일을 더블 클릭하여 Elasticsearch와 Flask 애플리케이션을 동시에 실행합니다.

### 3. Docker 사용

Docker를 사용하면 Elasticsearch와 Flask 애플리케이션을 컨테이너로 실행할 수 있어 관리가 용이합니다.

#### Docker Compose 설정

1. **`docker-compose.yml` 파일 생성**:
   ```yaml
   version: '3'
   services:
     elasticsearch:
       image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
       container_name: elasticsearch
       environment:
         - discovery.type=single-node
       ports:
         - "9200:9200"
         - "9300:9300"
     flaskapp:
       build: .
       container_name: flaskapp
       ports:
         - "5000:5000"
       depends_on:
         - elasticsearch
   ```

2. **Flask 애플리케이션 Dockerfile 생성**:
   ```Dockerfile
   FROM python:3.9
   WORKDIR /app
   COPY . /app
   RUN pip install -r requirements.txt
   CMD ["python", "app.py"]
   ```

3. **Docker Compose 실행**:
   ```bash
   docker-compose up
   ```

귀하의 요구사항인 "아이콘을 누르면 따로 서버를 수동으로 켤 필요 없이 서비스를 이용하는 것"을 고려할 때, 다음과 같은 방법을 추천합니다:

추천 방법: 서비스로 설정 + 바로가기 생성

  1. Elasticsearch와 Flask 애플리케이션을 Windows 서비스로 설정합니다.
  2. 웹 브라우저에서 Flask 애플리케이션 URL로 연결되는 바로가기를 생성합니다.

구현 단계:

  1. 서비스 설정:
    • Elasticsearch와 Flask 애플리케이션을 Windows 서비스로 설정합니다.
  2. 서비스 자동 시작 설정:
    • 서비스 관리자에서 두 서비스를 "자동 시작"으로 설정합니다.
  3. 웹 애플리케이션 바로가기 생성:
    • 바탕화면에 새 바로가기를 만듭니다.
    • 바로가기 대상을 http://localhost:5000 (Flask 애플리케이션 URL)로 설정합니다.
    • 바로가기 이름을 "나만의 도서관"으로 지정합니다.
  4. 아이콘 설정 (선택사항):
    • 바로가기 속성에서 아이콘을 변경하여 쉽게 식별할 수 있게 합니다.

이 방법의 장점:

  • 시스템 부팅 시 서비스가 자동으로 시작되므로 수동 실행이 필요 없습니다.
  • 바로가기 아이콘을 클릭하면 즉시 웹 애플리케이션에 접근할 수 있습니다.
  • 서비스가 백그라운드에서 실행되므로 사용자 인터페이스에 영향을 주지 않습니다.
728x90
반응형