하찮은 성능 개선 이야기
사실은 오히려 부끄러운 이야기가 될 수 있어요.
aspnetcore에서 동기식 로직을 사용하는 분들이 종종 있는데요. 앵간하게도 권장되지 않는 것이지만 관대한 ms좌는 적절하게 허용을 해줘요. (AllowSynchronousIO 옵션) 사실 저는 동기식 처리가 더 빠르다고 말씀하시는 분들을 싫어해요! 어느 유튜브에서 당당하게 얘기를 하고 있어서 poor 목록에 저장해두었는데 이런데도 구독자는 꾸준히 늘어나고 있어요. 신기하지 않나요.
사실 aspnetcore 공식 문서에 동기식 로직은 스레드 재활용 가능성을 떨어뜨린다고 하지 말라고 권장하는데요. 더 심각한 매커니즘은 신규 스레드 생성에 시간 지연 조건이 걸려있다는 것이어요. 서버 프로그램이므로 새로 요청되는 스레드를 그냥 막 만들어주면 스레드 생성 요청이 누적되어서 서버가 터져요.
php를 연동 했을 때 순간적인 과부하를 버티지 못한 문제점은 aspnetcore의 기본 대기 스레드가 8개로 설정되어 있으므로 8개 스레드를 모두 점유하고 있는 상태에서 신규 스레드 생성 조건이 만족하기 전까지 서버가 중단 되버리는 문제가 발생해요. 조건문이 이상한 것인지 이케이케 스레드를 적극적으로 생성하지도 않아서 아무튼 쉽게 터져요. 이러면 기본 스레드를 4000(4096)개 정도로 설정해두면 디도스를 맞지 않는 한 과부하에 방어가 잘 되는데요.
순수 트래픽으로 스레드 4000개를 모두 소비할 지경이라면 떼돈을 벌어야 하는 것이므로 당장 신경 쓰지 않아요. 이때가 되면 기쁜 마음으로 서버를 다시 손 보거나 부하 분산을 걸지 않겠나요.
aspnetcore 서버를 사용하면서 설정 부분 문서를 모두 잃지 않은 인적 오류일 것이어요. 어차피 사람 일은 100%효율이 안 나오는 것이 일반적으로 정상이므로 앵간하게 터진 경우가 되어야 심각한 기분을 받아요.
