이 판의 목적 · 계획 · 체크리스트
제품 58개의 가격을 같은 날짜로 다시 수집하여 본편을 한 편으로 정리한다. 또한 그림 1에서 실제 구입 금액과 판매처별 할인 가격을 비교할 수 있게 한다. v1.0.0.4 자료는 9월 16일과 10월 1일 가격이 섞여 있었고, 그림 1에서 제품 1개의 구입 금액을 확인할 수 없었기 때문이다.
계획
- 그림 1에 값 전환 단추와 국산·수입산 일괄 선택 단추 추가
- 판매 화면을 열지 않고 가격을 조회하는 방법 조사
- 제품 58개의 10월 1일 가격 재수집과 데이터셋 v1.0.0.5 작성
- 본편 1편과 2편을 합친 본편 3편 작성과 게시
- 그림 1에 유형 설명, 할인 가격, 관심 제품 표시 추가
- 그림·표와 본문 사이 여백 통일
체크리스트 9/12
| 상태 | 항목 |
|---|---|
| 완료 | 값 전환 3종(단백질 1g당 가격, 제품 1kg 가격+배송비, 제품 1개 구입 가격) |
| 완료 | 국산 단추를 꺼도 국산 브랜드 확인란이 체크된 채 남던 문제 수정 |
| 완료 | 국산·수입산 브랜드 일괄 선택과 해제 단추 4개 |
| 완료 | 가격 조회 시험 코드 price_fetch.py 작성. 다나와 31개 조회에 사용 |
| 완료 | 아마존 상품 화면 23개 확인과 캡처 23장 저장 |
| 완료 | 데이터셋 v1.0.0.5(55개)와 9월 16일 대비 변동표 작성 |
| 완료 | 본편 3편(글 1527) 작성, 검사기 3종 통과, 공개 |
| 완료 | 그림 1 유형 설명 상자, 마이프로틴 할인 막대, 옵티멈뉴트리션 공식몰 표시, 관심 제품 강조 |
| 완료 | 본편 3편과 개발일지 1~5편의 그림·표 위아래 여백을 본문 한 줄로 통일 |
| 미완 | 마이프로틴 할인코드 35%를 900g 외 4개 제품에서 직접 확인 |
| 미완 | 나이트로테크 1kg과 옵티멈뉴트리션 공식몰의 배송비 확인 |
| 미완 | 할인 가격을 표와 그림 2~5에 반영할지 결정 |
1. 그림 1의 값 전환과 일괄 선택 단추
v1.0.0.4의 그림 1은 단백질 1g당 가격만 나타내었다. 그러나 구매자는 단가와 함께 제품 1개를 사는 데 드는 금액을 확인해야 한다. 이에 그림 1 위에 값 전환 단추 3개를 두었다. 표 1은 단추별 값과 산출식을 나타낸다.
표 1 그림 1 값 전환 단추
| 단추 | 막대가 나타내는 값 | 산출식 |
|---|---|---|
| 단백질 1g당 가격 | 원/g | (판매가 + 배송비) ÷ 단백질 총량 |
| 제품 1kg 가격+배송비 | 원/kg | (판매가 + 배송비) ÷ 분말 용량 × 1,000 |
| 제품 1개 구입 가격 | 원 | 판매가 + 배송비 |
각 막대에는 세 값을 모두 속성값으로 지정하였다. 단추를 누르면 스크립트가 선택한 값으로 막대 길이, 정렬 순서, 눈금을 다시 계산한다. 눈금 간격은 최대값을 6으로 나눈 값보다 큰 1, 2, 2.5, 5, 10의 배수 중 가장 작은 값으로 정하였다. 처음 이름은 「제품 1kg당 가격」이었으나, 배송비가 포함된 값임을 이름에서 알 수 있도록 10월 2일에 「제품 1kg 가격+배송비」로 바꾸었다.
국산 단추를 끄면 국산 제품 막대는 사라졌지만, 브랜드 선택 목록의 국산 11개 브랜드 확인란은 체크된 채 남았다. 국산·수입산 단추와 브랜드 확인란이 서로의 상태를 참조하지 않았기 때문이다. 이에 국산·수입산 단추를 누르면 해당 브랜드 확인란이 같은 상태로 바뀌도록 고쳤다. 반대로 확인란을 바꾸면 체크된 브랜드가 하나라도 있는지로 단추 상태를 다시 계산한다. 또한 브랜드 목록에 국산 전체 선택, 국산 전체 해제, 수입산 전체 선택, 수입산 전체 해제 단추를 추가하였다.
2. 판매 화면을 열지 않는 가격 조회 방법
v1.0.0.4까지는 판매 화면을 브라우저로 하나씩 열어 가격을 확인하였다. 제품 58개를 같은 날짜로 다시 확인하려면 이 방법은 시간이 많이 든다. 이에 판매처별로 화면을 열지 않고 가격을 받는 방법을 조사하고, 시험 코드 develop/price_fetch.py를 작성하였다. 표 2는 조사 결과를 나타낸다.
표 2 판매처별 가격 조회 방법
| 판매처 | 방법 | 결과 |
|---|---|---|
| 다나와 상품 화면 | 상품 번호(pcode) 화면의 JSON-LD | 최저가, 판매처 수, 1회 제공량과 단백질 문구를 받음. robots.txt 허용 |
| 다나와 검색 | 검색 결과 화면 | 목록을 스크립트가 채우므로 정적 HTML에 상품 번호가 없음 |
| 마이프로틴 공식몰 | 상품 화면의 JSON-LD(ProductGroup) | 요청 1회로 맛·용량별 가격을 모두 받음. 할인코드 적용가는 없음 |
| 옵티멈뉴트리션 공식몰 | products.json(Shopify) | 요청 1회로 전 제품의 할인 가격과 정상가를 받음 |
| 네이버 쇼핑 | 검색 API | 사용 가능. 개발자센터에서 키를 받아야 함 |
| 아마존 | 상품 화면 | robots.txt가 수집을 금지. 상품 정보 API는 판매 실적 조건이 있어 사용 불가 |
다나와 상품 번호는 검색 화면에서 받을 수 없어, 기존 다나와 제품 29개와 하이드로웨이 2개의 번호를 브라우저로 한 번 확인하여 data/danawa_candidates.json에 기록하였다. 이후 danawa_product()가 요청 간격 3초로 31개 화면의 최저가를 조회하였다. 아마존은 robots.txt를 따라 자동 조회 대상에서 제외하였다.
3. 10월 1일 가격 일괄 재수집
3.1 판매처별 수집 결과
다나와 31개 중 30개는 최저가를 받았다. 지웨이 올스타웨이 초코맛 2kg은 상품 화면에 가격 정보가 없어 판매가 끝난 것으로 판단하였다. 아마존은 상품 화면 23개를 열어 대한민국 배송 기준 원화 판매가와 표시 배송비를 읽고, 화면마다 캡처를 저장하였다. 마이프로틴 공식몰 5개는 10월 1일에 이미 수집한 값을 사용하였다.
아마존 22개 중 3개는 제외하고 1개는 대체하였다. 나우푸드 스포츠 WPI 무맛 5lb는 무맛 상품이 없었고, 옵티멈뉴트리션 골드스탠다드 100%웨이 더블리치초콜릿 2lb는 대한민국 배송이 불가하였다. 다이마타이즈 ISO100 고메바닐라 5lb는 판매가가 표시되지 않아 같은 제품 3lb로 대체하였다. 그 결과 제품은 다나와 30개, 아마존 20개, 마이프로틴 공식몰 5개를 합하여 55개가 되었다.
3.2 아마존 배송비와 원화 표시
아마존은 판매가 66,287원 미만 주문에 배송비를 받는다. 9월 16일 자료는 배송비를 일부 제품에만 넣었으므로, 10월 1일에는 상품 화면에 표시된 배송비를 모든 제품에 적용하였다. 그 결과 1lb 안팎의 제품 6개에 12,676~13,988원이 더해졌다. 나이트로테크 1kg은 판매가가 65,963원으로 기준에 324원 미달하나 화면에 배송비가 표시되지 않아 0원으로 두었다.
수집 중 아마존 화면의 가격이 달러로 바뀌는 일이 있었다. 이에 아마존의 언어·통화 표시 설정을 한국어와 원화로 저장한 뒤 수집을 이어갔다. 같은 판매가를 유지한 제품 13개는 원화 표시가가 모두 0.4% 낮아졌으며, 이는 원화 환산율 변동이 반영된 결과로 판단된다.
3.3 데이터셋 v1.0.0.5
develop/products_v1005.py가 v1.0.0.4 제품 목록에 10월 1일 가격을 적용하고, build_v1005.py가 데이터셋과 9월 16일 대비 변동표를 생성한다. 표 3은 v1.0.0.4와 v1.0.0.5의 결과를 비교한 것이다.
표 3 데이터셋 v1.0.0.4와 v1.0.0.5의 결과 비교
| 항목 | v1.0.0.4 (58개) | v1.0.0.5 (55개) |
|---|---|---|
| 수집일 | 9월 16일 51개, 10월 1일 7개 | 10월 1일 55개 |
| WPC 단가 중앙값 | 77원/g | 86원/g |
| 블렌드 단가 중앙값 | 78원/g | 79원/g |
| WPI 단가 중앙값 | 101원/g | 104원/g |
| WPI 대 WPC 중앙값 비 | 1.32배 | 1.21배 |
| 국산·수입산 단가 중앙값 | 54원/g, 94원/g | 56원/g, 103원/g |
9월 16일에 수집한 51개 중 47개를 갱신하였다. 판매가와 배송비의 합이 0.5%를 초과하여 오른 제품은 20개, 내린 제품은 2개였다. WPC 중앙값이 9원/g 높아진 것은 아마존 WPC 4개에 배송비가 더해지고, 54원/g이던 올스타웨이가 제외되었기 때문이다.
4. 본편 3편 작성
본편 1편은 9월 16일 51개, 본편 2편은 58개 기준으로 작성되어 두 글의 수치가 서로 달랐다. 이에 1편의 산출 방법 설명과 표 3종, 2편의 그래프 5종을 10월 1일 가격으로 다시 산출하여 본편 3편(글 1527)으로 합쳤다. 9월 16일 대비 변동률 상위 8개 제품을 나타낸 표 4를 새로 추가하였다. 1편과 2편은 수정하지 않았다.
본편 3편은 REST API로 임시글을 만든 뒤 글 번호를 넣어 본문을 채우고 공개하였다. 이후 사용자 지시에 따라 제목을 「프로틴 가격 비교」, 부제목을 「2026년 10월 1일」로 바꾸고 첫머리의 요약 문단 2개를 삭제하였다.
4.1 그림·표와 본문 사이 여백
사이트의 본문 문단은 위아래 여백이 0이어서, 표 제목이 앞 문단 바로 아래에 붙어 표시되었다. 이에 표 제목, 표, 표 주석을 div.gp-blk 하나로 묶고, 묶음과 그림의 위아래 여백을 본문 한 줄 높이(1lh)로 지정하였다. 표 요소에 직접 1lh를 지정하면 표 글꼴의 줄 높이인 약 29px로 계산되어 본문 한 줄보다 짧았다. 측정 결과 여백은 본편 30px, 개발일지 32px로 각각 본문 한 줄 높이와 같았다. 같은 규칙을 본편 1·2편과 개발일지 1~5편에도 적용하였다.
5. 그림 1 비교 기능 확장
5.1 유형 순서와 유형 설명 상자
유형 단추의 순서를 WPC, 블렌드, WPI에서 WPC, WPI, 블렌드로 바꾸고, 그림 2와 그림 4의 순서도 같게 하였다. 유형 단추에 마우스를 올리면 단추 아래에 설명 상자가 2초에 걸쳐 나타나며, 유형의 뜻과 원료 성분, 본 자료의 순도 중앙값을 표시한다. 상자 전체의 불투명도를 50%로 낮추면 글자도 흐려지므로, 배경만 50% 투명으로 하고 뒤쪽을 흐리게 처리하였다.
5.2 마이프로틴 할인코드 적용 가격
마이프로틴 공식몰은 수집일에 「추가 최대 35% 할인코드」를 안내하였다. 사용자의 장바구니에서는 아이솔레이트 무맛 900g 149,900원이 97,435원으로 35% 할인되었다. 이에 공식몰 제품 5개는 막대를 두 겹으로 그려, 옅은 막대 끝에 표시가를, 진한 막대 끝에 35% 할인 가격을 나타내었다. 900g의 단백질 1g당 가격은 192원/g에서 125원/g으로 낮아진다. 무맛 1kg은 할인 가격이 72,085원으로 무료 배송 기준 80,000원에 미달하나, 공식몰에 배송비 금액이 표시되지 않아 말풍선에 「배송비 별도」로 적었다.
5.3 옵티멈뉴트리션 공식몰 할인 가격
옵티멈뉴트리션 한국 공식몰은 Shopify의 products.json으로 전 제품의 할인 가격과 정상가를 제공한다. 자료의 옵티멈뉴트리션 8개 중 7개가 공식몰 제품과 대응하였으며, 공식몰 할인 가격을 막대 위에 검은 마름모로 표시하였다. 표 5는 두 가격의 단백질 1g당 가격을 비교한 것이다.
표 5 옵티멈뉴트리션 제품의 판매처별 단백질 1g당 가격
| 제품 | 다나와·아마존(원/g) | 공식몰(원/g) |
|---|---|---|
| 플래티넘 하이드로웨이 터보초콜릿 820g | 152 | 129 |
| 골드스탠다드 아이솔레이트 초콜릿 1.36kg | 123 | 113 |
| 골드스탠다드 아이솔레이트 바닐라 1.32kg | 118 | 113 |
| 골드스탠다드 100%웨이 스트로베리바나나 2.27kg | 83 | 79 |
| 플래티넘 하이드로웨이 터보초콜릿 1.64kg | 90 | 137 |
| 골드스탠다드 100%웨이 더블리치초콜릿 2.27kg | 73 | 82 |
| 골드스탠다드 아이솔레이트 3lb | 111 | 113 |
공식몰 가격은 2026년 10월 2일 확인한 할인 가격이며 배송비는 포함하지 않았다.
7개 중 4개는 공식몰 가격이 다나와 최저가보다 낮았다. 반면 하이드로웨이 1.64kg은 공식몰 가격이 164,700원으로 다나와 최저가 107,810원보다 높았다. 마름모 옆에 「공식몰 137」을 따로 표시하는 처음 판에서는 값 표시가 2번 겹쳐 나왔다. 마름모 옆 글자도 값 글자와 같은 클래스를 써서, 스크립트가 값 글자 대신 마름모 옆 글자를 먼저 찾았기 때문이다. 이에 값 글자를 찾는 선택자를 .t-val:not(.gpc-reft)로 바꾸었다.
5.4 관심 제품 강조
사용자가 주로 비교하는 마이프로틴 WPI 3개와 옵티멈뉴트리션 WPI 5개를 노란 바탕, 별표, 굵은 제품명으로 강조하였다. 강조 대상은 svg_v1005.py의 FAV_RULE에 브랜드와 유형의 쌍으로 기록한다. 강조는 표시 방식만 바꾸며, 독자는 「관심 제품 강조」 단추로 강조를 끌 수 있다.
6. 다음 판 과제
마이프로틴 할인코드 35%는 900g 1개에서만 확인하였으므로, 나머지 4개의 할인율을 장바구니에서 확인할 필요가 있다. 또한 나이트로테크 1kg과 옵티멈뉴트리션 공식몰의 배송비가 확인되지 않았다. 할인 가격을 표와 그림 2~5, 유형별 중앙값에도 반영할지 결정이 필요하다. 다음 판부터 프로젝트 이름은 Protein이며, 판 폴더는 Documents\Protein\Protein_v1.0.0.6부터 만든다.