TIL - 1007 Dev Django 컨퍼런스

Dev Django 컨퍼런스


오전 세션

세션1. snaker(Url Shortener) 원리 알아보기 - 신호석

  1. goo.gl 서비스 종료
  2. URL Shortener 출시 배경 : squeeze a long URL into fewer charcters to make it easier
    • 글자수 제한이 있는 트위터에서 URL이 잘리는 경우가 많아져서 구글의 goo.gl을 사용하게 됨
    • Stablility, Security
    • Speed : url을 변환할 때 발생되는 시간 축소
  3. 변환 과정
    • hash를 가지고 URL을 변환
    • django view에 전달되는 request내 Meta 정보를 활용하여 user 정보를 넘겨 줄 수 있다.
    • operating server : 관리자들이 url 생성,수정,삭제 관리
    • redirect server : url 변형
    • redirect 기능은 일정 수준이 넘으면 부하가 발생 가능성 있음 -> redis, cache 기능을 사용하는 방법이 대안이 될 수 있다.
    • 장점 : 기본 url을 탈수도 있고, 플랫폼에 따라서 분기를 할 수 있음(IOS,안드로이드)
  4. pinject
    • django server 아키텍처에서 MTV 패턴 골조가 기본
    • DI(Dependency Injection)를 통한 의존성을 줄일 수 있다.
  5. Pytest-django : service를 기본으로 테스트 가능하고, feature에 대해서도 테스트 가능

세션2. koreans-love-django: 한국의 django 개발자와 회사들 - 조재호

시간표를 추천해주고, 학점을 입력하면 분석하여 그래프로 보여주는 스마트 학점 계산기

  • transfix
  • koreans love django 커뮤니티 10월 중 오픈

세션3. SQL Server에서 Django를 추구하면 안 되는 걸까 - 김태환

  • ODBC : 각 sql 드라이버들을 매니저하는 프로그램 -> pydoc / 각 database 아이디 패스워드 정보들을 DNS로 만들어서 사용할 수 있음
  • Azure Data Studio
  • DSN(Data Source Name)

오후 세션

세션2. Django를 배우다, Django로 배우다. - 정경업

  • Factory Boy : test 데이터 만들때 사용

세션3. Django의 배신(주니어 개발자의 Django 삽질기) - 김은향

  • aggregation
  • on_commit = hook 트랜잭션이 끝나고 celery가 사용할 수 있도록 하는 것
  • csrf_token = csrfmiddlewaretoken -> ajax 도 있음

세션4. DB와 ORM에 관한 7가지 고민 - 김찬우

발표자료

  1. ORM을 왜 쓸까?
    • DB I/O
  2. ORM 스키마 괜찮을까?
    • 마이그레이션을 통해 생성되는 스키마는 괜찮은가?
    • charfield
    • many_to_many 의 경우 sql이 난잡함
    • 항상 테이블/인덱스 이름 지정 , M2M 자동생성이 아니라 중간 테이블 지정 , 스트링 인코딩, 테이블&칼럼 코멘트 -> DB 완결성
    • DB 스키마가 먼저 완성된다음 -> orm 으로 가는게 맞지 않을까?
  3. 외래키는 무엇일까?
    • descriptors
  4. 참조무결성 어떻게 할까?
    • ForeignKey constraint -> DB 단에서 그걸 자동으로 하게끔 만듦.
    • 장고에서 제공하는 만큼 필요할까?
    • 삭제를 하게 되는 경우 side effect -> hard delete row를 삭제함 / soft delete deleted 필드를 만들어서 row를 삭제하지는 않음
    • cascade operation 의 경우 참조하는 행이 100만을 삭제하는 경우 큰 부하를 가져올 수 있다.
    • Null vs invalid value : invalid value로 가지고 있는 경우 데이터가 삭제되어도 나중에 활용할 수도 있다는 이점이 있다.
    • 물리적으로 db를 분리하는 경우
    • DB를 샤딩 혹은 파티셔닝
  5. join, inner, outer 어떤 방식으로 결정하는가?
    • select_related 를 했는데 인스턴스가 사라진다? 이 경우 db가 분리되어있거나 참조무결성이 깨진 경우 Innerjoin을 해서 발생되는 문제 -> 이 경우 ForeignKey가 Null False 인 경우에도 Louter 조인을 하게끔 하라는 커스텀 코딩을 진행
    • Inner join 과 left join(Louter) 만 장고에서 관리를 한다.
    • ForeignKey 가 null ture가 되어잇는 경우에만 Louter 조인이 발생된다.
  6. 다중DB cross-database
    • 장고에서는 데이터베이스 간의 외래키/M2M는 지원하지 않는다.
    • 문제점을 해결하면 완만하게 cross-database를 사용가능하다.
      • 데이터베이스 라우팅 문제 : 읽기전용 쓰기전용 DB를 지정 , app_label 이 없는 경우는 디폴트 db를 사용/ **hints - 인스턴스 인자는 디폴트를 찾지 못하는 경우 db를 추측 함. _stated.db 이용
      • 해결 방안 : instance 힌트를 사용하지 못하도록/ 모든 모델이 커스텀 라우터에서 작동하도록 한다. 혹은 related descriptor 라우터 힌트를 넘겨주는 부분을 모두 제거
      • 조인 실패 : left outer join 이 잘 되로고 하게끔. / select_related 대신 prefect_related()를 사용하면 잘 작동 ** 디버그 툴바를 보고 sql 이 어떻게 작동하는지 공부하는 것도 나쁘지 않을꺼 같다.