일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 개발자 도구
- 개발자 도구 우회
- puppeteer
- 퍼피티어
- 자동화
- uvicorn
- 피들러
- Django
- realtime
- App
- selenium
- 자동화 도구
- ubuntu
- 일렉트론
- 예매
- 티켓링크
- 직링
- nginx
- 티켓
- kotlin
- fiddler
- 콘서트
- WSL
- AWS
- EC2
- GPT
- FastAPI
- linux
- WebRTC
- 프록시
- Today
- Total
개발 삽질 일지
[직링] 기능 개발 본문
이전 글들에서는 Puppeteer와 Electron을 활용해 사용자가 로그인만 하면 티켓 예매 페이지까지 자동으로 이동하고, OCR을 통한 캡챠 해석까지 진행되는 전체 흐름을 구현했습니다. 이번 글에서는 시스템의 보안성과 효율성을 높이기 위해 새롭게 추가한 지정 PC 인증 기능을 소개하고, 이 기능을 중심으로 자동화 시스템의 확장 방향, 즉 스케일 업(Scale Up)과 스케일 아웃(Scale Out)의 개념을 함께 정리해보려 합니다.
예매 자동화는 강력하지만, 원하지 않는 환경에서 실행되는 것을 방지할 필요가 있습니다. 이를 위해 MAC 주소 기반의 지정 PC 인증 기능을 추가했습니다. MAC 주소(Media Access Control Address)는 네트워크에 연결된 장치(PC, 스마트폰 등)의 고유 식별자로, 각 네트워크 인터페이스(예: 랜카드, 와이파이 카드)에 부여됩니다. 쉽게 말해, 이 컴퓨터가 맞는지를 판별할 수 있는 일종의 디지털 지문입니다.
본인의 MAC 주소 확인 방법입니다. 명령 프롬프트(cmd)에서 ipconfig/all을 입력하면 연결되어 있는 어댑터를 찾을 수 있습니다. 여기서 물리적 주소가 본인의 MAC 주소입니다.
Node.js의 `os.networkInterfaces()`를 활용해 현재 PC의 MAC 주소를 가져오고, 미리 등록해둔 주소와 일치하는 경우에만 자동화가 실행되도록 제한해봅시다. 아래 코드로 간단하게 PC 인증을 진행할 수 있습니다.
const puppeteer = require("puppeteer");
const os = require("os");
function getMacAddress() {
const interfaces = os.networkInterfaces();
for (const name of Object.keys(interfaces)) {
for (const iface of interfaces[name]) {
if (!iface.internal && iface.mac && iface.mac !== "00:00:00:00:00:00") {
return iface.mac.toUpperCase().replace(/-/g, ":");
}
}
}
return null;
}
async function startPuppeteer() {
const allowedMacs = ["**:**:**:**:**:**"];
const myMac = getMacAddress();
console.log("현재 MAC 주소:", myMac);
if (!allowedMacs.includes(myMac)) {
console.error("허용되지 않은 PC입니다. 예매를 차단합니다.");
return;
}
혹은 아래와 같이 문자열로 비교를 하는 것도 가능합니다.
const allowedMacs = "**:**:**:**:**:**"
const myMac = getMacAddress();
console.log("현재 MAC 주소:", myMac);
if (!allowedMacs === myMac) {
console.error("허용되지 않은 PC입니다. 예매를 차단합니다.");
return;
}
다음은 스케일 업과 스케일 아웃에 대한 개념 정리입니다. 자동화 프로그램을 발전시켜 나가다 보면, 기능을 어디까지 붙일지, 구조를 어떻게 확장할지에 대한 고민이 자연스럽게 따라옵니다. 보통의 경우에는 원하는 기능의 정도, 개발 가능한 시간, 외주 프로젝트의 경우 개발 비용 등을 고려해서 개발을 진행해야합니다. 너무 과한 기능은 오버 엔지니어링이 될 수 있기 때문이죠. 이 과정에서 자주 등장하는 개념이 바로 스케일 업(Scale Up)과 스케일 아웃(Scale Out)입니다.
먼저 스케일 업은 지금 돌아가고 있는 한 개의 시스템을 더 강하게 만드는 방식입니다. 예를 들어, 제가 만든 예매 자동화 프로그램에 OCR을 붙이고, 좌석 자동 선택 로직을 추가하고, MAC 주소 기반으로 지정된 PC에서만 실행되도록 제한하는 것도 모두 기존 하나의 봇(스크립트)에 기능을 점점 쌓아 올린다는 점에서 스케일 업에 해당합니다.
반대로 스케일 아웃은 하나의 프로그램을 계속 키우기보다는 여러 개로 나눠서 동시에 실행하는 방식입니다. 예를 들어, 같은 프로그램을 계정별로 동시에 실행하거나, 각기 다른 구역을 겨냥해서 여러 봇을 병렬로 띄우는 방식은 전형적인 스케일 아웃이라고 할 수 있습니다.
스케일 업은 구조가 단순하고 유지보수가 쉬운 반면, 스케일 아웃은 더 많은 자원을 활용해 대규모 처리나 병렬 시도에 유리합니다. 각 방식은 상황에 따라 장단점이 있기 때문에, 개발 중인 시스템의 목적과 사용 환경에 맞춰 유연하게 선택하는 게 중요합니다.
원하는 거의 모든 기능은 이제 구현된 상태라, 기능 추가보다는 유지보수 및 테스트에 시간을 더 쓰고 있습니다. 그래서 이번 글에서는 코드보다 개념과 방향성에 집중하게 되었네요. 다음 글은 좌석 자동 선택 구현 로직으로 돌아오겠습니다.
[직링] 좌석 선택
이전 글에서는 스케일 업(Scale Up) 과정의 일환으로, 지정 PC 인증 기능에 대해 소개드린 바 있습니다. 해당 기능을 통해 이제는 프로그램을 단순히 설치만 한다고 누구나 사용할 수 있는 것이 아
gnaaak.tistory.com
좋을 개발 도구나 자동화 아이디어가 있다면 댓글로 추천 부탁드립니다! 이제 어떤 걸 개발해볼 지 고민 중이라 여러분의 아이디어가 큰 도움이 될 것 같아요.
언제나처럼 — 시작은 삽질이지만, 끝은 지식입니다.
'자유로운 개발일지 > 실험일지' 카테고리의 다른 글
[직링 이해하기] 넷퍼넬 + 예매 버튼 활성화 (4) | 2025.07.13 |
---|---|
[직링] 좌석 선택 (4) | 2025.07.08 |
[직링 이해하기] HTTP 요청 방식 (6) | 2025.07.02 |
[직링] 멜론 자동 호출 (7) | 2025.06.30 |
[직링] 캡챠 이미지 인식 (7) | 2025.06.29 |