본문 바로가기
STUDY

[멋쟁이사자처럼부트캠프_그로스마케팅] Day 11 API, Flask

by vol2 2025. 2. 20.

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를 사용하여 데이터를 주고받는 과정

  1. 클라이언트(사용자 또는 프로그램)가 API를 요청URL을 통해 서버로 데이터 요청
  2. 서버가 요청을 처리하고 데이터베이스(DB)에서 정보를 가져옴
  3. 서버가 JSON 형태로 데이터를 응답하여 클라이언트에게 전달
  4. 클라이언트가 데이터를 받아 활용 (분석, 시각화, 자동화 등)

🔹 (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 차이

  • 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 요청할 때

  1. 클라이언트(사용자) → /api/users 요청 (HTTP Request)
  2. Flask(WAS) → MySQL에 데이터 요청 (DB(MySQL)와 연결**,** SQL 실행)
  3. DBMS(MySQL) → SELECT * FROM users 실행 후 데이터 반환
  4. Flask → 받은 데이터를 JSON으로 변환
  5. Flask(WAS) → 웹 서버(WS) → 클라이언트 로 응답 전송
  6. 클라이언트(사용자) → JSON 데이터를 받아 화면에 표시

Request(요청) → WAS(처리) → DB(데이터 조회) → Response(응답 반환) → 클라이언트 표시


4️⃣ Flask 예제 코드 (Flask + MySQL 연동) (app.py)

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 프로젝트는 웹 애플리케이션을 구성하는 파일을 구조적으로 배치

  1. 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 서버를 운영하는 과정

  1. GCP VM(가상 머신)에서 Flask 설치 & 실행
  2. Flask 앱(main.py)을 실행하여 API 서비스 시작
  3. 웹서버(NGINX, Apache) 설정 → 외부 요청을 Flask로 전달
  4. DB(MySQL, PostgreSQL) 연결하여 데이터 관리
  5. 도메인 설정 → 실제 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 다시 복습해야겠다..