전체 글 목록 (27) / 제목만 보기

Django 프레임워크로 RSS 피드 만들기 

2020. 02. 23 IT/컴퓨터 > Django
블로그를 네이버 등 검색엔진에 등록하려면 RSS 피드를 제출하는 것이 좋다고 한다. 사실 예전부터 RSS라는 말은 많이 들어 봤지만 실제로 사용해본 적이 없고, 주변에서 RSS를 통해 구독하는 사람도 본 적이 없어서 어떤 것인지 개념이 모호한 상태였다. 새로 RSS 피드를 만들면서 간단히 공부해 보았다.   RSS는 Really Simple Syndication, 혹은 Rich Site Summary 의 약자라고 하는데, syndication은 또 뭔가? 전통적인 사전적 의미는 기사, 사진, 텔레비전 프로그램 등을 여러 신문사 등에 파는 행위를 syndication이라고 하는 것 같다. 요즘 주로 쓰이는 의미는 블로그등 웹사이트의 컨텐츠를 타겟 구독층에 노출시키는 것을 말한다.   Really Simple Syndication, 즉 자기 글을 아주 간단하게 사람들한테 배포할 수 있는 기술이라는건데..실제로 구동되는 방식은, 사이트에서 RSS 피드를 제공하면 경우 방문자가 관심있는 피드 주소들을 RSS 리더 등의 프로그램을 이용해서 등록해 둔다. 그러면 사이트에 새 글이 올라오는 경우 그 사이트들을 일일이 돌아다니지 않아도 RSS 리더 프로그램이 자동으로 새 글이 떴다는 것을 알려주게 된다. 그렇게 해서 구독자는 쉽게 여러 관심 사이트에 올라오는 새로운 컨텐츠를 확인할 수 있고, 반대로 매체 입장에서도 컨텐츠를 쉽게 사람들에게 전달하는 채널이 되는 것이다. 두번째 약자인 Rich Site Summary 라는 표현은 좀 더 기술적이고 직설적인 표현인데, 개념은 이전에 기술한 사이트맵 (sitemap.xml) 과 비슷한것같다. 사이트의 컨텐츠 내용을 요약해서 보여 주는 페이지라는 얘기다. 참고: Django sitemap 프레임워크를 이용해서 사이트맵 만들기 차이점은, 사이트맵은 간단히 제목과 링크 정도만 제공하는 대신 사이트 전체의 컨텐츠를 모두 요약해서 보여주는 것이 목적인 반면 RSS 피드는 전체 컨텐츠를 다 전달하는 것이 아니라 주로 최근에 발행된 컨텐츠를 모아서 전달해주는 것이라는 점이다. RSS 의 목적상 방문자가 사이트에 직접 들어오지 않아도 내용을 알 수 있어야 하므로 사이트맵처럼 제목 위주의 간단한 요약이 아니라, 글 본문과 첨부된 사진같은 해당 컨텐츠의 내용 전…

Django sitemap 프레임워크를 이용해서 사이트맵 만들기 

2020. 02. 20 IT/컴퓨터 > Django
  블로그를 만들고 구글과 네이버 등에 등록을 하고 보니 사이트맵을 제출해야 한다고 한다. 사이트맵이라고 하면 사용자들이 사이트 구조를 파악하기 쉽도록 메뉴를 보기좋게 나열해 놓은 페이지만 생각했었는데, 알고보니 XML 파일로 검색엔진이 사이트 내의 링크 목록을 크롤링하기 쉽게 알려주는 작업이 필요한 것이었다.  사이트맵이 없더라도 검색엔진이 알아서 페이지들을 크롤링하고 링크를 수집할 수는 있지만, 사이트 구조가 복잡하거나 쉽게 노출되지 않는 페이지가 있는 경우에는 사이트 내의 콘텐츠가 검색 결과에 잘 노출되지 않기 때문에 미리 링크가 정리된 XML 사이트맵을 제공해 주는것이 좋다고 한다. 구글과 네이버 검색 등록시에 사이트맵이 제출되어 있으면 더 좋은 점수를 받는다. 웹에서 사이트 주소를 입력하면 XML 파일을 생성해주는 서비스를 하는 사이트들이 있어 그런 곳을 이용하면 쉽게 만들 수 있다고 한다. 하지만 Django로 작업을 한 경우에는 Django 내에 사이트맵을 생성해주는 프레임워크가 내장되어 있어 이것을 이용하면 사이트의 내용이 추가될 때마다 자동으로 업데이트되는 XML 사이트맵을 쉽게 만들 수 있다. 이 포스트에서는 Django를 이용해 사이트맵을 만드는 방법을 정리해 본다. Django 공식 documentation 내용을 주로 참고했다. #1. Sitemap 프레임워크는 sites 프레임워크가 활성화 되어 있어야 동작한다. 우선 프로젝트의 settings.py 파일의 INSTALLED_APPS 목록에 'django.contrib.sites'와django.contrib.sitemaps'   를 추가해 주고 settings.py 안의 적당한 곳에 'SITE_ID = 1' 이라고 지정해 준다.   #2. settings.py 안의 TEMPLATES 설정에서 다음 두 가지 설정이 되어있는지 확인한다. Django 프로젝트를 생성할때 디폴트로 생성되므로 바꾼 적이 없다면 그대로 두면 된다.   #3. 사이트맵의 url 을 설정해 주어야 한다. 프로젝트의 가장 상위의 urls.py 에 다음을 추가해 준다.   이제 도메인/sitemap.xml 에 접근하면 Django 가 동적으로 sitemap 을 생성해 준다. Django 는 sitemap.xml 의 위치를 기준으로 …

Django 프로젝트에서 robots.txt 파일 제공하기 

2020. 02. 17 IT/컴퓨터 > Django
  Robots.txt 는 웹페이지의 자료를 크롤링하는 검색 엔진 봇들을 위해 어떤 페이지는 정보를 수집해도 되고, 어떤 페이지는 수집을 금할 것인지 알려주는 역할을 하는 간단한 텍스트 파일이다. 검색 엔진 봇들은 홈페이지의 링크를 타고 다니면서 정보를 수집하고 이를 검색 결과에 보여 주므로 홈페이지나 블로그가 효과적으로 검색엔진의 검색 결과에 나오게 하기 위해서 설정을 잘 해 주는것이 중요할 것이다.   내용은 대략 알고 있었지만 사실 실제로 블로그를 만들기 전까지는 현실적으로 어떤 것이 문제가 될 만한 내용인지 와닿지는 않았다. 그런데 블로그를 도메인에 연결하고 공개를 하고 보니 한 가지 치명적인 문제가 발견되었다.    이 블로그는 글 작성후에 publish 버튼을 누르기 전에는 초안 상태로 저장되어 있다가 publish 버튼을 누르면 공개되는 방식으로 만들어져 있는데, 글 작성후 내가 분명히 publish 하지 않고 초안 상태로 놔 두었는데도 어느 정도 시간이 지나면 자꾸 저절로 publish 가 되는 버그가 발견된 것이다. 자동으로 실행되는 함수같은 것을 만든 적도 없는데 왜 이런 현상이 발생하는지 고민이었다.   그런데 서버 로그를 보니 구글 크롤링 봇이 페이지를 들러서 publish 링크를 누르고 다니는 것 같았다. 그래서 아직 publish 되지 않은 글들의 publish 링크에 봇이 접근하지 못하도록 해야 할 필요가 생겼다. 그동안 사이트에 robots.txt 가 없었는데, 구글 봇이 발간되지 않은 글들을 모아놓은 URL에 접근할 수 없도록 해당 내용을 robots.txt에 추가해 주었다. Django 프로젝트에서는 단순히 루트 디렉토리에 robots.txt만 업로드해 놓으면 검색 엔진이 파일을 찾을수가 없고, 따로 설정을 해서 제공해야 되는 것이라서 공부한 내용을 정리해 본다. 크게 세 가지 방법이 있다.   #1. 간단히 해결하려면 urls.py 에 직접 robots.txt 의 내용을 써주면 된다. lambda function 을 활용. 물론 HttpResponse 를 먼저 import 해주어야 한다. 이 방법은 파일 하나만 손대면 되어 간단하지만, robots.txt 의 규칙이 늘어나면  추가해주기가 번거롭고 urls.py 본연의 임무인 url 매핑 이…

Disqus 사용시 자동으로 링크가 생성되는 문제 해결 

2020. 02. 16 IT/컴퓨터 > Blogging
  블로그를 만들고 나서 댓글 시스템도 만들고 싶었지만 여력이 되지 않아 일단 댓글 전문 시스템인 Disqus를 포스트 하단에 달아 놓았다. 그러고 나서 블로그에 글을 올리다 보니, 본문에 웹사이트 주소같은 문자열이 들어가 있는 경우 저절로 링크가 생성되는 현상이 발생하는 것을 발견했다. 얼핏 보면 신기해 보이지만, 실제로 연결을 의도한것도 아닌 곳에 쓸데없이 링크가 되어 거슬리는 점이 많았다. 의도하지 않은 기능이므로 제거를 하고 싶었는데, 처음에는 본문 텍스트에 변화가 있으니 당연히 CK 에디터에 딸린 기능으로 생각했다. CK 에디터 관련 문서만 한참 뒤졌는데 도저히 원인을 찾을 수가 없어서 골치가 아팠다. 링크의 정체를 파악하기 위해 우선 개발자 도구(대부분 브라우저에서 F12키를 눌러 사용할수 있다)를 이용하여 inspection 을 해 보면, 다음과 같이 "vglnk" 라는 클래스가 달린 <a> tag이 자동으로 생성되어 있는것을 발견할 수 있다.     일단 급한대로 jQuery 를 이용해서 vglnk 클래스가 달린 <a> 태그를 제거해주는 코드를 짜서 페이지 아래에 덧붙여 놓았지만 아무래도 임시방편이라 마음에 들지 않았다. 근본적으로 링크 생성 자체가 되지 않게 하고 싶은데..구글링을 하다 보니 Disqus와 관련해서 발생하는 문제인 것을 알게 되었다. 괜히 애꿎은 CK에디터 관련 자바스크립트 파일만 수없이 고쳤다 복구했다 했네.   일단 Disqus 에 접속해서 댓글 창이 연동된 페이지의 Admin 창을 찾아 간다. 주소로 바로 찾아 가려면 로 가면 된다.     Admin 창에서 Settings -> Advanced 에 들어가 보면 Tracking 과 Affiliate link가 체크되어 있는것을 볼 수 있는데, 이것들을 해제해 주면 자동으로 링크가 걸리는 현상이 사라지게 된다.   Disqus 와 제휴된 사업자들의 웹사이트로 방문객을 유입시키기 위해 활성화된 일종의 광고 기능인데, 그대로 두면 꽤나 거슬린다. 설치 과정 중에 따로 설명을 못 본것같은데 슬쩍 끼워넣다니..어디 깨알같은 글씨 안에 포함되어 있었으려나? 다행히 알고 나니 해제하는 절차는 복잡하지 않고, Disqus 사용상 특별한 페널티 없이 해제할 수 있어서 바로 해제해 주었다.  여튼 댓…

Pythonanywhere.com에 Django 프로젝트 배포하기 (2) 

2020. 02. 15 IT/컴퓨터 > Django
이전편에 이어서 pythonanywhere.com 을 이용해 Django 프로젝트를 배포해 본다. 이전 글: Pythonanywhere.com에 Django 프로젝트 배포하기 (1)     #16. Web tab에 가면 [ 자기id.pythonanywhere.com ] 도메인 이름을 확인할 수 있는데, 이 시점에서 브라우저에 이 URL을 입력해보면 기본 Hello, World! 앱을 볼 수 있다.     #17. 우리가 만든 가상 환경의 이름을 Web 탭 중간쯤에 있는 Virtualenv: 섹션에 입력해준다. 주소는 [ /home/자기id/.virtualenvs/myproject ] 와 같다. 기억이 잘 나지 않는 경우 dashboard에서 Files 탭에 가서 루트 디렉토리에서 .virtualenvs/ 디렉토리로 들어가 보면 자기가 만든 가상환경의 이름을 확인할 수 있다. 가상환경을 등록하고 나면 아래에 그 가상 환경에서 작업할 수 있는 console 링크가 생긴다.   #18. Virtualenv 위의 Code: 섹션에 source code 를 입력해준다. 형식은 [ /home/자기id/프로젝트 디렉토리 이름 ] 과 같다. manage.py 가 있는 디렉토리가 맞는지 확인하고 입력한다.   #19. Code 섹션에 있는 WSGI configuration file을 클릭하면 편집기가 나온다. 중간의 Hello world 관련 부분은 주석 처리하거나 지워서 Hello, World! 화면이 나오지 않게 해주고   #20. 같은 파일 아래쪽을 보면 DJANGO 설정 부분이 있는데, 이 부분의 주석처리를 없애 실행되도록 만들어 주면 된다. 이때 path 에는 아까 Code 섹션에서 지정해준 source code 디렉토리 (manage.py가 있는) 를 지정해주고, settings 경로는 path 디렉토리 아래에 있는, settings.py 가 있는 디렉토리를 지정해 준다.   #21. 이제 거의 다 되었는데, 브라우저에 자기id.pythonanywhere.com 주소를 입력해 본다. 이때 다음과 같은 에러 메세지가 나올 수 있다. 이를 해결하기 위해 #20에서 지정한 settings.py 파일을 열고, ALLOWED_HOSTS 에 [ 자기id.pythonanywhere.…

Pythonanywhere.com에 Django 프로젝트 배포하기 (1) 

2020. 02. 15 IT/컴퓨터 > Django
  국내 웹 개발 환경은 PHP 가 대세이고 호스팅 업체들 역시 대부분 PHP 호스팅만 지원하는 실정이라 장고 프로젝트를 배포하기 쉽지 않다. 서버 호스팅을 하면 되겠지만 맨땅에 리눅스부터 깔고 세팅할 것이 많아 초보자로서는 어려운 점이 많았다. Pythonanywhere.com 이라는 사이트가 있는데, 번거로운 세팅작업을 최소화하고 쉽게 Django 프로젝트를 배포할 수 있도록 해 주는 사이트이다. 이름에서 알 수 있듯이 파이썬 언어에 최적화된 서비스를 제공한다. 프로젝트 배포는 가끔 하게 되는 일이라 처음 세팅 내용은 할때마다 약간씩 삽질을 하게 되는데, 오늘은 다음 프로젝트를 위해 복기도 할 겸 배포 작업을 순서대로 정리를 좀 해보려고 한다.   #1. GitHub을 통해서 배포가 이루어지기 때문에 미리 프로젝트를 Github에 프로젝트를 업로드해서 repository를 만들어 두어야 한다.   #2. 링크 - Pythonanywhere 간단한 가입과정을 거치면 요금제를 선택할 수 있다. 이 블로그는 Hacker 계정으로 운영중인데(월 5달러), 무료인 Beginner 요금제도 배포하고 실제 동작을 체크하는 데에는 문제가 없다. 다만 자기의 domain 을 쓸 수 없고 주어지는 도메인을 써야 한다. 가입후 등록한 email 주소로 오는 확인 메일을 confirm 해주면 정상적으로 계정을 사용할 수 있다.   #3. 로그인하면 볼 수 있는 Dashboard에서는 console 창을 띄우거나 직접 파일관리를 하는 등의 여러 작업을 할 수 있는데, 우선 배포를 위해 Web app을 만들어야 하므로 "Web" 탭으로 들어가 Add a new web app 을 클릭한다.       #4. 도메인 이름을 지정해줄 수 있는데, 아직은 도메인이 없으므로 자동으로 생성해주는 도메인을 사용한다. 만약 도메인을 연결하려는 경우에는 직접 도메인을 입력해주면 되는데, 이때 앞에 www가 포함된 도메인인지 아닌지를 정확히 입력해줘야 한다. 이것을 정확히 하지 않으면 오류가 나면서 페이지에 접속이 안되는데, 나중에 수정이 안되고 web app 전체를 지우고 다시 만들어야 되기 때문에 처음에 신경쓰는것이 좋다.   #5. Django 프로젝트이지만, "Django" 를 클릭하면 처음부터 D…

블로그를 오픈하며 

2020. 02. 14 Life > 일상
장고(Django)와 파이썬을 처음 배우고 간단한 블로그를 만드는 튜토리얼을 따라 하면서 시작했던 블로그 프로젝트. 독학을 시작한지도 1년이 넘었다. 예전부터 프로그래밍에 관심은 많았지만 전공이 아니라 그 동안 여러 삽질과 시행착오를 겪었다. 마음먹은 대로 화면이 나오고 서버에 올라간 프로그램이 내 의도대로 움직이는 것을 보면 신나고 재미있지만, 때로는 검색을 아무리 해 보아도 원인을 알 수 없는 오류로 누구한테 말도 못 하고 며칠씩 끙끙대기도 했다. 아직도 머리속에만 있고 구현하지 못한 기능이 많지만, 그래도 이 정도면 기본적인 운영은 가능하다고 생각되어 다시 블로그를 시작해 보려고 한다.   사실 이전에 이미 Django 기반의 블로그를 오픈했었는데, 그 때는 아무래도 너무 계획이 거창했던것 같다. 이것저것 주제를 광범위하게 잡다 보니 운영이 제대로 되지 않았다. 그리고 사실 블로그에 글을 올리는 것보다도 블로그를 프로그래밍하고 레이아웃 디자인하고 하는게 더 재미있어서 런칭한 후에 한동안 방치되기도 했고. 무엇보다도 하나씩 배우면서 실험하느라 소스 코드와 데이터베이스가 너무 지저분해지고 손쓸 수 없는 지경이 돼서 아무래도 정식 런칭 전에 한번 싹 정리를 해야겠다는 결심을 하게 됐다.   오랜만에 시간을 내서 코드의 지저분한 부분을 정리하고 데이터베이스도 싹 밀어버리고, 레이아웃도 조금 더 다듬었다. 그리고 호스팅 서버도 바꾸었다. 이전에는 pythonanywhere.com 에서 운영을 했었는데, 서비스가 파이썬에 최적화되어 있어서 사용도 간단하고 초보자로서 비교적 쉽게 프로젝트 배포가 가능한 장점이 있는 사이트다. 하지만 아무래도 알아서 해주는 부분이 많다 보니 작동을 하면서도 왜 이렇게 되는건지 알기 어려운 경우가 있었다.   조금 더 근본적으로 서버 세팅 등의 내용에 대해서도 한번 직접 해 보고 싶은 마음이 있어 microsoft Azure, Heroku 등에 도전해 보았었는데 Azure 는 아직 내가 쓰기에는 너무 지나치게 기능이 많고 복잡했고, Heroku는 미디어 파일등 관련해서 도저히 해결이 되지 않는 문제가 있어 잠시 보류하고 있던 차였다. DigitalOcean 이라는 서비스에 대해서는 이전에는 들어봤지만 시도를 해 보지 않았었는데, 이번에 새로 시작하면…
  • 1
  • 2
  • 3 (current)