- 수행 시기: 2026년 9월 말 ~ 10월
- 진행 상태: 진행 중. 조회·편집·4대 시뮬레이션·결과 그래프·AI 리포트까지 동작하며, AI 리포트는 프로토타입 단계입니다.
- 형태: 4명 팀 프로젝트 (팀 으라차차)
- 소스 코드: https://github.com/anjinsung-debug/capstone
활동 목적
배전계통에 부하나 태양광·풍력 같은 분산전원을 추가하거나 선로를 바꾸면, 전압이 정상 범위를 벗어나거나 선로가 과부하되거나 전력이 거꾸로 흐르는(역조류) 문제가 생길 수 있습니다. 한전이 제공한 22.9kV 배전계통 데이터를 웹에서 단선도로 보고 편집하면, 전압 영향·선로 과부하·역조류·단락 고장전류의 4대 시뮬레이션을 자동으로 다시 계산해 결과를 바로 보여 주는 것이 목표였습니다.
내 역할
팀원 4명이 폴더 단위로 나눠 맡았습니다.
| 부분 | 담당 |
|---|---|
| 전체 구조·디렉토리 설계 | 본인 |
웹 화면·단선도 (frontend/, React·Cytoscape.js) | 팀원 2명 |
한전 데이터 변환·Neo4j 저장 (cim/) | 팀원 1명 |
AI 리포트 (ai_report/) | 팀원 2명 |
시뮬레이션 (simulation/, Python) | 본인 단독 |
API 서버 (backend/, FastAPI) | 본인 + 팀원 1명 |
- 전체 구조 설계: 프로젝트 전체 구조와 디렉토리 구성을 설계하고, 초기 프로젝트와 폴더 간 연결 틀을 만들었습니다.
- 시뮬레이션: 계통 데이터를 OpenDSS로 변환하는 부분, 4대 시뮬레이션 계산, matplotlib 결과 그래프를 구현했습니다.
- API 서버: 시뮬레이션과 결과 그래프를 화면에서 요청하는 API를 연결했습니다.
- 다른 팀원이 맡은 화면·데이터 적재·AI 리포트는 이 페이지에서 결과만 언급하고 구현 내용은 적지 않았습니다.
수행 과정
- 프로젝트 구성: FastAPI 백엔드와 React 프론트엔드의 기본 구조, 폴더 간 연결 틀을 만들었습니다.
- 해석 범위 확정: 22.9kV, 3상 평형, 방사형 계통, 한 시점 계산, 3상 단락으로 범위를 정했습니다.
- OpenDSS 변환 구현 (
simulation/dss.py): 전원·부하·분산전원·선로·개폐기를 OpenDSS 명령어로 바꾸고, 계통이 완성됐는지와 루프가 없는지를 먼저 검사합니다. - 4대 시뮬레이션 구현 (
simulation/simulate.py):opendssdirect로 조류 계산과 고장 해석을 실행해 전압, 선로 부하율, 역조류, 고장전류, 피더별 송출 전력을 구합니다. - 결과 그래프 구현 (
simulation/plot.py): 거리별 전압과 선로별 전력을 matplotlib로 그려 PNG로 돌려줍니다. - API 연결과 자체 점검: 백엔드에 시뮬레이션·그래프 API를 연결하고, 한전 데이터로
python -m simulation.simulate자체 점검을 실행해 확인했습니다.
방법을 선택한 이유
- 변환과 실행을 파일로 분리: OpenDSS 명령어 변환(
dss.py)과 실행(simulate.py)을 나눠, OpenDSS를 실행하지 않고도 생성된 명령어를 확인할 수 있게 했습니다. - 선로 방향을 다시 계산: 화면에서 편집하다 보면 선로가 거꾸로 그려질 수 있어서, 저장된 방향 대신
전원에서부터 실제 흐름 방향을 계산(
trace)해 역조류 판정과 그래프에 사용했습니다. - 데이터에 없는 값은 가정값 사용: 한전 데이터에는 변전소 단락용량, X/R, 선로 허용전류가 없어서 기본 가정값을 상수로 두고 계산하도록 했습니다.
- OpenDSS 이름은 순서 번호로: 원래 설비 id에는 OpenDSS가 쓸 수 없는 문자가 있을 수 있어
n0,l0처럼 목록 순서로 이름을 지었습니다. - 계산할 수 없는 계통은 이유와 함께 거절: 미완성 계통·루프·수렴 실패는 오류로 바꿔, 화면에 빠진 항목을 알려 줄 수 있게 했습니다(API는 422 응답).
산출물과 결과
| 산출물 (본인 담당) | 무엇을 구현·확인했는가 |
|---|---|
| simulation/dss.py | 계통 → OpenDSS 명령어 변환, 계통 완성 검사, 실제 조류 방향 계산 |
| simulation/simulate.py | 조류 계산·3상 단락 고장 해석으로 전압·부하율·역조류·고장전류·피더별 송출 전력 계산 |
| simulation/plot.py | 거리별 전압 그래프(정상 범위 밖은 빨간 점), 선로별 전력 그래프(역조류 주황, 과부하 빨강) |
| backend/api/simulation.py | 화면에서 시뮬레이션·결과 그래프를 요청하는 API |
한전이 제공한 실제 계통 데이터로 python -m simulation.simulate 자체 점검을 실행해
역조류 방향, 루프 검출, 정전 구간, 오류 처리가 동작하는 것을 확인했습니다.
팀 전체로는 단선도 편집 → 자동 저장 → 자동 재계산 → 결과 표시 → AI 리포트까지의 흐름이 동작합니다.
실행 화면
로컬에서 실행한 화면입니다. 화면(단선도·결과 창)은 팀원이 만든 프론트엔드이고, 화면에 표시된 전압·부하율·역조류·단락용량 값은 내가 구현한 시뮬레이션 모듈이 계산한 결과입니다.

그림 1. 단선도와 시뮬레이션 결과: 편집한 계통을 저장하면 다시 계산한 전압·부하율·역조류·단락용량이 단선도 위에 표시된다.

그림 2. 결과 창의 건강도 진단: 시뮬레이션 결과를 항목별 기준과 비교해 정상·주의로 판정하고, AI 요약(팀원 담당)이 이어진다.
배운 점
Python으로 전력 계통 해석 도구(OpenDSS)를 웹 서비스와 연결해 보면서, 계산 프로그램을 API로 감싸 화면에서 바로 쓸 수 있게 만드는 과정을 경험했습니다. 또 실제 데이터에는 계산에 필요한 값이 빠져 있는 경우가 많아, 어떤 값을 가정했는지 코드와 문서에 남겨 두어야 팀원이 결과를 믿고 쓸 수 있다는 것을 배웠습니다.
한계와 다음 개선 방향
| 한계 | 다음 개선 방향 |
|---|---|
| OpenDSS 계산 엔진이 프로그램에 하나뿐이라, 동시에 들어온 시뮬레이션 요청을 한 줄로 세워 차례로 처리합니다. | 사용자가 늘어 느려지면 요청마다 별도 프로세스에서 계산하도록 나눕니다. |
| 역조류를 방향만으로 판정해 1 kW만 거꾸로 흘러도 역조류로 표시됩니다(제안서에 기준 수치가 없음). | 팀·지도교수와 판정 기준 수치를 정해 크기 기준을 추가합니다. |
| 한전 데이터에 없는 단락용량(300 MVA)·X/R(10)·허용전류(400 A)를 가정값으로 계산해 고장전류·과부하 결과가 실제와 다를 수 있습니다. | 실제 값을 받을 수 있는 항목부터 데이터에 넣고, 가정값을 쓴 결과는 화면에 표시합니다. |