• 수행 시기: 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 리포트는 이 페이지에서 결과만 언급하고 구현 내용은 적지 않았습니다.

수행 과정

  1. 프로젝트 구성: FastAPI 백엔드와 React 프론트엔드의 기본 구조, 폴더 간 연결 틀을 만들었습니다.
  2. 해석 범위 확정: 22.9kV, 3상 평형, 방사형 계통, 한 시점 계산, 3상 단락으로 범위를 정했습니다.
  3. OpenDSS 변환 구현 (simulation/dss.py): 전원·부하·분산전원·선로·개폐기를 OpenDSS 명령어로 바꾸고, 계통이 완성됐는지와 루프가 없는지를 먼저 검사합니다.
  4. 4대 시뮬레이션 구현 (simulation/simulate.py): opendssdirect로 조류 계산과 고장 해석을 실행해 전압, 선로 부하율, 역조류, 고장전류, 피더별 송출 전력을 구합니다.
  5. 결과 그래프 구현 (simulation/plot.py): 거리별 전압과 선로별 전력을 matplotlib로 그려 PNG로 돌려줍니다.
  6. 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 리포트까지의 흐름이 동작합니다.

실행 화면

로컬에서 실행한 화면입니다. 화면(단선도·결과 창)은 팀원이 만든 프론트엔드이고, 화면에 표시된 전압·부하율·역조류·단락용량 값은 내가 구현한 시뮬레이션 모듈이 계산한 결과입니다.

배전계통 통합 분석 플랫폼의 단선도 화면. 위쪽 요약에 계통 주의, 전압 0.982 pu, 선로 부하율 49%, 역조류 1.10 MW, 단락용량 307 MVA, 송출 6.65 MW가 표시되고, 변전소에서 아래로 뻗은 선로와 부하·태양광 설비가 그려져 있으며 역조류 1.10 MW 구간이 주황색으로 표시되어 있다.

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

결과 창의 건강도 진단 탭. 전압 0.982 pu 정상, 선로 부하율 49% 정상, 역조류 1.10 MW 3곳 주의, 단락용량 307 MVA 4곳 주의, 정전 구간 없음 정상으로 판정되고, 변전소 출구 송출 6.65 MW / 4.06 MVAr, 선로 손실 54.0 kW, LLM 요약 문단이 있다.

그림 2. 결과 창의 건강도 진단: 시뮬레이션 결과를 항목별 기준과 비교해 정상·주의로 판정하고, AI 요약(팀원 담당)이 이어진다.

배운 점

Python으로 전력 계통 해석 도구(OpenDSS)를 웹 서비스와 연결해 보면서, 계산 프로그램을 API로 감싸 화면에서 바로 쓸 수 있게 만드는 과정을 경험했습니다. 또 실제 데이터에는 계산에 필요한 값이 빠져 있는 경우가 많아, 어떤 값을 가정했는지 코드와 문서에 남겨 두어야 팀원이 결과를 믿고 쓸 수 있다는 것을 배웠습니다.

한계와 다음 개선 방향

한계다음 개선 방향
OpenDSS 계산 엔진이 프로그램에 하나뿐이라, 동시에 들어온 시뮬레이션 요청을 한 줄로 세워 차례로 처리합니다.사용자가 늘어 느려지면 요청마다 별도 프로세스에서 계산하도록 나눕니다.
역조류를 방향만으로 판정해 1 kW만 거꾸로 흘러도 역조류로 표시됩니다(제안서에 기준 수치가 없음).팀·지도교수와 판정 기준 수치를 정해 크기 기준을 추가합니다.
한전 데이터에 없는 단락용량(300 MVA)·X/R(10)·허용전류(400 A)를 가정값으로 계산해 고장전류·과부하 결과가 실제와 다를 수 있습니다.실제 값을 받을 수 있는 항목부터 데이터에 넣고, 가정값을 쓴 결과는 화면에 표시합니다.