Search

ServiceCodeCenter (SCC) 요구사항 및 설계

ekcapaper

1. 개요

프로젝트명: ServiceCodeCenter (SCC)
지향점
개발자가 코드를 통해 기능을 구현하고, 유저가 모듈을 제어·모니터링할 수 있는 통합된 개발·운영 환경을 제공한다.
동일한 환경에서 개발, 테스트, 운영이 이루어지며, 복잡한 설정 없이 기능을 구현하고 관리할 수 있다.
최종적으로 코드 기반으로만 서비스를 신속하게 개발·운영할 수 있는 시스템 구조를 제안하고 구현한다.
핵심 가치:
복잡성을 최소화한 안정적인 개발 및 운영.
빠른 개발 및 배포를 위한 효율적인 도구 활용.
확장성과 유지보수성을 고려한 설계.

2. 목표

범용적 사용 가능성의 재해석
모든 상황과 데이터 형식을 포괄하려는 접근 대신, 개발자 중심의 코드 기반 구현에 초점을 맞춤.
과도하게 복잡한 API나 UI 설계를 지양하고, 필요한 기능은 개발자가 명시적으로 구현하도록 유도.
효율적이고 간결한 구조
기본적으로 개발자가 시스템을 이해하고 맞춤형으로 구축 및 설정하는 것을 지원하는 것을 목표로 시스템을 제공
포괄적 지원을 목표로 복잡한 설계를 만들지 않음.
개발자 주도의 맞춤형 설계
개발자를 통해 서비스 설정과 운영이 이루어지도록 설계.
코드로 모든 설정을 처리하도록 하여, UI나 API의 복잡성을 줄이고 개발 효율성을 극대화.
불필요한 일반화 제거
모든 사용 사례를 하나의 도구로 해결하려는 과도한 일반화 시도를 배제.
서비스의 맞춤형 구현 과정에서 개발자의 역할을 명확히 하여, 도구는 필요한 핵심 기능만 제공.

3. 주요 사용자

3.1 개발자

역할: 서비스 코드를 작성 및 테스트
목표:
코드 기반으로 기능 구현 및 테스트
IDE를 통해 실시간 코드 작성 및 오류 디버깅
서비스 간 통신 및 DB 연동

3.2 유저 (운영 관리자)

역할: 서비스 모듈 실행 및 모니터링
목표:
실행 관리 도구에서 모듈 ON/OFF
실행 중인 모듈의 상태 및 정보를 실시간 모니터링
장애 발생 시 즉각적인 대응

3. 요구사항

3.1 기능 요구사항

3.1.1 통합 IDE

1.
사용자는 실시간으로 코드를 작성 및 수정하고, 테스트를 진행할 수 있어야 한다.
2.
사용자는 웹 브라우저를 통해 IDE에 접근할 수 있어야 한다.
3.
사용자는 플러그인을 설치하거나 확장하여 IDE 기능을 커스터마이징할 수 있어야 한다.
4.
사용자는 원격 환경에서 실행 중인 IDE에 연결하여 작업할 수 있어야 한다.

3.1.2 실행 관리 도구

1.
사용자는 현재 실행 중인 프로젝트와 서비스 코드의 상태를 확인할 수 있어야 한다.
2.
사용자는 서비스 상태, 에러 로그, 리소스 사용량을 실시간으로 확인할 수 있는 모니터링 대시보드를 이용할 수 있어야 한다.
3.
사용자는 서비스 상태 변경(예: 에러 발생, 비정상 종료 등)에 대한 알림을 받을 수 있어야 한다.

3.1.3 데이터베이스 관리

1.
사용자는 프로젝트에서 다양한 데이터베이스(RDBMS, 시계열 DB, 문서 DB 등)를 선택하고 연결할 수 있어야 한다.
2.
사용자는 데이터베이스의 테이블, 컬렉션, 데이터 상태를 확인하고 관리할 수 있는 UI를 사용할 수 있어야 한다.
3.
사용자는 직접 쿼리를 작성하고 실행하여 데이터를 조작할 수 있어야 한다.

3.1.4 Python 환경 관리

1.
사용자는 Python 가상 환경을 생성, 활성화, 비활성화, 삭제할 수 있어야 한다.
2.
사용자는 필요한 Python 패키지를 설치 및 제거하여 프로젝트의 의존성을 관리할 수 있어야 한다.
3.
사용자는 현재 활성화된 Python 환경의 상태(설치된 패키지, 버전 등)를 UI에서 확인할 수 있어야 한다.

3.1.5 실행 환경 관리

1.
사용자는 각 컨테이너의 상태를 확인하고, 컨테이너를 시작, 중지, 삭제할 수 있어야 한다.
2.
사용자는 개발, 테스트, 운영 환경에서 동일한 컨테이너 환경을 사용하여 배포 시 환경 차이를 최소화할 수 있어야 한다.
3.
사용자는 Docker 이미지를 자동으로 빌드하고 배포할 수 있어야 한다.
4.
사용자는 각 서비스가 독립적으로 실행되도록 격리된 컨테이너 환경에서 작업할 수 있어야 한다.

4. 기술 스택 및 구성 (설계, 기술 스택 선택)

4.1 통합 IDE - Theia IDE

웹 기반 IDE 제공
기능:
코드 작성 및 실시간 디버깅
브라우저 기반으로 접근 가능
플러그인 확장 지원
원격 환경 지원

4.2 실행 관리 도구 - Prefect

웹 UI를 통해 프로젝트 정보 표시
기능:
서비스 코드의 실행을 제어하고 모니터링
각 프로젝트 및 서비스 코드의 상태 표시
모니터링 대시보드 제공 (서비스 상태, 에러 로그, 리소스 사용량 등)

4.3 데이터베이스 - TimescaleDB(postgresql)

다양한 DB 지원 (시계열, SQL, 문서)
기능:
서비스 코드에서 사용되는 데이터를 저장하고 효율적으로 관리합니다.

4.4 Python 환경 관리 - Conda

역할: 핵심 언어 및 환경 관리
기능
Python 가상 환경을 효율적으로 관리합니다.
안정적이고 일관된 코드 실행 환경을 제공합니다.

4.5. Docker, Docker Compose

역할: 개발 및 운영 환경을 일관되게 제공
특징:
컨테이너화된 환경 제공: IDE, Conda, 실행 관리 도구가 컨테이너 환경에서 일관되게 동작하도록 지원합니다.
이식성: 개발, 테스트, 운영 환경 간의 일관성을 보장하여 배포 시 발생할 수 있는 환경 차이를 최소화합니다.
유연성: 다양한 서비스들을 격리된 컨테이너로 효율적으로 관리할 수 있습니다.

5. 기대 효과

효율적인 개발 및 운영: 개발자와 운영자가 각자의 역할에 집중할 수 있는 환경 제공
일관된 환경: 동일한 환경에서 개발, 테스트, 운영 가능
빠른 피드백 루프: 코드 변경 사항이 즉각적으로 반영 및 테스트 가능

6. 기술 스택 및 활용 용도

3.1 Docker & Docker Compose

모든 서비스는 Docker 컨테이너로 배포 및 관리.
Docker Compose를 사용해 서비스 실행을 간소화.

3.2 Theia IDE (개발 환경)

브라우저 기반 IDE로 원격 개발 환경 제공.
Conda 내장으로 Python 패키지 및 의존성 관리 가능.
개발자는 Theia IDE에서 서비스 코드 작성 및 테스트 후 Prefect에 배포.

3.3 Prefect (워크플로우 관리)

서비스 코드 실행 및 상태 모니터링.
Prefect 에이전트가 독립된 Conda 환경에서 각 작업을 실행.
TimescaleDB와 연동하여 실행 결과 및 로그 데이터 저장.

3.4 TimescaleDB (데이터베이스)

관계형(RDBMS), 시계열 데이터, 문서 기반 데이터를 모두 저장 및 관리.
서비스의 상태, 로그, 모니터링 데이터 저장.
Prefect와의 유연한 연동으로 워크플로우 실행 결과를 관리.
+-------------------------------------------------------------+ | Docker Host Machine | | | | +--------------------+ +---------------------+ | | | Theia IDE | | Prefect Server | | | | (Conda 포함) | | + Prefect Agent | | | +--------------------+ +---------------------+ | | | | | | +--------------------+ +---------------------+ | | | 개발 코드 작성 및 | | 워크플로우 실행 및 | | | | 테스트 환경 제공 | | 서비스 모니터링 | | | +--------------------+ +---------------------+ | | | | | | +-----------------------------+ | | | TimescaleDB | | | | 관계형/시계열/문서 데이터 관리 | | | +-----------------------------+ | | | +-------------------------------------------------------------+
JavaScript
복사

7. 설계 목표 및 특징

웹 기반 실시간 개발 및 운영 환경의 결합 (Theia IDE + Prefect)
Theia IDE를 통해 웹 브라우저에서 즉시 코드 작성, 디버깅, 실행이 가능하며, 별도의 설치나 설정 없이 언제 어디서나 개발이 가능합니다.
개발자는 코드 수정 후 즉각적으로 Prefect 워크플로우를 실행하고, 결과를 실시간으로 확인할 수 있습니다.
격리된 환경 기반의 안정적인 서비스 실행
Theia IDEPrefect는 각각 독립된 Conda 환경에서 실행되어, 패키지 충돌 및 환경 오염을 방지합니다.
서비스별로 완전히 분리된 환경에서 안정적으로 실행되어 운영 중 발생할 수 있는 문제를 최소화합니다.
통합 데이터 관리
TimescaleDB를 통해 관계형, 시계열, 문서 기반 데이터를 통합 관리합니다.

8. 사용 시나리오

Hello World의 실행 및 배포

코드 (main.py)
from prefect import flow, task @task def say_hello(): """Task: Print Hello, World!""" print("Hello, World!") @flow(log_prints=True) def hello_world_flow(): """Flow: Run the hello task""" say_hello() if __name__ == "__main__": hello_world_flow()
JavaScript
복사
실행
python3 main.py
JavaScript
복사
배포
prefect deploy --name hello-world-deployment --pool scc-process-pool
JavaScript
복사

영구 실행 (오류 발생시 재시작)

flow의 재시도 횟수를 무제한으로 설정하여 오류 발생시에 재시작을 하도록 설정할 수 있습니다.
from prefect import flow from datetime import timedelta @flow(retries=-1, retry_delay=timedelta(seconds=10)) def my_persistent_flow(): print("Flow is running...") raise Exception("Simulated failure") # 오류 발생 시 무한 재시도 if __name__ == "__main__": my_persistent_flow()
JavaScript
복사