안녕하세요. FoxMon이에요. 날씨가 많이 더워졌죠? 맞다구요? 네. 맞아요. 실제로 정말 많이 더워진 것 같아요. TMI를 말하자면, 저는 겨울보단 여름을 더 좋아한답니다?
안궁금하다구요?
네. 그럼 오늘도 급하게 본론으로 넘어가 볼까요? ..;; 그래도 뭔가 아쉬우니까 조금만 더 근황 토크를 해볼게요. 최근에 새로운 회사에 이직하여 잘 적응하고 있는(?) 것 같아요. 시스템도 제가 처음에 봤을때보다 많이 안정적으로 변화했고, 새로운 상품을 기존의 시스템에 추가적으로 열심히 개발하고 있답니다. 오늘은 이러한 과정속에서 제가 느낀 것들을 잘 풀어내고자 하는데요.
이런 것들이 여러분에게 무슨 도움이 되냐구요? 뭐.. 그건 잘 제 글을 읽는 사람마다 다르겠지만, 그래도 저는 제 이야기를 기록하는데 의의를 둘거에요.
그냥 그런가보다 해주세요.
개발이란
제가 현재 속해있는 조직에서는 개발자를 메이커라고 표현하고 있는데요. 단순히 주어진 것을 만들어내는 것 외에도 무엇을 만들어야 사용자에게 도움이 되는가. 이러한 고민을 하는 것이라고 정의하고 있어요. 여러분도 개발을 하시다보면 비슷한 생각을 하고 계시진 않나요?
사실 단순히 무엇인가를 만들어내는 것은 저희 말고도 할 수 있는 사람이 정말 많은 것 같아요. 주어진 요구사항대로 잘 만들어 내는 것도 중요하지만 무엇을 어떻게 만들어야 하는지 고민하는 사람은 많지는 않은 것 같은 느낌이에요.
실제로 저희 조직에서, 이러한 생각을 가지고 무엇인가를 만들어 낸다 한들, 그렇지 못한 코드들도 자주 보이기도 한답니다. 급박한 개발 일정에 쫓겨 차마 그 이상을 고민하지 못한 부분들이 존재하기 마련이죠. 물론 이러한 것들이 시스템을 잘 동작시키는데에는 문제는 없지만, 앞선 게시글에서도 소개해 드렸다시피 시스템이 오래 지속되려면 이러한 것들을 고려하지 않으면 안된다고 생각합니다.
즉, 개발이란 사용자에게 보여지는 부분 외에도 저희 개발자에게 보여지는 부분도 굉장히 중요하다고 생각해요. 저에게 메이커란 이러한 의미입니다. 여러분에게 개발이란 무슨 의미인가요? 단순히 여러분이 월급을 받을 수 있는 수단으로서만 존재하나요?
무엇이 문제인가?
이제 본격적으로 제 경험담을 구체적으로 소개해 드릴게요. 참고로 저는 풀스택으로 근무하고 있어요. 서버는 Kotlin + Spring Boot를 사용하고, 프론트엔드는 React + Next + TypeScript를 사용합니다. 갑작스레 제 포지션과 스택을 소개하는 이유는 제가 이러한 서로 다른 스택을 다루면서 저를 힘들게한 것들의 배경이 되는 부분이라서 그래요.
여러분. 저는 시스템을 구성하는데 있어서 프로그래밍 언어가 큰 의미가 있다고 생각하지는 않아요. 물론 언어에 따라서, 사용할 수 있는 프레임워크는 달라질 수 있겠지만, 각 언어마다 추구하는 가치관이 다를 수도 있거든요. 대표적으로 Java와 JavaScript는 그 언어에서 추구하는 패러다임이 다르다고 생각해요.
Java에서의 Class는 JavaScript에서 존재하지 않는 개념이죠. 물론 키워드는 존재합니다만, Java와 같은 패러다임으로 프로그램을 구성하기란 난이도가 여간 높은 것이 아니라고 생각해요. 즉 JavaScript가 주 스택인 개발자가 Java와 같이 작성된 JavaScript구문을 본다면 매우 당혹스럽겠죠.
이러한 맥락으로 봤을때, 처음 제가 현재의 회사에 입사해 React로 작성된 시스템을 봤을 때 매우 당황스러웠어요. 프론트엔드 개발자분들이 없어서 급하게 서버 분들이 무엇인가를 만들어 내셨었거든요. 물론 시스템은 훌륭히 잘 동작했었어요. 하지만 뭐가 문제였을까요?
프론트엔드분들이 주로 신경쓰시는 컴포넌트의 배치 전략이라던지, 컴포넌트 디자인 전략이 전혀 고려되지 않은 정석적으로만 만들어진 내용들이 전부였어요. 물론 이것이 나쁘다곤 할 수 없겠죠. 하지만 이후에 이 시스템을 담당하는 개발자는 어떤 느낌일까요? 시스템이란 것은 조직이 성장할수록 그에 비례하여 점점 더 커질것입니다. 이에 따라서 새로운 개발자들을 추가적으로 고용하게 되겠죠. 하지만, 고용만 하다고 해서 그 개발자가 시스템을 빠르게 학습하리란 보장은 없어요. 경력이 많든 적든 이는 동일합니다.
저는 시스템을 개발할때 이러한 것들도 고려되어야 한다고 생각해요.
Java를 주언어로 사용하시는 분들에게 이상적인 객체란 무엇인가요? React를 주로 사용하는 분들에게 이상적인 컴포넌트란 무엇인가요? 사실 물어보지 않아도 뻔합니다. Java의 경우 적절한 객체를 골라서 생성한 다음, 본인이 내부 구현을 보지 않고서도 그 객체를 잘 활용할 수 있는 것이 옳은 객체겠지요. 컴포넌트도 마찬가지 입니다. 최소한의 Props로 컴포넌트를 배치시켰을때 본인이 기대하는 역할을 하는 컴포넌트가 잘 설계된 것이겠죠.
어떤가요? 여러분이 운영하고 있는 시스템은 이렇게 동작하고 있나요?
이론일 뿐이다
사실 제가 말한 이러한 내용들이 이론에만 등장하는 이상적인 설계일수도 있어요. 하지만 여러분, 여러분이 Pull Request를 올리기 전에 한 번만 더 생각하고, 자신이 작성한 것들을 한 번만 더 검수해 본다면 조금이라도 더 좋아지지 않을까요?
저는 개발자에게 운영이란 빼놓을 수 없는 숙명같은 존재라고 생각해요. 그래서 저는 제가 무언가를 만들 때, 단순히 지금 이 일을 끝내는 것에만 그치지 않고 조금이라도 더 나은 방법이 없는지 생각해보곤 합니다.
여러분은 어떤가요?
감사합니다.
'IT > 개발상식' 카테고리의 다른 글
[개발상식] 완벽한 프로젝트와 기술 스택 (0) | 2024.05.12 |
---|---|
[개발상식] 라이브러리와 프레임워크에 관한 건 (0) | 2024.04.06 |
프론트엔드, 백엔드 (0) | 2024.03.26 |
의존성 주입 (0) | 2024.02.25 |
Class (0) | 2024.02.06 |