β λ©μΈμΌλ‘ λμκ°κΈ°
π νλ‘μ νΈ κ°μ
ν΅μ¬ κ°μΉ: 8μκ° λΆμμΌλ‘ 70% μλ κ°μ λ°©μ λμΆ - AIμ ν¨κ»ν 체κ³μ λ°μ΄ν° λΆμ κ³Όμ
κΈ°λ³Έ μ 보
- π
μ§ν κΈ°κ°: 2025λ
9μ 16μΌ (1μΌ μμ±)
- π λ°μ΄ν° κ·λͺ¨: μλ 1,129건, μ₯μ 75건 (2λ
κ°)
- π― ν΅μ¬ λ¬Έμ : QuickSight FILE νμ
μ API μ κ·Ό λΆκ°
- π μ΅μ’
μ±κ³Ό: 70% μλ κ°μ μμ, ꡬ체μ κΈ°μ μ루μ
λμΆ
π― AI νμ© ν¬μΈνΈ
1. λ¬Έμ μ μ λ° μ κ·Ό μ λ΅
AI μν : 볡μ‘ν μμ€ν
λ¬Έμ λ₯Ό 8λ¨κ³λ‘ 체κ³ν
- λ°μ΄ν° νμ€ νμ
β μν€ν
μ² λ§μ΄κ·Έλ μ΄μ
β λΆμ β ν΄κ²°λ°©μ
- 35κ° νμΌλ‘ μ κ³Όμ λ¬Έμν μλ μμ±
- Python μ€ν¬λ¦½νΈ μλ κ°λ°
2. λ°μ΄ν° μν€ν
μ² μ€κ³
AI κΈ°μ¬: QuickSight FILE β S3+Athena λ§μ΄κ·Έλ μ΄μ
μ λ΅ μ립
- νν°μ
ꡬ쑰 μ΅μ ν (year/month)
- CSV β Parquet λ³ν (70% μ©λ μ μ½)
- Athena ν
μ΄λΈ μ€ν€λ§ μλ μμ±
3. ν¨ν΄ λΆμ λ° μΈμ¬μ΄νΈ λμΆ
AI λΆμλ ₯: 1,200μ¬ κ±΄ λ°μ΄ν°μμ ν΅μ¬ ν¨ν΄ λ°κ²¬
- ERP μμ€ν
81% μ§μ€λ μλ³
- 8μ 8μΌ λ°°μΉ μ₯μ κ·Όλ³Έ μμΈ κ·λͺ
- μκ°λλ³ μλ ν¨ν΄ λΆμ
π§ λ°μ΄ν° μ€λΉ κ³Όμ : κ°μ₯ μκ°μ΄ μ€λ κ±Έλ¦° μμ
β° μ€μ μκ° λΆλ°°: λ°μ΄ν° μ€λΉ 6μκ° (75%) vs μ€μ λΆμ 2μκ° (25%)
QuickSight FILE νμ
μ νμ€μ νκ³
π μ΄κΈ° μν© λΆμ:
- κΈ°μ‘΄ QuickSight λμ보λ: "[monthly] alarm/failure" μ΄μ μ€
- 3κ° λ°μ΄ν°μ
: [Monthly]Alarm, [Monthly]failure_mgmt, [Emart]Monthly_jira
- λ¬Έμ : FILE νμ
β API μ κ·Ό λΆκ°, μλν λΆκ°, νμ₯μ± μ ν
AWS κΈ°μ μ νμ©ν λ°μ΄ν° μΆμΆ κ³Όμ
# 1. QuickSight λμ보λ μ κ·Ό (shared-service νλ‘ν)
aws quicksight describe-dashboard --aws-account-id 463941703341 \
--dashboard-id 851e80f0-5fd7-417c-88b7-03457fc4af67
# 2. λ°μ΄ν°μ
λΆμ λ° μλ³Έ νμΌ μμΉ μΆμ
- [Monthly]Alarm (d877a45a-45bc-40f1-bed5-7c004a49fab7)
- [Monthly]failure_mgmt (f42429f0-b031-446c-a518-b9302777f443)
# 3. μλ CSV λ€μ΄λ‘λ (FILE νμ
μ νκ³)
- Alarm_list_1758007950846.csv (262KB, 1,129건)
- Failure_list_1758007909241.csv (10KB, 75건)
λ°μ΄ν° ꡬ쑰 λΆμ λ° νμ€ν
π μ€μ λ°μ΄ν° μ€ν€λ§ λ°κ²¬
- Alarm λ°μ΄ν° (8κ° μ»¬λΌ): μΌμ, μκ°, AccountGroup, Category, λͺ¨λν°λ§λ©μμ§, λ°μμμΈ, μ ν¨μλ, κ°μ
- Failure λ°μ΄ν° (8κ° μ»¬λΌ): λ°μμΌμ, AccountGroup, Level, 볡ꡬμκ°, λ΄μ©, Link_URL, Category, SLAλμ
π― νμ€ν νμμ¬ν:
- λ μ§ νμ ν΅μΌ (2023-09-01 00:00:00)
- 컬λΌλͺ
μλ¬Έ λ³ν (μΌμ β date_column)
- λ°μ΄ν° νμ
μ΅μ ν (λ¬Έμμ΄ β μ μ ν νμ
)
π 8λ¨κ³ λΆμ κ³Όμ
Step 0: λ°μ΄ν° μν€ν
μ² λ§μ΄κ·Έλ μ΄μ
(κ°μ₯ μκ° μμ)
ν΅μ¬ AWS κΈ°μ : S3, Athena, QuickSight, boto3, pandas, pyarrow
# 1. λ°μ΄ν° λ³ν νμ΄νλΌμΈ ꡬμΆ
- Python pandas: CSV β DataFrame λ³ν
- PyArrow: Parquet νμ μ΅μ ν (70% μ©λ μ μ½)
- νν°μ
ꡬ쑰: year=2024/month=08/ μ€κ³
# 2. S3 λ°μ΄ν° λ μ΄ν¬ ꡬμΆ
- λ²ν·: sac-prd-finops-billing-s3
- ꡬ쑰: alarm_data/, failure_data/, jira_data/
- νν°μ
: year/month κΈ°λ° μ΅μ ν
# 3. Athena ν
μ΄λΈ μμ±
- EXTERNAL TABLE μ μ
- PARTITIONED BY (year, month)
- STORED AS PARQUET μ±λ₯ μ΅μ ν
Step 1-4: λ°μ΄ν° μ κ·Όμ± ν보
- Step 1: λ°μ΄ν° νμ€ νμ
- 1,129건 μλ, 75건 μ₯μ λΆμ
- Step 2-3: CSV β Parquet λ³ν λ° S3 μ
λ‘λ μλν
- Step 4: Athena ν
μ΄λΈ μμ± λ° μΏΌλ¦¬ ν
μ€νΈ
Step 5-8: ν΅μ¬ λΆμ λ° ν΄κ²°λ°©μ
- Step 5: μ 체 νν© νμ
- ERP μμ€ν
81% μ§μ€λ λ°κ²¬
- Step 6: κΈμ¦ μμΈ κ·λͺ
- 8μ 8μΌ λ°°μΉ μ₯μ κ·Όλ³Έ μμΈ
- Step 7: μλΉμ€λ³ μ¬μΈ΅ λΆμ - calyx-review 12λ°° μ¦κ°
- Step 8: ꡬ체μ ν΄κ²°λ°©μ λμΆ - 70% κ°μ λ°©μ
π οΈ AIκ° μμ±ν AWS ν΅μ¬ μ°μΆλ¬Ό
1. AWS μΈνλΌ μλν μ€ν¬λ¦½νΈ (8κ°)
import boto3
import pandas as pd
from datetime import datetime
# AWS μΈμ
μ€μ (shared-service νλ‘ν)
session = boto3.Session(profile_name='shared-service', region_name='ap-northeast-2')
s3_client = session.client('s3')
# λ°μ΄ν° λ³ν: CSV β Parquet (70% μ©λ μ μ½)
df = pd.read_csv('Alarm_list_1758007950846.csv')
df.to_parquet('alarm_data_202508.parquet', index=False)
# S3 νν°μ
μ
λ‘λ
s3_key = f"alarm_data/year=2024/month=08/alarm_data_202408.parquet"
s3_client.upload_file(local_file, 'sac-prd-finops-billing-s3', s3_key)
μ£Όμ μ€ν¬λ¦½νΈ
- λ°μ΄ν° λ³ν:
15_convert_to_parquet.py, 18_step2_convert_to_parquet.py
- S3 μ
λ‘λ:
16_upload_to_s3.py, 19_step3_upload_to_s3.py
- Athena μ°λ:
12_create_athena_tables.py, 20_step4_athena_query_test.py
- λΆμ μ€ν¬λ¦½νΈ:
22_step5_alarm_analysis.py ~ 25_step8_technical_solutions.py
2. Athena ν
μ΄λΈ μμ± SQL (μλ μμ±)
-- AIκ° μ€μ λ°μ΄ν° ꡬ쑰 λΆμ ν μμ±ν μ€ν€λ§
CREATE EXTERNAL TABLE alarm_data (
date_column date,
time_column int,
account_group string,
category string,
monitoring_message string,
cause string,
valid_alarm string,
count int
)
PARTITIONED BY (
year int,
month int
)
STORED AS PARQUET
LOCATION 's3://sac-prd-finops-billing-s3/alarm_data/'
TBLPROPERTIES ('has_encrypted_data'='false');
3. λΆμ λ³΄κ³ μ (8κ°)
- λ¨κ³λ³ λ³΄κ³ μ:
27_step1_data_analysis_report.md ~ 33_step8_technical_solutions_report.md
- μ’
ν© λ³΄κ³ μ:
26_alarm_analysis_report.md, 35_executive_summary.md
- κ΅ν μ 리:
34_journey_lessons_learned.md
π ν΅μ¬ μΈμ¬μ΄νΈ
1. λ°μ΄ν° μ€λΉκ° 80%μ μκ°μ μ°¨μ§
β° μ€μ μκ° λΆλ°°:
- λ°μ΄ν° μ€λΉ (Step 0): 6μκ° (75%)
βββ QuickSight FILE νμ
νκ³ νμ
: 1μκ°
βββ CSV μλ λ€μ΄λ‘λ λ° κ΅¬μ‘° λΆμ: 2μκ°
βββ AWS μν€ν
μ² μ€κ³: 1μκ°
βββ λ³ν μ€ν¬λ¦½νΈ κ°λ° λ° ν
μ€νΈ: 2μκ°
- μ€μ λΆμ (Step 1-8): 2μκ° (25%)
βββ ν¨ν΄ λΆμ λ° μΈμ¬μ΄νΈ λμΆ
βββ ν΄κ²°λ°©μ μ립
2. 80/20 λ²μΉμ νμ€
- π₯ ERP μμ€ν
: μ 체 μλμ 81%
- π calyx-review: μ΅κ·Ό 76건 μ§μ€
- β‘ ALB μ₯μ : 99.8%κ° ERP κ΄λ ¨
- π‘ ν΅μ¬ κ΅ν: μμ μμ€ν
μ΄ λλΆλΆ λ¬Έμ μΌκΈ°
3. μκ° ν¨ν΄μ μ€μμ±
β° μκ°λλ³ μλ ν¨ν΄:
- μ€μ 8-11μ: calyx-review μ§μ€ (47건)
- μ€μ 10-11μ, μ€ν 2μ: λ°°μΉ νλ‘μΈμ€ μ§μ€ (93건)
- μ€ν 1-2μ: 8μ 8μΌ μ₯μ μμ (31건)
π‘ κ΅ν: λ°°μΉ μ€μΌμ€μ΄ μμ€ν
μμ μ± κ²°μ
4. μ°μ ν¨κ³Όμ νκΈλ ₯
π λ¨μΌ μ₯μ μ μ 체 μν₯:
- λ¨μΌ μ₯μ : 8μ 8μΌ ERP λ°°μΉ νλ‘μΈμ€
- μ 체 μν₯: ALB β μ 체 μμ€ν
μλ κΈμ¦
- κ·Όλ³Έ ν΄κ²°: λ°°μΉ μκ° λ³κ²½μΌλ‘ 70% κ°μ κ°λ₯
π ꡬ체μ μ±κ³Ό
π μ λμ κ²°κ³Ό
- μλ κ°μ: 70% μμ (1,129건 β 339건)
- μ©λ μ μ½: 70% (CSV β Parquet)
- λΆμ μκ°: 8μκ°μΌλ‘ μμ λΆμ
- μλν: 35κ° νμΌ μλ μμ±
π― μ μ±μ ν¨κ³Ό
- μμΈ‘ κ°λ₯μ±: ν¨ν΄ κΈ°λ° μ¬μ λμ
- μμ¬κ²°μ νμ§: λ°μ΄ν° κΈ°λ° νλ¨
- μ΄μ ν¨μ¨: μλνλ‘ μΈλ ₯ μ μ½
- μμ€ν
μμ μ±: κ·Όλ³Έ μμΈ ν΄κ²°
π‘ AI νμ© λ°©λ²λ‘
COSTAR νλ μμν¬ μ μ©
- Context: QuickSight FILE νμ
νκ³, 2λ
κ° μΆμ λ λ°μ΄ν°
- Objective: API μ κ·Ό κ°λ₯ν λΆμ νκ²½ ꡬμΆ, 70% μλ κ°μ
- Style: AWS λ€μ΄ν°λΈ μλΉμ€ νμ©, λ¨κ³λ³ 체κ³μ μ κ·Ό
- Tone: λ°μ΄ν° κΈ°λ° κ°κ΄μ λΆμ, μ€ν κ°λ₯ν ꡬ체μ μ루μ
- Audience: κΈ°μ ν (μΈνλΌ κ΅¬μΆ) + κ²½μμ§ (λΉμ¦λμ€ μν©νΈ)
- Response: μλν μ€ν¬λ¦½νΈ, λΆμ λ³΄κ³ μ, κΈ°μ μ루μ
π‘ ν΅μ¬ λ©μμ§
"8μκ° λΆμμΌλ‘ 70% μλ κ°μ λ¬μ±"
μ΄ μ¬λ‘λ AIμ ν¨κ»ν 체κ³μ λ°μ΄ν° λΆμ κ³Όμ μ 보μ¬μ€λλ€. 볡μ‘ν΄ λ³΄μ΄λ μμ€ν
λ¬Έμ λ μ¬λ°λ₯Έ λ°©λ²λ‘ κ³Ό AIμ λμμΌλ‘ λ¨μκ°μ ꡬ체μ ν΄κ²°λ°©μμ λμΆν μ μμ΅λλ€.
ν΅μ¬μ λ¨κ³μ μ κ·Όμ
λλ€. ν λ²μ λͺ¨λ κ²μ ν΄κ²°νλ € νμ§ λ§κ³ , 8λ¨κ³λ‘ λλμ΄ μ²΄κ³μ μΌλ‘ μ κ·Όνλ©΄ λ΅μ μ°Ύμ μ μμ΅λλ€.
π μ°Έκ³ μλ£
- νλ‘μ νΈ ν΄λ:
/Users/emart/Documents/PromptLibrary/alarm/
- ν΅μ¬ νμ΅ μλ£:
34_journey_lessons_learned.md, 35_executive_summary.md
- μμ±: 2025.10.01 (κΈ°λ°: 2025.09.16 μλ/μ₯μ λΆμ)
- AI λꡬ: Amazon Q Developer