https://www.youtube.com/watch?v=Jg3FFBLyhK0
오전 수업 집중력 이슈로 API 이해를 위해 유튜브를 찾아보았다...
API (Application Programming Interface)란?
API는 프로그램과 프로그램이 소통하는 접점(Interface) 이다.
1. Interface란?
- UI (User Interface): 사용자가 프로그램과 소통하는 접점.
- API (Application Programming Interface): 응용 프로그램(앱, 소프트웨어) 간 소통을 위한 접점.
2. API의 역할
- 프로그램이 다른 프로그램의 기능을 사용할 수 있도록 제공하는 규칙(명령어, 데이터 형식 등).
- 예: HTTP API는 인터넷을 통해 데이터를 요청(Request)하고 응답(Response)을 받는 방식.
3. API 구조
- 백엔드 (서버, 제공자): 데이터 저장(DB 서버), API 서버 → 데이터 제공
- 프론트엔드 (클라이언트, 요청자): 앱, 웹사이트 → API를 통해 데이터 요청 (ex. 날씨 정보 가져오기)
- 요청(Request) → 응답(Response) → 데이터 표시(UI)
- API는 데이터를 주고받는 "중간 연결자" 역할을 함.
4. API 종류
- Private API: 내부 시스템용 (예: 마케팅팀이 내부 데이터 분석을 위해 API 사용).
- Public/Open API: 누구나 사용할 수 있는 API (예: 날씨 API, 구글 지도 API).
5. API의 형태
- HTTP API (REST API, GraphQL): 웹을 통해 데이터를 주고받음.
- 라이브러리 API (Class, Function 제공): 개발자가 코드에서 직접 활용할 수 있는 기능. (예: Python의 Pandas 라이브러리 API)
- 기업들이 API 공개하는 이유:
정부를 비롯한 다양한 기업들이 API를 공개하고 있다. 플랫폼 기업으로 성공하고 플랫폼 시장을 선점하기 위해선 외부 개발자들의 참여가 중요하다. 개발자들을 모을 수 있는 것은 API이며, 이를 공개함으로써 시장을 선점할 수 있기 때문이다.
출처 : IT조선(https://it.chosun.com)/)
- 데이터 수집 과정: 데이터를 확보하는 대표적인 방식
1 API 활용 → 실시간 데이터 요청 (예: Google Ads API, Twitter API)
2 CSV 파일 다운로드 → 정적인 데이터 저장 후 분석
3 DB(SQL)에서 조회 → 대량의 데이터를 효율적으로 관리
복습 노트
1 API 구조
API를 사용하여 데이터를 주고받는 과정
- 클라이언트(사용자 또는 프로그램)가 API를 요청 → URL을 통해 서버로 데이터 요청
- 서버가 요청을 처리하고 데이터베이스(DB)에서 정보를 가져옴
- 서버가 JSON 형태로 데이터를 응답하여 클라이언트에게 전달
- 클라이언트가 데이터를 받아 활용 (분석, 시각화, 자동화 등)
🔹 (1) URL & 엔드포인트 → API 요청을 보내는 주소
🔹 (2) SDK & Class & 함수 → API 요청을 쉽게 만들기 위한 도구
🔹 (3) JSON → API 응답 데이터 형식
🔹 (4) Linux → API 서버를 실행하는 환경
🔹 (5) Google Ads API (예시) → 실제 데이터 제공
▼ 추가 설명
-SDK, Class, 함수 (API 요청을 쉽게 만들기 위한 도구):
- API를 직접 호출하려면 HTTP 요청을 직접 보내야 하지만, SDK를 사용하면 쉽게 API를 호출할 수 있음
- SDK에는 클래스(Class)와 함수(Function) 가 포함되어 있음
-JSON (API 응답 데이터 형식)
- API는 데이터를 전달할 때 JSON(JavaScript Object Notation) 형식을 주로 사용
- JSON은 가볍고 사람이 읽기 쉬운 데이터 포맷
- 데이터를 키-값(JSON) 형태로 제공
2 URL과 URI 차이
- URL (Uniform Resource Locator) → 특정 웹페이지 주소
- 예) https://example.com/api/users
- URI (Uniform Resource Identifier) → 리소스를 식별하는 고유한 값 (URL 포함)
- 예) /api/users, /images/logo.png
URL은 URI의 한 종류이며, 전체 주소를 포함하는 개념!
- API는 특정 URL(엔드포인트)를 통해 요청을 보냄
- 사용자가 요청을 보내면, 서버가 해당 요청을 처리하여 응답
3 API 키 (API Key)
API 키 (API Key) → API 사용을 인증하는 고유한 키
API를 사용할 때 보안이 중요하며, 다른 사람과 공유하면 안 됨!
📌 보안 방법
- API 키를 환경 변수로 관리 (소스 코드에 노출 금지)
- 인증 방식 적용 (OAuth, JWT 등)
- Rate Limit 설정 (요청 횟수 제한)
4 API 활용 사례
- AI 추천 API 활용 가능
✔ OpenAI API → AI 기반 콘텐츠 생성 및 데이터 분석
✔ AI 추천 시스템 → 고객 맞춤형 제품 추천
- API 자동화 & 데이터 기반 의사 결정
✔ 광고 API → Google Ads API, Facebook Marketing API
✔ CRM API → HubSpot API, Salesforce API
✔ 데이터 분석 API → Google Analytics API
Flask 개념 & 동작 구조
1️⃣ Flask란?
✔ Python 기반의 경량 웹 프레임워크
✔ 웹 애플리케이션 & API 서버를 빠르고 간단하게 개발 가능
✔ 웹 서버(WS) + 애플리케이션 서버(WAS) 역할 수행
역할 설명
1. 웹 서버 (WS, Web Server) | 사용자의 요청(Request) 처리 & HTML, CSS, JS 반환 |
2. 애플리케이션 서버 (WAS, Web Application Server) | 비즈니스 로직 수행 & DB 연결 |
3. 데이터베이스(DBMS) 연동 | MySQL, PostgreSQL 등과 연결 & SQL 실행 |
2️⃣ Flask와 API의 관계
- Flask는 웹 애플리케이션을 개발하는 프레임워크
- Flask를 이용해 API 서버를 만들 수 있음 (예: /api/users 엔드포인트 제공)
- 클라이언트(웹, 모바일 앱)가 Flask API를 호출하면 Flask가 JSON 데이터를 응답
- Flask는 API뿐만 아니라 HTML 페이지도 반환 가능
3️⃣ Flask의 동작 과정 (Request → Response)
📌 예시: 사용자가 /api/users 요청할 때
- 클라이언트(사용자) → /api/users 요청 (HTTP Request)
- Flask(WAS) → MySQL에 데이터 요청 (DB(MySQL)와 연결**,** SQL 실행)
- DBMS(MySQL) → SELECT * FROM users 실행 후 데이터 반환
- Flask → 받은 데이터를 JSON으로 변환
- Flask(WAS) → 웹 서버(WS) → 클라이언트 로 응답 전송
- 클라이언트(사용자) → JSON 데이터를 받아 화면에 표시
✔ Request(요청) → WAS(처리) → DB(데이터 조회) → Response(응답 반환) → 클라이언트 표시
4️⃣ Flask 예제 코드 (Flask + MySQL 연동) (app.py)
# Flask 웹 애플리케이션 프레임워크
# JSON 응답을 위한 jsonify, HTML 렌더링을 위한 render_template 가져옴
from flask import Flask, jsonify, request, render_template
import mysql.connector # MySQL(MariaDB)과 Python 간의 연결을 위한 모듈
# Flask 애플리케이션 객체 생성
app = Flask(__name__)
# 📌 1️⃣ MariaDB 연결 설정
# 데이터베이스 접속을 위한 설정 정보를 딕셔너리 형태로 저장
# 실제 서비스에서는 비밀번호와 같은 민감한 정보는 환경 변수 또는 설정 파일로 관리하는 것이 보안적으로 안전함
db_config = {
"host": "localhost", # 데이터베이스 서버 주소 (로컬호스트 사용)
"user": "gabkeun", # 데이터베이스 접속 계정
"password": "1234", # 데이터베이스 접속 비밀번호 (보안상 환경변수 사용 권장)
"database": "backend" # 사용할 데이터베이스 이름
}
# 📌 2️⃣ 데이터베이스 연결 함수
# - 데이터베이스 연결을 생성하는 함수로, 필요할 때 호출하여 새로운 연결을 생성함
def get_db_connection():
return mysql.connector.connect(**db_config) # db_config의 설정 값을 언패킹하여 MySQL 연결 객체를 반환
# 📌 3️⃣ API 엔드포인트: 모든 마케팅 데이터 조회
"""
📌 모든 마케팅 데이터를 조회하는 API
- 데이터베이스에서 `growth_marketing` 테이블의 모든 데이터를 가져와 JSON 형식으로 반환
"""
@app.route('/growth-marketing', methods=['GET']) # `/growth-marketing` 경로에서 GET 요청을 처리
def get_growth_marketing_data():
conn = get_db_connection() # 데이터베이스 연결 객체 생성
cursor = conn.cursor(dictionary=True) # 데이터를 딕셔너리 형태로 반환하는 커서 생성
cursor.execute("SELECT * FROM growth_marketing") # SQL 실행: growth_marketing 테이블의 모든 데이터 조회
data = cursor.fetchall() # 조회된 모든 데이터를 리스트 형태로 가져옴
cursor.close() # 커서 종료
conn.close() # 데이터베이스 연결 종료
return jsonify(data) # JSON 형식으로 응답 반환
# 📌 4️⃣ API 엔드포인트: 특정 마케팅 채널 데이터 조회
"""
📌 특정 마케팅 채널 데이터를 조회하는 API
- URL에서 전달된 `channel` 값을 사용하여 해당 마케팅 채널의 데이터만 조회
- 데이터가 없을 경우 404 에러 반환
"""
@app.route('/growth-marketing/<channel>', methods=['GET']) # `<channel>`에 해당하는 특정 채널 데이터 조회
def get_marketing_by_channel(channel):
conn = get_db_connection()
cursor = conn.cursor(dictionary=True)
# SQL 실행: 특정 마케팅 채널의 데이터를 조회 (SQL 인젝션 방지를 위해 %s 사용)
cursor.execute("SELECT * FROM growth_marketing WHERE channel = %s", (channel,))
data = cursor.fetchall() # 결과 가져오기
cursor.close()
conn.close()
if not data: # 해당 채널 데이터가 없는 경우
return jsonify({"error": "해당 마케팅 채널의 데이터가 없습니다."}), 404 # 404 상태 코드 반환
return jsonify(data) # JSON 형식으로 응답 반환
# 📌 5️⃣ 웹 페이지 렌더링 엔드포인트
@app.route('/') # 루트 경로('/')에서 GET 요청을 처리
def index():
"""
📌 웹 페이지 렌더링 (index.html 반환)
- `/` 경로로 접속하면 `index.html`을 렌더링하여 사용자에게 반환
"""
return render_template('index.html') # `templates/index.html` 파일을 찾아 렌더링하여 응답
# 📌 6️⃣ 애플리케이션 실행
if __name__ == '__main__':
"""
📌 Flask 애플리케이션 실행
- `host='0.0.0.0'` → 모든 네트워크 인터페이스에서 접속 가능
- `port=5001` → 5001 포트에서 실행
- `debug=True` → 개발 중 디버깅 기능 활성화 (배포 시 False로 설정)
"""
app.run(host='0.0.0.0', port=5001, debug=True)
▼ 추가 설명
코드 흐름 (cursor 역할 포함)
📌 Flask 서버 실행 → 클라이언트 요청 → DB 조회 → 응답 반환 흐름
1️⃣ 클라이언트(브라우저, 앱)가 /growth-marketing/SNS 요청
2️⃣ Flask 서버(app)가 해당 요청을 get_marketing_by_channel(channel) 함수로 전달
3️⃣ get_db_connection()으로 MariaDB 연결
4️⃣ cursor 객체 생성 (cursor = conn.cursor(dictionary=True))
5️⃣ cursor.execute("SELECT * FROM growth_marketing WHERE channel = %s", (channel,))
SQL 실행 → channel 값을 사용하여 데이터 조회
6️⃣ cursor.fetchall() → SQL 실행 결과를 가져옴
7️⃣ cursor.close(), conn.close() → 리소스 정리
8️⃣ Flask가 jsonify(data)를 실행하여 JSON 응답 반환
9️⃣ 클라이언트(브라우저, 앱)가 JSON 데이터를 받아 화면에 표시
✔ conn.cursor()는 MySQL(MariaDB)과 연결된 데이터베이스에서 SQL을 실행하는 객체(커서)를 생성하는 함수
✔ cursor.execute(SQL문)을 실행하면 데이터베이스에서 결과를 가져오지만, 메모리에 로드된 상태는 아님
✔ cursor.fetchall()을 호출해야 모든 데이터를 리스트(list) 형태로 가져옴
5️⃣ Flask 프로젝트 폴더 구조
Flask 프로젝트는 웹 애플리케이션을 구성하는 파일을 구조적으로 배치
- Flask 프로젝트 폴더 구조
lab/site1
│
├── app.py # Flask 실행 파일
├── templates/ # HTML 템플릿 저장
│ ├── index.html
│ ├── view.html
│ └── write.html
├── static/ # CSS, JS, 이미지 저장
│ ├── common.css
│ └── styles.css
│
└── uploads/
- lab/: 프로젝트의 루트 디렉토리입니다.
- app.py: Flask 애플리케이션의 주요 파일입니다. 여기에서 라우트와 핸들러를 정의합니다. ( Flask 애플리케이션 실행 & 요청 처리)
- templates/: HTML 템플릿 파일을 저장하는 디렉토리입니다.
- index.html: 게시글 목록을 보여주는 메인 페이지.
- view.html: 게시글 상세보기 페이지.
- write.html: 새 게시글 작성 페이지.
- static/: 정적 파일 (CSS, JS, 이미지)을 저장하는 디렉토리입니다.
- styles.css: 스타일 시트를 저장합니다.
- common.css: 스타일 시트를 저장합니다.
- uploads/: 업로드된 이미지 파일을 저장하는 디렉토리입니다
2. Flask 실행
python3 app.py
3. 브라우저에서 확인
- 웹 인터페이스:
- http://127.0.0.1:5001/
- JSON 데이터 조회 API:
- http://127.0.0.1:5001/growth-marketing
6️⃣ Flask와 app.py 관계
: app.py는 Flask를 실행하는 핵심 파일
Flask | 웹 애플리케이션 개발을 위한 프레임워크 |
app.py | Flask를 실행하는 코드가 담긴 파일 |
✔ Flask = 요리를 할 수 있는 주방
✔ app.py = 주방을 이용해 직접 요리를 만드는 셰프
즉, Flask는 도구이고, app.py 는 그걸 사용해서 웹 애플리케이션을 동작시키는 파일
왜 SSH(파일질라)로 전송하나?
GCP의 VM 인스턴스는 클라우드 서버라서 내 컴퓨터 파일을 직접 실행할 수 없음
그래서 FTP(파일질라)를 사용해서 app.py를 GCP 서버로 보내야 함
7️⃣ Flask 배포 & 운영 (GCP 예시)
📌 GCP에서 Flask 서버를 운영하는 과정
- GCP VM(가상 머신)에서 Flask 설치 & 실행
- Flask 앱(main.py)을 실행하여 API 서비스 시작
- 웹서버(NGINX, Apache) 설정 → 외부 요청을 Flask로 전달
- DB(MySQL, PostgreSQL) 연결하여 데이터 관리
- 도메인 설정 → 실제 URL로 접속 가능하게 배포
✔ Flask는 로컬에서 실행할 수도 있고, GCP 같은 클라우드 환경에서 배포 가능
API의 역할 in 그로스 마케팅
1. API의 역할
- 그로스 마케팅(Growth Marketing) → 데이터 기반으로 고객 유입, 전환, 유지 전략 최적화
- API 활용으로 마케팅 자동화 및 데이터 분석 가능
📌 API 주요 역할
- 데이터 통합 & 분석 → 마케팅 채널(Facebook Ads, Google Analytics 등) 데이터 수집
- 개인화 마케팅 → 고객 행동 데이터를 활용한 맞춤형 광고 & 캠페인
- 마케팅 자동화 → 광고 운영, 이메일 발송, 리타겟팅 자동화
- A/B 테스트 최적화 → API로 동적 콘텐츠 제공 및 성과 분석
2. 주요 마케팅 API 유형 & 활용 사례
(1) 광고 API → 광고 캠페인 자동화 & 최적화
- Google Ads API / Facebook Marketing API
- 광고 집행 자동화, 성과 분석, 타겟팅
(2) 분석 & 트래킹 API → 실시간 마케팅 성과 분석
- Google Analytics API
- 유입 경로, 전환율 분석, 자동 보고서 생성
(3) CRM & 고객 데이터 API → 고객 데이터 활용
- HubSpot API / Salesforce API
- 고객 세그먼트 분류, 맞춤형 이메일 발송
(4) 이메일 & 메시징 API → 자동화된 커뮤니케이션
- Twilio API / SendGrid API
- 고객 행동 기반 이메일 & SMS 자동 발송
(5) 소셜 미디어 API → 브랜드 모니터링 & 자동화
- Twitter API / Instagram Graph API
- 소셜 데이터 분석, 자동 포스팅, 해시태그 최적화
3. API를 활용한 그로스 마케팅 전략
(1) 자동화된 고객 세그멘테이션
- Google Analytics API + CRM API → 고객 데이터 자동 분류
- 고객별 맞춤형 광고 & 이메일 캠페인 실행
(2) 마케팅 캠페인 자동화
- Facebook Ads API → 타겟 광고 자동화
- SendGrid API → 장바구니 이탈 고객 자동 이메일 발송
(3) 실시간 성과 분석 & 최적화
- API 기반 대시보드 구축 → 광고 성과 추적
- 자동 광고 예산 조정, 리타겟팅 최적화
(4) 리타겟팅 & 개인화 마케팅
- 고객 웹사이트 방문 데이터 분석 → 맞춤형 광고 제공
- AI 기반 추천 API(OpenAI API) 활용 → 고객 맞춤형 제품 추천
4. API 활용 시 고려할 사항
📌 API를 사용할 때 주의할 점
✔ 데이터 보안 & 개인정보 보호 → GDPR, CCPA 규정 준수
✔ API 요청 제한(Rate Limit) → 호출 횟수 제한 고려
✔ 데이터 동기화 문제 → 실시간 데이터 처리 전략 필요
✔ API 업데이트 & 유지보수 → API 버전 변경 시 지속적인 관리
5. API 활용 기대 효과
✔ 개발 시간 단축 → 기존 서비스와 연동하여 빠르게 구현
✔ 마케팅 자동화 → 효율적인 캠페인 운영 & 비용 절감
✔ 데이터 기반 의사 결정 → 실시간 분석으로 최적화된 전략 수립
✔ 고객 경험 향상 → 맞춤형 마케팅으로 고객 만족도 증가
6. 국내 API 서비스 및 데이터 제공처
📌 공공 데이터 API 제공 플랫폼
✔ 공공데이터포털 → data.go.kr
- 정부 기관의 다양한 데이터 API 제공 ✔ 서울 열린데이터 광장 → data.seoul.go.kr
- 서울시 공공 데이터 API (교통, 환경, 부동산 등)
이 뒤부터 API 데이터 수집 심화로 데이터 생성, csv 저장 후 데이터 분석, 시각화하여 문제 풀이를 했음. 보고서 쓰는 연습도
시각화는 다음 차시에 나오니까 패스~
pandas 다시 복습해야겠다..
'STUDY' 카테고리의 다른 글
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 13-1 이상치, 데이터 변환(결측치, 데이터 타입 변환) (0) | 2025.02.26 |
---|---|
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 12 Matplotlib, Seaborn (0) | 2025.02.21 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 10 웹 애플리케이션 구조, Flask, 웹크롤링 (1) | 2025.02.19 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 9 GCP VM 인스턴스 설정 및 MariaDB + Pandas 연동 방법 (0) | 2025.02.18 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 8 SQL 기본키, 외래키, JOIN, UNION, ALTER, CONSTRAINTS (4) | 2025.02.14 |