애플리케이션 성능 문제를 선제적으로 해결하기 위한 Prometheus와 Grafana 기반의 실시간 모니터링 시스템 구축 방법을 상세히 안내합니다. 데이터 수집부터 시각화까지 전 과정을 다룹니다.
서비스 안정성 확보는 모든 IT 운영 팀의 핵심 과제 중 하나이다. 특히 마이크로서비스 아키텍처나 분산 시스템 환경에서는 복잡도가 증가함에 따라 잠재적인 문제점을 사전에 감지하고 신속하게 대응하는 것이 더욱 중요해지고 있다. 시스템의 상태를 실시간으로 파악하고, 이상 징후 발생 시 즉각적으로 알림을 받을 수 있는 견고한 모니터링 시스템은 이러한 문제 해결의 필수 요소로 작용한다.
본 가이드에서는 오픈소스 모니터링 솔루션의 대표 주자인 Prometheus와 시각화 도구인 Grafana를 활용하여 실시간 애플리케이션 모니터링 시스템을 구축하는 방법을 상세히 다룬다. 데이터 수집부터 저장, 시각화, 그리고 경고 시스템 구성까지 전반적인 과정을 단계별로 제시함으로써, 독자들이 스스로 안정적인 서비스 운영 환경을 구현할 수 있도록 돕고자 한다.
📑 목차
- Prometheus와 Grafana: 핵심 구성 요소 이해
- Prometheus: 시계열 데이터 수집 및 저장
- Grafana: 시계열 데이터 시각화 및 대시보드
- Prometheus 설치 및 설정: 메트릭 수집의 시작
- Prometheus 서버 설치
- Prometheus 설정 파일 (prometheus.yml) 구성
- Node Exporter 설치 및 실행
- Grafana 설치 및 대시보드 구축: 데이터 시각화
- Grafana 서버 설치
- Prometheus 데이터 소스 추가
- 대시보드 구축 및 시각화
- 애플리케이션 메트릭 통합 및 경고 시스템
- 애플리케이션 메트릭 수집
- Alertmanager를 이용한 경고 시스템 구축
- 고급 모니터링 전략 및 최적화
- 커스텀 Exporter 개발
- Prometheus Federation 및 Remote Storage
- Grafana 대시보드 최적화
- 결론: 안정적인 서비스 운영을 위한 여정
Image by RyanMcGuire on Pixabay
Prometheus와 Grafana: 핵심 구성 요소 이해
Prometheus와 Grafana는 현대적인 클라우드 네이티브 환경에서 가장 널리 사용되는 모니터링 스택 중 하나이다. 이 두 도구는 각각의 핵심 기능을 통해 상호 보완적인 관계를 형성하며, 강력한 옵저버빌리티(Observability) 환경을 제공한다.
Prometheus: 시계열 데이터 수집 및 저장
Prometheus는 SoundCloud에서 개발된 오픈소스 모니터링 시스템으로, 주로 시계열 데이터를 수집하고 저장하는 데 특화되어 있다. 그 특징은 다음과 같다.
- Pull 기반 아키텍처: Prometheus 서버가 모니터링 대상(Target)으로부터 메트릭을 주기적으로 가져오는(scrape) 방식이다. 이는 복잡한 에이전트 설치 없이도 유연한 모니터링이 가능하다는 장점을 가진다.
- 다차원 데이터 모델: 메트릭 이름과 키-값 쌍의 레이블(label)을 통해 데이터를 식별한다. 이를 통해 특정 인스턴스, 서비스, 환경 등에 대한 상세한 필터링 및 집계가 용이하다.
- 강력한 쿼리 언어(PromQL): PromQL은 시계열 데이터를 실시간으로 쿼리하고, 집계하며, 다양한 연산을 수행할 수 있는 유연하고 강력한 언어이다. 이를 통해 복잡한 모니터링 조건을 정의할 수 있다.
- 내장 경고 시스템: Alertmanager와 연동하여 정의된 임계값을 초과하거나 특정 조건이 만족될 때 이메일, Slack, PagerDuty 등 다양한 채널로 알림을 보낼 수 있다.
Grafana: 시계열 데이터 시각화 및 대시보드
Grafana는 다양한 데이터 소스로부터 데이터를 가져와 아름답고 기능적인 대시보드를 구축할 수 있는 오픈소스 시각화 도구이다. Grafana는 Prometheus가 수집한 데이터를 사용자 친화적인 형태로 변환하여 보여주는 역할을 수행한다.
- 다양한 데이터 소스 지원: Prometheus 외에도 InfluxDB, Elasticsearch, MySQL, PostgreSQL 등 광범위한 데이터 소스를 지원한다.
- 유연한 대시보드 구축: 다양한 패널(그래프, 통계, 테이블, 히트맵 등)을 제공하며, 드래그 앤 드롭 방식으로 손쉽게 대시보드를 구성할 수 있다.
- 템플릿 변수: 동적인 대시보드를 생성할 수 있게 하여, 하나의 대시보드로 여러 인스턴스나 서비스의 데이터를 효율적으로 탐색할 수 있도록 돕는다.
- 경고 기능 통합: Grafana 자체적으로도 대시보드 패널에 기반한 경고를 설정하고 관리할 수 있다.
이 두 시스템은 다음과 같이 역할을 분담하며 시너지를 창출한다.
| 측면 | Prometheus | Grafana |
|---|---|---|
| 주요 역할 | 메트릭 수집, 시계열 데이터 저장, 경고 규칙 평가 | 데이터 시각화, 대시보드 구축, 실시간 모니터링 인터페이스 제공 |
| 데이터 처리 | Pull 방식 메트릭 수집, PromQL을 통한 쿼리 | 데이터 소스로부터 쿼리 결과 시각화 |
| 강점 | 강력한 시계열 데이터 모델링, 효율적인 저장, 유연한 쿼리 | 다양한 시각화 옵션, 사용자 친화적인 대시보드 편집, 폭넓은 데이터 소스 지원 |
| 결론 | 모니터링 데이터의 '뇌' 역할 | 모니터링 데이터의 '눈' 역할 |
Prometheus 설치 및 설정: 메트릭 수집의 시작
Prometheus를 설치하고 설정하는 과정은 모니터링 시스템 구축의 첫걸음이다. 여기서는 가장 일반적인 리눅스 환경에서의 설치 및 기본적인 설정을 다룬다.
Prometheus 서버 설치
Prometheus 바이너리는 공식 웹사이트에서 다운로드할 수 있다. 다음은 기본적인 설치 과정이다.
# Prometheus 최신 버전 다운로드 (버전은 변경될 수 있음)
wget https://github.com/prometheus/prometheus/releases/download/v2.x.x/prometheus-2.x.x.linux-amd64.tar.gz
# 압축 해제
tar xvfz prometheus-2.x.x.linux-amd64.tar.gz
# 디렉토리 이동 및 파일 정리
cd prometheus-2.x.x.linux-amd64
mv prometheus /usr/local/bin/
mv promtool /usr/local/bin/
mv console_libraries /etc/prometheus/
mv consoles /etc/prometheus/
mv prometheus.yml /etc/prometheus/
설치 후에는 /etc/prometheus/prometheus.yml 파일을 생성하거나 수정하여 Prometheus의 동작을 정의한다.
Prometheus 설정 파일 (prometheus.yml) 구성
prometheus.yml 파일은 Prometheus가 어떤 대상을 모니터링하고, 어떻게 데이터를 수집할지 정의하는 핵심 파일이다.
global:
scrape_interval: 15s # 기본 스크랩 주기 (15초마다 메트릭 수집)
evaluation_interval: 15s # 경고 규칙 평가 주기
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093 # Alertmanager가 있다면 여기에 추가
rule_files:
# - "first_rules.yml" # 경고 규칙 파일을 여기에 추가
scrape_configs:
- job_name: 'prometheus' # Prometheus 자체 모니터링
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090'] # Prometheus 서버의 HTTP API 포트
- job_name: 'node_exporter' # 서버 OS 메트릭 모니터링
static_configs:
- targets: [':9100'] # Node Exporter가 실행되는 서버 IP 및 포트
위 설정에서 scrape_interval은 Prometheus가 타겟으로부터 메트릭을 가져오는 주기를 의미하며, job_name은 모니터링 대상 그룹을 식별하는 데 사용된다. targets에는 모니터링할 서비스의 주소와 포트를 명시한다. 예를 들어, 리눅스 서버의 CPU 사용량, 메모리, 디스크 I/O 등을 모니터링하려면 해당 서버에 Node Exporter를 설치하고 9100번 포트를 통해 메트릭을 노출해야 한다.
Node Exporter 설치 및 실행
Node Exporter는 서버의 하드웨어 및 OS 관련 메트릭을 Prometheus가 수집할 수 있도록 노출하는 역할을 한다.
# Node Exporter 최신 버전 다운로드
wget https://github.com/prometheus/node_exporter/releases/download/v1.x.x/node_exporter-1.x.x.linux-amd64.tar.gz
# 압축 해제
tar xvfz node_exporter-1.x.x.linux-amd64.tar.gz
# 실행 파일 이동
mv node_exporter-1.x.x.linux-amd64/node_exporter /usr/local/bin/
# 서비스 등록 (systemd 사용 예시)
sudo vi /etc/systemd/system/node_exporter.service
node_exporter.service 파일 내용:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
# 사용자 및 그룹 생성 (필요시)
sudo useradd -rs /bin/false node_exporter
# 서비스 활성화 및 시작
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
Node Exporter가 9100번 포트에서 실행되면, Prometheus 서버는 prometheus.yml에 설정된 targets를 통해 해당 메트릭을 수집하기 시작한다.
Grafana 설치 및 대시보드 구축: 데이터 시각화
Prometheus가 데이터를 성공적으로 수집하고 있다면, 이제 Grafana를 통해 이 데이터를 시각화할 차례이다.
Grafana 서버 설치
Grafana는 다양한 운영체제에 설치할 수 있으며, 여기서는 Debian/Ubuntu 환경을 기준으로 설명한다.
# Grafana GPG 키 추가
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# Grafana APT 저장소 추가
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# 패키지 목록 업데이트 및 Grafana 설치
sudo apt-get update
sudo apt-get install grafana
# Grafana 서비스 시작 및 활성화
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Grafana는 기본적으로 3000번 포트에서 웹 인터페이스를 제공한다. 브라우저에서 http://<Grafana_server_ip>:3000으로 접속하여 초기 설정(기본 사용자명/비밀번호: admin/admin)을 진행할 수 있다.
Prometheus 데이터 소스 추가
Grafana에 접속한 후, Prometheus를 데이터 소스로 추가해야 한다.
- 좌측 메뉴에서 'Configuration' (톱니바퀴 아이콘) -> 'Data sources'를 선택한다.
- 'Add data source' 버튼을 클릭하고, 'Prometheus'를 선택한다.
- 'HTTP' 섹션의 'URL' 필드에 Prometheus 서버의 주소와 포트(예:
http://localhost:9090또는http://<Prometheus_server_ip>:9090)를 입력한다. - 'Save & Test' 버튼을 클릭하여 연결을 확인한다. 'Data source is working' 메시지가 표시되면 성공이다.
대시보드 구축 및 시각화
데이터 소스 연결이 완료되면, 이제 Prometheus에서 수집된 데이터를 활용하여 대시보드를 구축할 수 있다.
- 좌측 메뉴에서 'Create' (플러스 아이콘) -> 'Dashboard'를 선택한다.
- 'Add new panel'을 클릭한다.
- 'Query' 탭에서 방금 추가한 Prometheus 데이터 소스를 선택한다.
- 'Metrics browser' 또는 PromQL을 직접 사용하여 원하는 메트릭을 쿼리한다. 예를 들어, Node Exporter의 CPU 사용률을 보려면
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)와 같은 쿼리를 입력할 수 있다. - 'Visualization' 탭에서 그래프, 게이지, 스탯 등 원하는 시각화 타입을 선택하고, 패널 옵션을 조정하여 가독성을 높인다.
- 패널을 저장하고, 필요한 다른 패널들을 추가하여 완벽한 대시보드를 구성한다.
Grafana는 수많은 사전 제작된 대시보드 템플릿을 제공한다. Grafana Labs의 공식 웹사이트나 커뮤니티에서 Node Exporter Full 대시보드(ID: 1860)와 같은 인기 대시보드를 다운로드하여 쉽게 적용할 수 있다. 이는 시간을 절약하고 모범 사례를 따르는 데 큰 도움이 된다.
Image by WebTechExperts on Pixabay
애플리케이션 메트릭 통합 및 경고 시스템
서버 인프라 메트릭뿐만 아니라, 실제 애플리케이션의 성능 메트릭을 수집하고 이에 대한 경고를 설정하는 것은 실시간 모니터링의 핵심이다.
애플리케이션 메트릭 수집
Prometheus는 다양한 언어와 프레임워크를 위한 클라이언트 라이브러리를 제공한다. 이를 통해 개발자는 애플리케이션 코드 내에서 커스텀 메트릭을 정의하고 노출할 수 있다. 예를 들어, HTTP 요청 수, 응답 시간, 특정 API 호출 횟수, 오류 발생률 등을 측정할 수 있다.
다음은 Python Flask 애플리케이션에서 Prometheus 클라이언트 라이브러리를 사용하여 메트릭을 노출하는 간단한 예시이다.
# app.py
from flask import Flask, request
from prometheus_client import generate_latest, Counter, Histogram, Gauge, make_wsgi_app
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from wsgiref.simple_server import make_server
app = Flask(__name__)
# 커스텀 메트릭 정의
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP Requests', ['method', 'endpoint'])
REQUEST_LATENCY = Histogram('http_request_duration_seconds', 'HTTP Request Latency', ['method', 'endpoint'])
IN_PROGRESS_REQUESTS = Gauge('http_requests_in_progress', 'Number of in-progress HTTP requests')
@app.route('/')
def hello_world():
method = request.method
endpoint = '/'
IN_PROGRESS_REQUESTS.inc() # 요청 시작 시 증가
with REQUEST_LATENCY.labels(method=method, endpoint=endpoint).time():
# 실제 애플리케이션 로직
response = "Hello, World!"
REQUEST_COUNT.labels(method=method, endpoint=endpoint).inc() # 요청 완료 시 증가
IN_PROGRESS_REQUESTS.dec() # 요청 완료 시 감소
return response
# Prometheus 메트릭 엔드포인트 추가
# /metrics 경로로 접속하면 Prometheus 메트릭이 노출됨
application = DispatcherMiddleware(app, {
'/metrics': make_wsgi_app()
})
if __name__ == '__main__':
with make_server('', 5000, application) as httpd:
print("Serving on port 5000...")
httpd.serve_forever()
이 애플리케이션을 실행하고 prometheus.yml에 새로운 job_name과 targets를 추가하면, Prometheus는 애플리케이션 메트릭을 수집할 수 있다.
# prometheus.yml에 추가
scrape_configs:
# ... 기존 설정 ...
- job_name: 'my_flask_app'
static_configs:
- targets: [':5000'] # 애플리케이션 서버 IP 및 포트
Alertmanager를 이용한 경고 시스템 구축
Prometheus는 Alertmanager와 연동하여 경고를 보낸다. Alertmanager는 Prometheus로부터 받은 경고를 중복 제거, 그룹화, 라우팅하여 적절한 수신자에게 전달하는 역할을 한다.
Alertmanager 설치
Prometheus와 유사하게 Alertmanager도 바이너리 다운로드 후 설치한다.
# Alertmanager 최신 버전 다운로드
wget https://github.com/prometheus/alertmanager/releases/download/v0.x.x/alertmanager-0.x.x.linux-amd64.tar.gz
# 압축 해제 및 이동
tar xvfz alertmanager-0.x.x.linux-amd64.tar.gz
cd alertmanager-0.x.x.linux-amd64
mv alertmanager /usr/local/bin/
mv amtool /usr/local/bin/
mv alertmanager.yml /etc/alertmanager/
/etc/alertmanager/alertmanager.yml 파일을 생성 또는 수정하여 수신자 및 라우팅 규칙을 정의한다.
Alertmanager 설정 파일 (alertmanager.yml)
다음은 Slack으로 알림을 보내는 간단한 alertmanager.yml 예시이다.
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'job']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
slack_configs:
- channel: '#alerts' # Slack 채널 이름
api_url: 'https://hooks.slack.com/services/TXXXXXXXX/BXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX' # Slack Webhook URL
send_resolved: true
title: '{{ .CommonLabels.alertname }} ({{ .Status | toUpper }})'
text: '{{ .CommonAnnotations.summary }}\n{{ .CommonAnnotations.description }}'
이후 Prometheus 서버의 prometheus.yml에 Alertmanager 주소를 설정해야 한다.
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- ':9093' # Alertmanager 서버 IP 및 포트
Prometheus 경고 규칙 (rule_files) 정의
Prometheus는 rule_files에 정의된 규칙을 기반으로 경고를 생성한다. /etc/prometheus/rules.yml과 같은 파일을 생성한다.
# /etc/prometheus/rules.yml
groups:
- name: general.rules
rules:
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m # 5분 이상 이 조건이 지속될 경우 경고 발생
labels:
severity: critical
annotations:
summary: "CPU 사용률이 높습니다 (인스턴스: {{ $labels.instance }})"
description: "인스턴스 {{ $labels.instance }}의 CPU 사용률이 5분 동안 80%를 초과했습니다. 현재 값: {{ $value }}%"
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "인스턴스 다운 (인스턴스: {{ $labels.instance }})"
description: "Prometheus가 1분 동안 인스턴스 {{ $labels.instance }}에서 메트릭을 가져올 수 없습니다."
마지막으로, prometheus.yml에 이 경고 규칙 파일을 포함시킨다.
# prometheus.yml
rule_files:
- "/etc/prometheus/rules.yml" # 경고 규칙 파일을 여기에 추가
Prometheus와 Alertmanager를 재시작하면, 정의된 규칙에 따라 경고가 발생했을 때 Alertmanager를 통해 알림을 받을 수 있다.
Image by Tomasz_Mikolajczyk on Pixabay
고급 모니터링 전략 및 최적화
기본적인 모니터링 시스템 구축 외에도, 시스템의 복잡성과 규모가 커질수록 몇 가지 고급 전략과 최적화 기법을 고려해야 한다.
커스텀 Exporter 개발
Prometheus는 다양한 공식 Exporter를 제공하지만, 때로는 특정 레거시 시스템이나 고유한 애플리케이션 로직에서만 얻을 수 있는 메트릭이 필요할 수 있다. 이 경우, 직접 커스텀 Exporter를 개발하여 Prometheus가 수집할 수 있는 형태로 메트릭을 노출할 수 있다. Python, Go 등 다양한 언어의 Prometheus 클라이언트 라이브러리를 활용하면 비교적 쉽게 개발이 가능하다. 예를 들어, 특정 데이터베이스의 쿼리 지연 시간이나, 외부 API 호출 성공률 등을 커스텀 메트릭으로 노출할 수 있다.
Prometheus Federation 및 Remote Storage
단일 Prometheus 서버가 처리하기 어려운 대규모 환경에서는 Prometheus Federation을 통해 여러 Prometheus 서버의 메트릭을 중앙 Prometheus 서버로 통합할 수 있다. 이는 고가용성 및 스케일 아웃 전략의 일환으로 활용될 수 있다. 또한, Prometheus의 로컬 저장소는 장기 보관에 적합하지 않으므로, Thanos, Cortex와 같은 솔루션을 활용하여 S3와 같은 객체 스토리지에 데이터를 장기 보관하는 Remote Storage 전략을 고려할 수 있다. 이는 수개월 또는 수년간의 과거 데이터 분석을 가능하게 한다.
Grafana 대시보드 최적화
- 템플릿 변수 활용: 여러 서비스 인스턴스나 환경을 하나의 대시보드에서 효율적으로 전환하며 볼 수 있도록 템플릿 변수를 적극적으로 활용한다. 예를 들어, 서버 IP나 서비스 이름을 드롭다운 메뉴로 선택하여 해당 인스턴스의 데이터만 볼 수 있게 구성할 수 있다.
- Row 및 Panel 구성: 관련 있는 지표들을 그룹화하여 Row로 묶고, 각 Panel의 시각화 타입을 데이터의 특성에 맞게 선택한다. 예를 들어, 시계열 데이터는 Graph 패널, 현재 상태는 Stat 패널, 이벤트 로그는 Table 패널을 사용하는 것이 효과적이다.
- 어노테이션 및 타임 시리즈 오버라이드: 배포 이벤트나 중요한 시스템 변경 사항을 어노테이션으로 기록하여 성능 변화의 원인을 쉽게 파악할 수 있다. 특정 데이터 시리즈에 대해 색상, 선 스타일 등을 변경하여 시각적 강조를 할 수 있다.
이러한 고급 전략과 최적화 기법을 통해 모니터링 시스템은 단순한 데이터 수집을 넘어, 서비스의 안정성과 효율성을 극대화하는 데 기여할 수 있다.
결론: 안정적인 서비스 운영을 위한 여정
지금까지 Prometheus와 Grafana를 활용하여 실시간 애플리케이션 모니터링 시스템을 구축하는 전반적인 과정을 살펴보았다. Prometheus를 통한 메트릭 수집 및 저장, Grafana를 통한 시각화, 그리고 Alertmanager를 통한 경고 시스템 구성은 현대적인 IT 환경에서 서비스 안정성을 확보하기 위한 필수적인 요소이다.
핵심적으로, 우리는 다음을 수행하였다.
- Prometheus와 Grafana의 역할과 상호 보완 관계를 이해하였다.
- Prometheus 서버와 Node Exporter를 설치하고
prometheus.yml을 구성하여 서버 인프라 메트릭을 수집하였다. - Grafana 서버를 설치하고 Prometheus를 데이터 소스로 추가하여 수집된 데이터를 시각화하는 대시보드를 구축하였다.
- 애플리케이션 코드 내에 커스텀 메트릭을 추가하는 방법을 알아보고, Alertmanager를 활용한 경고 시스템을 구성하였다.
- 커스텀 Exporter, Federation, Remote Storage, 대시보드 최적화와 같은 고급 모니터링 전략을 간략히 살펴보았다.
이 가이드에서 제시된 내용은 모니터링 시스템 구축의 시작점이다. 실제 운영 환경에서는 서비스의 특성과 규모에 맞춰 더욱 심층적인 설정과 최적화가 요구될 수 있다. 하지만 본 가이드를 통해 기본적인 모니터링 인프라를 성공적으로 구축함으로써, 여러분의 서비스가 잠재적인 문제에 선제적으로 대응하고 안정적인 운영을 지속하는 데 큰 도움이 될 것으로 판단된다.
모니터링 시스템 구축에 대한 여러분의 경험이나 궁금한 점이 있다면 아래 댓글을 통해 공유해주시기 바란다. 여러분의 의견은 더 나은 시스템 구축을 위한 소중한 자산이 될 것이다.
📌 함께 읽으면 좋은 글
- [생산성 자동화] Git Hooks로 개발 생산성 극대화: 로컬에서 코드 품질과 자동화 구축 전략
- [튜토리얼] Next.js 프로젝트에 TypeScript, ESLint, Prettier 완벽 설정 가이드
- [이슈 분석] AI 시대 개발자 커리어 전환 전략: 직무 변화와 필수 역량 분석
이 글이 도움이 되셨다면 공감(♥)과 댓글로 응원해 주세요!
궁금한 점이나 다루었으면 하는 주제가 있다면 댓글로 남겨주세요.
'튜토리얼' 카테고리의 다른 글
| Serverless Framework로 AWS Lambda API 구축: 시작부터 배포까지 완벽 가이드 (0) | 2026.04.29 |
|---|---|
| Playwright로 웹 애플리케이션 E2E 테스트 환경 구축 및 자동화 가이드 (0) | 2026.04.27 |
| Docker Compose 활용: 다중 서비스 로컬 개발 환경 효율적으로 구축하는 가이드 (1) | 2026.04.26 |
| Next.js 프로젝트에 TypeScript, ESLint, Prettier 완벽 설정 가이드 (1) | 2026.04.25 |
| AWS Lambda & API Gateway로 서버리스 REST API 구축, 완벽 가이드! (0) | 2026.04.25 |