-
Notifications
You must be signed in to change notification settings - Fork 5
스트리트 코더 sprint 9 - 김영명 #657
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| # 스트리트 코더 | ||
| ## 7장 ~ 9장 | ||
| --- | ||
| ## 논의 내용 | ||
| * 최근에 어떠한 형태로든 최적화를 진행했던 경험에 대해서 얘기해보면 좋을 것 같습니다. | ||
| * p95가 1초대로 꽤 길게 잡히던 API가 있었는데요, Flame graph를 이용해서 시간이 오래 걸리는 지점을 찾아 100~200ms대로 최적화를 했었습니다. DB 쿼리 후 좀 길게 그래프가 구멍이 생겼었는데, 분석해보니 가져오는 row가 너무 많아(몇만 개, ORM 사용중) 조건을 넣어 대상 데이터를 좁히면서 해결되었습니다. | ||
|
Comment on lines
+4
to
+6
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 최근에는 성능관련해서 처리한부분은 없었던 것 같네요 과거에는 DB 쿼리 튜닝을 많이 했었습니다 말씀해주신 사례 처럼 latency가 긴 trace 기준으로 병목구간이 DB쪽인지 확인하고, DB일 경우에 쿼리 확인해보고 수정하는 방식으로 많이 작업 했었습니다
Comment on lines
+4
to
+6
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 저도 최근에는 딱히 없었던 것 같은데, 가장 어이없던 성능 최적화 경험은 임시 데이터가 많은 것이 보기 좋지 않아서 지웠더니 성능이 빨라졌던 경험이 있습니다. 아마 임시 데이터가 너무 많기도 하고 데이터들이 편향되어 있어서 그랬던 것 같은데, 확실한 이유를 짚고 넘어가지 않았던게 지금 생각해보면 좀 아쉽네요.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 성능 관련해서는 DB 조회에 대한 값에 스프링 캐싱을 추가하여 무의미하게 DB를 계속 조회하는 부분 제거를 한 정도 일거 같아요. 그거 말고는 호출 api 중 중요도 낮은걸 비동기로 변경하였습니다. |
||
|
|
||
| ## Chapter 7 - 자기 주장이 뚜렷한 최적화 | ||
| 현재 앱이 사용자와 컴퓨터간의 인터랙션 시 가장 적절한 응답 시간을 지칭하는 도허티 임계(Doherty Threshold)를 심각하게 넘는 등의 문제로 최적화하는 것은 필수지만, 섣부른 최적화는 모든 악의 근원이라고 할 정도로 조심하라고 한다. | ||
| 그 이유는 최적화는 코드에 경직성을 가져와 유지 관리를 더 어렵게 만들 수 있기 때문이다. | ||
| 이를 피하기 위해서는 해결해야 할 문제가 무엇인지를 올바르게 파악하는 것이 중요하다고 한다. | ||
|
|
||
| 회사마다 특정 기간을 잡고 OKR을 설정하여 달성하는 방식이 있을텐데, 이런 목표를 달성하기 위해 최적화가 들어가는 것은 드문 것 같다. | ||
| 특히 스타트업일수록 새로운 기능들을 만들어내며 끊임없이 새로운 가치를 창출해내느라 바쁘기 때문이라고 생각한다. | ||
| 시간이라는 유한한 자원 속에서 최적화라는 것은 더더욱 명확한 문제 정의와 해결책이 있어야 진행 가능할 것이다. | ||
| 이에 따라 저자가 말하는 섣부른 최적화의 위험은 꽤 공감된다. | ||
|
|
||
| 이후 책에서는 근본적인 원인을 식별하기 위해 이분법적인 하향식 접근으로 진단하는 것을 시작으로, I/O, 캐시 등 일반적인 엔지니어링 기법들이 소개된다. | ||
| 특히 스레드 관련은 요즘에도 꽤 많이 사용되기 때문에(코루틴, 가상 스레드 등) 재미있게 읽었다. | ||
|
|
||
| ## Chapter 8 - 기분 좋은 확장성 | ||
| 이번 장에서 말하는 확장성은 OOP의 추상화, 캡슐화 등을 이용한 것이 아니라, 잠금으로 인한 확장성이다. | ||
| 즉 확장성을 방해하는 잘못된 코드를 제거하는 것이고, 특히 잠금이 성능과 확장성을 저해하는 주요 요인이 될 수 있다는 것이다. | ||
| 멀티 스레딩은 당연한 요즘에는 잠금이 아예 없을 수는 없지만 잠금이 아닌 다른 방법들로도 항상은 아니지만 해결할 수도 있다. | ||
| 잠금이라는 것은 결국 성능에 크게 영향을 미칠 수 밖에 없기 때문에 꼭 필요한 곳에서만 써야한다는 것에 동의한다. | ||
| 나는 예전에는 정합성이라는 것을 반드시, 절대적으로 모든 곳에서 지켜야하는 줄 알았다. | ||
| 그러나 트레이드오프의 영향을 제대로 이해하고, 의도가 명확하다면 불일치를 두려워 할 필요 없이 다른 방법을 이용해도 좋다는 것을 배웠다. | ||
|
|
||
| 이후에는 DB 커넥션을 최대한 한 요청에서 짧게 가져야하며, 동시에 커넥션을 필요 이상을 가져오지 않도록 해야한다고 말한다. | ||
|
|
||
| ## Chapter 9 - 버그와의 동거 | ||
| 세상에는 완벽한 프로그램은 없기 때문에 어디에는 버그가 존재한다. | ||
| 그 이유는 프로그램의 본질적인 예측 불가능성 때문에 소프트웨어 개발이 복잡하기 때문이다. | ||
| 그렇다면, 버그가 없는 프로그램을 만들기란 불가능하다는 것을 받아들이고, 발견되는 수 많은 버그들 중에서 어떤 것을 수정할지 순서를 잘 결정해야한다. | ||
|
|
||
| 책에서는 우선순위와 심각성 두 개를 지표로 두고, 어떤 것을 즉시 고치고, 인턴에게 수정을 지시할지 표를 보여준다. | ||
| 모든 버그를 다 찾아서 없애면 정말 좋겠지만, 결국 버그를 추적하는 것도 모두 비용이 발생하기 때문이다. | ||
| 순위가 아래로 내려가면서 고치지 않게 되는 버그들이 생기는데, 흔히 이것들이 Jira의 백로그로 가는 것 같다. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(클로드가 알아서 최적화 해주게 시킨 경험 제외하고...)
저 역시도 DB에 데이터가 많이 쌓이게 되면 조금씩 응답 시간이 느려지는 경향 때문에 디버깅 해 보고 쿼리를 수정하는 방향으로 하는 작업이 더 많았던 것 같긴 합니다.
그 외에 웹 프론트 쪽에서도 느리게 로딩되는 부분에 대해 지연 로딩 방법을 써서 사이트가 로딩하는데 오래 걸린다는 느낌을 안받도록 바꿨던 적도 있습니다.