Git Product home page Git Product logo

job-fit's Introduction

잡핏 (JobFit)

JobFit Banner

                                               

사이트 바로가기             JobFit 기획안             JobFit 브로슈어

🎊최고의 프로젝트상 수상!🎊



👉 프로젝트 소개

개발자들은 기술 스택 (혹은 연봉!)에 알맞은 공고를 찾기를 희망합니다.

하지만, 현재 공고 사이트에는 기술 스택으로 분류해 볼 수 없으니
개발자를 위해 편리하게 기술 스택으로 현재 공고를 분리하고 공고 추천을 제공합니다.


🤔다른 공고 사이트도 많은데 JobFit은 어떻게 차별되나요?

점핏과 Wanted 같은 개발자 전용 채용 사이트는 기술 스택 등으로 검색은 용이하지만 공고 폭이 매우 좁다는 단점이 있습니다.

따라서, 검색이 용이하며 공고량도 많고, 공고 추천까지 받을 수 있는 통합 IT 채용 공고 검색 사이트를 만들고자 합니다.

🎉무엇보다 우리가 모두 취업 준비를 하는 만큼 공고를 찾을 때 JobFit이 유용하게 쓰이면 좋겠습니다!🎉


🖥 화면 구현

이미지를 클릭하면 크게 볼 수 있습니다!
메인 페이지 전체 공고 페이지와 필터링 공고 상세 페이지
유저 페이지 유저 찜 페이지


👏 프로젝트 참여 인원

배진영 길재형 박현민

@jbae9 @Mrgil0 @ParkAsher
'원티드' 스크레이핑
공고의 키워드와 기술스택 파싱
공고 추천 알고리즘
공고 기준별로 불러오기
공고 검색 기능
'사람인' 스크레이핑
키워드와 기술스택 검색 기능
채용공고 조회수 기능
채용공고 찜과 찜 취소
'프로그래머스' 스크레이핑
카카오 소셜 로그인
Refresh token 인증
채용공고 찜, 찜 취소 기능 캐싱 적용
회원 기술 스택과 주소 등록
채용공고 상세 조회



⚙ 기술 스택

✔ Front-end

✔ Back-end

✔ 스크래이핑 툴

✔ Database

✔ DevOps

✔ 협업툴



🛠 프로젝트 아키텍쳐

image



📝기술적 의사 결정

기술 스택 사용이유
NestJS
  • NestJS는 모듈의 의존성 주입을 기반으로 하는 프레임워크
  • 컨트롤러, 서비스 간의 의존성을 관리하고, 코드의 유지 보수와 테스트에 용이
  • TypeScript를 도입하여 개발 시 발생하는 오류들을 사전에 방지
TypeORM
  • TypeScript를 지원하여, 타입 체크를 지원
  • Repository 패턴을 지원하므로 코드를 구조화 하기 편리
  • 다양한 관계를 지원하고, 관계를 더 쉽게 조작하기 위해 많은 기능을 제공
Axios
  • 비동기 HTTP 통신 라이브러리
  • Wanted와 프로그래머스 채용 공고 API에 접속하고 정보를 읽음
Cheerio
  • HTML DOM 파싱 라이브러리
  • Axios를 써서 사람인 공고에 접속하고 Cheerio를 사용해서 HTML 요소를 파싱하기 위해 사용
Selenium
  • 포터블 프레임워크지만 웹 크롤링 라이브러리로 사용
  • Axios와 Cheerio 보다 느리지만 사람인의 공고 상세 페이지는 페이지 렌더가 되고 난 후 스크레이핑을 해야하기 때문에 Selenium을 사용했다.
Redis Engine
  • 기반의 데이터 저장소로, 디스크에 데이터를 저장하지 않고 메모리에 저장한다.
  • I/O 작업을 수행하지 않으므로 빠른 데이터 처리 속도를 제공
  • 조건에 맞는 채용공고와 자주 접근하는 페이지를 예상하여 메모리에 저장하고, 디스크 접근 횟수를 줄이고 조회 속도를 향상시키기 위해 사용
AWS ElastiCache
  • Amazon Web Service에서 제공하는 관리형 데이터베이스
  • MySQL, PostgreSQL과 같은 인기있는 관계형 데이터베이스 엔진을 제공
AWS Elastic Beanstalk
AWS EC2
AWS CloudWatch
  • Amazon의 Elastic Beanstalk는 '서비스로서의 플랫폼' (PaaS)으로 EC2 인스턴스를 생성하고 어플리케이션 배포 자동화를 할 수 있다.
  • 유저 트래픽이 높을 때 인스턴스 자동 scaling이 가능
  • AWS CloudWatch를 설정해서 애플리케이션 및 인프라 모니터링이 가능

🔎 주요 기능

  • PassportStrategy를 이용한 카카오 인증 전략을 구현하여,
    카카오 계정으로 회원가입 및 로그인을 할 수 있다.
카카오 소셜 로그인
  • 로그인 한 회원이 마이 페이지에 접속하여, 회원이 선호하는 기술 스택을 검색하고 추가 할 수 있다.
    이 때 선택한 기술 스택들은 채용 공고 추천 알고리즘에 사용 된다.
기술 스택 선택
  • 채용공고 목록, 상세 페이지에서 채용공고 이미지 우측 상단의 별⭐ 버튼을 누르면 찜 하고 취소를 할 수 있다.
    회원이 찜 한 채용 공고는 추천 알고리즘에 사용 된다.
채용 공고 찜 하기 / 찜 취소하기
  • Header 검색창 이용

    - 입력한 단어를 회사 이름, 키워드 기술 스택, 주소, 공고 제목, 공고 내용 에 매칭 시켜 검색
  • 필터 이용

    - 주소, 키워드, 기술 스택을 선택하여 검색
채용 공고 검색
  • 채용 공고 목록에서 제목을 누르면 상세 페이지로 접속 할 수 있다.
채용 공고 상세 페이지 확인
  • Axios, Cheerio, Selenium 라이브러리를 사용하여 원티드 / 프로그래머스 / 사람인 채용 공고 리스트를 크롤링
  • NestJS 의 Task Scheduling 기능인 Cron 데코레이터를 이용하여 프로그래머스 채용 공고는 매일 새벽 3시,
    원티드 채용 공고는 매일 새벽 4시, 사람인 채용 공고는 매일 새벽 5시에 크롤링을 하도록 설정
채용 공고 크롤링
  • SQL 쿼리문을 이용해서 추천 점수를 계산
  • 1. 공고에 기재된 주소와 내 주소의 거리는 두 주소의 경도와 위도를 'Haversine 공식'을 사용해 계산

    2. 유저가 등록한 기술스택 중에 공고가 몇 개 일치 되는지 확인
    - 예: 유저가 NestJS, Javascript, Typescript를 등록했는데 공고의 기술스택은 NestJS, Javascript, Java일 때 2개 일치

    3. 유저가 찜한 공고의 키워드 중에 다른 공고의 키워드는 몇 개 일치 되는지 확인
    - 예: 유저가 찜한 공고는 1번과 2번이다.
       1번 공고의 키워드는 신입과 IT이고 2번 공고의 키워드는 신입과 QA이다.
       유저가 찜한 공고의 키워드들은 신입, IT와 QA이다.

       다른 공고 4번의 키워드는 신입, 계약직, 고졸일 시 1개의 키워드만 일치한다.

    4. 추천 요소를 정규화하기 위해서 최대값과 최소값을 구한다
    5. 추천 점수를 계산하기 위해 모든 요소를 'Min-Max 정규화'를 한다.

    - 주소만 정규화 함수의 결과에서 1을 뺀다. 주소가 가까울 수록 점수가 높아야되기 때문이다.

    6. 각 요소에 비중을 줘서 추천 점수를 계산한다.

    위 함수의 변수:
    - stackMatches: 유저의 기술스택이랑 일치하는 수
    - distance: 유저의 거리와 공고에 기재된 주소의 거리
    - keywordMatches: 유저의 찜한 공고의 키워드랑 일치하는 수
    - salary: 공고에 기재된 연봉
    - avgSalary: 공고를 올린 회사의 평균 연봉

공고 추천 알고리즘

job-fit's People

Contributors

parkasher avatar jbae9 avatar mrgil0 avatar

Stargazers

 avatar St0ne / 석봉 avatar  avatar

Forkers

parkasher

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.