Django + Next로 프로젝트를 하나 구성해보려 합니다. Django 관련해서 몇 가지 질문이 있습니다.
1. django-admin으로 프로젝트를 생성할 때 DRF 초기 세팅이 완료되있는 상태로 프로젝트를 생성할 수 있나요?
2. Nextauth or Supabase + Next app router + Prisma ORM을 사용해서 웹 개발을 해본 경험이 있습니다. Next의 Server Action을 사용하여 only Typescript로 모의개발을 진행하였었는데 여기서 Next, Supabase가 아닌 Django를 백엔드 서버로 둔다면 얻을 수 있는 큰 강점은 뭐가 있는지 궁금합니다.
3. 데이터베이스 캐싱, 폴링 기능은 Supabase나 Prisma accelerate를 사용해서 처리했었습니다. django에 서도 해당 기능을 지원하나요?
4. django 혹은 python으로 Dapp을 개발할 수 있나요? 또 적합한 편인가요? 가능하면 새로운 언어와 플랫폼 보다는 익숙한 언어로 해보고 싶습니다.
아래 부터는 질문과는 딱히 큰 관계없는 얘기이기 때문에 답변해주시지 않아도 괜찮습니다! 단지 진로에 고민이 있기에 한번 적어봤습니다.
코테 > CS > 포트폴리오 & 프로젝트 순으로 공부 및 준비 중입니다.
현재 채용한파인 시기에다 java 공화국으로 불릴 만큼 spring 수요가 있기에 spring 배우는 게 취업적인 목적엔 좋겠지만 저는 java, spring은 영 안 끌리더라고요.
코딩 테스트 문제도 프로그래머스 레벨 3까지 전부 파이썬으로만 풀어왔었고 플젝은 Next로 진행했던 터라 가능하면 익숙한 python, typescript를 활용한 django, node 쪽으로 작업을 해보려고 합니다.
작업을 해봤을 때 저는 프론트엔드 적인 일보다는 백엔드쪽에 더 흥미를 느꼈습니다. 서버, 클라이언트 두 분야에 대해서 배웠지만 아무래도 신입 풀스택 개발자로는 역량이 부족하기 때문도 있고 러닝커브적인 문제 그리고 지식에 대한 유지를 위해서는 한쪽으로 가는 게 바르다고 판단했고 여기서 고민이 생깁니다.
Node쪽으로 간다면 Next, Remix, Nest, Express 등을 사용할 수 있는데 개인적으로 Express는 레거시라 생각해서 딱히 손이 가진 않았습니다. Remix의 경우는 수요가 굉장히 적었고 비슷한 기능을 하는 Next가 있기에 선택지에서는 밀렸습니다. Nest는 서버 프레임워크 이지만 결국 React의 기능을 대체할 수 없으니 Node 쪽으로 간다면 차라리 둘 다 작업하는데 적합한 Next를 배우는 게 바르다고 생각했었는데 막상 Next는 프론트엔드 개발자만 뽑더라고요.
결국은 django를 배우는 게 가장 낫다고 판단했습니다. 다만 현재 Next에 대한 지식이 있는 편이고 익숙한데 반면 django에 대한 지식은 부족합니다. django + next 둘 다 사용해 프로젝트를 진행 한다면 백엔드 개발자든 프론트엔드 개발자든 취업하는데 도움이 될테지만 그만큼 긴 러닝 커브가 소요될 테고 너무 욕심이 크진 않은가 싶어서 고민이 되느라 갈피를 못잡고 있습니다. 어떻게 해야될지... htmx를 다루시던데 해당 기술로 작업한다면 무게감이 줄어드는것에서 좀 더 나아질까요? 짧은 조언이라도 주신다면 감사하겠습니다.
안녕하세요. :-)
본 강의에서 DRF 파트는 현재 계획으로 4월 중순쯤에 업로드될 예정입니다.
#1. 장고는 startproject를 통한 프로젝트 생성에서 프로젝트 생성에 사용할 템플릿 경로를 --template 인자로 지정할 수 있습니다. DRF 초기 세팅이 되어있는 템플릿 프로젝트가 있다면, 그 주소를 지정해서 템플릿으로부터 한 번에 프로젝트를 생성할 수 있습니다. 장고 기본의 프로젝트 템플릿은 아래 주소에서 확인하실 수 있습니다.
https://github.com/django/django/tree/main/django/conf/project_template
#2. 무엇보다 장고는 파이썬 기반이기에 다양한 파이썬 생태계의 라이브러리와 잘 어울립니다. 요즘 인공지능 LLM 쪽도 파이썬 지원이 가장 강력하구요. 데이터 쪽 라이브러리도 파이썬이 독보적입니다. 이러한 라이브러리와 연계해서, 풀스택 웹프레임워크인 장고를 통해 높은 생산성으로 AI 서비스나 데이터 서비스를 개발할 수 있습니다.
그리고 요즘 하나의 서비스에서 하나의 언어/프레임워크로만 개발하진 않구요. 외부 고객용 서비스와 내부용 서비스를 나눠 개발하기도 합니다. 토스는 1000여명의 토스 팀원들을 대상으로 서비스를 만드는 "토스 인터널"이라는 조직에서 장고와 리액트로 서비스를 개발하고 있습니다. ( 토스 채용공고 : https://toss.im/career/job-detail?job_id=4328355003 )
#3. 물론 장고 기본에서 캐싱 기능을 지원하구요. redis/memcached/파일/메모리 등의 다양한 캐싱 백엔드를 지원합니다. 폴링 기능은 pooling 기능을 말씀하시는 한데요. 장고 기본에서 database connection을 관리해주구요. postgresql의 경우 pooling pgbouncer와 같은 별도의 pooling 서버를 많이 사용합니다.
#4. dapp은 개발해보지 않아서 잘 모르겠습니다. 장고가 웹 지원이 필요한 어떤 분야건 잘 어울립니다.
--
Next.js는 전통적인 백엔드라기보다, 프론트엔드 서버라고 부를 수도 있겠습니다. 데이터베이스에 직접 접근할 수도 있겠지만, SEO를 위해 SSR 위주로 사용하는 듯 보입니다. 그래서 Next.js 관련해서는 프론트엔드 개발자로서 뽑는 것이 많은 것이 아닐까 싶구요.
특정 기술에 매몰되지 마시고, 어떤 기술로 원하는 제품과 기능을 빠른 시간에 개발할 수 있을 지에 대해서 고민해보셨으면 합니다. 웹프론트엔드 쪽은 너무나 빠르게 변화해가는 분야입니다. 유행에 휩쓸리기보다 웹프론트엔드의 기본을 탄탄히 쌓아보세요.
웹서비스의 모든 페이지가 복잡한 UI와 복잡한 상태관리가 필요하진 않습니다. 일반적인 웹페이지인데, HTML 만으로도 충분히 개발이 되고 약간의 vanilla js 만으로 구현이 되는 데, 그냥 리액트가 정답인냥 쓰는 곳들이 많습니다. 소 잡는 칼로 닭을 잡는 형국입니다. 리액트가 꼭 필요하진 않은 상황에서 리액트를 씀으로서 개발 복잡도만 높인 상황을 많이 봤습니다.
저는 본 강의에서 제안드리고 있습니다. 일반적인 웹페이지는 장고 기본으로 개발하시며 장고의 높은 생산성을 누리시고 (그리고 장고의 기술은 꾸준합니다. 유행에 휩쓸리지 않습니다.), HTMX로 간결하게 UI처리를 하시고, 복잡한 UI처리가 필요한 컴포넌트는 리액트로 개발하셔서 붙이시면 됩니다. 리액트를 쓴다고 해서 Single Page Application 으로 개발할 필요는 없거든요. 리액트는 UI 라이브러리인 것 뿐이거든요. 본 강의 말미에 리액트로 컴포넌트를 만들어서 장고 템플릿에 붙이는 부분도 다룹니다.
그럼 가장 큰 비용인 시간을 아끼고, 원하는 기능의 서비스를 빠르게 개발할 수 있을 것입니다.
그리고, 백엔드를 목표로 하신다면, 데이터베이스에 좀 더 집중해서 학습해보시는 것은 어떨까요?
화이팅입니다~! :-)
답글
yezi9733
2024.03.26답변 감사드립니다. 아무래도 취미가 아닌 취업을 목표로 하다보니 방향성에 대해서 고민이 많았던것 같습니다. 조언 해주신대로 공부해보며 작업을 해보겠습니다.
혹시 질문 하나 더 가능할까요?
AWS EC2 t2.large 운영체제 Windows를 사용하여 배포중인데 가끔 엄청나게 느려지는 경우가 있던데 해당 경우에 해결법을 혹시 알고 계실까요?
아무래도 서버를 받은 입장이라서 AWS 대시보드에서 인스턴스쪽을 직접 확인할 수 가 없어서 인스턴스를 중지하고 다시 시작해야 해당 문제가 해결 되는건지 모르겠네요.
이진석
2024.03.26왜 느려지는 지에 대해서, 메트릭 모니터링을 해봐야 원인을 파악할 수 있습니다. EC2 대시보드는 OS에 대한 것일 뿐, 서비스 자체에 대한 메트릭은 지원하지 않으니깐요. New Relic, Datadog와 같은 APM 서비스와 연동하셔서 메트릭을 모니터링해보세요. 데이터베이스도 측정할 수 있으니까, 연동해서 모니터링해보시면 원인이 파악가능하실 겁니다.
화이팅입니다~!
yezi9733
2024.03.26넵 답변감사합니다~ 얼른 DRF 관련 강의가 업로드 되었으면 좋겠네요! 그 동안은 공식문서를 보면서 실습해보겠습니다.