20. AWS CloudWatch*에 몇몇 지표를 생성해두었음
https://aws.amazon.com/cloudwatch*
업무 우선순위가 아니었음에도
어떻게든 시간을 내서,
21. AWS CloudWatch*에 몇몇 지표를 생성해두었음
https://aws.amazon.com/cloudwatch
https://newrelic.com/python
*
**
업무 우선순위가 아니었음에도
어떻게든 시간을 내서,
New Relic APM**을 API서버에 연동해두었음
22. AWS CloudWatch*에 몇몇 지표를 생성해두었음
https://aws.amazon.com/cloudwatch
https://newrelic.com/python
*
**
업무 우선순위가 아니었음에도
어떻게든 시간을 내서,
New Relic APM**을 API서버에 연동해두었음
Django ORM을
어떻게 하면 좀 더 빠르게 동작하도록 만들 수 있는지,
적어도 방향성에 대한 논의를 조금 해두었음
23. AWS CloudWatch*에 몇몇 지표를 생성해두었음
https://aws.amazon.com/cloudwatch
https://newrelic.com/python
*
**
업무 우선순위가 아니었음에도
어떻게든 시간을 내서,
New Relic APM**을 API서버에 연동해두었음
Django ORM을
어떻게 하면 좀 더 빠르게 동작하도록 만들 수 있는지,
적어도 방향성에 대한 논의를 조금 해두었음
이에 따라 야금야금 개선하고 있었음
41. 처음 사용하는 거라면 어떻게든 조금은 공부하고 사용하자
다른 것들은 잘 모르겠지만
피플펀드 시스템을 만들면서 얻은 교훈 하나,
42. 처음 사용하는 거라면 어떻게든 조금은 공부하고 사용하자
다른 것들은 잘 모르겠지만
피플펀드 시스템을 만들면서 얻은 교훈 하나,
달려가는 자동차의 바퀴를 갈아끼는 것은 정말 힘들다.
시간이 누구보다 소중한 스타트업에서는.
43. 처음 사용하는 거라면 어떻게든 조금은 공부하고 사용하자
다른 것들은 잘 모르겠지만
피플펀드 시스템을 만들면서 얻은 교훈 하나,
달려가는 자동차의 바퀴를 갈아끼는 것은 정말 힘들다.
시간이 누구보다 소중한 스타트업에서는.
하지만 개발팀이 사업의 성장을 견인하지 못하면,
모든 것이 물거품이다.
44. 처음 사용하는 거라면 어떻게든 조금은 공부하고 사용하자
다른 것들은 잘 모르겠지만
피플펀드 시스템을 만들면서 얻은 교훈 하나,
달려가는 자동차의 바퀴를 갈아끼는 것은 정말 힘들다.
시간이 누구보다 소중한 스타트업에서는.
하지만 개발팀이 사업의 성장을 견인하지 못하면,
모든 것이 물거품이다.
안타깝지만 결론은 상황에 따른 적절한 판단력이 가장 최고의 해결책.
그럼에도 불구하고, 시급성과 중요성 중에서 중요한 것을 놓지지 않을 수 있는 방법을 항상 고민하자.
45. 아무튼, 그 결과 이렇게 됨
w/ NewRelic APM
* NewRelic APM에서는 사건 당시 처참한 장면을 스샷으로 찍어두지 못함
46. 아무튼, 그 결과 이렇게 됨
w/ NewRelic APM
* NewRelic APM에서는 사건 당시 처참한 장면을 스샷으로 찍어두지 못함
47. 아무튼, 그 결과 이렇게 됨
w/ NewRelic APM
* NewRelic APM에서는 사건 당시 처참한 장면을 스샷으로 찍어두지 못함
48. 아무튼, 그 결과 이렇게 됨
w/ CloudWatch
* CloudWatch는 몇 개월 전 데이터도 다 보관됨 무서운 놈들임
49. 아무튼, 그 결과 이렇게 됨
SWAP 사용율 미친듯이 올라감
w/ CloudWatch
* CloudWatch는 몇 개월 전 데이터도 다 보관됨 무서운 놈들임
50. 아무튼, 그 결과 이렇게 됨
DB 연결/사용량 미친듯이 늘어남
w/ CloudWatch
* CloudWatch는 몇 개월 전 데이터도 다 보관됨 무서운 놈들임
51. 아무튼, 그 결과 이렇게 됨
응답시간 ‘평균’ 8초 이상 w/ CloudWatch
* CloudWatch는 몇 개월 전 데이터도 다 보관됨 무서운 놈들임
52. 아무튼, 그 결과 이렇게 됨
HTTP Status 200 외의
다른 응답이 미친듯이 나감
w/ CloudWatch
* CloudWatch는 몇 개월 전 데이터도 다 보관됨 무서운 놈들임
57. 딱 하나의 병목을 해결한다고 끝나는 문제가 아님을
다른 부서와 공유하기
히든 퀘스트
당황하지 말고 수치로 말할 수 있는 전후 결과 만들기
58. 딱 하나의 병목을 해결한다고 끝나는 문제가 아님을
다른 부서와 공유하기
히든 퀘스트
당황하지 말고 수치로 말할 수 있는 전후 결과 만들기
덜떨어진 개발팀, 혹은 자존심만 쎈 개발팀이 되는 순간 신뢰를 잃는다
59. 딱 하나의 병목을 해결한다고 끝나는 문제가 아님을
다른 부서와 공유하기
히든 퀘스트
당황하지 말고 수치로 말할 수 있는 전후 결과 만들기
덜떨어진 개발팀, 혹은 자존심만 쎈 개발팀이 되는 순간 신뢰를 잃는다
명확한 의사소통 능력과 자연스러운 성과 공유 또한 몸값을 올리는 중요한 사회생존기술 중에 하나이다
62. API 개선하기
ORM을 정확히 파악하기
* https://pypi.python.org/pypi/django-debug-toolbar
63. API 개선하기
# DB에 접속
e = Entry.objects.get(id=5)
# 관련된 Blog 객체를 가져오기 위해 DB에 한번 더 접속
b = e.blog
ORM을 정확히 파악하기
*https://tech.peoplefund.co.kr/2017/11/03/django-db-optimization.html
64. API 개선하기
# DB에 접속
e = Entry.objects.get(id=5)
# 관련된 Blog 객체를 가져오기 위해 DB에 한번 더 접속
b = e.blog
ORM을 정확히 파악하기
*https://tech.peoplefund.co.kr/2017/11/03/django-db-optimization.html
loop였다면…!
65. API 개선하기
# DB에 접속
e = Entry.objects.get(id=5)
# 관련된 Blog 객체를 가져오기 위해 DB에 한번 더 접속
b = e.blog
ORM을 정확히 파악하기
*https://tech.peoplefund.co.kr/2017/11/03/django-db-optimization.html
# select_related을 사용
# DB에 접속
e = Entry.objects.select_related('blog').get(id=5)
# 이미 위에서 관련된 Blog객체들을 가져왔기 때문에 DB에 접속하지 않음
b = e.blog
loop였다면…!
67. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
68. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
69. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
70. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
채권
투자건
기관 투자자
투자건
법인 투자자
투자건
일반 투자자
…
…
71. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
채권
투자건
기관 투자자
투자건
법인 투자자
투자건
일반 투자자
+ 기관 투자자의 총 투자금액
+ 전체 투자자의 총 투자금액
…
…
72. API 개선하기
미리 계산해두기
채권 목록에서 각 채권에 법인이나 기관이 투자한 비중을 표시하기 위해
목록을 순회하며 각 채권에 투자된 건을 계산하는 대신,
채권 정보에 법인/기관의 투자 금액을 투자 시점에 기록해둔다.
예시:
교과서적인 방법론으로 해결할 수 없는 부분은
과감히 원칙을 버린다.
반정규화(역정규화)
83. 502 Bad Gateway
… connect() to unix: … sock failed (Resource temporarily unavailable) …
w/ Nginx
Nginx 로그에 남아있는 하나의 단서
84. 502 Bad Gateway
… connect() to unix: … sock failed (Resource temporarily unavailable) …
w/ Nginx
Nginx 로그에 남아있는 하나의 단서
+@
“설정값 하나만 바꾸면 될 것 같은데…”
85. 502 Bad Gateway
… connect() to unix: … sock failed (Resource temporarily unavailable) …
w/ Nginx
Nginx 로그에 남아있는 하나의 단서
+@
“설정값 하나만 바꾸면 될 것 같은데…”
+@
“누구는 되고 누구는 안되요”
86. 502 Bad Gateway
sudo vi /etc/sysctl.conf
w/ Nginx
net.core.somaxconn=1024
sudo reboot now
* http://www.ryanfrantz.com/posts/apache-tcp-backlog/
* http://meetup.toast.com/posts/54
* https://brunch.co.kr/@alden/6