@...

계정 목록 DB 기준 · Entra 연결 상태 표시

Entra 표시 이름 UPNEntra 계정 알림 이메일 전화번호 상태 웹관리자 덕원관리자 농장관리자매핑 농장주매핑 열람자 농장 접근배정 메모 접속 최종접속 작업
로딩 중...
로딩 중...

PostgreSQL 서버 제어

시스템 구조 다이어그램

최종 업데이트 기준 — 변경 시 docs/architecture/overview.md 와 본 화면 동시 수정

덕원농장 시스템이 제공하는 8개 비즈니스 기능을 한눈에 정리한 그림입니다. 왼쪽이 사용자, 중앙이 우리가 제공하는 서비스, 오른쪽이 데이터/외부 시스템.

현행본 (2026-05-16 갱신 — Databricks 폐기 반영)
flowchart LR subgraph U["사용자"] U1["본사 운영팀 ops_manager system_admin"] U2["농장 사용자 farm_manager farm_owner"] end subgraph SVC["fss 서비스"] direction TB S_AUTH["인증 계정관리"] S_FARM["농장 운영"] S_SETTLE["정산"] S_GRADE["등판정 데이터"] S_BI["데이터 분석 Postgres ETL"] S_AI["AI 어시스턴트 Claude"] S_NOTIFY["알림 일정 email kakao"] S_OPS["운영 관리"] end subgraph DATA["데이터"] D_PG[("운영 DB Postgres")] D_BLOB[("파일 스토리지 ADLS Gen2")] end subgraph EXT["외부 시스템"] E_ENTRA["Entra ID"] E_EKAPE["축산물원패스 EKAPE"] E_GCAL["Google Calendar"] E_AI["Anthropic 법제처"] E_KAKAO["카카오 알림톡 솔라피 검수중"] end U1 ==> SVC U2 ==> SVC S_AUTH --- E_ENTRA S_GRADE --- E_EKAPE S_NOTIFY --- E_GCAL S_NOTIFY -.-> E_KAKAO S_AI --- E_AI S_AUTH --> D_PG S_FARM --> D_PG S_SETTLE --> D_PG S_GRADE --> D_PG S_OPS --> D_PG S_SETTLE --> D_BLOB S_GRADE --> D_BLOB S_BI --> D_PG D_PG --> S_BI classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class E_KAKAO pending
이전 버전 보기 (~ 2026-05-04, Databricks 포함)

2026-05-04 시점 — Databricks Genie / gold layer 기반 BI 시절

flowchart LR subgraph U["사용자"] U1["본사 운영팀 ops_manager system_admin"] U2["농장 사용자 farm_manager farm_owner"] end subgraph SVC["fss 서비스"] direction TB S_AUTH["인증 계정관리"] S_FARM["농장 운영"] S_SETTLE["정산"] S_GRADE["등판정 데이터"] S_BI["데이터 분석"] S_AI["AI 어시스턴트"] S_NOTIFY["알림 일정"] S_OPS["운영 관리"] end subgraph DATA["데이터"] D_PG[("운영 DB Postgres")] D_LAKE[("데이터 레이크 Databricks gold")] D_BLOB[("파일 스토리지")] end subgraph EXT["외부 시스템"] E_ENTRA["Entra ID"] E_EKAPE["축산물원패스 EKAPE"] E_GCAL["Google Calendar"] E_AI["Anthropic 법제처"] E_KAKAO["카카오 알림톡 보류"] end U1 ==> SVC U2 ==> SVC S_AUTH --- E_ENTRA S_GRADE --- E_EKAPE S_NOTIFY --- E_GCAL S_NOTIFY -.-> E_KAKAO S_AI --- E_AI S_AUTH --> D_PG S_FARM --> D_PG S_SETTLE --> D_PG S_GRADE --> D_PG S_OPS --> D_PG S_SETTLE --> D_BLOB S_BI --> D_PG D_PG --> S_BI S_BI --> D_LAKE D_LAKE --> S_BI classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class E_KAKAO pending

덕원농장 시스템이 사용 중인 클라우드 서비스 (Azure · 외부 SaaS) 와 연계 방식을 정리한 그림입니다. 굵은선 = 사용자 트래픽, 점선 = 비동기/스케줄, 실선 = 동기 호출. 인증·통신 방식은 아래 표 참조.

현행본 (2026-06-24 — 크롤러 VM → Container App Job 이관 / VM·Bastion·Automation·VNet 폐기 반영)
flowchart LR subgraph CLIENT["클라이언트"] BROWSER["웹 브라우저"] GCAL_APP["Google Calendar 앱"] end subgraph AZURE["Azure Korea Central"] direction TB subgraph FRONT_AZ["사용자 접점"] APPSVC["Azure App Service P0v3 컨테이너"] ACR["Azure Container Registry fsswebappacr"] end subgraph SEC["인증 보안"] ENTRA["Microsoft Entra ID"] GRAPH["Microsoft Graph API"] KV["Azure Key Vault"] end subgraph DATA_AZ["데이터 저장"] PG["Azure Postgres Flexible Entra-only"] ADLS["Azure Data Lake Storage Gen2"] end subgraph INFRA["크롤러 컴퓨트 (Container Apps Job)"] CRAWLER["Container App Jobs 크롤러 ekape · court · mainfarm (Schedule cron)"] end subgraph COMM["커뮤니케이션"] ACS["Azure Communication Services 메일"] end end subgraph CICD["CI CD"] GHA["GitHub Actions OIDC federated"] end subgraph EXT_SVC["외부 SaaS"] ANTH["Anthropic API Claude"] GCAL_SVC["Google Calendar"] EKAPE["EKAPE 축산물원패스"] COURT["대법원 나의사건검색"] LAW["법제처 API"] NOTION["Notion API"] GMAIL["Gmail SMTP fallback"] KAKAO["카카오 알림톡 Solapi 검수중"] end BROWSER ==> APPSVC GCAL_APP -.-> GCAL_SVC GCAL_SVC -.-> APPSVC APPSVC --> ENTRA ENTRA --> APPSVC APPSVC --> GRAPH APPSVC --> KV APPSVC --> PG APPSVC --> ADLS APPSVC --> ANTH APPSVC --> LAW APPSVC --> NOTION APPSVC --> ACS APPSVC --> GMAIL APPSVC -.-> KAKAO APPSVC -.-> CRAWLER CRAWLER --> KV CRAWLER --> EKAPE CRAWLER --> COURT CRAWLER --> ADLS CRAWLER --> APPSVC GHA --> ACR ACR --> APPSVC ACR --> CRAWLER classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class KAKAO pending
서비스별 책임 / 인증 방식 표 보기
서비스 역할 인증 방식
Azure App Service웹앱 호스팅 (사용자 진입점)Entra SSO + MI
Microsoft Entra ID사용자 SSO + App RegistrationMSAL OAuth2 + PKCE
Microsoft Graph계정 자동 생성·삭제client credentials
Azure Postgres Flexible운영 데이터 (트랜잭션)Entra-only (passwordAuth Disabled)
Azure Container RegistryApp Service 컨테이너 이미지 (fsswebappacr)MI + GitHub OIDC push
Azure Data Lake Storage파일 (정산서 / 등판정 원본 / 출하 PNG)SAS / access connector
Azure Key Vault시크릿 (EKAPE 자격증명, DB pwd 등)RBAC (MI)
Azure Communication Services트랜잭션 메일 발송REST API (MI)
Azure Container App Jobs크롤러 (ekape 등판정 · court 소송 · mainfarm 본장) — Schedule cron, webapp 수동 트리거UserAssigned MI (id-fss-crawler)
GitHub ActionsCI/CDOIDC federated (PAT 없음)
Anthropic APIClaude (AI 챗 / 기능 문의)API key
Google Calendar농장 사용자 캘린더 구독URL 토큰 (ICS)
EKAPE등판정 데이터 원천 (등판정·본장 크롤러)로그인 (Key Vault 자격증명)
대법원 나의사건검색소송 사건진행 원천 (court 크롤러)크롤링 (webapp push)
법제처 (law.go.kr)법률 검색API key
Notion API작업 메모 동기화API token
Gmail SMTP메일 fallbackApp password
카카오 알림톡 (Solapi)정보성 알림 발송 (검수 진행 중)Solapi v4 HMAC-SHA256
이전 버전 보기 (~ 2026-05-04, Databricks 포함)

2026-05-04 시점 — Databricks workspace + Genie + 양방향 sync 시절. App Service: B2 (코드 배포)

flowchart LR subgraph CLIENT["클라이언트"] BROWSER["웹 브라우저"] GCAL_APP["Google Calendar 앱"] end subgraph AZURE["Azure Korea Central"] direction TB subgraph FRONT_AZ["사용자 접점"] APPSVC["Azure App Service B2"] end subgraph SEC["인증 보안"] ENTRA["Microsoft Entra ID"] GRAPH["Microsoft Graph API"] KV["Azure Key Vault"] end subgraph DATA_AZ["데이터 분석"] PG["Azure Postgres Flexible"] DBX["Azure Databricks"] ADLS["Azure Data Lake Storage"] end subgraph INFRA["컴퓨트 운영"] VM["Azure VM"] BAST["Azure Bastion"] AUTOMATE["Azure Automation"] end subgraph COMM["커뮤니케이션"] ACS["Azure Communication Services"] end end subgraph CICD["CI CD"] GHA["GitHub Actions"] end subgraph EXT_SVC["외부 SaaS"] ANTH["Anthropic API"] GCAL_SVC["Google Calendar"] EKAPE["EKAPE"] LAW["법제처 API"] NOTION["Notion API"] GMAIL["Gmail SMTP"] KAKAO["카카오 알림톡"] end BROWSER ==> APPSVC GCAL_APP -.-> GCAL_SVC GCAL_SVC -.-> APPSVC APPSVC --> ENTRA ENTRA --> APPSVC APPSVC --> GRAPH APPSVC --> KV APPSVC --> PG APPSVC --> DBX DBX --> APPSVC APPSVC --> ANTH APPSVC --> LAW APPSVC --> NOTION APPSVC --> ACS APPSVC --> GMAIL APPSVC -.-> KAKAO DBX --> PG PG --> DBX DBX --> ADLS ADLS --> DBX VM --> KV VM --> EKAPE VM --> APPSVC BAST -.-> VM AUTOMATE -.-> VM GHA --> APPSVC classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class KAKAO pending

실제 Azure 리소스 인스턴스 단위 상세 구조입니다. 운영자 / IT 트러블슈팅용. 리소스명·SKU·서브넷·인증 방식까지 표기. 일반 사용자에게는 너무 기술적이므로 비즈니스/서비스 탭을 사용하세요.

현행본 (2026-06-24 az 직접 조회 — 크롤러 VM → Container App Job 3개 이관 / VM·Bastion·NSG·공인IP·Automation·VNet 폐기)
flowchart LR subgraph USERS["사용자"] U_OPS["ops_manager system_admin"] U_FARM["farm_manager farm_owner"] end subgraph AZURE["Azure rg_dukwon Korea Central"] direction TB subgraph APPSVC_GRP["App Service Plan P0v3 Linux ASP-rgdukwon-af6c"] WEB_DEV["fss-webapp-dev fss-dev.dukwonfarm.com"] WEB_PRD["fss-webapp-prd fss.dukwonfarm.com"] SLOT_DEV["dev staging slot"] SLOT_PRD["prd staging slot"] end ACR["fsswebappacr Basic"] subgraph IDENT["Managed Identity"] ID_DEV["id-webapp-dev"] ID_PRD["id-webapp-prd"] ID_CRAWLER["id-fss-crawler 크롤러 Job용"] OIDC1["oidc-msi-a8be GH OIDC"] OIDC2["oidc-msi-a7c2 GH OIDC"] end PG[("fss-db Postgres Flexible Standard_B2s Entra-only")] KV[("key-for-fssgradeuploader Key Vault")] subgraph CAE_GRP["cae-fss-crawler Container Apps Environment"] CR_EKAPE["fss-crawler-ekape Schedule 10,14,23 UTC"] CR_COURT["fss-crawler-court Schedule 04,09,23 UTC"] CR_MAIN["fss-crawler-mainfarm Schedule 10,14,23 UTC"] end STORAGE[("externaladlsdukwon ADLS Gen2 Standard_LRS")] ADLS_CONN["access_xls-uploader ADLS access connector"] subgraph COMM["Azure Communication Services Global"] ACS_COMM["fss-communication"] ACS_EMAIL["fss-email"] end end subgraph ENTRA_BOX["Microsoft Entra ID"] ENTRA["App Registration"] GRAPH["Microsoft Graph"] end subgraph EXT["외부 시스템"] EKAPE["축산물원패스 EKAPE"] COURT["대법원 나의사건검색"] GCAL["Google Calendar"] GMAIL["Gmail SMTP fallback"] KAKAO_C["솔라피 카카오 알림톡 검수중"] ANTH["Anthropic API"] LAW["법제처 API"] NOTION["Notion API"] end subgraph GH["GitHub"] REPO["fss-webapp repo"] GA_DEV["dev_fss-webapp-dev.yml"] GA_PRD["main_fss-webapp-prd.yml"] end U_OPS ==> WEB_DEV U_OPS ==> WEB_PRD U_FARM ==> WEB_PRD GCAL -.-> WEB_PRD WEB_DEV --> PG WEB_PRD --> PG WEB_DEV -.-> ID_DEV WEB_PRD -.-> ID_PRD WEB_DEV --> ENTRA WEB_PRD --> ENTRA ENTRA --> WEB_DEV ENTRA --> WEB_PRD WEB_PRD --> GRAPH WEB_PRD --> KV WEB_PRD --> ANTH WEB_PRD --> LAW WEB_PRD --> NOTION WEB_PRD --> ACS_COMM ACS_COMM --> ACS_EMAIL WEB_DEV --> STORAGE WEB_PRD --> STORAGE ADLS_CONN -.-> STORAGE WEB_PRD -.->|ARM 수동 트리거 MI| CR_EKAPE WEB_PRD -.->|ARM 수동 트리거 MI| CR_COURT WEB_PRD -.->|ARM 수동 트리거 MI| CR_MAIN CR_EKAPE -.-> ID_CRAWLER CR_COURT -.-> ID_CRAWLER CR_MAIN -.-> ID_CRAWLER CR_EKAPE --> KV CR_COURT --> KV CR_MAIN --> KV CR_EKAPE --> EKAPE CR_MAIN --> EKAPE CR_COURT --> COURT CR_EKAPE --> STORAGE CR_MAIN --> STORAGE CR_EKAPE -->|x-api-key| WEB_PRD CR_COURT -->|x-api-key| WEB_PRD CR_MAIN -->|x-api-key| WEB_PRD WEB_PRD -.-> KAKAO_C WEB_PRD -.-> GMAIL REPO --> GA_DEV REPO --> GA_PRD GA_DEV --> OIDC1 GA_PRD --> OIDC2 OIDC1 --> ACR OIDC2 --> ACR ACR --> WEB_DEV ACR --> WEB_PRD ACR --> CR_EKAPE ACR --> CR_COURT ACR --> CR_MAIN WEB_DEV -.- SLOT_DEV WEB_PRD -.- SLOT_PRD classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class KAKAO_C pending
이전 버전 보기 (~ 2026-05-04, Databricks Workspace + SCIM 포함)

2026-05-04 이전 — dbx_dukwon workspace + Unity Catalog + Genie + 양방향 sync (JOB1 pg_to_databricks_merge / JOB2 gold_to_pg_grading_sync). SP_DUKWON 노트북 인증 SP. App Service: B2 (코드 배포)

flowchart LR subgraph USERS["사용자"] U_OPS["ops_manager system_admin"] U_FARM["farm_manager farm_owner"] end subgraph AZURE["Azure rg_dukwon Korea Central"] direction TB subgraph APPSVC_GRP["App Service Plan B2 Linux"] WEB_DEV["fss-webapp-dev"] WEB_PRD["fss-webapp-prd"] end subgraph IDENT["Managed Identity"] ID_DEV["id-webapp-dev"] ID_PRD["id-webapp-prd"] OIDC1["oidc-msi-a8be"] OIDC2["oidc-msi-a7c2"] end PG[("fss-db Postgres Flexible")] KV[("key-for-fssgradeuploader Key Vault")] subgraph NET["VNet vnet_dukwon"] SUBNET_DEF["subnet default"] SUBNET_DBX["subnet dbxhost"] SUBNET_VM["subnet dbxcontainer"] BAST["vnet_dukwon-bastion"] end subgraph VM_GRP["fss-gradeuploader VM"] VM_HOST["Standard_B2s Ubuntu 24.04"] AUTOSTART["vm-auto-start Automation"] AUTOSTOP["DevTestLab schedule"] end STORAGE[("externaladlsdukwon ADLS Gen2")] subgraph COMM["Azure Communication Services"] ACS_COMM["fss-communication"] ACS_EMAIL["fss-email"] end end subgraph DBX_BOX["Databricks Workspace dbx_dukwon"] direction TB DBX_URL["adb-3997551919284009 azuredatabricks net"] UC[("Unity Catalog")] GOLD[("gold layer delta")] JOB1["pg_to_databricks_merge"] JOB2["gold_to_pg_grading_sync"] GENIE["Genie SQL Warehouse"] SCIM["SCIM API"] DBX_AC["unity-catalog-access-connector"] DBX_MI["dbmanagedidentity"] end subgraph ENTRA_BOX["Microsoft Entra ID"] ENTRA["App Registration"] GRAPH["Microsoft Graph"] SP_DUKWON["Service Principal dukwon"] end subgraph EXT["외부 시스템"] EKAPE["축산물원패스 EKAPE"] GCAL["Google Calendar"] GMAIL["Gmail SMTP"] KAKAO_C["카카오 알림톡 보류"] ANTH["Anthropic API"] LAW["법제처 API"] NOTION["Notion API"] end subgraph GH["GitHub"] REPO["fss-webapp"] GA_DEV["dev_fss-webapp-dev.yml"] GA_PRD["main_fss-webapp-prd.yml"] end U_OPS ==> WEB_DEV U_OPS ==> WEB_PRD U_FARM ==> WEB_PRD GCAL -.-> WEB_PRD WEB_DEV --> PG WEB_PRD --> PG WEB_DEV -.-> ID_DEV WEB_PRD -.-> ID_PRD WEB_DEV --> ENTRA WEB_PRD --> ENTRA ENTRA --> WEB_DEV ENTRA --> WEB_PRD WEB_PRD --> GRAPH WEB_PRD --> KV VM_HOST --> KV WEB_PRD --> GENIE GENIE --> WEB_PRD WEB_PRD --> SCIM WEB_PRD --> ANTH WEB_PRD --> LAW WEB_PRD --> NOTION WEB_PRD --> ACS_COMM ACS_COMM --> ACS_EMAIL JOB1 -.-> PG JOB2 -.-> PG JOB1 -.-> SP_DUKWON JOB2 -.-> SP_DUKWON SP_DUKWON -.-> PG DBX_AC --> STORAGE UC --- DBX_AC GOLD --- UC VM_HOST --> EKAPE VM_HOST --> WEB_PRD VM_HOST -.- SUBNET_VM BAST -.-> VM_HOST WEB_PRD -.-> KAKAO_C WEB_PRD -.-> GMAIL REPO --> GA_DEV REPO --> GA_PRD GA_DEV --> OIDC1 GA_PRD --> OIDC2 OIDC1 --> WEB_DEV OIDC2 --> WEB_PRD WEB_PRD -.-> PG classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999 class KAKAO_C pending

업무 프로세스 BPMN 스윔레인 — bpmn-js(BPMN 2.0) 뷰어로 렌더합니다. 가로 풀(Pool)=프로세스, 가로 레인(Lane)=액터(시스템/사용자 그룹), 흐름은 BPMN 표기(시작/종료 이벤트·태스크·게이트웨이·시퀀스 플로우)를 따릅니다. 휠로 확대/축소, 드래그로 이동할 수 있습니다. 현행본 2026-05-24 · 구현 기능 기준

A. 자동 데이터 파이프라인 (사람 개입 없음)

P1. 등판정 수집 → 적재·가공 → 출하분석

B. 사람 개입 프로세스

P2. 일별 사육 입력 → 폐사율 알림
P3. 출하 정산서 처리
P4. 계정 · 권한(RBAC) 관리
이전 버전 보기 — Mermaid 로 그린 버전 (~ 2026-05-24)

bpmn-js 도입 전 — Mermaid subgraph 로 액터를 묶던 버전(가로 레인 정렬은 미지원). 프로세스 6종.

P1. 등판정 수집 · ETL · 매칭

flowchart LR subgraph VM["크롤링 VM (fss-gradeuploader)"] direction TB v1["축평원 등판정 다운로드"] v2["등판정 파일 업로드 API"] v3["업로드 로그 기록 API"] v1 --> v2 --> v3 end subgraph WEB1["웹시스템 (fss-webapp)"] direction TB w1["파일 수신/저장"] w2["ETL 적재 bronze/silver/gold"] w3["농장 귀속/단가 매칭"] w4["실패 또는 미매핑 시 알림"] w1 --> w2 --> w3 --> w4 end subgraph OPS1["덕원관리자"] o1["이상 알림 확인"] end v2 --> w1 v3 --> w1 w4 -->|"email/kakao"| o1

P2. 출하분석 리포트 자동 발송

flowchart LR subgraph WEB2["웹시스템 (fss-webapp)"] direction TB a1["출하 ETL 완료 트리거"] a2["리포트 HTML 렌더 후 PNG 캡처"] a3["수신자 결정 통합 리스트"] a4["메일 발송 SMTP"] a1 --> a2 --> a3 --> a4 end subgraph RCP2["수신자 (구독자)"] r1["출하분석 메일 수신"] end a4 --> r1

P3. 정기 알림 (폐사율 · 일정)

flowchart LR subgraph SCH["웹시스템 스케줄러"] direction TB s1["cron 발화 폐사율/일정"] s2["주말/공휴일 게이트 체크"] s3["수신자/변수 구성"] s1 --> s2 --> s3 end subgraph DSP["웹시스템 디스패처"] direction TB d1["email 발송"] d2["kakao 알림톡 발송"] end subgraph RCP3["수신자 (농장주/운영팀)"] r1["알림 수신"] end s3 --> d1 s3 --> d2 d1 --> r1 d2 --> r1

P4. 계정 · 권한(RBAC) 관리

flowchart LR subgraph ADM["웹관리자 system_admin"] direction TB a1["계정 생성/삭제 요청"] a2["RBAC 권한 부여/회수"] a1 --> a2 end subgraph WEB4["웹시스템 (fss-webapp)"] direction TB w1["Graph API 계정 처리"] w2["users/user_roles 갱신"] end subgraph EXT4["Entra ID, Graph"] e1["계정 생성/삭제 반영"] end a1 --> w1 a2 --> w2 w1 --> e1

P5. 일별 사육 이벤트 입력

flowchart LR subgraph FM["농장관리자 (담당 농장)"] direction TB f1["일별 이벤트 입력 입식/폐사/출하/전출"] f2["벌크 저장"] f1 --> f2 end subgraph WEB5["웹시스템 (fss-webapp)"] direction TB w1["이벤트 검증/저장"] w2["사육두수/폐사율 집계"] w1 --> w2 end subgraph VIEW5["농장주/운영팀 조회"] v1["현황/폐사율 리포트 조회"] end f2 --> w1 w2 --> v1

P6. 출하 정산서 처리

flowchart LR subgraph OPS6["덕원관리자"] direction TB o1["정산서 파일 업로드 위탁/출하"] o2["파싱 결과 검증/확정"] o1 --> o2 end subgraph WEB6["웹시스템 (fss-webapp)"] direction TB w1["정산서 결정론 파싱"] w2["정산 데이터 저장"] w1 --> w2 end subgraph OWN6["농장주 (담당 농장)"] n1["본인 정산서 조회"] end o1 --> w1 o2 --> w2 w2 --> n1

Azure 비용 대시보드

Cost Management API · 1시간 서버 캐시 · 웹관리자 전용
이번 달 누적
전월 동일 기간
전월 대비 증감
예상 월말 비용
일자별 비용 추이 최근 30일 · 리소스별 누적
리소스별 비용 최근 30일
서비스별 비용 Top 10
전월 vs 당월 누적

AI 용어집 농장분석 AI system prompt 에 자동 주입

로딩 중...

메뉴권한 현황

로딩 중...