Dev Django 컨퍼런스
오전 세션
세션1. snaker(Url Shortener) 원리 알아보기 - 신호석
- goo.gl 서비스 종료
- URL Shortener 출시 배경 : squeeze a long URL into fewer charcters to make it easier
- 글자수 제한이 있는 트위터에서 URL이 잘리는 경우가 많아져서 구글의 goo.gl을 사용하게 됨
- Stablility, Security
- Speed : url을 변환할 때 발생되는 시간 축소
- 변환 과정
- hash를 가지고 URL을 변환
- django view에 전달되는 request내 Meta 정보를 활용하여 user 정보를 넘겨 줄 수 있다.
- operating server : 관리자들이 url 생성,수정,삭제 관리
- redirect server : url 변형
- redirect 기능은 일정 수준이 넘으면 부하가 발생 가능성 있음 -> redis, cache 기능을 사용하는 방법이 대안이 될 수 있다.
- 장점 : 기본 url을 탈수도 있고, 플랫폼에 따라서 분기를 할 수 있음(IOS,안드로이드)
- pinject
- django server 아키텍처에서 MTV 패턴 골조가 기본
- DI(Dependency Injection)를 통한 의존성을 줄일 수 있다.
- 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가지 고민 - 김찬우
- ORM을 왜 쓸까?
- DB I/O
- ORM 스키마 괜찮을까?
- 마이그레이션을 통해 생성되는 스키마는 괜찮은가?
- charfield
- many_to_many 의 경우 sql이 난잡함
- 항상 테이블/인덱스 이름 지정 , M2M 자동생성이 아니라 중간 테이블 지정 , 스트링 인코딩, 테이블&칼럼 코멘트 -> DB 완결성
- DB 스키마가 먼저 완성된다음 -> orm 으로 가는게 맞지 않을까?
- 외래키는 무엇일까?
- descriptors
- 참조무결성 어떻게 할까?
- ForeignKey constraint -> DB 단에서 그걸 자동으로 하게끔 만듦.
- 장고에서 제공하는 만큼 필요할까?
- 삭제를 하게 되는 경우 side effect -> hard delete row를 삭제함 / soft delete deleted 필드를 만들어서 row를 삭제하지는 않음
- cascade operation 의 경우 참조하는 행이 100만을 삭제하는 경우 큰 부하를 가져올 수 있다.
- Null vs invalid value : invalid value로 가지고 있는 경우 데이터가 삭제되어도 나중에 활용할 수도 있다는 이점이 있다.
- 물리적으로 db를 분리하는 경우
- DB를 샤딩 혹은 파티셔닝
- join, inner, outer 어떤 방식으로 결정하는가?
- select_related 를 했는데 인스턴스가 사라진다? 이 경우 db가 분리되어있거나 참조무결성이 깨진 경우 Innerjoin을 해서 발생되는 문제 -> 이 경우 ForeignKey가 Null False 인 경우에도 Louter 조인을 하게끔 하라는 커스텀 코딩을 진행
- Inner join 과 left join(Louter) 만 장고에서 관리를 한다.
- ForeignKey 가 null ture가 되어잇는 경우에만 Louter 조인이 발생된다.
- 다중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 이 어떻게 작동하는지 공부하는 것도 나쁘지 않을꺼 같다.
- 데이터베이스 라우팅 문제 : 읽기전용 쓰기전용 DB를 지정 , app_label 이 없는 경우는 디폴트 db를 사용/ **hints - 인스턴스 인자는 디폴트를 찾지 못하는 경우 db를 추측 함.