주니어 FE 개발자의 “클린 아키텍쳐” 1회독 후기
2024년 1월, FE 개발자로 일하던 회사를 퇴사한 후, 방구석에서 여유로운 시간을 보내던 나.
문득 책장에 꽂혀 있던 『클린 아키텍처: 소프트웨어 구조와 설계의 원칙』을 꺼내 들었다.
언젠가는 개발자로서 한 번쯤 읽어야 할 책이라고 생각해 사놓았던 이 책. 들고 다니면 뭔가 멋져 보일 것 같아 샀던 기억이 난다.
이 책은 주니어, 중니어(?), 시니어 때 한 번씩 읽으면 읽을 때마다 새로운 맛이 난다더라.
업무 중에도 프로젝트 구조와 모듈 설계에 관심이 많았던 나는, 언젠가 선택의 순간이 왔을 때 적절한 답과 근거를 제시하고 싶어 가볍게 읽어보기로 했다.
객체지향 패러다임: 익숙하지 않지만 흥미롭다
FE 개발에서는 객체지향 패러다임을 상대적으로 덜 접하게 된다.
그래서인지 SOLID 원칙을 외우는 것 외에 객체지향 코드를 작성하고 효용을 몸으로 느껴본 적이 별로 없었다.
특히 “의존성이 역전된다”라는 개념은 조금 더 명확히 이해하고, 예시를 들어 설명할 수 있을 때까지 탐구가 필요해 보였다.
무심코 쓰던 import 문: 의존성을 다시 보다
책을 읽으며 내가 작성한 수많은 import
문이 떠올랐다.
A.js >> import * from "B.js"
이는 단순히 자동완성으로 작성한 코드일 뿐이라 생각했지만, 사실 이는 모듈 A가 모듈 B에 직접적으로 의존하고 있다는 의미였다.
모듈 간 강한 결합으로 인해, B의 변경이 A에 영향을 미칠 수 있다.
많은 모듈에 의해 참조되는 모듈은 중요한 역할을 하며, 변경 시 신중해야 한다.
이를 통해 다음과 같은 질문을 스스로 던지게 되었다.
내가 어떤 모듈과 의존 관계를 맺어야 할까?
변경의 전파는 얼마나 이루어질까?
나는 많은 모듈이 의존하는 책임 있는 모듈인가, 아니면 무책임한 모듈인가?
결론적으로, import 문 하나도 결합도와 변경 가능성의 관점에서 신중히 생각해볼 가치가 있다는 깨달음을 얻었다.
프로그래밍 언어가 사고를 지배하는가?
책을 읽으며 가장 뚜렷이 남은 인상은 “언어가 사고방식을 유도한다”는 점이다.
이는 유명한 사피어-워프 가설(Sapir–Whorf Hypothesis)을 떠올리게 했다.
예를 들어,
일본어 사용자가 받침 발음을 어렵게 느끼는 것처럼,
프로그래밍 언어도 특정 철학과 기능을 통해 개발자의 사고를 제한하거나 확장할 수 있다.
특히 JS/TS에서 인터페이스가 런타임에 존재하지 않는 점은 Java와 같은 언어를 이해하는 데 어려움을 주었다.
런타임에도 인터페이스가 존재하는 언어에서 의존성 역전을 구현하는 방식은 나에겐 낯선 개념이었다.
p.89: 동적 타입 언어는 소스 코드 의존성이 없으며 결합도가 낮은 시스템을 만들 수 있다.
이처럼 다양한 언어를 경험하는 것은 새로운 사고방식과 문제 해결법을 접할 수 있는 중요한 계기가 될 수 있다.
결론: 잘 이해했냐고?
사실 찍어 먹었지만 맛이 아닌 향만 맡은 느낌이었다.
다만, 무슨 개념을 중심으로, 어떤 관점으로 읽어야 할지 감을 잡았기에 다음에 읽을 땐 또 다른 인사이트를 얻을 수 있을 것이다.