170710-0716_TIL

|

7월 16일 (일)

  • 장고의 디폴트 User model을 확장하는 연습을 했다. 연습내용
    • 처음 manage.py migrate 명령을 실행하기 전에 settings.py의 AUTH_USER_MODEL을 변경해야 한다는 것을 알았다. ( dependency issue가 발생하여 여러번 시행착오를 겪었다.)
    • AbstractBaseUser을 상속 받아서 nickname, team, avatar 필드를 추가한 Custom User 모델을 만들었다.
    • BaseUserManager을 상속 받아서 유저 생성시에 email, nickname을 함께 받도록 했다.
    • 인스타그램st 프로젝트에서는 OneToOne Relation을 활용해서 profile 모델을 따로 만들고 기본 User와 1:1로 연결했었다. 나중에 django-debug-toolbar를 확인해보니 User 모델을 통해서 Profile 모델의 데이터를 가져올 때 중복으로 DB 요청이 발생하는 문제가 있었다. 그때는 select_related를 활용해서 매번 중복을 제거했다. 이번에는 User 모델 자체를 오버라이드 했으니 중복 쿼리가 발생하는 부분은 개선되지 않을까.

내일 할 일


7월 15일 (토)


7월 14일 (금)

  • Naver Book API를 활용하는 연습을 했다.
    • API를 활용해서 원하는 책 정보를 JSON 형식으로 가져오고, JSON 디코딩을 통해서 Dict 형식으로 템플릿에 context를 넘겨주었다.
    • 템플릿에 책 정보를 표시하고, 원하는 책을 선택하면 해당 정보를 저장하여 db 레코드를 생성하도록 했다.
  • 패캠 인스타그램 연습 repository 커밋 로그를 하나씩 따라가면서, 다른 사람이 작성한 코드를 읽고 Django를 공부했다.

7월 13일 (목)

  • Naver Book API를 사용해서 원하는 책 정보를 json으로 가져오는 연습을 했다.
  • 이번에 스터디와 해커톤에서 책 관련된 프로젝트를 진행하기로 했다. 새로 출간되는 도서 정보가 필요한데 크롤링을 통해서 정보를 가져오자는 팀원의 의견이 있었다. 개인적으로는 크롤링 보다 더 좋은 방법이 있지 않을까 하는 생각이 들어서 고민 중이었는데 마침 스터디에서 도서검색 API 이야기가 나왔다. 마침 네이버에서 도서 검색 API를 제공하고 있어서 사용해보니 원하는 조건의 책 정보를 json으로 이쁘게 가져올 수 있었다. (우와 신기..!) 이제 가져온 json 정보를 db에 저장하고, 정기적으로 정보를 자동 갱신 할 수 있도록 연습해봐야지.

7월 12일 (수)


7월 11일 (화)

  • Two Scoops of Django 4~5 장을 읽었다.
  • Django settings.py 파일에서 SECRET_KEY 설정을 분리하는 부분을 연습했다. 그동안 public repository에 SECRET_KEY가 그대로 노출된 상태로 push를 진행해왔다. AWS 키가 노출되면 안된다는 이야기는 워낙 많이 들어서 조심했지만 SECRET_KEY는 챙기지 못했다. 아마 Django를 처음 배우는 사람이라면 한번쯤은 겪는 과정이 아닐까 싶다. SECRET_KEY 설정을 분리하는 방법은 2가지가 있다. 둘 다 연습해보았는데 앞으로는 git 저장소에 push 하기 전에 꼭 신경써야겠다. (first commit 부터!) 참고
    • 환경변수패턴 (environment variables pattern)
    • 비밀파일패턴 (secrets file pattern)
  • Django Project에서 회원 가입시에 이메일을 발송하는 부분을 연습했다.
    • How to Configure Mailgun To Send Emails in a Django Project 글을 참고해서 Mailgun 서비스를 사용해보기로 했다.
    • 사이트의 설명대로 내가 가진 도메인에 DNS records를 추가하였고, 도메인이 인증되고 상태가 activate으로 바뀌기를 기다렸다.
    • 48시간이 지나도 disabled 상태여서 고객센터에 메일을 보냈다. 원인은 Mailgun의 Business Verification process 때문이고 사용 목적을 포함한 몇가지 질문에 답변하면 도메인 상태를 activate로 바꿔주겠다고 했다. (왜 처음부터 이런 안내는 없었을까? 내가 수상해 보였나..ㅠㅠ)
    • ‘난 학생이고 연습 사이트의 가입 안내 목적으로 하루에 100건 이하의 메일만 보낼 예정이다’ 라고 답변했더니 도메인이 activate로 변경되었다.
    • 드디어 메일을 보내려고 테스트를 진행해보니 ‘Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings.’ 라는 오류 메시지가 뜬다. 수신자 메일 목록을 등록하고 인증받은 사용자에게만 test 메일을 보낼 수 있었다.
    • 테스트로 사용할 수신자 메일 인증을 완료하고 메일이 정상 수신되는 것 까지 확인했다. 인증절차 없이 누구에게나 메일을 보내기 위해서는 아래 2가지 방법을 활용할 수 있다.
      • Mailgun 계정에 신용카드를 등록하고 upgrade 한다.
      • MX 레코드 설정을 추가한다. 참고

7월 10일 (월)

  • 패캠 인스타그램 연습 repository 커밋 로그를 하나씩 따라가면서, 다른 사람이 작성한 코드를 읽고 Django를 공부했다.
    • include 를 활용하여 중복되는 코드의 양을 줄이는 법에 대해서 살펴보았다. include 템플릿명 with type=”list” 와 같이 원하는 context를 keyword arguments 형식으로 템플릿에 넘겨줄 수 있다. 이를 통해서 동일한 include 템플릿이라도 다르게 동작하도록 구현할 수 있다.
    • Model Form을 사용하지 않고 직접 form을 작성하고, clean 메소드를 통해서 유효성 검사를 진행하는 부분을 살펴보았다. Model Form이 얼마나 편한지 다시한번 느낄 수 있었다.
  • 간단한 알고리즘 문제를 풀었다.