들어가면서
무엇이든, 내가 필요해서 만드는 토이 프로젝트가 최고인 것 같다. 이번과 같은 경우 내가 취준생이다 보니까 계속 취업공고 사이트를 들락날락해야만 했는데 그 과정에서 너무 큰 시간소모를 하고 있었다. 이 시간소모가 나뿐만 아니라 42커뮤니티 모두가 느낄 것이라고 생각했고, 그래서 나는 우리 커뮤니티를 위해 42슬렉 취업공고 봇을 하나 만들어야겠다고 생각했다.
저녁 먹다 시작한 개발
취업공고 봇을 만들기 위해서 필요한 것은 크게 3가지 정도였다. 첫 번째로는, 해당 프로그램을 돌릴 서버에 대한 이해(프로세스, VM, CRONJOB 등에 대한 이해) 두 번째로는, 크롤링에 대한 이해(동적, 정적 사이트 가리지 않고 긁어올 수 있는 능력, 또한 HTTP Request에 대한 이해) 마지막으로는, Slack SDK 및 챗봇에 대한 이해였다.
다행히도, 세 가지 모두 다 능숙한 분야였고 덕분에 저녁 먹으면서 고민한 일을 그날 집에 가기 전에 마무리할 수 있었다. 서버는 기존에 서비스하고 있는 서버 중에 CPU utilization이 50% 미만이라서 근 시일 내에 인스턴스 유형을 내리려고 했던 서버를 이용했다. 해당 서버에는 Selenium, Python과 같은 필수적인 패키지들이 모두 존재했기 때문에 즉시 개발이 가능했다. 역시 잘 관리해 놓은 VM은 언제나 사용하기 편한 것 같다(물론, 컨테이너가 훨씬 좋다.. 말이 좋은 것이지 까탈스러운 VM들..)
개발 과정
가장 먼저 정해야 되는 것은 어떤 사이트를 긁어올지 정하는 것이었다. 개인적으로 가장 양질의 공고는 Wanted로 가는 대신 Wanted에는 공고의 수가 적고, 나머지 사람인과 잡플래닛은 공고수는 많으나 필터링이 많이 필요하다고 생각했다. 그래서 가장 먼저 Wanted부터 개발하기로 마음먹고 원티드부터 개발해 냈다.
가장 먼저는 일단 돌아가게만 만들었다. 일단 원티드를 긁어왔으나 사실 저 정보는 어떤 가치도 없는 정보라고 생각한다. 왜냐하면, 결국 이 공지를 보는 것은 내가 이 회사에 관심을 지원할지에 대해 판단할 정보를 접촉하는 것에 있기 때문이다. 하지만, 저 정도의 정보는 어떤 영향도 끼칠 수 없기에 나는 바로 다음 스텝으로 필수적인 정보들을 추가하기 시작했다.
이후 어떻게 어떤 정보가 필요할지에 대해 깊이 있게 고민했고, 채용공고를 읽을 때 내가 하는 행동을 기준으로 삼기로 했다. 나 같은 경우 원티드에 올라온 공고는 일단 들어가 보고 그 후에, 주요 업무와 요구사항을 확인한다. 그리고 그 내용이 나와 부합하다면 그때 지원여부에 대해 고민한다. 이런 나의 행동을 기반으로 원티드에서는 필요한 정보 모두를 추출해서 제공하기로 마음먹었다.
원티드를 해냈으니 그다음은 사람인 차례였다. 사람인의 경우에는 공고가 많으나 42 커뮤니티 일원들의 구미에 당기는 공고는 자주 올라오지 않는다. 특히, 지역이 매우 산발적이고 연차에 대한 것들도 조건이 다양하다 보니까 나는 필요한 정보를 구분하는 과정을 거쳐야만 했다. 내가 생각했을 때 42 커뮤니티 일원들에게 필요한 정보는 다음과 같았다. 첫 번째, 수도권일 것 두 번째, 신입 혹은 경력무관 혹은 1~3년 차까지 지원이 가능할 것 마지막 조건으로는 당연하게 개발직군일 것이다.
해당 조건을 충족한 공고만 커뮤니티 일원들이 볼 수 있도록 조건을 변경하였고, 덕분에 불필요하게 많은 공고들이 올라오는 상황을 방지할 수 있었다. 또한, 원티드와는 다르게 훨씬 많은 공고가 올라오는 특성을 반영하여 공고를 올리는 방식에도 변경점을 두었다. 데이터를 살펴보니 원티드에 공고 1개가 올라올 때, 위의 조건을 통과한 사람인 공고는 3~4개 정도가 올라오게 된다. 그렇기 때문에 사람인 공고가 너무 길 경우 채널이 불필요한 정보로 둘러싸일 것을 우려했고 아래와 같은 양식으로 제작하였다.
조금 힘들었던 잡플래닛
잡플래닛은 한 가지 차이점이 있었는데, 위 두 사이트와 다르게 URL단에서 조건을 넣어줄 수 없다는 것이다. 잡플래닛은 하나의 도메인에서 안에 있는 컴포넌트만 변경하는 방식으로 사이트가 설계되어 있는데, 그렇기 때문에 다른 사이트들에서 진행한 것과 다르게 복잡한 과정을 거쳐야만 했다.
가장 먼저, 직군에 대한 탭을 클릭한 후, 개발 탭을 선택 후 클릭 그리고 개발 전체를 선택 후 클릭하는 과정을 거쳐야 한다. 그리고 동일한 방식으로 고용 경력을 조건에 넣어줘야만 했다. 경력과 같은 경우에는 셀렉트가 아니라 바 형태로 제작되어 있었는데 해당 부분도 여러번의 테스트를 거치며 조건에 집어넣었다.
이후, 잡플래닛의 장점이라고 생각되는 평점 시스템을 도입하여 2점 미만의 기업들은 공고를 내보내지 않도록 했다. 일단 데이터베이스에는 넣어놓지만 해당 공고들은 42 커뮤니티 일원들이 크게 바라지 않을 것이라고 판단하여 넣지 않는 것으로 결정했다. 그리고 사진과 함께 양식을 제작하여 아래와 같이 잡플래닛에 대한 공지를 올릴 수 있게 하였다.
개발 과정 중 어려움
개발 전체에 12시간도 안 쓰고 어려움에 대하여 말하자니 좀 웃기긴 하지만 일단 꼽자면 동적 페이지에 대한 크롤링에서 오는 부담감이 있는 것 같다. 간단하게 request로 진행하는 정적 페이지 크롤링과 다르게 동적 크롤링은 랜더링 과정 또한 고려해줘야 하고 또 성능에 대해서도 고민해 줘야 되는 부분이 많았다. 나 같은 경우 이번 프로젝트를 Selenium으로 진행했는데, 크롤링 과정에서 성능이슈를 이겨내기 위해서 노력해야만 했다.
또한, 회사들 입장에서 크롤링하는 것을 좋아할 리 없기에 요청 수에 대해서도 고민해야만 했다. 이번 프로젝트는 크롤링한 정보를 통해서 뭔가 새로운 비즈니스를 하는 것이 아니라 취준생들에게 해당 구직 사이트로 쉽게 가도록 해주는 것이기 때문에 진행했다. 하지만, 분명히 지속적인 크롤링은 서버에 부담일 것이기 때문에 되도록이면 적은 숫자의 요청에 여러 개의 공고를 가져올 수 있도록 설계했다. 최소한의 요청으로 최대한의 정보를 가져오는 방식으로 설계를 진행한 것이다.(물론 저정도의 사이트 서버가 시간당 4~50번이 부담일리는 없겠지만..)
마지막으로는, 로깅 설정에서의 난맥이 있을 것 같다. 세 사이트를 하나의 로그에서 진행하자니 그것은 나중에 가독성이 없을 것 같았고, 또 어떤 레벨로 로깅을 할지에 대해서도 고민해야만 했다. 이번의 경우에는 하루가 지날 때마다 당일 날짜를 기준으로 하는 로그파일을 제작, 기록하도록 제작하였고 로깅 레벨은 INFO, ERROR 두 가지만 이용해서 진행했다. ERROR 로그가 작성되면 내게 슬렉으로 DM이 오도록 해서 에러처리에서도 빠르게 대응할 수 있도록 했다.
개발 후 반응
42 커뮤니티에는 약 1400명이 소속되어 있고, Slack 커뮤니티에 활동적인 인원은 100명 내외이다. 이번 프로젝트의 경우에는 24시간 안에 100명 이상이 내가 만든 프로그램을 사용하고 싶어 했고, 그렇게 수많은 유저를 바로 획득할 수 있었다. 심지어 개발 프로토타입 때부터 많은 사람들이 관심을 가졌고, 덕분에 입소문을 바탕으로 많은 사람들이 애용하는 서비스를 하나 더 만들어볼 수 있었다.
솔직히 개발의 난이도나 기술적 완성도가 높은 프로젝트는 아니었지만, 사용자의 니즈를 파악해서 그에 맞는 프로그램을 제작했다는 것에서 이번 프로젝트는 의미가 있는 것 같다. 좋은 프로그램이란 가장 기술적으로 훌륭한 프로그램이 아니라, 가장 사용자를 만족시켜 줄 수 있는 프로그램이지 않을까? 사람들이 사랑해 주는 프로그램을 만드는 것은 늘 즐거운 것 같다 :)
'프로젝트 > 42프로젝트' 카테고리의 다른 글
간단하게 슬렉 봇 만드는 방법 (8) | 2023.07.24 |
---|---|
토이 프로젝트 확장(42JOBS, 이제는 카톡으로도!) (0) | 2023.07.24 |
42Benefit 개발 회고 (2) | 2023.04.28 |
15분이면 충분하다 배포방법(AWS EC2, Vercel) (0) | 2023.03.31 |
비용을 아끼자(모닝글로리 웹페이지 제작 5) (0) | 2023.03.17 |