Wednesday, July 20

대학교 식단 크롤러


%ec%8a%a4%ed%81%ac%eb%a6%b0%ec%83%b7 2016 07 20 %ec%98%a4%ed%9b%84 11.03.41

프로젝트 소개

최근에 디연을 통해서 스타트업 유나이어드(www.uniad.biz) 의 개발자이자 카이스트 대학원 과정을 밟고 있는 '최창민'님을 알게되었습니다. 함께 일을 해보고 싶다는 제안을 받았고 처음 받은 일이 식단 크롤링 작업입니다. 이전에는 개인적으로 사용하는 서버를 설정하고 제 방식에 맞도록 구현하는 데에 익숙했는데, 함께 일하는 다른 개발자가 미리 구현한 스키마와 해당 서버의 설정에 맞도록 제가 맞춰가는 과정이 정말 힘들었지만 얻은 것이 많습니다.

150통 이상의 메일을 주고 받고, 확인 사항이 있을 때는 화상 미팅을 했습니다. 또한 요구사항이 바뀔 때마다 바로바로 적용해서 보고를 하는 방식으로 일이 진행되었습니다. 돈을 받고 한 작업은 아니지만, 함께 일하는 과정에서 멘토이신 '최창민'님의 말씀 하나하나가 월급을 뛰어 넘는 말씀이었다고 저는 생각합니다. 크롤링 작업 자체는 이전에 해본 경험이 있어서 시간 싸움이었지만, 대학교 페이지마다 인코딩이 안된 페이지, url로 접속이 불가능한 페이지 등 예외사항들이 많아서 하나하나 해결해 나아가면서 크롤링 구현에 탄탄함을 더해준 프로젝트입니다.

프로젝트 요약

아래 대학교 목록에 해당하는 대학교에서 제공하는 식단을 추출하여 데이터베이스에 입력하는 작업입니다.

  1. 동덕여자대학교(11)
  2. 덕성여자대학교(2)
  3. 한성대학교(3)
  4. 한양대학교 에리카캠퍼스(10)
  5. 인하대학교(9)
  6. 명지대학교 인문캠퍼스(4)
  7. 삼육대학교(5)
  8. 광운대학교(8)
  9. 동아대학교 승학캠퍼스(6)
  10. 동아대학교 구덕/부민캠퍼스(7)
    ()안에 있는 내용은 Univ_id 즉, 대학 코드입니다.

프로젝트 풀이

주요 알고리즘 1 - 각 대학별로 분류 및 복구 작업

각 대학을 하나의 클래스로 보고, 각 상황에서 문제가 일어나면, 복구 후 다음 대학 작업을 이어갑니다.

begin
  duksung = Duksung.new
  duksung.scrape
rescue
  puts 'rescued...'
end

begin
  hansung = Hansung.new
  hansung.scrape
rescue
  puts 'rescued...'
end

주요 알고리즘 2 - Json으로 만들어서 테이블에 입력

우선 Content와 Price로 나누어 데이터를 완성하고, Json형태로 만들어서 완성합니다.

eachmenus = JSON.generate({:name => t.text.strip.split("\r\r")[1].gsub("\n","").gsub("\r",",").gsub("*석식*,",""), :price => ''})

Diet.create(
    :univ_id => 2,
    :name => "학생식당",
    :location => "학생회관 2층",
    :date => @default_dates[currentDate],
    :time => 'dinner',
    :diet => ArrJson(eachmenus),
    :extra => nil
    )

def ArrJson(str)
    tmp = ""
    tmp += ("[" + str + "]")
    tmp
end #ArrJson end

프로젝트 소감

이 프로젝트는 소스 코드의 어려움 보다는 고객(다른 개발자와 기획자들)의 요구에 맞도록 실시간으로 의견을 반영하여 개발하는 과정을 배운 의미있는 프로젝트라고 생각합니다. 당장 내가 할 수 있나 아닌가보다는 "이런 문제가 있으니까 해결해주세요.", "이런 형태로 만들어주세요.", "개발 환경은 이렇게 해야합니다." 등등의 조건과 요구사항에 맞추어 일을 해야하는 상황을 경험할 수 있었습니다. 자유분방하여 하고 싶은데로만 구현을 했던 이전과는 달리 고객의 요구사항에 맞춰보는 좋은 경험을 할 수 있었습니다. 또한 카카오톡 메시지보다는 전문적인 문서 형태로 정리하여 메일을 주고 받는 등 회사에서만 경험할 수 있는 일 처리 방식을 배울 수 있었습니다. 또한 부분적이었지만, 쉡 스크립트를 작성하고 그 파일을 크론탭에 올리는 방식 그리고 크론탭의 세밀한 시간 설정 등에 대해서 공부할 수 있는 기회가 되었습니다.


공유하기