본문 바로가기
사이드프로젝트

[오픈소스 기여 도전기 #1] 맨땅에 헤딩: 우커머스 로컬 환경 구축부터 결제 성공까지

by Jaejin Sim 2026. 2. 17.
반응형

지난 글에서 기여할 프로젝트(woocommerce-gateway-stripe)와 타겟 이슈(#4951)를 정했습니다. 이제는 실제로 코드를 수정하고 테스트할 수 있는 로컬 개발 환경(Local Development Environment)을 구축할 차례입니다.

"그냥 git clone 하고 돌리면 되는 거 아니야?"라고 생각했지만, 역시나 오픈소스의 세계는 호락호락하지 않았습니다. 윈도우 WSL(Ubuntu) 환경에서 겪은 우여곡절과 트러블슈팅 기록을 공유합니다.

https://simjaejin.tistory.com/101

 

[오픈소스 기여 도전기 #1] 12년 차 개발자의 전략적 접근법: 프로젝트 선정부터 이슈 분석까지

🚀 프롤로그: 막연한 동경에서 구체적인 목표로'오픈소스 기여(Open Source Contribution)'. 개발자라면 누구나 한 번쯤 꿈꾸는 버킷리스트지만, 저에게도 이곳은 항상 높고 막연한 벽이었습니다. "도

simjaejin.tistory.com

 


🛠️ 1. 우커머스 코어 & Stripe 플러그인 설치

woocommerce-gateway-stripe는 단독으로 실행되는 것이 아니라, 우커머스(WooCommerce) 플러그인 위에서 동작합니다. 따라서 우커머스 코어 환경부터 먼저 잡아줘야 합니다.

1-1. 필수 패키지 설치 (PHP 8.3 & Composer & Node.js)

최신 우커머스 구동을 위해 안정적인 PHP 8.3 환경과 패키지 매니저들을 설치합니다.

# 1. PHP 8.3 설치
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.3 php8.3-cli php8.3-common php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-mysql

# 2. Composer 설치
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

# 3. Node.js 패키지 매니저 (pnpm) 설치
npm install -g pnpm

1-2. 소스 코드 다운로드 및 빌드

/project/ 디렉토리를 생성하고 우커머스 코어와 Stripe 게이트웨이를 각각 클론(Clone) 받습니다.

mkdir /project/ && cd /project/

# [Core] 우커머스 설치 및 빌드
git clone https://github.com/HomerSim/woocommerce.git
cd woocommerce
pnpm install --frozen-lockfile
pnpm build

# [Plugin] Stripe 게이트웨이 설치
cd /project/
git clone https://github.com/HomerSim/woocommerce-gateway-stripe.git
cd woocommerce-gateway-stripe
composer install
npm install

# 의존성 문제 해결 (Playwright 관련)
npx playwright install-deps
npm run build

1-3. wp-env 설정 (가장 중요! ⭐)

우커머스 코어 개발 환경에서 Stripe 플러그인을 함께 로드하려면 .wp-env.override.json 설정이 필수입니다.

💡 Tip: plugins 배열에 "."(현재 디렉토리, 즉 우커머스 코어)를 반드시 포함해야 합니다. 이걸 빼먹으면 우커머스가 로드되지 않습니다.

파일 경로: /project/woocommerce/.wp-env.override.json

{
  "plugins": [
    ".",
    "/home/wowls5000/project/woocommerce-gateway-stripe"
  ]
}

이제 개발 환경을 실행합니다.

# 실행 (네트워크 오류 시 재시도)
pnpm --filter='@woocommerce/plugin-woocommerce' env:start

# 중지
pnpm --filter='@woocommerce/plugin-woocommerce' env:stop

🚨 2. Stripe 테스트 계정 연동 문제 (Troubleshooting I)

환경은 구축됐지만, Stripe 플러그인 설정 페이지에 들어가 보니 제 계정이 아닌 기본 테스트 계정이 연결되어 있었습니다. 당연히 제 대시보드에서는 결제 내역이 보이지 않았죠.

해결책: DB 직접 수정 (Direct DB Update)

UI에서 설정이 잘 안 먹힐 때는 DB를 직접 건드리는 게 가장 확실합니다. wp_options 테이블의 woocommerce_stripe_settings 값을 제 API 키로 강제 업데이트했습니다.

1. MariaDB 접속

docker exec -it <컨테이너ID> /bin/bash
mariadb -u root -p

2. 설정값 업데이트 SQL 실행 워드프레스 설정값은 직렬화(Serialized)되어 저장되므로, 형식을 정확히 맞춰서 UPDATE 해야 합니다.

UPDATE wp_options 
SET option_value = 'a:35:{s:7:"enabled";s:3:"yes"; ... s:20:"test_publishable_key";s:107:"pk_test_내_공개키";s:15:"test_secret_key";s:107:"sk_test_내_비밀키"; ... }' 
WHERE option_name = 'woocommerce_stripe_settings';

이렇게 하니 드디어 제 Stripe 대시보드에 로그가 찍히기 시작했습니다! 🎉


🛑 3. wp-env 실행 시 ETIMEDOUT (Troubleshooting II)

잘 되던 환경이 다음날 집에서 다시 실행하니 ETIMEDOUT 에러를 뱉으며 멈췄습니다.

✖ Reading configuration.
AggregateError [ETIMEDOUT]: code: 'ETIMEDOUT', timings: { ... total: 271 }

원인 분석: 한국-미국 간 레이턴시 vs Node.js 타임아웃

Node.js는 IPv4/IPv6 연결 시도 시 기본 타임아웃을 약 250ms로 잡습니다. 그런데 한국에서 미국 서버(wordpress.org)까지 왕복 시간(RTT)만 해도 200~300ms가 걸립니다. 즉, "서버는 정상인데 응답이 늦게 와서 Node.js가 연결을 끊어버린" 상황이었습니다.

해결책: /etc/hosts 강제 매핑

DNS 조회 시간이라도 줄이기 위해 wordpress.org 관련 도메인들을 /etc/hosts에 직접 등록하여 해결했습니다.

1. 현재 IP 확인

curl -I -v https://api.wordpress.org
# (나온 IP 주소 복사)

2. Hosts 파일 수정 (sudo vi /etc/hosts)

# WordPress Development Network Fix
198.143.164.251 api.wordpress.org
198.143.164.250 downloads.wordpress.org
198.143.164.252 wordpress.org

이 설정을 추가하고 나니 wp-env가 거짓말처럼 쌩쌩하게 돌아가기 시작했습니다.


🚀 다음 예고: 로직 분석과 웹훅 테스트

이제 로컬에서 결제까지 되는 완벽한 환경을 갖췄습니다. 하지만 저는 우커머스를 다뤄본적이 없기 때문에 코드 분석이 필요 합니다. 

다음 글에서는 코드 분석과 웹훅 테스트 하는 과정을 담아보겠습니다.

반응형