PyCon Korea 2023 발표 자료
세션 소개: https://2023.pycon.kr/session/9
발표 영상: https://www.youtube.com/watch?v=HeMXWd6QSGg
---
좋은 코드는 무엇일까요?
모든 개발자들은 좋은 코드를 작성하고 싶어합니다.
하지만 정확히 무엇이 좋은 코드인지 정의하기는 어렵습니다.
모든 상황에서 좋은 코드를 정의할 수는 없겠지만,
웹 서비스를 기준으로 좋은 코드의 특징을 정리해보았습니다.
이번 발표에서는 어떻게 좋은 코드를 작성할 수 있는지,
Django를 예시로 들어 최대한 쉽게 설명해보려 합니다.
개발을 하면서 생산성이 떨어진다고 느낄 때,
잠시 생각을 정리하고 아이디어를 얻을 수 있기를 바라며
이 발표를 준비했습니다.
4. v
제목
이름
경력
● 프리랜서, 한겨레 CMS 리뉴얼 외주 개발 (현재)
● Iamdt Backend Engineer (3개월)
● NRISE Backend Chapter Leader (1년 반)
● ODK Media Backend Leader (3년)
● 프리랜서 (1년), 혜움세무회계 CTO 4개월 포함
● SmartStudy Softwore Engineer (3년 반)
● 아이티동아 Developer (4년)
5. v
제목
이름
이전 발표들
PyCon Korea
● 2021 Django를 Django답게, Django로 뉴스 사이트 만들기
● 2017 신입에서 CTO까지, 야근하지 않는 웹개발
● 2016 Django로 쇼핑몰 만들자
DjangoCon Korea
● 2018 Django를 배우다, Django로 배우다.
ODK Media 사내
● 2021 OK, 계획대로 되고 있어?
● 2020 테스트가 뭐에요?
6. v
제목
이름
일하다보니
10년 이상 Django로,
여러 스타트업의 웹서비스를,
개발 및 운영했고,
그 중에 같은 서비스를 3번 리뉴얼 해봤습니다.
그러다보니
Django가 왜 생산성이 높았더라?
이유를 분석해서 이야기하면 좋겠다.
Django 꼭 쓰라는거 아닙니다.
10. v
제목
이름
프론트엔드의 서버 진출 (SSR)
● React, Next.js
● Vue, Nuxt.js
● Svelte, SvelteKit
기존 웹 프레임워크의 프론트 진출
● Django, HTMX
● Phoenix, Liveview
● Laravel, LiveWire
https://knowyourmeme.com/memes/spider-man-pointing-at-spider-man
11. v
제목
이름
이 둘이 만나는 지점이 있을까?
SSR은 기존 웹 프레임워크들이 이미 준비된 것들이 많다.
Django가 특히 이미 잘하는 것들이 많다.
HTMX로 프론트도 챙기고 하던 일도 잘하는 Django
Django 봄은 다시 올지도?
네이버 웹툰 “들어는 보았나! 질풍기획!” 중 밈이 된 장면
13. v
제목
이름
목표를 달성하는 코드
뉴스 사이트를 만들어주세요. (1)
● 기사를 분류하고 예쁘게 볼 수 있어야 합니다.
● 기사를 작성하고, 수정하고, 삭제할 수 있어야 합니다.
● 기사를 여러 플랫폼에 배포할 수 있어야 합니다.
● 갑자기 트래픽이 몰려도 어느정도 견딜 수 있어야 합니다.
비즈니스 목표를 달성하는 코드
- 충분히 좋은 코드일까?
14. v
제목
이름
사실 목표는 더 있다.
뉴스 사이트를 만들어주세요. (2)
● 개발자는 당신 혼자입니다.
● 3개월 뒤에 새 기능을 넣어야 합니다.
● 1년 뒤에 개편을 해야합니다.
● 무슨 일이 일어날지 몰라도 해야할겁니다.
비즈니스 목표는 변하고, 비용은 제한적이다.
만화 “요츠바랑!” 4권 중 밈이 된 이미지
15. v
제목
이름
여러 목표를 달성하는 코드
● 비즈니스 기능을 달성하고
● 비즈니스 변화에 대응하고
● 비용은 적게
이를 좋은 코드라고 생각합니다.
https://www.reddit.com/r/ProgrammerHumor/comments/l9lbm2/code_review_be_like/
영화 “원더 우먼 1984”에서 밈이 된 한 장면
17. v
제목
이름
코드양
읽을 코드가 적어야 읽으며 고치기 유리하다.
단어 오자 하나 수정하려면?
● 8만 대장경 vs 3줄 요약문
Django는 많은 것이 이미 만들어져 있어 코드양을 줄인다. 국보 제23호 합천 해인사 대장경판 / 문화재청
https://brunch.co.kr/@cowithawrd/72
19. v
제목
이름
데이터 구조 전환 단계
맥락이 다른 단계에서 데이터 전달을 해나가는 과정, 웹 서비스는 데이터 구조를 계속 바꿔야 한다.
서버 안에서도 단계가 나뉜다. 각 단계마다 데이터 구조를 만들고 매핑.
이미 단계가 많고 복잡하다.
하나의 언어로 여러 단계를 다룰 수 있다면 효과적
https://excalidraw.com 로 직접 그림
20. v
제목
이름
기사 작성 구현
Post 요청을 받고 유효한지 확인할 폼 단계를 Model의 필드만 정해 만들 수 있다.
일부 HTML 코드도 자동으로 만들 수 있다.
21. v
제목
이름
의존은 좋은가 나쁜가?
의존이 높으면?
코드를 고치면 다른 곳에도 영향을 준다.
좋은점
● 한번에 고칠 수 있다.
나쁜점
● 하나가 깨지면 다른 것도 깨진다.
Form 구조 따로 정의하여 모델의 의존을 낮춰보기
22. v
제목
이름
생산성을 위한 선택 할 수 있다면?
● 간단한 것은 높은 의존으로 빠르게 구현
● 복잡한 것은 낮은 의존으로 유연하게 구현
● 일단 만들고, 이후 필요에 따라 수정
Form HTML도 직접 정의하여 의존을 낮춰보자
23. v
제목
이름
고치기 쉬우려면?
고칠 부분을 찾기 쉬워야
● 가독성, 구조화 등
● Pythonic하게 짜면 쉬워진다.
찾은 부분을 바꾸기 쉬워야
● 비즈니스를 본질적으로 정리하고
● 원자적 기능 단위를 구성
● 조립해서 대응
애니 “우주소년 아톰” 중 밈이 된 장면
애니 “곰돌이 푸” 중 밈이 된 장면
24. v
제목
이름
고치는데 비용이 큰 부분은?
답은?
표현
영역
프론트
중간
영역
서버
데이터
영역
DB
사용자가
우선이지 비즈니스
로직은
여긴데?
저장은
어디에
하고?
만화 “맛의 달인” 중 밈이 된 장면
25. v
제목
이름
데이터 모델 구조 변경 비용이 크다.
● 기존 데이터를 이전 해야 할 수도 있다.
● 기존 데이터에 관련된 코드를 모두 고쳐야 한다.
● 변경하는 도중에도 웹서비스가 동작해야 한다.
https://www.reddit.com/r/ProgrammerHumor/comments/yk2ush/databases/
26. v
제목
이름
데이터 모델은 비즈니스를 표현한다.
비즈니스 변경은 곧 데이터 모델의 변화.
현재 비즈니스에 맞게 항상 고쳐야 한다.
낮은 비용으로 고칠 수 있다면?
자주 일어나고 힘든 일을 쉽게 할 수 있다.
28. v
제목
이름
결론
좋은 코드는
● 만들때 적은 비용이 들고,
● 고칠 곳을 발견하기 쉽고, 고치기 쉽다.
적은 비용으로 만들려면
● 적은 코드로 기능을 구현하고
● 필요에 따라 의존을 조절하기 쉽고
고치기 쉽게 만들려면
● 가장 어려운 부분인 데이터 모델부터 쉽게 고칠 수 있어야 한다.
Django에 많은 것이 이미 준비되어 있다.
http://www.quickmeme.com/meme/35epb9