디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

코드 베이스를 과도하게 추상하면 어떤 숨겨진 비용이 발생하는가?

ㅆㅇㅆ(124.216) 2025.01.02 20:14:59
조회 795 추천 7 댓글 10

https://itnext.io/what-are-the-hidden-costs-of-over-abstracting-your-codebase-8b6a8ab0ab2b


https://itnext.io/what-are-the-hidden-costs-of-over-abstracting-your-codebase-8b6a8ab0ab2b

 


모든 개발자는 깔끔하고 재사용 가능한 코드를 좋아합니다. 추상화는 마치 초능력처럼 느껴지지만, 그렇지 않은 경우도 있습니다.

저는 인정하고 싶지 않을 정도로 지나친 추상화의 늪에 여러 번 빠져봤는데, 말처럼 화려하지는 않았습니다.

이 글에서는 '완벽한 추상화'에 대한 집착이 어떻게 역효과를 냈는지,

왜 그것이 프로젝트를 더 어렵게 만들었는지(개선이 아니라), 같은 실수를 피하는 방법을 공유해 보려고 합니다


1. 복잡성: 단순함을 혼돈으로 바꾸기


경력 초기에 저는 모든 서비스의 모든 요청 유형을 처리할 수 있는 범용 API 클라이언트를 만들겠다는 기발한 생각을 했습니다.

URL, 매개변수, 페이로드를 동적으로 구성하는 함수를 만들 수 있는데 왜 각 엔드포인트에 대해 새 함수를 작성해야 하나요?

천재적인 생각이죠? 6개월 후, 제 '걸작'은 유지보수의 악몽이 되었습니다.

새로운 서비스에 필요한 헤더나 고유한 응답 형식 등 요구 사항이 조금씩 달라질 때마다 추상화에 조건부 로직을 더 추가해야 했습니다.

결국에는 너무 비대해져서 실패한 요청을 디버깅하는 것이 폭탄을 해체하는 것처럼 느껴졌습니다. 최악의 부분은?

팀의 한 후배 개발자가 "그냥 각 서비스마다 별도의 함수를 작성하면 안 되나요?"라고 물은 적이 있습니다.

저는 웃어넘겼지만 마음속으로는 그 말이 맞다는 것을 알았습니다.

훈: 지나친 추상화는 단순화된 것이 아닙니다.

복잡성을 레이어 아래에 숨길 뿐입니다.

그리고 이러한 레이어가 쌓이면 코드 탐색이 불가능해집니다.


2. 성능 병목 현상: 추상화로 인해 속도가 느려지는 경우


한 프로젝트에서 저는 프런트엔드 양식 작성기를 추상화했습니다.

텍스트 필드, 드롭다운, 체크박스 등 스키마에 따라 동적으로 입력을 생성할 수 있었습니다.

저속 기기에서 양식을 로드하는 데 3초가 걸린다는 QA의 보고가 있을 때까지는 꽤 자랑스러웠습니다.

왜 그럴까요? 각 필드는 구성 요소를 초기화하고 유효성 검사 규칙을 처리하며 불필요한 리렌더링을 트리거하는 정교한 팩토리 패턴을 거쳤기 때문입니다.

지금 생각해보면 존재할 필요가 없는 코드를 프로파일링하고 최적화하는 데 며칠을 소비했습니다.

특정 양식의 필드를 하드코딩했다면 성능 문제 없이 절반의 시간으로 완료할 수 있었을 것입니다.

교훈: 추상화에는 비용이 존재합니다.

더 많은 계층을 추가할수록 성능을 저해하는 비효율성이 발생할 가능성이 높아집니다.


3. 온보딩 문제: 신입 개발자를 겁주기


몇 년 전, 저는 모든 것이 추상화된 프로젝트에 합류했습니다. 모델에는 모델에 대한 인터페이스가 있었고,

서비스에는 다른 서비스를 호출하는 팩토리가 있었습니다.

간단한 사용자 프로필을 업데이트하는 것조차 추상화의 미로 속으로 깊이 파고들어야 했죠.


"이 기능의 로직은 어디에 있나요?"와 같은 질문을 하고 "유연성을 위해 세 개의 추상화 계층으로 나뉘어 있습니다."와 같은 답변을 들었습니다.

무엇을 위한 유연성인가? 프로젝트가 너무 경직되어 새로운 기능을 추가하는 것이 마치 카드의 집을 수술하는 것처럼 느껴졌습니다.

(역주: 카드의 집은 자주 나오는 표현인데, 한국어에서는 사상누각정도로 표현되는듯)

교훈: 지나친 추상화는 속도를 늦출 뿐만 아니라 팀원을 소외시킵니다.

코드를 상속받은 다음 개발자는 여러분의 이름을 저주할 것입니다, 업보니 받아들이세요


4. 경직성: 유연성 신화


과도한 추상화의 가장 아이러니한 부분은 무엇일까요?

추상화는 코드를 더 유연하게 만들어야 하지만 종종 그 반대의 결과를 가져온다는 것입니다. '

모든 유형의 변환'을 처리하도록 추상화된 데이터 파이프라인을 작업한 적이 있습니다.

클라이언트가 추상화에 맞지 않는 사용자 정의 기능을 요청하기 전까지는 훌륭하게 들렸습니다.

기능을 추가하는 대신 전체 파이프라인을 리팩터링하여 호환되도록 해야 했습니다.

결국에는 추상화가 너무 왜곡되어 원래 설계와 거의 닮지 않게 되었죠.

더 나쁜 것은 며칠이면 끝날 일을 몇 주나 허비했다는 것이었습니다.

교훈: 지나친 추상화는 요구사항이 바뀌는 순간 깨지는 경직된 구조에 갇히게 합니다.

때로는 단순하고 구체적인 것이 일반적이고 추상적인 것보다 낫습니다.




과도한 추상화를 피하는 방법


1.구체적인 솔루션으로 시작하세요

대부분의 경우 모든 사용 사례에 일반적인 유틸리티나 팩토리가 필요하지 않습니다.

간단하고 구체적인 코드를 먼저 작성하세요. 추상화는 필요한 경우 나중에 추가할 수 있습니다.


2.유지 관리에 대해 생각하세요

다른 레이어를 추가하기 전에 스스로에게 물어보세요: "다른 사람이 6개월 후에 이 기능을 이해할 수 있을까? 내가 6개월 후에 이해할 수 있을까?"


3.3의 법칙을 받아들이세요

같은 문제를 적어도 세 번 이상 겪어보기 전까지는 추상화하지 마세요.

급한 추상화는 불필요한 복잡성의 근원이 됩니다.


4.추상화를 정기적으로 검토하세요

요구 사항이 진화함에 따라 추상화가 더 이상 의미가 없을 수도 있습니다.

더 이상 코드베이스에 도움이 되지 않는 것은 리팩터링하거나 심지어 삭제할 준비를 하세요.



----

읽고나서 너무 좋은 글이라 가져와봤다.


추천 비추천

7

고정닉 1

1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 입금 전,후 관리에 따라 외모 갭이 큰 스타는? 운영자 25/01/20 - -
2806533 토토사이트 디비는 어떻게 터는거임 ? 프갤러(58.125) 01.19 55 0
2806511 너네 서울에 집값가지고 말많다 난 집있다 사줌 [4] 프갤러(106.101) 01.19 185 0
2806459 오랜만에 html/css를 만지려니 [12] 아스카영원히사랑해갤로그로 이동합니다. 01.19 173 0
2806377 한국이 개발자 취업 안된다는 개소리하는 애들 있는데 [1] 프갤러(1.243) 01.19 289 0
2806365 내 예상보다도 세상은 느리다 [4] RyuDOG갤로그로 이동합니다. 01.19 143 0
2806355 프로파일러도 깜짝 놀란 요즘 범죄 패턴 발명도둑잡기갤로그로 이동합니다. 01.19 133 0
2806350 일본이 계엄령 선포에 대해 사전 정보를 알고 있었다는 소문 발명도둑잡기갤로그로 이동합니다. 01.19 124 1
2806342 BBGIRLS(브브걸) - LOVE 2 발명도둑잡기갤로그로 이동합니다. 01.19 65 1
2806340 뉴라이트가 죽도록 숨기는 일본에 나라 파는 진짜 이유 발명도둑잡기갤로그로 이동합니다. 01.19 92 0
2806333 결국 내 생각대로 윤석열은 과도기 대통령일려나 [2] RyuDOG갤로그로 이동합니다. 01.19 162 0
2806327 애널 진짜 올만에 늦잠자네양 ♥냥덩이♥갤로그로 이동합니다. 01.19 142 0
2806326 외로운건 바쁘지않아서 그런걸까 피치피(211.219) 01.19 147 0
2806314 뭐임? 왜 중국인들이 한국경찰행세 하고 있는것임? ♥냥덩이♥갤로그로 이동합니다. 01.19 124 0
2806310 아오.. 뷰 못해먹겠네 [8] cvs.갤로그로 이동합니다. 01.19 127 0
2806306 왜 이 병신갤은 저 좆같은 광고랑 투표충 못 걸러냄? [1] ㅇㅇ(118.235) 01.19 76 0
2806300 내 생각엔 서울에 집 없으면 연 3천~4천으로는 안돼. [15] ㅆㅇㅆ(124.216) 01.19 196 0
2806299 인공지능 있으면 게임 만들기도 편하겠네 [2] *루비*갤로그로 이동합니다. 01.19 118 5
2806297 나의 이상형 공개 [7] *루비*갤로그로 이동합니다. 01.19 157 5
2806292 아오 디시 난리가 났네 ㅇㅇ갤로그로 이동합니다. 01.19 56 0
2806273 돈이야 어차피 없어도 잘 살 수 있음. 마누라 있으면 좋겠지만 [9] ㅆㅇㅆ(124.216) 01.19 110 0
2806269 좌파들은 절대 끝까지 못 보는 영상 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 01.19 51 0
2806268 좌청래 참교육 ♥냥덩이♥갤로그로 이동합니다. 01.19 50 0
2806264 ㅆㅇㅆ야 개발 기술로 돈번다는 생각을 좀 버려라 [3] ㅇㅇ(112.161) 01.19 87 1
2806262 틀 노이만 구조 때려치우고 프갤러(106.241) 01.19 75 0
2806258 영어발움 ㅍㅌㅊ? ㅇㅇ(110.45) 01.19 59 0
2806253 ㅆㅇㅆ 안타깝네 [1] ㅇㅇ(112.161) 01.19 79 0
2806252 김정은한테 따져라 ! 진짜 군인의 작심 발언 ♥냥덩이♥갤로그로 이동합니다. 01.19 38 0
2806248 요즘에 알리 링크로 돈 버는 개발자들이 많은거 같음 프갤러(14.39) 01.19 54 0
2806247 윤수괴가 계엄성공했으면 전국민이 윤비어천가 [1] 헬마스터갤로그로 이동합니다. 01.18 81 2
2806243 윤수괴표 샌드위치가 먹고싶구나 헬마스터갤로그로 이동합니다. 01.18 37 0
2806240 뼈속까지 민주당인 전라도 20대 여자가 윤석열을 지지하게 된 이유 [1] ♥냥덩이♥갤로그로 이동합니다. 01.18 76 0
2806237 북괴처 차량에 핑핑이 입갤 ㅋㅋㅋㅋㅋㅋㅋ ♥냥덩이♥갤로그로 이동합니다. 01.18 33 0
2806234 미국 공식 입장 뜸 ㅇㅅㅇ ♥냥덩이♥갤로그로 이동합니다. 01.18 60 0
2806231 C언어를 배우라는 건 그 언어 자체를 배우라는게 아님 [6] ㅆㅇㅆ(124.216) 01.18 426 5
2806223 c언어 배워야하는 이유가 뭐임 [3] 프갤러(1.245) 01.18 98 0
2806221 이번주 IT 소식도 다 읽었으니 1시까지 작업하다 자야긋다 [1] ㅆㅇㅆ(124.216) 01.18 52 0
2806220 사이버덱 경진대회 발명도둑잡기갤로그로 이동합니다. 01.18 31 0
2806217 나님 옷 다 벗엇어양❤+ ♥냥덩이♥갤로그로 이동합니다. 01.18 48 0
2806214 이번주 재밌게 본 해외 기사들 [4] ㅆㅇㅆ(124.216) 01.18 290 7
2806213 2030 착취해서 일 안하고 잘 살고 싶다는게 4050 빨갱이세대임 ♥냥덩이♥갤로그로 이동합니다. 01.18 45 0
2806211 종북내란 MBC 조작날조방송 ♥냥덩이♥갤로그로 이동합니다. 01.18 32 0
2806210 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 01.18 32 0
2806209 춥고 배고파 [3] 주아갤로그로 이동합니다. 01.18 51 0
2806207 난 중소라도 가고싶다 [2] ㅇㅇ(175.120) 01.18 94 0
2806205 10시까지 코딩하다가 이번주 기술동향 보는데 이번주 많은 일이 있었구만 ㅆㅇㅆ(124.216) 01.18 51 0
2806204 연애섹스하기 귀찮아서 걍 썸만탐 [3] ㅇㅇ(211.234) 01.18 115 0
2806203 나 취직할 수 있냐 [5] 프갤러(219.251) 01.18 136 0
2806201 SO안에 SO 직렬화하는거 모듈화 이점있다 생각했는데 유니티에서 ㅆㅇㅆ(124.216) 01.18 44 0
2806200 파이썬 고언어는 하기 싫어. [1] 프갤러(59.16) 01.18 52 0
2806199 [소식] 자유 대한민국 사이트 공식 입장 + 암행어사 디지털 마패 앱 프갤러(121.172) 01.18 52 0
뉴스 이집트서 첫 K팝 콘서트…"뉴앤비 멋진 무대 기대하세요" 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2