조선개발실록 - 제4화: 익숙함의 감옥 (習慣之獄)

teo.v·2026년 2월 3일

조선개발실록

목록 보기
5/8
post-thumbnail

제4화: 익숙함의 감옥 (習慣之獄)

"원래 그런 거라고 믿은 것이 감옥이었다"


[경복궁 근정전, 네 번째 보고일]


왕: 오늘은 과인이 개발방을 직접 시찰하고 왔다.

영의정: 전하께서 친히 다녀오셨사옵니까?

왕: 그래. 술사들이 어찌 일하는지 보고 싶었다.

좌의정: 어떠셨사옵니까?


왕: (한숨) 이상한 것을 보았다.


왕: 한 술사가 있더라. 똑같은 작업을 반복하고 있었다.

왕: 컴포넌특(構件)을 만들 때마다 같은 코드를 손으로 치고 있더라. 임포트 구문, 타입 정의, 기본 구조... 매번 똑같은 것을.


왕: 과인이 물었다. "왜 자동으로 만들지 않느냐?"

왕: 그 술사가 뭐라 했는지 아느냐?


영의정: 무어라 하였사옵니까?

왕: "원래 이렇게 하는 것 아닙니까?"


왕: 또 다른 술사도 있었다. 로그를 찾고 있더구나. 어디서 에러가 났는지 찾으려고. 파일 수십 개를 하나하나 열어보고 있더라.


왕: 과인이 물었다. "그 로그를 모아서 쉽게 보는 도구는 없느냐?"

왕: 그 술사가 뭐라 했는지 아느냐?

좌의정: 무어라 하였사옵니까?

왕: "만들 시간에 본업을 해야지요."


왕: 과인이 생각해보니, 인공지가 있지 않느냐. 저런 것들, 인공지한테 시키면 안 되는 것이냐?

영의정: 그러게 말이옵니다. 왜 안 시키는 것인지...

왕: 술사들을 부르라. 과인이 직접 시켜봐야겠다.


[갑, 을, 병이 입장한다]


왕: 과인이 오늘 개발방을 다녀왔다.

왕: 한 술사는 컴포넌특을 만들 때마다 같은 코드를 손으로 치고 있더라. 또 한 술사는 로그를 찾으려고 파일 수십 개를 뒤지고 있더라.

왕: 오늘의 과제다. 저런 불편한 것을 인공지로 해결해봐라. 과인이 지켜보겠다.


[갑의 시도]


왕: 갑, 먼저 해보라. 그대가 매번 손으로 치는 것, 어찌 해결하겠느냐?


갑: (멍하게) 전하, 그것이... 뭘 해결하라는 것이옵니까?

왕: 그대가 매번 손으로 치는 것 말이다. 컴포넌특 만들 때마다 같은 코드.


갑: 그것이... 불편한 것이옵니까?

왕: 불편하지 않느냐?

갑: (고개를 갸웃거리며) 전하, 원래 그렇게 하는 것인데...


왕: (한숨) 됐다. 을, 네 차례다.


[을의 시도]


왕: 을, 그대 차례다. 아까 본 로그 문제, 그대라면 어찌 해결하겠느냐?

을: 전하, 소인이 해보겠사옵니다.


을: (인공지에게) 로그를 모아서 보여주는 시스템을 만들어라.

인공지: (결과를 내놓는다)

을: 필터링 기능도 넣어라. 에러만 골라서 볼 수 있게.

인공지: (수정된 결과)

을: 검색 기능도.

인공지: (수정된 결과)


을: (한참 후) 전하, 완성했사옵니다.

왕: 어디 보자.

을: (보여주며) 로그 목록이 나오고, 필터링도 되옵니다.


왕: 오, 됐구나. 써보자. 아까 그 술사처럼 에러 로그만 보려면?

을: (조작하며) 이렇게 필터를 걸면... 되옵니다.

왕: 그런데 이게 언제 난 에런지 어찌 아느냐?

을: 아... 시간순 정렬은 아직...

왕: 어느 파일에서 난 건지는?

을: 그것도 아직...


왕: 그러면 결국 이걸로 뭘 할 수 있느냐?

을: (한숨) ...제대로 쓰려면 만들어야 할 게 많사옵니다.

왕: 얼마나?


을: (인공지에게) 상용 로그 도구 수준으로 만들려면 뭐가 더 필요하냐?

인공지: 시간순 정렬, 파일 위치 표시, 스택 트레이스 파싱, 로그 레벨별 색상, 실시간 업데이트, 검색, 정규식 검색, 북마크, 세션별 그룹핑, 에러 발생 빈도 통계, 알림 설정, 슬랙 연동, 로그 보관 기간 설정, 용량 관리, 권한 설정...

을: (끊으며) ...됐다.


왕: 그것을 다 만들 수 있느냐?

을: (고개를 숙이며) 전하, 인공지가 빠르다 해도... 저것을 다 만들려면 며칠이 아니라 몇 달은 걸릴 것이옵니다.


[병의 시도]


왕: 병, 네 차례다.


병: 전하, 먼저 을의 문제부터 해결해보겠사옵니다.


병: (인공지에게) 프론트엔드 로그 모아서 보는 도구 있느냐?

인공지: 있습니다. 브라우저 개발자 도구의 필터 기능, 록라켓(錄羅劇), 센특리(哨特理), 대특독(大特犢) 등이 있습니다.


병: 잠깐. 개발방 인가첩(認可帖)에 있는 것이냐?

인공지: 확인하겠습니다...


인공지: 개발방 인가첩을 확인한 결과입니다. 센특리는 인가첩에 있습니다. 록라켓(錄羅劇)과 대특독(大特犢)은 인가첩에 없습니다.


병: (을을 바라보며) 을, 센특리 써봤느냐?

을: (멍한 표정) 센특리가 있는 줄은 알았사옵니다. 그런데 연동이 안 되어 있어서...


병: (인공지에게) 우리 프로젝트에 센특리 연동되어 있느냐?

인공지: 확인하겠습니다... 연동되어 있지 않습니다.


병: 연동해라.

인공지: (코드를 작성한다)


병: (실행해보며) ...안 되는구나. 왜 안 돼?

인공지: 에러를 확인하겠습니다. 환경변수 SENTRY_DSN이 설정되어 있지 않습니다.


병: 환경변수 설정하는 법 알려줘라.

인공지: (설명한다)

병: 해라.

인공지: (설정한다)


병: (다시 실행) ...또 안 되네. 이번엔 뭐야?

인공지: CORS 설정 문제입니다. 센특리 대시보드에서 허용 도메인을 추가해야 합니다.


병: 추가하는 법 알려줘라.

인공지: (설명한다)

병: 해라.

인공지: (설정한다)


병: (다시 실행) 됐다. 테스트 에러 하나 보내봐라.

인공지: (테스트 에러 전송)

병: (센특리 대시보드 확인) 들어왔다. 됐다.


왕: 얼마나 걸렸느냐?

병: 반 식경 정도 걸렸사옵니다, 전하.


을: (믿을 수 없다는 표정) 소인은 한나절을 씨름했는데...

병: 을은 로그 시스템을 처음부터 만들려 했다. 소인은 있는 것을 연동만 했다.

병: 내가 불편하면 남도 불편했다. 대부분 누군가 이미 만들어놨다. 먼저 찾아보면 된다.


[갑의 문제로]


왕: 좋다. 갑의 문제는 어찌 하겠느냐?


병: (인공지에게) 리액특 컴포넌특 자동 생성하는 도구 있느냐?

인공지: 있습니다. 플라불, 하이원 등이 있습니다. VS코드 확장으로는 이에스칠 리액특 스니펫(理額特 小片), 리액특 컴포넌특 제너레이터(理額特 構件 生成器) 등이 있습니다.


병: 개발방 인가첩에 있는 것이냐?

인공지: 확인하겠습니다... VS코드 확장은 인가첩에 포함되어 있습니다. 플라불과 하이원은 별도 승인이 필요합니다.


병: (갑을 바라보며) 갑, VS코드 확장 써봤느냐?

갑: (고개를 숙이며) 써봤사옵니다...

왕: 써봤는데 왜 안 쓰느냐?

갑: 우리 프로젝트와 맞지 않았사옵니다. 폴더 구조도 다르고, 스토리북 파일도 안 만들어주고...


병: 그러면 우리 프로젝트에 맞게 만들면 된다.

병: (인공지에게) 우리 프로젝트 컴포넌특 다섯 개 분석해라. 공통 패턴이 뭐냐?


인공지: 분석 결과입니다. 공통 패턴은 다음과 같습니다.

인공지: 폴더 구조: ComponentName/ 하위에 index.tsx, styles.ts, types.ts, ComponentName.stories.tsx.

인공지: index.tsx에는 컴포넌특 본체, styles.ts에는 스타일드 컴포넌특, types.ts에는 Props 타입 정의가 있습니다.


병: 이 패턴대로 컴포넌특 생성기를 만들어라. 쉘 스크립트로.

인공지: (스크립트를 작성한다)


병: (실행해보며) 테스트해보자. Button 컴포넌특 만들어봐라.

인공지: (실행)


병: (결과 확인) 폴더는 만들어졌는데... styles.ts 내용이 비어있네.

인공지: 수정하겠습니다. 기본 스타일드 컴포넌특 템플릿을 추가합니다.


병: (다시 실행) 이번엔 types.ts에 Props 기본 구조가 없다.

인공지: 수정하겠습니다. 기본 Props 인터페이스를 추가합니다.


병: (다시 실행, 결과 확인) 스토리북 파일 경로가 틀렸다. .stories.tsx가 아니라 .stories.ts여야 한다. 우리 프로젝트 컨벤션 다시 봐라.

인공지: 확인하겠습니다... 맞습니다. 수정합니다.


병: (다시 실행, 결과 확인) 됐다. 이제 Card 컴포넌특도 만들어봐라.

인공지: (실행)

병: (확인) 잘 나온다. 됐다.


왕: 얼마나 걸렸느냐?

병: 반 식경 조금 넘었사옵니다, 전하.


갑: (놀란 표정) 전하, 소인은 매일 손으로 쳤사옵니다... 일 년 넘게...

갑: 반 식경이면 됐을 것을...


병: 바로 된 것이 아니다. 에러도 나고, 고치고, 또 고쳤다.

병: 다만 을처럼 처음부터 거창하게 만들지 않았다. 딱 필요한 것만, 에러 나면 고치면서.


[왕, 갑과 을을 바라본다]


왕: 과인이 묻겠다. 갑, 그대는 왜 해결할 생각을 못 했느냐?

갑: (한참 생각하다가) 전하, 소인은... 그것이 불편한 줄 몰랐사옵니다.


왕: 불편한 줄 몰랐다?

갑: 원래 그렇게 하는 거라고... 당연히 손으로 쳐야 하는 거라고 생각했사옵니다.


왕: 을, 그대는?

을: 전하, 소인은 불편한 건 알았사옵니다. 그런데...


왕: 그런데?

을: "있는 게 있을까?"라는 생각을 안 했사옵니다. 바로 "만들어야지"로 갔사옵니다.

을: 그리고 만들려니까 이것저것 다 넣고 싶어서... 점점 커졌사옵니다.


왕: 병은 어찌했느냐?

병: 전하, 소인은 먼저 찾아봤사옵니다. 있으면 쓰고, 없거나 안 맞으면 그때 만드는 것이옵니다.


왕: 을처럼 처음부터 크게 만들지 않고?

병: 그러하옵니다. 딱 필요한 것만 만드는 것이옵니다. 을은 로그 시스템을 만들려 했사옵니다. 소인은 그냥 연동만 했사옵니다.


[영의정과 좌의정에게]


왕: (영의정을 바라보며) 영의정.

영의정: 예, 전하.

왕: 그대는 어떠하냐? 그대도 "원래 그런 거"라고 참은 것이 있느냐?


영의정: (잠시 생각하다가) 전하, 생각해보니... 신도 그러하옵니다.

왕: 무엇이냐?

영의정: 매일 같은 서식으로 보고서를 쓰옵니다. 날짜만 바꾸고 형식은 똑같은데... 한 번도 줄일 생각을 안 했사옵니다.


왕: 좌의정은?

좌의정: (머뭇거리다가) 신도... 그러하옵니다. 매번 같은 내용을 베껴 쓰면서도 당연히 그래야 하는 줄 알았사옵니다.


왕: (고개를 끄덕이며) 그렇구나...


[왕, 모두 물러가게 한다]


왕: 오늘은 여기까지 하자. 모두 물러가라.

영의정·좌의정: 예, 전하.

갑·을·병: 예, 전하.


(모두 퇴장한다)


[왕, 홀로 창밖을 바라본다]


왕: (혼잣말) 원래 그런 거...


왕: (창밖을 바라보며) 이원익 상소가 생각나는구나.


왕: 산골 마을에 전복을 바치라 하고, 바닷가 마을에 꿀을 바치라 하고...

왕: 백성들이 없는 것 구하러 온 나라를 헤매면서도, 수백 년을 그리 해왔다.


왕: 과인이 그 상소 처음 받았을 때... "그게 왜?" 했다.

왕: 조상 대대로 해오던 건데. 원래 그런 건데.


왕: (쓴웃음) 과인도 갑이었구나. 불편한 줄도 몰랐으니.


왕: 아니, 알았어도 을이었겠지. "고치려면 나라 전체를 뒤엎어야 한다"고 겁먹었을 테니.


왕: 그런데 이원익은 뭐라 했더냐...

왕: "쌀 농사짓는 백성에게 왜 굴비를 구해오라 하느냐? 쌀로 내면 안 되느냐?"


왕: 그렇게 간단한 것을... 수백 년을 아무도 안 물었다.

왕: "원래 그런 거"라고 믿었으니까.


[왕, 내관을 부른다]


왕: 내관아.

내관: 예, 전하.

왕: 갑, 을, 병을 다시 부르라. 영의정, 좌의정도.

내관: 예, 전하.


[모두 다시 모인다]


왕: 오늘 과인이 배운 것을 기록하라.

내관: (붓을 든다)


왕: 첫째, 우물을 파기 전에 샘이 있는지 살펴라. 내가 불편하면 남도 불편했다. 대부분 누군가 이미 만들어놨다.


왕: 둘째, 문이 고장났다면 손잡이를 고칠 일이지 집을 새로 다 지을 필요는 없는 법이다. 없거나 안 맞으면 그때 만들되, 딱 필요한 것만 만들어라.


왕: 셋째, 다리가 놓였는데 아직도 헤엄쳐 가는 게 익숙하다고 헤엄치는 꼴이다. 만드는 비용이 싸졌느니라. 다리가 놓인 줄 알았다면 헤엄이 아니라 다리로 건널 생각을 해야 하느니라.


왕: 넷째, "원래 그런 거"를 의심하라. 익숙함이 가장 무서운 감옥이다.


왕: 영의정.

영의정: 예, 전하.


왕: 이원익 상소를 다시 가져오라. 공납 제도, 과인이 다시 보겠다.

영의정: (놀라며) 전하, 그것은 조상 대대로...


왕: (끊으며) 조상 대대로 해왔다고 불편하지 않은 것이 아니다.

왕: 산골에 전복 바치라 하는 게 당연하냐? 쌀 농사짓는 백성이 굴비 구하러 다니는 게 당연하냐?


왕: 그것이 "원래 그런 거"였다. 수백 년 동안.

왕: 그런데 이원익이 물었다. "왜?"라고.


왕: 오늘 과인도 감옥에서 나왔다.

왕: 경들도 나오라.


영의정: (고개를 숙이며) 명심하겠사옵니다, 전하.

좌의정: 명심하겠사옵니다, 전하.


왕: 갑, 을.

갑·을: 예, 전하.


왕: 오늘 배운 것을 잊지 마라. "원래 그런 거"라는 생각이 들면, 그것이 감옥인지 의심하라.

갑: 명심하겠사옵니다, 전하.

을: 명심하겠사옵니다, 전하.


왕: 다음 칠일 후에 다시 보겠다.


[막 내림]


- 제4화 끝 -

다음 화: 제5화 - 능동적 게으름뱅이

profile
개발과 인문학을 좋아하는 시니어 프론트엔드 개발자입니다. 내가 만든 컨텐츠와 개발이 누군가에게 도움이 되기를 바랍니다. 궁금한 점이 있다면 아래 홈페이지 버튼을 클릭해서 언제든지 오픈채팅에 글 남겨주시면 즐겁게 답변드리고 있습니다.

2개의 댓글

comment-user-thumbnail
2026년 2월 3일

본문이 2번 붙여 넣기 된 거 같네요.
요즘 익숙함 정도가 아닌 저의 정체성을 떨쳐내야 할 수준의 변화에 정신 못 차리는 와중 감사한 글인 거 같습니다. 잘 읽겠습니다.

1개의 답글