프로젝트 초반에 경험이 많지 않을 때 고민했던 내용을 글로 정리해보았다.
프로젝트 진행 중 문득 이런 생각이 들었다.
배열 처리 로직 중, 중복처리와 관련된 부분이라면 Set을 사용하면 성능 개선이 될 수 있지 않을까?
팀에 이런 의견을 제시했고 팀원의 의견은 조금 달랐다.
현재 프론트 핵심 컨벤션이 “유지보수가 용이한 코드”이기 때문에,
문제가 발생했을 때 최적화를 수행하는 것이 좋지 않을까?
이 부분에 대해 자세히 알아보고자 문제가 발생했을 때 최적화를 수행하는 것의 장단점에 대해 조사해보았다.
🚨 문제가 발생했을 때 최적화를 수행하는 이유
(1) 실제 문제를 명확히 파악 가능
- 애초에 문제가 발생하지 않았다면, 성능 개선이 필요한지조차 불분명하다.
- 예를 들어,
Set을 도입해 중복 제거를 최적화한다고 가정할 때, 성능 차이가 크게 나타나지 않는 환경에서는 불필요한 최적화 작업이 될 수 있다.
- 성능 병목 구간(예: 대량의 데이터 처리, 높은 빈도의 연산 등)이 명확할 때만 필요한 자료형을 선택하거나 최적화를 진행하는 것이 효과적이다.
(2) 예방적 최적화는 불필요한 복잡성 유발 가능
- 코드에 성능 최적화 로직을 추가하면 코드의 가독성이 낮아지거나 유지보수가 어려워질 수 있다.
- 또한, 문제가 발생하지 않은 부분을 지나치게 최적화하면 오히려 코드의 단순함과 효율성을 떨어뜨릴 위험이 있다.
(3) 실제 환경에 맞는 최적화 가능
- 문제가 발생한 상황에서는 실제 데이터를 기반으로 원인을 분석할 수 있으므로, 더 구체적이고 실질적인 해결책을 도출할 수 있다.
- 예를 들어, 자료형을 변경하기 전에 프로파일링을 통해 정확히 어떤 부분에서 병목이 발생했는지 파악하고 최적화 방법을 적용할 수 있다.
⚠️ 자료형 변경과 관련한 사전 최적화의 위험
- 자료형 선택(예:
Array → Set)이 모든 경우에 성능을 높이는 것은 아니다.
- 작은 규모의 데이터에서
Set을 사용하는 것은 Array보다 오히려 성능이 낮을 수 있습니다. 이유는 내부적으로 더 많은 메모리와 연산이 필요하기 때문이다.
- 반대로 데이터가 대규모로 늘어났을 때야 비로소
Set의 이점(중복 제거, 빠른 검색 성능 등)이 드러날 수 있다.
💡 경험적 측면에서의 의미
(1) 문제 해결 능력 강화
- 성능 문제가 실제로 발생했을 때 이를 분석하고 최적화하는 과정은 개발자의 문제 해결 능력을 크게 향상시킨다.
- 예를 들어, 단순히
Set을 사용했다고 성능이 개선되지 않는 상황에서, 병목 지점을 찾아 해결하는 능력은 훨씬 더 중요한 경험이 될 수 있다.
(2) 학습의 기회
- 최적화 도구나 기법은 특정 상황에 따라 달라집니다. 문제를 겪고 이를 해결하는 과정에서 다양한 방법을 실험해보는 기회가 생긴다.
- 자료형 변경이 필요한 상황과 그렇지 않은 상황을 스스로 판단할 수 있는 경험적 기준을 쌓을 수 있다.
(3) 비즈니스 우선순위에 맞는 개발
- 모든 프로젝트에는 리소스가 제한적입니다. 실제 문제가 아닌 부분을 미리 최적화하려다 보면 정작 중요한 기능 개발이나 디버깅에 할애할 시간이 줄어든다.
- 필요할 때 최적화하는 방식은 비즈니스 가치와 우선순위를 고려하는 현실적인 접근법이다.
✅ But, 사전 최적화와 필요 기반 최적화의 균형
이 모든 것을 고려하더라도, 문제가 발생하기 전에도 최적화가 필요한 경우가 있다.
(1) 사전 최적화가 필요한 경우
- 코드가 초기부터 성능 요구사항이 명확한 경우 (예: 대용량 데이터를 처리해야 하는 경우)
- 성능 문제가 발생했을 때 수정이 어렵거나 비용이 큰 경우 (예: 데이터베이스 설계)
(2) 필요 기반 최적화가 더 적합한 경우
- 문제 발생 가능성이 낮거나 데이터 규모가 작아 성능 병목이 예상되지 않을 때
- 성능보다는 유지보수성과 가독성이 더 중요한 초기 개발 단계
❗결론
지금 당장 문제가 없는 부분을 불필요하게 최적화하기보다는, 필요할 때 성능 개선을 통해 더 구체적이고 의미 있는 경험을 쌓는 것이 낫다고 생각된다.
특히, 초기 개발 단계인데다가 프로젝트 규모가 작은 상황이므로 필요할 때 성능 개선을 하는 것이 더 좋다고 판단!
⚠️하지만
문제가 발생하기 어렵더라도 예상되는 병목 구간이나 데이터 특성에 대해 사전에 고민해보는 것도 장기적인 관점에서는 중요한 자세이다.