Resource Handling in Spring MVCArawn ParkAdied 2014, 봄싹 세미나에서 발표한 `Resource Handling in Spring MVC`의 발표자료입니다.
주요 내용으로 Spring MVC에서 정적 자원(css, js, etc)을 다루는 방법을 다루고 있습니다.
데모 코드 : https://github.com/arawn/resource-handling-in-springmvc
뭔지 모르지만 발표Kyoung Up Jung2013년 8월 31일에 올렸던 speakerdeck에 올렸던 자료 백업
https://speakerdeck.com/perhapsspy/mweonji-moreujiman-balpyo-aspeseo-djangoro-olmgyeogan-sayeon
---
한 개발자의 성장기(아니 삽질기)입니다.
ASP 개발을 하다가 Django를 쓰게 된 이야기를 간략하게 재미위주로 적어보았습니다.
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.
커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.
조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!
서버학개론(백엔드 서버 개발자를 위한)SU BO KIM어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
뭔지 모르지만 발표Kyoung Up Jung2013년 8월 31일에 올렸던 speakerdeck에 올렸던 자료 백업
https://speakerdeck.com/perhapsspy/mweonji-moreujiman-balpyo-aspeseo-djangoro-olmgyeogan-sayeon
---
한 개발자의 성장기(아니 삽질기)입니다.
ASP 개발을 하다가 Django를 쓰게 된 이야기를 간략하게 재미위주로 적어보았습니다.
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi커빙의 Django, Celery, Azure Cloud, SNS 연동, 컨텐츠 수집 기술을 한눈에 볼 수 있도록 소개한 자료 입니다.
커빙을 처음 개발하면서 많은 어려움이 있었고,
또 많은 분들의 도움으로 좋은 결과를 얻을 수 있었습니다.
조금 더 깊은 내용을 다뤘으면 하는 아쉬움이 있지만,
다른 분들에게 조금이나마 도움이 되었으면 좋겠네요!
서버학개론(백엔드 서버 개발자를 위한)SU BO KIM어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek대부분의 중소 모바일 게임 업체는 앱을 잘 만들기에도 시간이 모자라 출시일을 잘 맞추기 급급한 상황이다. 그러다 보니 운영을 위한 툴은 소홀히 개발하는 경우가 대부분이고 운영 캠페인은 날림으로 개발하거나 그때 그때 개발자가 필요한 부분만 개발하기 일쑤다. 그러다보니 마케터는 결국 늘 개발자 눈치만 살피게 된다. 필자는 블루윈드에서 이러한 문제를 절감했고 '모바일 게임 개발사가 앱 개발에만 집중할 수 있게 해주고 싶다'는 IGAworks의 철학에 공감하여 라이브 오퍼레이션 프로젝트를 시작하게 되었다.
라이브 오퍼레이션의 개발 중점과제는 5가지였다. 첫번째, 다수의 개발사가 하나의 큰 클라우드 시스템을 사용하도록 multi-tenant 인프라를 구축해야 한다. 두번째, TCO(Total cost of ownership)를 최소화해야 한다. 세번째, 앱의 핵심유저를 실시간으로 그룹화하여 타게팅 캠페인을 할 수 있어야 한다. 네번째, 캠페인의 성과를 마케터에게 실시간으로 피드백해야 한다. 다섯째, 3개월 안에 정식 서비스가 되어야 한다는 점이었다. (왜 우리에게 주어지는 시간은 늘 3개월인가) 그리고 당연하지만 이 서비스를 혼자 개발해야 했다.
이 다섯가지 이슈를 해결하기 위하여 AWS 클라우드 상에 생산성과 성능이 검증된 node.js 와 mongodb를 이용하여 서비스 백엔드를 구성하였고, multi-tenant를 구성하기 위한 여러가지 고민과 그 해결책을 직접 구현하였다. 필자는 node.js와 mongodb를 사용해 본 경험이 충분하다 생각했지만 대규모 정식 서비스를 진행하며 많은 함정에 빠졌고 결국 해결했다.
이 발표를 통해 청강자는 node.js와 mongodb를 이용하여 multi-tenant 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee인프콘 2023에서 발표한 <코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기> 발표 자료입니다.
https://www.inflearn.com/conf/infcon-2023/session-detail?id=765
10만 라인, 26280시간의 이야기Minyoung Jeong지난 3년여간 비트라는 제품을 Python으로 개발하면서 얻게된 경험들을 나눕니다. 주로 기술적인 의사결정의 방법들과 실수들, 또 그런 실수들을 어떻게 수습하고 다듬어 왔는지 이야기 하고, 그런 과정들을 통해 비트라는 Python 프로젝트를 어떻게 개발하여 관리하는지를 다룰 예정입니다. 상세한 사례보다는 조금은 메타적인 이야기를 하여 가급적 많은 분들에게 도움이 되고자 하였습니다.
- 비교적 오랜시간 동안 많은 인원이 투입된 프로젝트가 어떻게 개발하고 머지하는지,
- 품질 관리를 왜 해야하고 또 어떻게 하는지,
- 적정한 기술을 선택함에 있어 어떻게 해야하는지
같은 부분을 상세하게 다룰 예정입니다.
9. 기본 옵션들
•다양한 기본 옵션을 잘 활용하면
복잡한 내용을 매우 간단히 줄일 수 있음
•unique, validators 등은
매우 유용한 활용법을 지님
•editable 은 object 수정 페이지의
불필요 필드를 숨겨줌
10. 기본 기능 적극 활용
•Actions 기능 활용
•Filter 기능 활용
•Search 기능 활용
•date_hierarchy 기능 활용
•fieldsets 기능 활용
•list_display_links
11. Actions
•Model 의 method 를 호출 할 수 있음
•별도 페이지 생성을 최소화 가능
•선택된 row들을 queryset으로
하나씩 조회하여 처리
•https://docs.djangoproject.com/en/2.0/
ref/contrib/admin/actions/
12. Filter
•이렇게 별도의 커스텀 필터를 만들 수 있음
•admin 페이지를 벋어나지 않도록
기본 기능을 재정의 해서 사용
•필터의 활용방법은 사이트 상황에 맞춰 직접 제
작
13. Search
•가장 유용하다고 생각한 기능
•본 객체의 필드 조회는 당연,
연결된 필드도 조회할 수 있음
•연관된 필드의 내용 조회가 가능함
다양한 방법으로 활용 가능
•남용하는 것은 무거운 쿼리를 만들 수 있음 주
의!
14. date_hierarchy
•날짜를 모아서 정리해 줄 수 있음
•이 발표 자료를 정리하기 전에는 몰랐던 내용
(심지어 filter 기능을 재정의 해서 썼었음)
•주별 정리 기능은 없어서 조금 아쉬움
15. fieldsets
•default 를 잘 정의 해두면 더 유용함
•개발자 보다 관련팀들에게 유용한 기능
•너무 많은 옵션은 결국 안쓰게 되는 문제를 일
으킴
(잘못 손대서 잘못 될까 하는 두려움)
•admin 페이지를 활용하게 하기 위한 필수 팁
22. Function Based
vs
Class Based
Which is Better between FBC
and CBV
김석훈님 발표 자료 참고
분 류 지네릭 뷰 이름 뷰의 기능 또는 역할
Base View View
가장 기본이 되는 최상위 지네릭 뷰입니다. 다른 모든 지네릭 뷰들은
View의 하위 클래스입니다.
TemplateView 템플릿이 주어지면 해당 템플릿을 렌더링해줍니다.
RedirectView URL이 주어지면 해당 URL로 리다이렉트시켜줍니다.
Generic
Display View
DetailView 객체 하나에 대한 상세한 정보를 보여줍니다.
ListView 조건에 맞는 여러 개의 객체를 보여줍니다.
Generic
Edit View
FormView 폼이 주어지면 해당 폼을 보여줍니다.
CreateView 객체를 생성하는 폼을 보여줍니다.
UpdateView 기존 객체를 수정하는 폼을 보여줍니다.
DeleteView 기존 객체를 삭제하는 폼을 보여줍니다.
Generic
Date View
ArchiveIndexView 조건에 맞는 여러 개의 객체 및 그 객체들에 대한 날짜 정보를 보여줍니다.
YearArchiveView 년도가 주어지면 그 년도에 해당하는 객체들을 보여줍니다.
MonthArchiveView 연, 월이 주어지면 그에 해당하는 객체들을 보여줍니다.
WeekArchiveView 연도와 주차(week)가 주어지면 그에 해당하는 객체들을 보여줍니다.
DayArchiveView 연, 월, 일이 주어지면 그 날짜에 해당하는 객체들을 보여줍니다.
TodayArchiveView 오늘 날짜에 해당하는 객체들을 보여줍니다.
DateDetailView
연, 월, 일, 기본키(또는 슬러그)가 주어지면 그에 해당하는 특정 객체
하나에 대한 상세한 정보를 보여줍니다.
4 / 12
23. FBV vs CBV
•김석훈님의 자료를 참고
/seokhunkim4/20171209pyconfbvcbv
•Rest Framework 를 사용하게 되면 CBV 를 사용하시는 것을 매우 권함
•적은 코드 및 예외 처리 등 이점이 매우 많음
38. 주관적인 경험담
•웹을 만든다는 것은 주로 서비스 개발을 의미
•담당자 혹은 PM 은 당장 동작하는 페이지를 요구
•하지만 일정은 고정되어 있고 개발 요구사항은 계속 변경 됨
•반복에 반복, 반복을 거듭하다 보면 망가지는 것은 내 몸
39. 개발자가 가장 잘하는 일을 하자
•자동화 = TDD, BDD
•빠른 확인 및 변화에 민첩하게 대
응
•기술적 접근
•간결하고 안전한 코드 생성
•임시방편 대응 자제
•결국은 자신 및 회사의 자산
40. DDP > BDD > TDD = X-DD
•Data Driven Programming
•개발 요구사항을 Model 별로 미리 정리 함
•Behavior Driven Development
•모델의 변화를 Model 에 함수로 정리 함
•Test Driven Development
•반복적으로 검증하며 개발함
41. 쉬운 것을 어렵게 만들지 말자
•data 기반 개발 잘 활용하기 = tdd 기반으로 검증하자
•잘 짜여진 tdd 만 보아도 주석과 인수인계가 대폭 줄어든다.
•프레임웍 소스 보기
•DB models 에 mixin 을 적극적으로 활용하자
•title, description 과 같이 매우 당연히 쓰는 것들의 코드를 줄이자.
57. Database Index
•도서관 전체의 책을 모두 확인한다면?
•관련된 내용을 정리하여 확인 할 내용을 줄임
•세부 내용은 index 를 확인 한 뒤 실제 데이터
접근
•cardinality : index 의 범위가 넓게 퍼지는 것
58. 대규모 서비스를 준비한다면?
•apache2 server-status , nginx stub_status 를 이해하자.
•어떤 서버를 얼만큼 준비해야할까? => locust 를 잘 활용하자
•계산이 많은 로직인지? I/O wait 가 많은 로직인지?
•DB 의 부하는 얼만큼 생기는지?
•django 는 db connection pool 이 없음
•생각보다 더 높은 max connection 수치를 설정해야 함
60. 웹 개발시 주의점
•DNS 갱신은 1일 이상 걸리는 것을 감안하고 옮긴다.
•브라우져의 캐시를 완벽하게 컨트롤 하기는 어렵다.
•파일명을 바꾸거나, 쿼리를 붙여 캐시 하지 않도록 하자
•한번의 요청으로 긴 처리 시간이 걸리는 작업은 반드시 별도로 분리시킨다.
•예를 들어서 전체 통계 계산 처리등 등
•브라우져 호환성
61. django 개발 주의점
•admin 툴에서 구현한 것은 update(), delete() method 호출 안됨
•환경별 설정 파일은 반드시 분리해서 관리할 것
•ForeignKey 에 너무 많은 키가 연결되는 경우 admin 페이지를 호출하는 것만
으로도 부하가 걸리는 경우가 많음 주의
•fixture 를 꼭 만들어서 공유할 것
•tdd 에서 assertQuerysetEqual 을 반드시 활용할 것
•model 에 classmethod staticmethod 등을 잘 활용하여 구현할 것