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 IDE와 Prefect는 각각 독립된 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
복사