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

프로젝트를 처음으로 github 저장소에 올리는 법 

2020. 06. 23 IT/컴퓨터 > 기타 프로그래밍
개발자라면 누구나 쓰게 되는 버전 관리 시스템 git. 왜 이렇게 익숙해지지 않는지 모르겠다. Git 관련된 명령어도 좀 쭉 정리를 해보고 싶은데, 매일 구글링에 허덕이며 겨우겨우 다른 프로젝트 개발을 하는 입장에서 다른 사람한테 쉽게 설명할만큼 이해가 깊지도 않고 시간도 없어서 여의치가 않다. 이게 여러 사람이랑 프로젝트를 하면 브랜치도 만들었다가 합쳤다가 다양하게 사용법을 익힐 수 있을지 모르겠는데, 방구석 취미 프로그래머로서는 뭐 대단한 기능을 만드는것도 없고 귀찮아서 한 브랜치에서 쭉 개발을 하게 되니 매일 git push, git pull 만 하게 된다. 그러다 보니 아주 가끔 하게 되는 일들이 기억이 안나서 매번 검색하기가 불편하다. 일단 오늘은 새로 저장소를 만들고 처음 프로젝트 세팅을 하는 방법을 정리해본다.   가장 기본인데 프로젝트 처음에 딱 한번 하고 그후로는 할 일이 없으니 매번 잊어버린다.   #1. 우선 commit 하는 사용자 정보를 설정해준다. 이제 commit 할때마다 위의 정보로 commit 이 되게 된다.   #2. 프로젝트의 root 디렉토리로 이동해서 초기화를 해준다. 초기화가 정상적으로 되면 branch 이름이 경로에 보이게 되는데, 처음에는 (master) 라고 나온다. 나중에 브랜치를 만들고 바꾸게 되면 괄호 안의 내용이 바뀔때도 있다.   #3. 미리 .gitignore 파일을 작성해서 업로드 시에 제외할 파일과 폴더를 설정 .gitignore (이름이 없고 확장자가 gitignore 이다) 파일은 프로젝트의 root 폴더에 작성해서 저장해주면 된다. 이 안에는 데이터베이스 파일이나 임시로 생성되는 캐시 파일, 기타 프로젝트에 필요 없지만 자동으로 생성되는 파일 등을 적어 놓으면 git 이 알아서 해당 파일들을 추적에서 제외해준다. * 그런데 이미 한번 push를 해 버린 파일이나 디렉토리는 단순히 .gitignore에 추가로 적어준다고 해서 지워지지 않는다. 이 때는 추가 작업이 필요하다 (다음 포스트에 정리)   #4. git 에서 추적할 파일을 전부 staging 해준다. 추가할 파일 이름을 지정해줄 수도 있지만 최초 프로젝트 업로드시에는 모든 파일을 올릴 것이므로 add . 을 해 주면 된다. add 한칸 띄고 마침표.  …

파이썬 문자열(string) 다루기 - 메서드 정리 

2020. 04. 23 IT/컴퓨터 > Python
  파이썬을 다루다 보면 가장 많이 하게 되는 작업 중 하나가 문자열을 다듬는 작업일 것이다. 문자열 관련된 메서드들을 정리해 본다. 파이썬의 문자열은 작은따옴표(' ') 또는 큰따옴표(" ") 사이에 원하는 문자열을 입력해서 생성할수 있고, 여러 줄로 된 문자열을 한번에 생성하고 싶은 경우 작은따옴표나 큰따옴표 3개를 시작과 끝 부분에 입력해서 생성할 수 있다.   파이썬의 문자열은 불변(immutable) 이므로 메서드가 원래의 문자열을 변경하는 경우는 없다. 메서드는 항상 새로운 문자열을 반환하므로 이 새로운 문자열을 저장해 줄 새로운 변수를 마련해 주어야 한다. 예전에 어떤 함수 안에서 text = text.replace('/', '') 식으로 새로 변경된 문자열을 다시 변수에 할당해 주어야 하는데 무의식중에 원래의 텍스트를 변경하는 것으로 생각했는지 text.replace('/', '') 라고만 적어놓고선 프로그램이 작동하지 않아서 한참 고생한 적이 있다.   str.capitalize() 문자열의 첫 글자만 대문자로 만들고 나머지는 소문자로 된 문자열을 반환한다. 이때 첫 문자가 영문 알파벳이 아닌 경우는 변환되지 않은 원래 문자 그대로이며 나머지 문자들만 소문자로 바뀐다.   str.lower() 원래 문자열에서 영문 알파벳 문자를 모두 소문자로 바꾼 문자열을 반환한다. 영문 알파벳이 아닌 문자는 무시한다.   str.upper() 원래 문자열에서 영문 알파벳 문자를 모두 대문자로 바꾼 문자열을 반환한다. 영문 알파벳이 아닌 문자는 무시한다.   str.title() 문자열을 타이틀 규칙에 맞게 바꾼 새 문자열을 반환한다. 영문 알파벳이 아닌 글자 다음에 나오는 첫 알파벳 문자는 대문자로, 알파벳 문자 뒤에 나오는 알파벳 문자는 소문자로 바꾸는 것이다. 보통은 공백 문자 다음에 나오는 알파벳을 바꾸는 목적이지만, 공백문자가 아닌 어포스트로피(') 등의 문자 뒤에 따라오는 문자도 대문자로 바꾸어 버리기 때문에 그다지 쓸모있는 메서드는 아닌것 같다. 공식 문서에서는 정규표현식을 사용해 딱 빈칸 뒤에 오는 알파벳만 대문자로 바꾸는 방법이 있다고 소개하고 있지만 그렇게 하면 배보다 배꼽이 더 커지는것같다..   str.casefold() 전부 소문자로 된 문자열을 반환한…

파이썬 datetime 모듈로 날짜, 시간 다루기 

2020. 04. 03 IT/컴퓨터 > Python
파이썬으로 코딩을 하다 보면 날짜, 시간에 관련 처리를 할 일이 많다. 이때 사용하게 되는것이 datetime 모듈이다. 시간을 처리하는 다른 모듈은 time 모듈이 있는데, time 모듈은 좀 더 근본적으로 시간에 관한 여러 가지 연산을 지원하고, datetime 은 기본적인 연산들은 지원하지만 주로 시간이나 날짜를 사용자에게 보여지는 형태로 포매팅하는데 중점을 둔 모듈이라고 한다.   Datetime 모듈의 하위 클래스는 datetime.date datetime.time datetime.datetime datetime.timedelta datetime.tzinfo datetime.timezone 이 있다. 시간대 적용은 pytz 모듈로 하는것이 편하므로 이 중 tzinfo 와 timezone 은 생략하고 나머지 모듈에 대해서 정리해 본다. 더 자세한 내용은 공식 문서 참조.   #1. datetime.date 이 클래스의 객체는 년월일 정보를 담고 있는 객체이다. 특정한 날짜의 객체를 만들려면 년, 월, 일을 전달해주면 되고, 오늘 날짜를 얻으려면 today() 를 이용한다.   today() 에서는 현재 작업중인 시스템의 로컬 날짜가 반환되게 된다.   date 객체에서 년, 월, 일 을 추출하려면 객체의 year, month, day 속성을 가져오면 된다.  와 같이 한다. 이때 반환되는 값은 int 타입이다.   date.weekday() 는 요일 정보를 숫자로 반환해준다. 월요일이 0이고 순서대로 올라가 일요일이 6이다. date.isoweekday() 도 같은 기능인데, 차이점은 월요일이 1이고 일요일이 7이다.   년월일 정보가 YYYY-MM-DD 식으로 포매팅된 것을 ISO 포맷이라고 하는데 이런 string을 date 객체로 변환하려면  과 같이 하면 된다. 이때 월/일 숫자가 한자리수인 경우 앞에 0 이 붙어있지 않으면 제대로 처리가 안된다. (즉 2020-01-01 은 되지만 2020-1-1 은 처리가 안됨) 반대로 날짜 객체를 ISO 포맷의 문자열로 반환하려면 와 같이 할 수 있다.   date.replace()를 이용하면 객체의 년월일 정보를 바꿀수 있다. date.strftime() 메서드를 이용해 객체를 다양한 방법으로 문자열로 변환할 수 있다…

DigitalOcean에서 Nginx와 Gunicorn 오류 해결 

2020. 03. 16 IT/컴퓨터 > 네트워크
이전 글들: DigitalOcean에 Django 프로젝트 배포하기 (1) DigitalOcean에 Django 프로젝트 배포하기 (2) DigitalOcean에 Django 프로젝트 배포하기 (3)   이전의 DigitalOcean 에서 배포하기 순서대로 했다면 웬만하면 문제없이 배포가 되었을 것이다. 그러나 여러 가지 이유로 인해서 에러가 난다면 다음의 내용을 참고해 보자. 내가 겪은 에러 위주로 몇가지만 정리해 보았다.   #1. Nginx 가 Django 프로젝트 대신 디폴트 화면을 보여주는 경우   이 경우에는 외부에서 정상적으로 Droplet 의 IP에 접근은 가능하지만, Nginx에서 프로젝트의 디렉토리를 찾지 못하는 경우이다. 이전에 만들어주었던 서버 블록에서 잘못된 내용이 있는지 확인하고 수정해 준다. 대개는 IP주소나 디렉토리 경로에 오타가 있는 경우일 것이다. 확인하고 수정해 주자.   #2. Nginx에서 413 오류가 나는 경우. 이 블로그를 처음 가동할때 내가 겪었던 에러는 파일 크기 관련한 에러였다.  블로그에 연동된 CK 에디터를 통해서 글을 작성하면서 이미지를 업로드하는데, pythonanywhere에서는 분명히 정상적으로 작동했는데 DigitalOcean 에서는 계속 413 에러가 나면서 안 되는 것이다. CK에디터 창에서는 413 에러라고만 나오니 왜 저런 에러가 나는지 알기가 어려웠는데, 검색해 보니 파일 크기 관련된 문제인 것 같았다. 우선 를 통해서 에러의 내용을 파악해볼 수 있다. 에러가 난 경우 마지막 에러가 난 시점의 기록을 잘 보면 'client intended to send too large body' 라는 내용을 볼 수 있다. 이것은 Nginx 서버의 업로드 제한 용량 디폴트 값이 1MB 라서 발생하는 일이다. 역시 위에서와 같이 서버 블럭에 파일 용량 제한 옵션을 명시해 주어야 한다. 꼭 서버 블럭이 꼭 아니더라도 특정 디렉토리 블럭에 명시해줄 수도 있지만, 사이트 전체적으로 적용하기 위해서는 서버 블럭에 적어주면 편한것 같다.   위에서 client_body_buffer_size는 request 가 들어왔을 때 처리 가능한 용량이고, client_max_body_size 는 실제로 업로드될 수 있는 파일 크기의 상한선을 …

파이썬 가상환경이 필요한 이유와 사용법 (venv, virtualenv) 

2020. 03. 11 IT/컴퓨터 > Python
  파이썬에서 프로젝트를 진행할 때는 각각의 프로젝트 별로 가상환경을 만들어서 진행해 주는 것이 좋다. 사실 프로젝트라 할만한 것을 제대로 진행해 보기 전, 책을 보면서 코어 파이썬 문법을 배우고 예제만 따라해 보는 수준에서는 왜 굳이 귀찮게 가상환경을 설치하는것인지 잘 이해가 되지 않았다. 처음 파이썬을 배울때 아나콘다(Anaconda) 배포판을 이용해서 파이선을 설치했는데, 아나콘다를 설치하면 수백가지의 패키지가 같이 설치된다. 이후로도 이것저것 배우면서 설치한 패키지들이 많이 있었는데, 이렇게 한번 설치해 놓으면 패키지를 아무거나 필요한 대로 불러서 쓸 수 있는데 굳이 왜 가상환경을 만들어서 이미 설치했던 패키지를 또 설치하라는건지 이해가 되지 않았다. 그런데 Django를 배우면서 직접 프로젝트들을 한두 개 진행하다 보니 왜 가상환경이 필요한지 저절로 알게 되었다.    1. 프로젝트를 배포하면 원격 서버에 따로 패키지들을 설치해 줘야 하는데, 내가 이 프로젝트만을 위해서 설치한 패키지들이 어떤 것들이 있는지 알 수가 없었다. 내가 설치한 아나콘다 배포판에는 기본적으로 수많은 패키지가 포함되어 있고 그 환경에 내가 추가로 설치한 패키지들이 뒤섞여 있는 상태이다.  한편 배포하려는 서버에는 처음에는 아무것도 깔려 있지 않기 때문에 필요한 것들을 설치해 주어야 하는 상황이다. 그런데 유료로 사용하는 서버에 공간만 차지하고 쓰지도 않을 패키지들을 설치할 필요는 없으니 딱 내가 사용한 패키지들만 설치를 해야 하는데 그걸 구분하는게 문제였다. 물론 어떤 패키지를 설치할 때마다 따로 적어 놓는다든지 할 수도 있겠지만, 프로그래밍을 배운다는 입장에서 그런 원시적인 짓을 할수는 없지 않나. 그리고 pip 명령을 이용해서 어떤 패키지를 설치하면 딱 그 패키지만 설치되는게 아니고 딸려 있는 여러가지 이름이 다른 패키지들도 자동으로 설치가 되는 경우가 많기 때문에, 그런것들까지 다 확인한다는것은 사실상 불가능하다. 그리고 서버에 일일이 그 패키지들을 설치해주는 것이 혹시 가능하다 하더라도 정확히 내가 사용했던 버전과 버전이 맞는지 일일이 확인해야 할텐데, 그걸 수작업으로 한다는것도 역시 원시적이고 말이 안된다. 그래서 미리 가상환경을 만들어 내가 실제로 이 프로젝트에 사용한 패키지들만 설…

DigitalOcean에 Django 프로젝트 배포하기 (3) 

2020. 03. 06 IT/컴퓨터 > Django
우분투 서버에 Django 프로젝트 배포하기 마지막편. DigitalOcean에 Django 프로젝트 배포하기 (1) DigitalOcean에 Django 프로젝트 배포하기 (2)   이제 본격적인 서버 구동을 위해 Nginx 및 Gunicorn 세팅을 해 주어야 한다. 다른 세팅을 해 주기 전에 gunicorn 이 정상적으로 작동하는지 확인해본다. 다음 명령어로 서버를 구동하고, 브라우저에서 droplet 의 IP를 입력하고 8000번 포트로 접속했을 때 index 화면이 나와야 한다. 다만 아직 서버에서 정상적으로 static 파일 설정을 하지 않았으므로 css 파일을 찾을 수 없어서 스타일링은 정상적으로 적용되지 않을 것이다. 위에서 '프로젝트' 는 wsgi.py 파일이 들어있는 Django app 디렉토리 이름이다. 실제 자기가 만들어 준 app 디렉토리 이름으로 적어 준다. 해당 디렉토리 내에 Django가 자동적으로 생성한 wsgi.py 에 설정되어 있는 설정을 적용해서 gunicorn 을 구동하는 것이다.   정상적으로 구동이 된다면 이제 파이썬 가상환경에서 빠져나오기 위해서 를 입력한다. 프롬프트 앞의 (deploy_env) 가 사라진 것을 확인할 수 있다.   이제 리눅스 서버에 systemd 소켓과 서비스 파일을 만들어 준다. (systemd는 리눅스의 서비스 관리자 같은 것으로 이 부분에 대해서는 더 공부가 필요할듯) 해당 파일들을 작성하게 되면 시스템 부팅시에 gunicorn 소켓이 생성되고, 외부에서의 connection을 기다리고 있다가 connection 이 발생하면 systemd가 자동으로 gunicorn 에게 해당 처리를 맡기는 동작이 발생한다. 우분투에 내장된 nano 에디터를 이용해 socket 파일을 작성해주기 위해 다음 명령어를 입력한다.   에디터가 열리면 아래의 내용을 입력하고 저장해준다. (nano 에디터 내에서 도움말이 나오긴 하는데 저장은 Ctrl + O, 종료는 Ctrl + X 이다)   처음 작성할때 [Socket] 섹션에 gunicorn.sock 부분을 gunicorn.socket 이라고 잘못 입력해놓고 서버 구동이 되지 않아서 어디가 잘못되었는지 못 찾고 한참을 헤맸다. 한번 잘못된 파일이 생성되니 쉽게 복구가 되지 않고 …

DigitalOcean에 Django 프로젝트 배포하기 (2) 

2020. 03. 05 IT/컴퓨터 > Django
DigitalOcean에 Django 프로젝트 배포하기 (1)   #10. Droplet이 성공적으로 만들어졌다면 등록한 이메일로 root 계정의 초기 암호가 배달된다. DigigalOcean에서 제공하는 콘솔을 이용하거나 별도의 SSH 클라이언트를 이용해서 만들어진 droplet 의 IP 주소를 이용해 접속을 한다. SSH 인증을 사용했다면 추가적인 절차가 필요하지만 일단 지금은 password 방식으로 로그인하기로 한다. Login 프롬프트에 root 를 입력하고 처음 주어진 암호를 입력하면, 암호를 리셋하라는 프롬프트가 뜨니 새 암호를 설정해 준다.   #11. 이후 명령으로 우분투 서버 업데이트 사항이 있는지 확인하고 업데이트를 적용해 준다.    업그레이드 가능한 패키지가 있는 경우 명령으로 업그레이드도 같이 해 주는 것이 좋겠다. 업그레이드 중 다음과 같은 메세지가 나오면서 이미 설치된 프로그램에 대해 어떻게 할 것인지 묻는 경우가 있는데, 특별한 경우가 아니라면 그냥 현재 설치된 버전을 유지하는 것으로 선택하자.   업그레이드 후 를 실행하면 필요 없게 된 파일들을 제거해준다.     #12. 새로운 유저를 생성해준다. Root 계정으로 진행해도 되지만, 프로젝트마다 다른 id를 사용하는 것이 편리한 점이 있고, root 계정은 권한이 너무 커서 의도치 않게 치명적인 실수를 저지를 위험이 있으므로 봉인해 두고 새로 만든 계정으로 프로젝트 배포를 진행하는 것이 좋겠다. 식으로 원하는 아이디를 추가하고 패스워드를 설정해 준다. 일단 지금은 sitemaster 라고 지정해 주었다. 이후 이름과 전화번호등 사용자 정보를 입력하는 프롬프트가 뜨지만 입력하지 않아도 아이디 생성은 된다.   #13. 생성된 sitemaster 에 관리자 권한을 주어야 한다. 를 입력해준다. 이렇게 하면 관리자 권한을 얻게 되는데, 이렇게 처리해 준 사용자는 실행하려는 명령어 앞에 sudo 라는 명령어를 덧붙여서 관리자 권한의 작업을 할 수 있다.   #14. 우분투에는 UFW firewall 이라는 방화벽이 포함되어 있어 이를 이용할 수 있는데, 이것과 별도로 DigitalOcean 사이트에서도 방화벽 설정을 할 수 있다. 두 가지 방화벽을 같이 사용하는 경우 충돌이 있을 수 있기 때…

DigitalOcean에 Django 프로젝트 배포하기 (1) 

2020. 03. 05 IT/컴퓨터 > Django
새로 블로그를 시작하면서 호스팅을 디지털오션으로 옮겼다. 이전 버전 블로그는 pythonanywhere.com 에서 배포를 했었다. pythonanywhere는 서버쪽 세팅을 알아서 다 해 주기 때문에 특별히 신경쓸 것 없이 하라는 대로 설정만 해 주면 배포가 가능하다. 초보자로서 시행착오를 많이 겪지 않고 처음 장고 프로젝트를 배포하기에 좋았지만, 조금 더 직접 서버 관련된 세팅을 공부해 보고 싶기도 했고, 다른 호스팅 서비스들은 어떤지 궁금하기도 해서 새 프로젝트는 새로운 곳에서 배포를 해 보기로 했다.  DigitalOcean 은 클라우드 서비스 중에서도 개발자들을 위해 좀 더 특화된 곳이라고 하는데, 아마존이나 구글, 마이크로소프트같은 대형 사업자는 아니지만 나름 입지를 갖춘 곳이다.  이번에도 복기 및 향후 프로젝트 배포를 위해서 참고할 겸 DigitalOcean 에서의 Django 프로젝트 배포 과정을 정리해 보았다.   #1. DigitalOcean.com 에 접속하면  보이는 화면. 별도 계정을 만들거나 구글이나 GitHub 계정에 연동해서 사용할 수 있는데, 지금 프로젝트를 진행하고 있는 GitHub 계정에 연동된 계정을 만들어 접속하였다.   #2. GitHub 계정을 이용해서 로그인한 경우에는 자동으로 github 계정 이름이 프로젝트 이름으로 뜬다. 프로젝트는 필요하면 새로 만들어주어도 된다. 디지털오션에서는 서비스하는 독립된 하나의 클라우드 서버를 Droplet 이라고 부른다. 첫 화면에 보이는 왼쪽 메뉴 바에서 droplet을 선택하면 현재 만들어진 Droplet 현황을 볼 수 있고, 아직 하나도 만들어지지 않은 경우에는 새로 만들 수 있는 화면이 나온다.   #3. 현재 이미 만들어 둔 Droplet들이 있는 경우 관리할 수 있는 메뉴가 뜨지만, 하나도 없는 경우 새로 만들 수 있는 메뉴가 보일 것이다. 또는 오른쪽 위의 초록색 Create 버튼을 이용해서 만들 수도 있다.     #4. 서버를 구동하기 위해 원하는 운영체제를 고를 수 있다. 선호하는 운영체제가 있다면 선택해 주면 된다. 가장 많이 쓰는 Ubuntu 18.04 버전을 선택하였다.     #5. 이용 요금제를 선택해야 한다. 아쉽게도 무료 체험판 서버는 만들 수 없다. Pyth…

블로그에 카카오톡 공유 버튼 만들기 

2020. 02. 27 IT/컴퓨터 > Web Development
이전 글 - 블로그에 SNS 공유버튼 만들기 블로그에 post 공유용 SNS 만드는 방법을 정리해 본다. 카카오톡은 다른 서비스처럼 그냥 url 링크만으로 처리가 되지 않고 따로 개발자 사이트에 가입해서 설정을 해 줘야 한다.   #1. 카카오 개발자 계정 만들기 Kakao Developers 사이트에 가서 가입후 개발자 등록을 해 준다.   #2. 내 애플리케이션 - 앱 만들기에 들어가 앱의 이름과 아이콘등 기본 설정을 해 주고   #3. 개발용으로 각종 키가 생성된다. Javascript 로 버튼을 구현하기 위해 Javascript 키를 복사해 두어야 한다.   #4. 설정-일반-플랫폼 추가 에 들어가서 '웹' 을 선택하고 도메인을 입력해 준다.   #5. '카카오링크' 라는 서비스를 이용해 링크를 걸어줄 것이다. 버튼이 들어가는 페이지의 <head> 안에 다음 스크립트를 추가해 준다.   #6. 본문에는 다음과 같이 markup 을 만들어 주고,   #7. 별도의 <script> 태그 안에 다음 내용을 추가해 준다.   #8. 위에서 title, imageUrl 및 description 에 쓰여있는 |bs4process, |bs4imagepath, |full_url 필터는 이 블로그에 사용하기 위해 개인적으로 만든 Django custom filter들이라서 다른곳에는 적용이 불가능할 것이다. 해당 내용들을 각 페이지에 맞게 변경해 주면 되겠다. 위의 스크립트는 가장 기본적인 링크 기능만 구현한 것이고, 기타 카카오톡 창에 띄워 줄 여러가지 버튼을 만들 수 있는 옵션들이 있는데 카카오링크 개발 가이드를 참조하면 될 것 같다. 여담으로 카카오톡으로 전송한 링크를 모바일 환경에서 클릭해서 열면 항상 카카오톡 인앱 브라우저에서 열리는데, 검색해본 결과로는 유저가 기본으로 쓰는 브라우저에서 열리는 기능은 일부러 지원하지 않고 있다는 것같다. 인앱 브라우저에서 열리면 카카오톡의 다른 톡들을 볼 수 없어 불편하고 결국 주소를 복사해서 크롬 등에서 열게 되는데, 어차피 사용자가 딱히 인앱 브라우저를 선호할 이유가 없을것같고 괜히 번거롭기만 한데 이 점은 좀 개선해 주면 좋을것같다.   이상으로 블로그에 직접 SNS 공유 버튼을 만드는 방법을 정리해 보았다.

블로그에 SNS 공유버튼 만들기 

2020. 02. 27 IT/컴퓨터 > Web Development
블로그의 글을 퍼갈 수 있는 공유 버튼 만드는 방법에 대해 공부한 내용을 정리해 본다. 요즘은 페이스북, 카카오톡같이 많이 쓰는 서비스들은 URL 만 긁어서 붙이면 알아서 보기좋게 링크를 만들어주는 경우가 많아서 활용도가 높지 않을것 같긴 하지만, 아이콘들이 약간의 장식적 효과도 있고 주소를 긁어 붙이는것보다 클릭 한번에 링크해주는게 편리한 점도 있으니 연습삼아 만들어 보았다. Pinterest 등 다른 서비스도 많지만 우선은 페이스북, 트위터, 네이버, 카카오톡 네개만 만들어 보았다. 요즘은 인스타그램이 대세라고 하는데 인스타는 일단 사진을 찍고 메세지를 작성하는 시스템 특성상 외부 링크를 바로 연결해주는 API는 일부러 제공하지 않는 것같다. 포스트를 바로 이메일로 보내는것은 SMTP를 이용해야 할 것 같은데, 이건 나중에 연구해보고 다시 올려야 할듯. 공유 링크는 2020년 2월 15일 기준.   우선 페이지에 버튼을 만들기 위해 html markup을 만들어 준다:   #1. Facebook Facebook 은 https://www.facebook.com/sharer/sharer.php?u=공유할 URL 을 이용하면 간단하게 공유할 수 있다. 단순히 링크만 걸어도 공유에는 문제가 없지만, 전체 화면으로 창이 뜨면 모양이 예쁘지 않기 때문에 window.open() 을 이용해서 새 창에 띄워 주었다. 위의 는 Django  template에서 현 page의 경로를 받아 오는 방법이다. 참고로 root 경로 이후의 경로만 표시하려는 경우  를 사용할 수 있다. 페이스북은 공유하려는 페이지에 open graph tag이 있으면 해당 내용을 읽어서 미리 보기를 만들어 주므로, 페이지의 <head> 안에 이를 넣어 주면 좋다. Open graph tag의 자세한 내용은 위의 링크에 들어가보면 나와 있는데, <meta> tag 을 이용해서 아래의 내용을 적어 주면 된다.     #2. Twitter Twitter는 보낼때 기본 text와 URL을 같이 지정해줄 수 있다. https://twitter.com/share 경로에 파라미터로 text 와 url 을 적어 주면 기본 tweet 창에 미리 입력된 상태로 공유 창이 뜨게 된다.   #3. Naver 네이버 역시 기본적인 …
  • 1
  • 2 (current)
  • 3