친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 5. 3.

    by. 친절한 고모

    목차

      🧠 왜 마이크로서비스가 필요한가?

      기본적으로 워드프레스는 모놀리식(Monolithic) 구조입니다.
      플러그인, 테마, 사용자 인증, 관리자, 콘텐츠가 모두 같은 코드베이스에 존재합니다.

      하지만 대규모 프로젝트에서는…

      ❌ 기능 확장이 어렵다
      ❌ 테스트/배포가 전체 서비스에 영향을 준다
      ❌ 성능 병목 발생
      ❌ 팀 간 협업 분리가 안 된다

      👉 이런 상황에서 기능별로 서비스 분리하는 마이크로서비스 구조가 유효합니다.


      ✅ 워드프레스에서 가능한 마이크로서비스 형태

      분리 대상독립 구성 방법활용 예
      사용자 인증 외부 OAuth / JWT 인증 서버 멤버십, SaaS
      콘텐츠 API Headless 구조 + REST API 모바일 앱, 프론트엔드 앱
      커머스 기능 WooCommerce 분리 + API 서버화 쇼핑몰 모듈 분리
      통계 분석 별도 Node.js / Python API 서버 트래픽 수집, 사용자 분석
      예약/결제 등 외부 마이크로서비스와 API 연동 Third-party API 연계
       

      🧠 왜 마이크로서비스가 필요한가?


      🧩 실전 예시: 사용자 인증 마이크로서비스화

      1. 인증 서버 구성 (Node.js + JWT)

      • 사용자 로그인/회원가입은 auth.yoursite.com에서 처리
      • JWT 토큰 발급 후, 워드프레스 REST API 요청 시 토큰 전달
      json
      복사편집
      POST /api/auth/login { "email": "user@example.com", "password": "******" }

      응답:

      json
      복사편집
      { "token": "eyJhbGciOiJIUzI1NiIsInR..." }

      2. 워드프레스 REST API 보호

      워드프레스 측에서 토큰을 받아 Authorization: Bearer로 인증

      php
      복사편집
      add_filter('rest_authentication_errors', function($result) { $headers = apache_request_headers(); $token = str_replace('Bearer ', '', $headers['Authorization'] ?? ''); if (!$token || !verify_jwt_token($token)) { return new WP_Error('unauthorized', '로그인이 필요합니다', array('status' => 401)); } return $result; });

      📌 verify_jwt_token() 함수는 외부 인증 서버와 통신하여 토큰 검증


      🔧 콘텐츠 API 분리 – Headless CMS로 전환

      • 워드프레스는 백엔드 전용 → 콘텐츠만 JSON 형태로 제공
      • 프론트엔드 앱(Next.js, Vue, React Native 등)에서 콘텐츠 호출
      • 필요 시 GraphQL로 변환 (WPGraphQL 플러그인 활용)

      📦 기능 모듈 분리 전략

      방법적용 방식
      플러그인 단위 기능화 각 기능을 별도 플러그인으로 나누고 Git 관리
      API Gateway 활용 모든 API 요청을 라우팅/인증/로그 처리
      Docker 기반 서비스 구성 서비스별 Docker 컨테이너 분리 (예: auth, api, admin)
      큐 기반 처리 예약 전송, 메일 발송 등은 RabbitMQ, SQS 등으로 비동기 처리
       

      🧪 실전 아키텍처 구조 예시

      txt
      복사편집
      [프론트엔드 앱] ↓ [API Gateway] ↙ ↘ [콘텐츠 API] [인증 서버] ↓ ↓ [워드프레스 DB] [회원 DB]

      💡 확장 아이디어

      • 예약 API는 Python Flask 서버로 분리
      • 관리자 백오피스는 Vue 기반 독립 시스템
      • 통계 대시보드는 외부 대시보드 툴 연동 (Metabase, Superset)
      • 실시간 처리(댓글, 채팅)는 Firebase, Pusher 활용

      ✅ 마이크로서비스 적용 체크리스트

      항목완료 여부
      기능 분리 대상 정의 (인증, 콘텐츠, 커머스 등) ✅ / ❌
      REST API 또는 GraphQL 인터페이스 구성 ✅ / ❌
      외부 인증 시스템 연동 (JWT, OAuth) ✅ / ❌
      플러그인 또는 컨테이너 단위로 서비스 분리 ✅ / ❌
      API Gateway / 프록시 서버 구성 ✅ / ❌
      테스트 & 배포 자동화 프로세스 정립 ✅ / ❌