아래 뜨는 Download 나 PC App Store는 모두의 프린터와 상관없는 광고입니다!!
특히 PC App Store는 악성 소프트웨어이니 절대 클릭하지 마세요!!
모두의 프린터는 어떠한 경우에도 본인인증, 회원가입, 카드결제를 요구하지 않습니다.
다운로드를 유도하는 애드센스 광고를 피로곰이 배포하는 프로그램들의 다운로드 링크로 착각하지 않도록 주의하시기 바랍니다. 피로곰이 배포하는 모든 프로그램은 본인인증, 회원가입, 이용료 결제 없이 무료로 사용가능합니다.
많이 찾는 글들...
  1. MS윈도 디펜더(바이러스 백신) 예외설정 방법
  2. ghostscript 실행파일 경로가 지정되어 있지 않아서 변환할 수 없습니다.
  3. PC App Store 제거 방법
  4. Ghostscript/GhostPCL 설치 안내
  5. 파일 다운로드가 차단되는 경우
  6. 내 컴퓨터의 32비트,64비트 여부 아는법
  7. 'Windows의 PC 보호' 문제
  8. 모두의 프린터 실행후 환경설정창 뜨지 않고 무반응
  9. Ghostscript PDF변환 불가. Can't load Ghostscript DLL
  10. 대법원 인터넷 등기소, 전자소송, 경매,전자공탁등 대법원계열 사이트관련
  11. 모두의 프린터 사용후 네트워크 장애가 발생하는경우. (대법원 인터넷등기소 등)
  12. 출력시 모두의 프린터가 강제종료 되는 경우.'지원하지 않는 PDF또는 가상 프린터입니다.'
  13. 오픽(OPic), 연결상태 확인 불가 프린터, 등록되지 않은 프린터(MarkAny e-PageSAFER)
  14. YBM 토익성적표 관련(정상적인 프린터로 출력을 진행하시기 바랍니다)
  15. 리포트뷰어(ReportViewer) 관련(특수목적프린터, 문서변환 프로그램을 제거해주세요)
  16. 인터넷증명발급센터 서트피아(Certpia) 관련 안내
  17. 인강사이트 관련 - 출력에 매우 오래 걸림, PDF파일 버벅거림, PDF여는데 오래걸림 등등
  18. '잘못된 프린터 데이터를 수신하였습니다.' 문제
  19. MS서피스, 삼성 갤럭시북 등 ARM기반 랩탑, '잘못된 프린터 데이터를 수신하였습니다.' 문제

Go로 웹크롤러 만들기 #1

원래 유튭 영상으로만 어떻게 해보려고 몇 번 녹화도 해보고 라이브도 진행해보고 했으나.. 영상보단 글로써 전달하는 게 효율적이란 생각이 들어서 .. 영상 대본 등을 이용해서 먼저 글을 올립니다. 영상은 포스트 작성후 이 글의 내용에 대해 간단히 설명하는 정도로 넘어가도록 하겠습니다.

유튜브 피로곰TV채널의 구독자와 시청시간이 충족돼서 광고도 달수 있게 되고 커뮤니티 기능도 사용 가능해지면서 전부터 생각하던 대리코딩과 관련한 글을 작성했고 한분께서 크롤링과 관련된 문의를 하셨습니다. 솔직히 별로 하고 싶지 않은 류의 프로그램이라 대리코딩 콘텐츠를 할까 말까 고민한 가장 큰 이유 중 하나가 이놈 때문인데 그래도 요청이 왔으니 진행을 해보겠습니다.

크롤러를 별로 하고 싶지 않았던 이유를 짧게 말해보자면..  크롤러가 요구되는 기술의 수준이 높은건 아닌데 그 종류와 양이 좀 방대하고 끝없이 계속 무언가를 해줘야만 유지가 되는 류의 프로그램이어서 그리 개발을 선호하지도 누군가에게 알려주는것도 탐탁지 않아하는 편이긴 합니다만.. 여하튼 시작은 해보겠습니다.

첫 요청을 하신 YOY님은 경제나 부동산, 해외뉴스 같은 정보를 크롤링하는 프로그램을 만들고 싶다 하셨고, 컴퓨터 사용 수준은 초급, 프로그래밍 수준은 학원에서 자바를 뗐다는 거 보니 자바 과정을 마치셨다? 정도로 이해하면 될 것 같습니다.  웹개발기준이라 하시는 걸 보니 웹과 관련된 Spring 이라던지 그런류의 것들을 배우는 과정을 수료하신 듯합니다.

WSJ면 월스트릿 저널?이겠죠? CNBC는 방송사일 테고 블룸버그는 증권 관련한 뭐 그쪽 회사인 걸로 알고 있고, 그런 사이트들에서 어떤 정보를 크롤링을 통해 취합하고 싶다, 그걸 위한 프로그래밍을 하고 싶으시다는 겁니다..

그 외에는 어떤 언어를 사용해야 하는가에 대한 고민이 있으시고, 자바가 무겁다는 의견이 있어서 파이썬이나 C++로 해야 하나를 고민 중이며. 인터넷에서 구할 수 있는 소스코드들을 가지고 이런저런 시도는 해보셨으나 고생 중이시다 정도로 이해하겠습니다.

두 번째로는 뭐 어찌됐든 동작하는 코드? 같은걸 구하신 듯한데.. 그걸 통해 외국 뉴스 사이트 같은 데를 크롤링을 시도를 하고 있는데 되지 않는다 사이트에서 막는 것 같다.

마지막으로 개발자 경력직들이 어떤 식으로 코딩을 해 나가느냐에 대한 부분을 물으셨습니다. 이분 같은 경우에는 우선.. 무언가 목적한 프로그램은 있고 프로그래밍에 조금 발은 담가 보았으나 뭔가 안 되는 것들만 하나 가득인 그런 상황이신 건데요 원래 프로그래밍이 늘 그렇습니다 경력이 있던 없던 처음 해보는 프로그램의 개발과정은 누구나 같습니다 30년을 했어도 그렇습니다.

단지 넘어온 고난의 수와 크기가 다르기에 얼마나 빨리 적응하고 해결점을 찾느냐에 대한 노하우가 다른 뿐이지요.. 우선 언어의 선택이나 개발 방법 그런 걸 논하기 전에 경력이 일정 수준 이상 되는 프로그래머들 물론 제가 모든 개발자들의 머릿속을 아는 건 아니지만 최소한 저나 제가 키운(?) 개발자들은 적어도 이런 과정을 거치는 편이니 몇 가지 집고 넘어가겠습니다.

최근의 컴퓨터나 모바일 환경에서 세상에 전혀 존재하지 않는 기술들로만 한마디로 쌩으로 하나부터 열까지 모든 기능을 전부 다 만들어야 하는 프로그램은 거의 없습니다.  그런 관계로 만들려고 하는 프로그램에 사용되는 기반 기술들 흔히들 말하는 프로토콜이나 정해진 표준이나 그러한 것들을 포함하는 프로그램을 만들려 하는 경우에는 어떤 것들을 포함시킬지에 대해 우선 리스트업을 하고, 알고서 시작을 해야 합니다.

이번 시간에 다루는 것은 크롤러에 대한 내용이니 크롤러를 예를 들자면 크롤러를 만들어 보겠다는 사람들조차 그저 인터넷 상의 데이터를 수집하는 프로그램이다라는 정도만 생각하지 그 크롤러가 어떤 기능들이 모여져서 동작하게 되는지 까지는 생각해보지 않은 상태로 막연히 크롤링을 해야 하는데 어떻게 만들어야 하나요?  라는 질문만을 하시는 분들이 많이 계십니다.

사실 크롤러뿐 아니라 모든 프로그램을 만들 때는 고려해야 할 사항이긴 합니다만.. 기본적으로 크롤링을 하는 프로그램에 포함되는 기술? 기능들을 보자면 우선 인터넷에 존재하는 데이터를 취급할 테니 네트워크 통신에 대한 부분이 돼야겠지요? 일반적으로 프로그래밍으로 네트워크를 하는 데 사용되는 것은 Socket 프로그래밍 입니다. 그리하여 기본적으로 Socket API 프로그래밍을 통한 TCP/IP 프로그래밍이 가능해야겠지요. 그래야 어딘가 접속을 하고 데이터를 요청하고 수신을 받을 수 있으니까요.

위키 등에서 관련 정보를 쉽게 찾아볼 수 있습니다. 참고만 하세요 ㅎㅎ  인터넷을 통해 데이터를 주고받게 되고 나면 주고받을 데이터의 형태를 규정한 프로토콜이 필요해지겠지요. 보통 크롤링은 웹사이트를 대상으로 하니까 우선 HTTP(Hyper Text Transfer Protocol) 는 기본적으로 가능해야 하고.. 최근에는 통신 구간을 암호화 하는 HTTPS(HTTP Secure) 에 대해서도 구성이 필요할것이고 HTTP프로토콜에 암호화를 추가하기위한 SSL 이나 TLS 같은 암호화 기술에 대해서도 처리가 필요해집니다.

이제 통신도 가능해지고 프로토콜도 처리가 되었다면 수신된 데이터를 해석을 해야 하겠지요 웹페이지는 보통 HTML(Hyper Text Markup Language)를 사용합니다. 

하지만 어떤 프로그래밍 언어나 스크립트도 결국 컴퓨터가 알아먹는 구조로 만들어진 경우라

이런 HTML내용중 내가 필요한 정보만을 추출을 하기 위해선 HTML을 프로그래밍적으로 수월하게 접근하기 위해 손을 좀 대줘야 합니다. 파싱(Pasing)을 한다 하고 이런 짓을 해주는 프로그램들을 파서(Parser)라고 합니다.

HTML 과 연관된 기술들로는 Java Script 나 Stylesheet(CSS),  그리고 자바스크립트에서 사용되는 Json 이라는 데이터 포맷에 대한 것들도 그냥 같이 한 몸이라고 생각하시면 되겠고요. 이러한 기능들의 나열을 사전조사라고 볼 수 있는데 이 사전 조사된 필요사항들에서 계속 세부 내역들이 가지를 쳐가면서 빈 곳이 채워져 가는 것이 프로그램의 개발이라고 할 수 있습니다.

방법론 적인 것은 사람마다 많은 차이가 있을 수 있습니다. 경력이 오래되고 많이 해본 개발자일수록 위의 과정들이 그냥 머릿속에 가지고 있는 것만 가지고 바로 코드만 작성하면 될 수도 있고 사람에 따라서는 늘 어떤 문서나 플로우 차트 같은 것을 만들기 좋아하는 사람이 있을 수도 있고요 정말 가끔 전통적인 순서도 같은 것을 작성하거나 작성을 강요하는

변태들도 존재하긴 합니다. 개인적으로 요즘 같은 환경이 정말 개발자에게는 축복받은 환경이라고 생각하거든요 인터넷엔 수많은 예제와 레퍼런스들이 존재하고 있으니까요.

현대의 개발은 자료의 수집이 40% 실질 개발이 60% 정도라 생각합니다. 언어에 따라서는 자료수집, 검색이 80%가 넘는 경우도 있을 수 있지요. 그만큼 레거시한 개발의 경우에는 엄청난 생산성을 보여줄 수 있는 시대니 까요. 기본적으로 필요한 것들이 나열이 되었으면 어떤 언어로 개발을 해야 할 것인지를 선택하기에 앞서 고려할 것이 있습니다.

  1. 프로그램이 나 혼자 쓸 것이냐 배포를 목적으로 할 것이냐
  2. 어떤 OS를 대상으로 할 것이냐(윈도, 리눅스, 맥OS등 )
  3. UI(User Interface)를 어떤 방향으로 구성할 것이냐

우선 프로그램을 나혼자 쓸 거냐 배포를 목적으로 하느냐는 기본적으로 모든 것을 혼자서 다 만드는 게 아니라 세상에 존재하는 수많은 오픈소스의 버프를 받아 개발을 해나가는 요즘의 개발환경에서 라이선스라는 족쇄에 얼마나 자유로울 수 있느냐 때문에 중요합니다.

물론 만든 코드를 전부 공개하겠다 마음먹으신다면야 별로 신경 쓸 것은 아니지만, 간혹 라이선스 생각 안 하고 AGPL이나 GPL같은 강력한 정책이 포함된 오픈소스를 끌어다 쓰고 낭패를 보시는 경우들도 많이 있습니다. 배포를 목적으로 개발을 할 때에는 그만큼 내가 끌어다 쓰려하는 오픈소스들의 라이선스를 꼼꼼히 확인해야 할 필요성이 있기 때문에 중요하고요.

다른 면으로는 타인의 컴퓨터에서 동작하는 프로그램을 만든다는 건 상태를 알 수 없는 환경에 대응을 해줘야 한다는 말이 됩니다. 개인적으로 혼자 쓰는 프로그램은 멋대로 편한 대로 만들어 쓰면 되고 내 컴퓨터에서 정상 동작한다면 그만이지만 배포를 하게 된 순간 알 수 없는 수많은 문제들에 대응하여 어디서나 동작 가능한 프로그램을 만들어야 한다는 게 됩니다. 

두 번째 어떤 OS를 대상으로 하느냐는 개발언어 시장에는 일반적으로 애초에 다양한 플랫폼에서의 사용을 고려하여 개발된 언어들이 있으며, 특정 OS에서만 사용되는 언어들도 존재합니다.  대표적으로 파이썬이나 Go, Node.js, Java 같은 언어들은 현존하는 대부분의 OS들에서 사용 가능한 패키지를 제공하고 있고요.

맥OS의 Xcode를 통한 맥, 아이폰, 아이패드등의 전용 프로그램들 이라던지,  MS의 Visual Studio의 윈도 API나 MFC, C# 같은 놈들은 MS의 윈도에서 동작하는 전용 프로그램을 위해 사용된다고 보면 됩니다. 실상 윈도 API, MFC이런것들은 언어라기보다는 도구의 입장이지만 어떤 것을 선택하느냐에 따라서 붙여 쓸 수 있는 오픈소스들이 차이가 있으니까요. 어떤 언어와 도구를 가지고 개발을 할지에 대한 선택에 있어서 가장 중요한 것이 OS의 선택이라 언급하고 넘어갑니다.

마지막으로 UI(User Interface)에 대한 부분은 어쩌면 두번째 OS와도 연관이 있을 수 있습니다만. 그것보다는 크게 나누자면 일반 윈도 프로그램들과 같은 형태의 프로그램을 원한다면 윈도API 또는 MFC, C# 을 선택해야 하고, 웹기술을 사용하려 한다면 코도바(Cordova)나 일렉트론(Eletron) 같은 플랫폼을 이용하여 하이브리드 앱 형태로 진행을 해야 할 것입니다.

창형태를 가지지만 MFC나 API나 C# 같은건 싫다 하면 Qt나 Gtk 같은 리눅스에서 파생된 또 다른 형태의 UI개발을 하실 수도 있고, 간혹 윈도 따윈 모르겠고 게임만 개발해봤다는 고인 물 변태들중에는 OpenGL이나 SDL 같은걸로 게임 만들듯이 UI까지 직접 다 그려주겠어!라는 변태들도 분명 존재합니다만.

전 여러분들이 그래도 정상인의 범위에 계시길 바라기에 여튼간에!그런 이유로 언급을 하고 넘어갑니다. 우선 배포용 프로그램에 대한 것은 갈길이 머니까..개인이 혼자 쓸 것을 기준으로 하고요

어떤 OS를 대상으로 하느냐는.. 가장 친숙한 윈도를 기준으로 하겠습니다. 마지막으로 UI에 대한 부분은 .. YOY님이 자바와 웹 쪽에 대해 그나마 좀 지식을 가지셨다 하시고 크롤링은 일반적으로 UI가 크게 필요한 편은 아니니 우선 UI필요 없이 기능 구성에 대한 것을 기본으로 진행하고 UI적인 요소들이 필요한 경우 HTML을 통한 하이브리드 앱 같은 형태로 구성하도록 하겠습니다.

자 이제 어떤 언어를 선택할 것인가를 놓고 보자면 크롤링에서 선호하는 언어는 보통 Managed 언어들이 대부분입니다흔히 말하는 파이썬, Java, Java Script, Go 같은 것들이겠지요 대리코딩 요청시 YOY 님이 말씀하신 Java가 무거워서 .. 라는 부분은 일정 부분은 맞고 일정부분은 틀리지만 솔직히 개인적으론 Java를 써야만 하는 회사에 취업을 목적을 하시는 게 아니라면 자바를 권장하진 않습니다.

그러면 질문하신 것에서 남는 것이 C++ 로 갈 거냐 그 외의 것으로 갈 것이냐 인데.. 크롤링에 C++는 권장할 수 없겠네요. 가장 큰 이유로는 일반적으로 웹에서 사용되는 텍스트 인코딩은 UTF-8이 주류입니다만 C나 C++에서의 유니코드 처리가 조금 짜증 나거든요. 애초에 C/C++ 가 태동한 시절에는 유니코드라는 개념 자체가 없었기 때문에 좀 자잘하게

신경 쓸 것들이 많아집니다.

그리고 C/C++로 개발을 하실 경우 직접 모든 걸 다 짜실게 아니면 Socket, Http, Https를 비롯한 여러 가지를 하나하나 다 공개된 코드를 찾아서 포함시켜야 하는데 그러한 작업 과정에서 경험 없는 초보 개발자들은 수많은 링크 오류나 기타 컴파일 환경에 따른 수많은 조정사항들에 치여서 포기합니다.

30년을 개발한 저 같은 사람도 남이 개발한 코드를 내 코드에 포함시키는 과정은 그리 즐거운 과정은 아니니까요.. 그러한것을 단 하나만 끌어다 포함시키려고 해도 할 일이 태산인데 여러 가지를 다 가져다 합친다? 쉽지 않습니다.

그런 이유로 언어는 제가 애정해 마지않는 Go를 기준으로 진행하겠습니다.  좋아하기도 하지만 기존에 1일1Go에서 진행해놓은 자료들이 있어서 환경 구성이나 그런 거에 시간을 할애하지 않아도 되고 제 기준으로도 이 언어를 가지고 수많은 것들을 만들어 왔기에 추천하는 입장으로 Go로 진행하겠습니다. ( 모두의 프린터, 모두의 플러그, 모두의 자막.. 모두 Go로 만들었습니다 )

옛날 그 언젠가는 자신이 하는 언어가 최고라며 쌈질하던 부류의 사람들이 참 많던 시절도 있었지만.. ( 지금도 일부 그런 성향의 개발자들이 있긴 하지만 .. ) 자연스럽게 일정 수준 이상의 경력을 가지게 되면 하나 이상의 언어를 사용하고

만들려고 하는 목적한 프로그램이 무엇이냐에 따라 좀 더 편한? 생산성이 높은? 유지관리에 이점이 있는 언어를 선택해서 만드는 편입니다.

Go환경 설정이나 코드 편집을 위한 vscode 설치와 관련된 건 피로곰TV 1일1Go영상과 제 블로그의 1일1Go 카테고리의 글들을 참고하시기 바랍니다.

다음 편부터 실질 코드 작성에 대한 글을 진행하겠습니다.

많이 찾는 글들...
  1. MS윈도 디펜더(바이러스 백신) 예외설정 방법
  2. ghostscript 실행파일 경로가 지정되어 있지 않아서 변환할 수 없습니다.
  3. PC App Store 제거 방법
  4. Ghostscript/GhostPCL 설치 안내
  5. 파일 다운로드가 차단되는 경우
  6. 내 컴퓨터의 32비트,64비트 여부 아는법
  7. 'Windows의 PC 보호' 문제
  8. 모두의 프린터 실행후 환경설정창 뜨지 않고 무반응
  9. Ghostscript PDF변환 불가. Can't load Ghostscript DLL
  10. 대법원 인터넷 등기소, 전자소송, 경매,전자공탁등 대법원계열 사이트관련
  11. 모두의 프린터 사용후 네트워크 장애가 발생하는경우. (대법원 인터넷등기소 등)
  12. 출력시 모두의 프린터가 강제종료 되는 경우.'지원하지 않는 PDF또는 가상 프린터입니다.'
  13. 오픽(OPic), 연결상태 확인 불가 프린터, 등록되지 않은 프린터(MarkAny e-PageSAFER)
  14. YBM 토익성적표 관련(정상적인 프린터로 출력을 진행하시기 바랍니다)
  15. 리포트뷰어(ReportViewer) 관련(특수목적프린터, 문서변환 프로그램을 제거해주세요)
  16. 인터넷증명발급센터 서트피아(Certpia) 관련 안내
  17. 인강사이트 관련 - 출력에 매우 오래 걸림, PDF파일 버벅거림, PDF여는데 오래걸림 등등
  18. '잘못된 프린터 데이터를 수신하였습니다.' 문제
  19. MS서피스, 삼성 갤럭시북 등 ARM기반 랩탑, '잘못된 프린터 데이터를 수신하였습니다.' 문제

모두의프린터에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기