우리는 실력이 없으면 무엇을 자꾸 덧붙이려고 한다. 기술이 부족하다고 느끼니까 이 기술도 배워야 할 것 같고 저 기술도 배워야 할 것 같다. 제대로 전달이 되지 않은 것 같으니까 이 말도 덧붙여야 할 것 같고 저 표현도 넣어야 할 것 같다. 맛이 어딘가 부족한 것 같으니까 이 양념을 좀 더 넣어야 할 것 같고 저 재료도 더 추가해야 할 것 같다. 이처럼 자꾸만 무언가를 덧붙일수록 본질은 흐려지고 정체성은 흔들린다.
경지에 오를수록 '무엇을 더할지'가 아니라 '무엇을 뺄지'를 고민한다. 이것도 걷어내고, 저것도 걷어내다 보면 더 이상 빼 버릴 수 없는 뼈대만 남는다. 그것이 핵심이다. 핵심은 더 이상 깎아낼 수 없는 뼈대다. 단팥빵에 단팥이 없거나, 치즈케익에 치즈를 빠뜨릴 수 있을까. 어렵다. 그때부터는 정체성이 흔들리기 때문이다. 이렇듯 더 이상 뺄 수 없는 뼈대만 남았을 때 비로소 핵심은 보이기 시작한다.
가령 김연아 선수를 보자. 손짓 하나에도 군더더기가 없다. 유재석도 마찬가지다. 불필요한 말은 하지 않는다. 애플은 어떠한가. 'Simple is the best'라는 브랜드 철학만으로도 더 이상 설명은 필요 없다. 경지에 오른 사람들은 무엇을 더 걷어낼 수 있을지에 집착한다. 업무에 있어서도 마찬가지다. 일을 잘하는 사람들은 특징이 하나 있다. 바로 이 뼈대를 재빠르게 잡아내고 핵심이 되는 일부터 끝내 놓는다. 살을 붙이는 건 나중 순서다. 어떤 일을 하든 뼈대부터 먼저 파악해 내는 일은 중요하다.
그렇다면 우리가 지금 마주한 '개발'은 어떠할까? 개발도 마찬가지다. 덕지덕지 붙어 있는 포장지들을 걷어내고 그 안에 숨은 핵심을 파악하는 연습을 해야 한다. 경지에 오른 사람들이 흔히 그렇듯, 본질을 꿰뚫을 수 있기 때문이다. 물론 우리 같은 연수생이나 교육생은, 십중팔구, 무엇을 뺄지 고민해야 하는 경지까지는 아직 오르지 못했을 것이다. 하지만 더 이상 걷어낼 부분이 없을 때까지 빼 버리고 핵심만 남기려는 태도, 즉 본질을 포착하려는 태도 자체는 한번 적용해 볼 만하다.
여기에서 이야기를 멈춘다면 방법론에 불과하다. '우선순위를 잘 정해 가며 개발하세요! 끝!' 그러면 우리에게는 의문이 남는다. '개발에서 우선순위가 도대체 뭔데? 네가 말하는 그 뼈대라는 게 뭔데?' 이에 대한 대답은 개발자마다 다를 수도 있는 영역이다. 앞으로 나만의 답을 찾아 나아가도 좋다. 하지만 우리는 당장 실무에 맞닥뜨려야 하는 처지다. 내가 나름대로 찾은 답을 들려줄 테니, 자신만의 답을 찾을 때까지 임시로 써먹는 건 어떨까.
개발할 때 우선순위가 무엇이냐는 질문에 내가 나름대로 찾은 첫 번째 답은 바로 '기능 구현'이다. 사람은 어쨌든 시각 정보에 가장 크게 의존하는 동물이다. 그래서인지 개발을 할 때도 눈에 보이는 면에 더 신경을 쓰게 된다. 이쁘게 꾸미고, 보기 좋게 배치하고, 사용하기 편하게 옮기고, 그런 것들에 더 우선 순위를 두게 된다. 하지만 어떻게 보여줄지는 나중 문제다. 가장 먼저 밑그림이 그러져야 하는 영역은, 비록 눈에 보이지는 않지만, 바로 기능 구현이다.
기능 구현을 우선해서 개발하라. 이게 무슨 뜻인지 와 닿도록 조금 더 자세히 알아보자.
예를 들어서 어떤 웹 페이지를 개발하고 있다. 페이지 안에는 게시판 테이블이 하나 있다. 그 테이블은 각 행마다 번호/제목/조회수가 출력되고, 행 끝에는 버튼이 하나씩 달려 있다. 그 버튼을 클릭하면 클릭한 버튼이 있는 행과 그 다음 행 사이로 공간이 벌어지면서 숨겨져 있던 영역이 난타난다. 그리고 그 영역 안으로 글 내용이나 작성자 등 상세 정보가 출력된다.
자, 이런 웹페이지를 개발해야 한다면 우리는 무엇부터 개발해야 할까? 우선순위를 어떻게 두어아 좋을까? 보통은 버튼을 클릭하면 행과 행 사이가 벌어진다든가, 숨겨진 영역이 나타난다든가, 하는 이벤트부터 구현하고 싶어질 것이다. 그러나 그것은 어떻게 보여줄지 문제이다. 아무리 그럴듯하게 꾸미더라도 무엇을 보여줄지 내용이 없다면 무용지물이다. 그래서 css를 바꾸거나 효과를 꾸미는 일은 나중 문제라는 것이다.
일단 데이터를 화면에 출력하는 기능이 먼저다. 데이터베이스로부터 필요한 데이터 목록을 화면에 출력해 보는 것이다. 여기에 이벤트는 필요없다. 테이블을 만들 필요도 없다. 일단 내가 원하는 데이터를 화면까지 가져오는지부터만 확인하면 된다. 테이블이라는 틀을 만들고, 그 안에 이런 저런 이벤트나 효과를 덧입히는 것은 나중에 해도 된다.
일을 맡겨둔 상사가 찾아와서 얼마나 됐냐고 물었을 때, 어떻게 대답하는 쪽이 더 완성도가 높아 보일까? A라는 사람은, 필요한 데이터를 화면에 출력하고 테이블까지는 만들었는데 이벤트나 효과까지는 아직이라고 대답한다. B라는 사람은, 이런 저런 이벤트나 효과는 다 해놧지만 화면에 데이터가 나오지 않는다고 대답한다. A는 '이제 조금만 손보면 되겠군', 하는 생각이 들지만, B는 '지금까지 무얼 하고 있던 거지', 하는 생각이 든다. 일단 기능이 구현되어 있는가 차이다.
지금까지 개발할 때 생각해 보아야 하는 우선순위 첫 번째로 기능 구현을 알아 봤다. 그 두 번째는 '가장 간단한 형태부터 구현해 보기'다. 뼈대가 보일 때까지 걷어내고 걷어내기를 반복하다 보면 더 이상 쪼갤 수 없는 원자 단위의 기능들이 보이기 시작한다. 여기에서 시작하여 가장 바탕이 되는 작은 기능부터 차근차근 쌓아올리는 것이다.
예를 들어 보자. 테이블에서 버튼을 클릭하면 그 버튼이 있는 행과 그 밑에 있는 행 사이로 공간이 나타나고, 게시물의 내용이 출력된다. 이러한 버튼을 구현한다면 무엇부터 만들어야 할까? 테이블? 게시물 내용 출력? 숨김 기능? 아니다. 그냥 버튼이다.
복잡한 기능은 모두 걷어내고 가장 간단한 형태로 환원해 보자. 일단은 버튼을 만든다. 그리고 함수를 만든다. 그리고 버튼을 클릭했을 때 내가 원하는 함수가 실행되는지를 확인한다. 이때 alert나 console.log 만으로도 충분하다. 여기까지 만드는 데에 테이블이나 숨겨진 영역 같은 것들은 필요하지 않다. 먼저 버튼과 함수가 제대로 연결됐는지부터 확인한다. 복잡한 기능들은 이제부터 내용물을 하나씩 쌓아나가면 된다.
너무나 당연해서 하나마나 한 이야기처럼 들릴 수도 있다. 그러나 이 당연한 사항조차 지키지 못하는 경우가 많다. 실무에서 우리가 다루어야 하는 소스 코드들은 구조가 그렇게 단순하지 않기 때문이다. 위에 body 태그에 버튼이 있고, 아래 script 태그에 함수가 있고, 서로 관련 있는 요소들이 친절하게 한 파일 안에 모여 있는 경우는 오히려 드물다. 프로젝트 단위, 모듈 단위, 페이지 단위마다 쓰는 공통 코드가 따로 있다. 한 기능을 구현하는 데에 필요한 요소가 서로 뒤죽박죽 섞여 있다. 당연한 것들조차 지키기가 어려워지는 이유다.
이를 테면 A페이지에서는 X조건에서 B라는 스크립트를 가져다 쓰고 Y조건에서는 C라는 스크립트를 가져다 쓰며, D라는 팝업창도 띄운다. A에 있는 버튼 하나를 눌렀을 때 어떤 함수가 실행되는지 바로 찾을 수 있을까? 오히려 이것은 간단한 경우이다. A페이지에서는 B페이지를 부르고, B는 C와 D, E, F를 불러다 쓰며, 팝업창을 띄우는 기능은 G에 있거나, 한다. 과장하려는 것이 아니라 실제로 흔하다. 이처럼 프로젝트 규모가 크고 복잡해질수록 기능을 간단한 단위로 쪼개서 구현하는 접근법은 중요해진다.
지금까지 개발할 때 우선순위를 두어야 하는 요소를 생각해 보았다. 하나는 '기능 구현'이다. 이것은 '무엇을' 개발해야 할지에 대한 답이 될 수 있다. 다른 하나는 '가장 간단한 형태부터' 개발하기다. 이것은 '어떻게' 개발해야 할지에 대한 답이 될 수 있다.
그러나 시작할 때 말했듯이 이것은 내가 찾은 답이다. 즉, 내가 쓰려고 내가 찾은 내 나름대로의 답이다. 그리고 어쩌면 나만의 답일 수도 있다. 여러분들에게 맞는 답은 따로 있을 수 있다. 자신만의 답을 스스로 찾아나갈 수 있기를 빈다.
- 220614
'개발자' 카테고리의 다른 글
'수동적인 개발자'가 아니라 '능동적인 개발자'가 되기로 했다. (0) | 2022.08.05 |
---|---|
개발자가 동사 중심으로 생각해야 할 때 (0) | 2022.05.07 |
팀 프로젝트에서 이해도를 높이는 태도와 실천 방법 (0) | 2022.04.18 |
개발할 때 뼈대부터 세우기 / 프로그래밍에서 개요짜기란 (0) | 2022.04.18 |
SI / 솔루션 / 웹에이전시 장단점 비교 (0) | 2022.03.17 |