{"id":15136050,"url":"https://github.com/f-lab-edu/jbly","last_synced_at":"2025-06-25T00:42:06.166Z","repository":{"id":65807446,"uuid":"599959683","full_name":"f-lab-edu/JBLY","owner":"f-lab-edu","description":"[대기업, 연봉 4000만원 이상] [성능 40배 튜닝] 크롤링을 이용한 쇼핑몰 모아보기 서비스","archived":false,"fork":false,"pushed_at":"2024-01-03T17:01:58.000Z","size":24721,"stargazers_count":50,"open_issues_count":9,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-06T16:39:45.622Z","etag":null,"topics":["ai","github-actions","graduate","java","jpa","mysql","pycharm","python","react","springboot","tensorflow","vscode"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/f-lab-edu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-10T09:06:36.000Z","updated_at":"2024-11-22T03:51:12.000Z","dependencies_parsed_at":"2024-01-03T10:25:51.371Z","dependency_job_id":"a58a62cd-c1f3-47ae-8dee-3414dc90f1c1","html_url":"https://github.com/f-lab-edu/JBLY","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/f-lab-edu/JBLY","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2FJBLY","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2FJBLY/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2FJBLY/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2FJBLY/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/f-lab-edu","download_url":"https://codeload.github.com/f-lab-edu/JBLY/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2FJBLY/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261782724,"owners_count":23208908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","github-actions","graduate","java","jpa","mysql","pycharm","python","react","springboot","tensorflow","vscode"],"created_at":"2024-09-26T06:03:53.388Z","updated_at":"2025-06-25T00:42:06.125Z","avatar_url":"https://github.com/f-lab-edu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"middle\" \u003e\n  \u003cimg src=\"https://ifh.cc/g/prA5lC.png\" width=\"250\"\u003e\n\u003c/p\u003e\n  \u003cdiv align=center\u003e\n\t\n  [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Ff-lab-edu%2FJBLY\u0026count_bg=%23FF00EE\u0026title_bg=%23555555\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=hits\u0026edge_flat=false)](https://github.com/f-lab-edu/JBLY) \n  \u003c/div\u003e\n\n# 👚JBLY\n\n두 팀원 모두 의류 산업에 관심이 많아 평소 자주 사용하는 패션 플랫폼을 직접 만들어보고자 시작하게 되었습니다. 사이트 구조와 특징이 각기 다른 세 개의 쇼핑몰에서 상품 데이터를 스크래핑한 후 화면에 사용자가 알아보기 쉽게 보여주는 서비스 입니다. \n(추후 성과에 대한 내용을 추가 할 예정입니다)\n\n## 💡 문제 상황과 해결 방법\n**1. 동적 크롤링을 하기 위해 Selenium을 사용한 결과 4078개의 데이터를 MySQL DB에 적재하는데 총 2시간 28분이 걸렸습니다.**\n\n➡️ 동적 크롤링을 할 때 추가한 Selenium 라이브러리를 사용하기 위해선 sleep과 같이 병목이 발생할 수 있는 코드를 추가해야 했습니다. 또 스크래핑 하는 과정에서 브라우저가 렌더링 되는 시간을 전부 기다려야 했기 때문에 속도가 느렸고, 웹 스크래핑 전반적인 과정이 Single-Thread로 동기처리되어 성능 개선이 필요했습니다. MySQL에 스크래핑한 데이터를 적재하는 과정에서도 단일 insert를 반복문으로 처리했기 때문에 4078개의 데이터를 Python으로 스크래핑해 DB에 적재하는데 약 2시간 30분이 걸렸습니다.\n\n## ☑️ 요구사항\n**1. 크롤링 기능**\n  - 크롤링은 하루에 1번 주기적으로 일어나야하며, 크롤링 주기는 바뀔 수 있다.\n  - 3개 이상의 쇼핑몰을 크롤링하여 해당 쇼핑몰의 데이터를 MySQL에 적재한다.\n\n**2. JBLY 쇼핑몰 기능**\n  - 사용자는 초기 화면에서 회원가입, 로그인을 할 수 있다.\n  - 사용자는 카테고리별로 상품을 조회할 수 있다.\n  - 상품을 클릭하면 상품의 상세 정보를 확인 할 수 있다.\n  - 로그인한 사용자는 마이페이지 기능과 로그아웃 기능을 사용할 수 있다.\n\n## ⚒️ Project Architecture\n![Project_Architecture](image/ProjectArch.png)\n\n## 📖 사용 기술 및 개발 환경\n**Backend Side**\n- Spring Boot, Java17, Gradle, Naver Cloud, H2, MySQL, JPA\n\n**Frontend Side**\n- HTML, CSS, JS, React\n\n**Data Engineering**\n- Python, BeautifulSoup\n\n**Infra**\n- GithubAction Cron Scheduler, GithubAction CI\n\n## 🛠 Project UI/UX\n![Project UI/UX](image/JBLY_UI_UX.png)\n\n## ✅ Project Goal\n**1. 요구사항 충족**\n\n- 요구사항을 해결하면서 문제를 발견하고 정의하며, 팀의 상황에 맞는 최선의 조건을 선택해 문제를 해결합니다.\n  \n**2. Backend Side OR Infra 개발 이외에 다양한 환경 경험**\n\n- 기술 스택을 사용하면서 해당 기술의 컨셉을 이해하고 사용하면서 어떻게 통합하여 사용하는지에 대한 경험을 쌓습니다.\n\n**3. 테스트 격리와 요구사항에 맞는 테스트 코드 작성**\n\n**4. 병렬 프로그래밍으로 성능 개선**\n\n  - 2시간 28분이 걸린 스크래핑 작업을 5분 이내로 줄이는 것이 목표입니다.\n  \n**5. 커뮤니케이션 스킬 향상**\n\n  - 상대 팀원과 지속적으로 소통하며 빠르고 정확하게 기능을 구현 할 수 있도록 합니다.\n  - 구체적이고 꾸준한 상호 피드백으로 \"계속 협업 하고 싶은 팀원\"이 될 수 있도록 노력합니다.\n\n## ✍🏻 협업 제약조건\n- [Github-flow]에 따라 프로젝트에 대해 공동 작업을 수행합니다.(https://docs.github.com/ko/get-started/quickstart/github-flow)\n- 이슈별로 브랜치를 관리하며 모든 작업은 코드리뷰를 받아야합니다.  \n- 코드리뷰가 끝난 작업은 반드시 상대 팀원의 APPROVE가 있어야 MERGE가 가능합니다.\n- 이슈는 최대한 작은 작업 단위로 생성하고 추후 진행할 기능에 대해서는 반드시 팀원과 협의합니다.\n- 매주 일요일 주간 피드백에 배운 것과 느낀 것, 상대 팀원의 칭찬할 점과 개선하면 좋을 점을 적어 공유합니다. \n\n## 🎥 Demo Video\n- 추후 업로드 예정입니다.\n\n## 🏠 Blog\n- 이연수의 BLOG입니다.(https://ecofriendlyapplesu.tistory.com)\n- 박소정의 BLOG입니다.(https://creeraria.tistory.com/)\n\n## 👀 Code Convention\n- [Google Java Code Convention 준수](https://google.github.io/styleguide/javaguide.html)\n- [Google Python Code Convention 준수](https://google.github.io/styleguide/pyguide.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Fjbly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff-lab-edu%2Fjbly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Fjbly/lists"}