프로 프론트엔드 개발자 자가 진단법

여러분 안녕하세요 꿈꾸는 개발자 입니다. 프로 개발자와 아마추어 개발자. 여러분은 어떻게 구분하시나요? 눈 감고도 코드를 기가막히게 잘 짜면 그게 프로개발자인가요? 아니면 복붙만 하는 개발자는 아마추어 개발자인가요? 우리는 개발자로서 늘 프로가 되서 연봉을 높이는 것을 바라고 있지만 정작 프로 개발자에 대한 이미지가 정확하지 않은 경우가 있어요. 원인은 여러가지가 있겠지만 프로 개발자가 주변에 없어서 이미지가 안잡히는 경우가 있고 주위의 잘못된 정보로 인해 프로 개발자의 인식이 잘못 잡히는 경우도 있어요. 어느쪽이든 프로 개발자의 이미지가 없거나 잘못 잡히면 프로 개발자가 될 수 없다는게 문제에요. 그래야 연봉을 높일 수도 있죠. 이번 포스팅에서는 어떻게 해야 프로 개발자가 될 수 있는지에 해서 말씀드리려고 합니다. 이러한 포스팅이 도움이 되신다면 지금 저의 youtube 채널에 오셔서 좋아요와 구독을 눌러주시면 앞으로 포스팅을 제작하는데 큰 힘이 됩니다.

먼저 프로 개발자가 아마추어 개발자와 다른 점을 말씀 드리고 잠시 뒤에 자세한 내용을 말씀드릴께요. 아마추어 개발자에게는 없지만 프로 개발자에게는 있는것은 바로 코드를 짤때 “왜” 라는 질문에 답을 하는 방법으로 코드를 짜고 그 바탕에는 다른 사람을 생각하는 마음이 있다는 점이에요. 무슨 말인지 잘 이해가 안되시죠? 이제 하나씩 제가 설명해 드릴게요. 우리가 개발을 처음 배웠을 때를 떠올려보자구요. 우리가 어떻게 개발을 처음 배웠죠? 아마 대부분의 사람들이 강의나 책을 통해서 배웠을 거예요. 강의도 오프라인 강의가 있을거고 온라인 강의가 있겠죠. 부트캠프도 강의에 포함시키자구요. 어느쪽이든 처음에 배우는건 대부분이 변수, 함수, 조건문, 클래스 등등.. 뭐 이런거 부터 시작해서 뭔가를 만드는 과정으로 자연스럽게 이어져요. 그리고 열심히 자신의 기술력을 높이는데 초점을 맞추죠. 프로 개발자라고 이런걸 무시하지는 않아요. node만 하더라도 버전이 올라갈 때마다 새로운 메소드가 추가가 되거나 삭제, 비추천으로 업데이트가 되는데 이런걸 미리미리 알고 있으면 더 효율적으로 코드를 작성할 수가 있겠죠. 당연히 어떤 브라우저에서 지원하고 어떤 브라우저에서 지원을 안하는지도 알아야하구요. 암튼 이런 개발자로서 알아야 하는 개발 지식만 알고 있다면 개발자로서는 좋은 일이지만 다른 포지션에 있는 멤버입장에서는 어떨까요? 예를들면 내가 fromEntries라는 메소드의 사용법을 알고 있다고 해보자구요. 이 지식이 디자이너에게 도움이 되는 지식일까요? 프로젝트 오너에게 도움이 되는 지식인가요? 아니죠? 하지만 개발자들끼리는 이게 뭐하는 메소드고 이 메소드를 사용했을 때의 장점과 단점을 이해할 수 있어요. 즉 이런 개발 지식을 개발자들만 알고 있으면 되고 개발자들만 이해할 수 있다는 뜻이에요. 그래서 경험이 있는 개발자들이 다른사람의 코드를 보면 나만 생각한 코드인지 아니면 다른사람을 생각한 코드인지 다는 아니더라도 대략적으로는 읽을 수가 있어요. 그래도 모르는 부분이 있고 또 확실하게 하거나 더 좋은 코드를 제안하거나 수정을 해서 코드의 퀄리티를 높이기 위해서 코드리뷰를 하구요. 프로 개발자와 아마추어 개발자의 차이는 여기서부터 차이가 나기 시작합니다. 우리가 개발을 처음 배울때는 어차피 나만 이해하면 되니까 코드를 대충써도 상관 없는데 프로 개발자들은 내가 아닌 다른 사람이 코드를 읽을 때 쉽게 이해할 수 있도록 쓰는건 물론이고 개인의 역량을 발휘해서 더 효율적이고 깔끔한 코드를 작성해요. 무엇보다 나중에 유지보수를 생각해서 재사용 가능한 단위로 코드를 분할/통합하기도 해요. 변수나 함수명도 이에 맞춰서 이해하기 쉽게 작성하구요. 사실 이 개발지식만 다뤄도 프로 개발자와 아마추어 개발자의 차이를 하루종일 말할 수 있을 정도에요. 지금은 다 다룰수 없기 때문에 그 중에 일부만 말씀드리는 거구요. 프로 개발자는 최신 기술이나 지식을 얼마나 많이 알고 다룰수 있는가가 아니라 그 기술을 언제 왜 사용했고 무엇을 위해서 사용했는지를 생각하고 사용합니다. 아마추어 개발자는 그런거 잘 생각 안하죠. 저도 이해는 해요. 경우에 따라 다르겠지만 대부분 본인 스스로도 아는것 보다 모르는게 더 많다는 것을 알고 있으니 더 많은 지식을 흡수하기 위해서…혹은 최신 기술을 많이 알고 있으면 나중에 취업에 유리할 것 같으니까 일단 배운것을 싸지르고 보는 개발자분들이 있어요. 이 포스팅을 보고 계신 많은 개발자분들은 이런 분들은 안계실거라 생각하지만 지금 막 개발을 배우는 분들이 계시다면 항상 내가 지금 쓰려는 코드가 왜 필요하고 누구를 위해서 써야하는지를 의식하시길 바랍니다.

그럼 이렇게 다른 개발자들을 위해서… 그리고 나중에 유지보수를 생각해서 코드를 잘 쓰면 프로 개발자라고 할 수 있을까요? 정답은 아니오입니다. 앞서 말씀드렸듯이 그건 개발자들끼리만 도움되는 지식이지 다른 포지션의 멤버들에게는 전혀 도움안되는 지식이에요. 아니 개발자들끼리만 알고 인정하면 되지 다른 포지션 멤버들을 생각할 필요가 있냐? 라고 생각하는 분들이 계실 수도 있기 때문에 미리 말씀드릴께요. 그렇게 생각하시는 분들은 개발자의 포지션에 대해서 잘못 이해하고 계신겁니다. 회사에서 개발자를 채용할 때는 무슨생각으로 채용을 할까요? 회사의 이익을 발생시키기 위해서 개발자를 채용하겠죠? 그리고 돈만 있다면 프로 개발자를 채용하고 싶어하는게 회사에요. 프로 개발자가 코드를 잘 짜서 그럴까요? 물론 그럴 수도 있지만 그게 다가 아니에요. 다른 멤버들과 협업이 가능하고 비즈니스의 의도를 코딩이라는 행위로 녹여낼 수 있는 역량이 높기 때문이에요. 즉 협업을 하는 한 다른 포지션의 멤버들에게도 인정을 받는 개발자여야 프로 개발자라고 말 할수 있어요. 한가지 예를 들어볼게요. 요즘 프론트엔드 개발은 컴포넌트 단위로 개발하는게 유행이고 작은 단위로 쪼개서 재사용이 가능한 컴포넌트를 만들어서 개발의 효율을 높이는게 주류가 되고 있어요. 그러다보니 자연스럽게 아토믹디자인이 주목받게 되었구요. 근데 이 아토믹디자인을 바탕으로 개발을 하려면 자연스럽게 디자이너와의 협력이 필요해요. 작은 단위로 쪼개서 재 사용 가능한 컴포넌트를 만드려면 얼마나 많은 단위로 쪼개야하는지 정해야하거든요. 이때 개발자에게 아토믹 디자인에 관한 지식이 없는 상태라면 어떨까요? 더 나아가서 UIUX지식이 하나도 없는 상태라면 디자이너와 협업이 가능할까요? 장담하건데 이런 분들은 10이면 8명은 개발자 이지만 말한마디 못하는 벙어리가 될거에요. 이러면 회의가 진행이 안되는 건 물론이고 디자이너 입장에서는 상당히 불안을 느끼게 되요. 왜냐하면 디자이너도 완벽한건 아니거든요. 때문에 개발자의 시선에서 오류를 잡아줄수 있는 파트너가 필요해요. 그리고 더 나아가서는 예외처리를 정해야 할 때도 있죠. 이렇게 디자이너와 협의후에 정해진 결과물을 바탕으로 개발자는 코딩을 하게 되는거에요. 이런 프로세스를 거쳐서 작성한 코드는 뭐에 좋냐? 하신다면 이유가 있는 코드를 적을 수 있다는 점이에요. 아니 이유없는 코드가 있냐? 라고 생각하시는 분들도 계실텐데 생각보다 무지성으로 코딩하는 개발자들 많습니다. 같이 일하다보면 답답해요. 디자이너와 한번만 상의해서 코딩하면 끝날일을 그 사람 때문에 손이 두번 세번 더 가게 되는 경우가 많거든요. 물어보면 그냥 했대요. 이래도 될거 같아서… 하지만 회사는 정해진 룰이 있거든요. 없으면 만들어야하구요. 근데 아무런 협의 없이 그냥 코딩하면 나중에 결과물을 봤을 때 디자이너도 몰랐던 결과물이고 개발자도 의도를 모르는 결과물이 되어버려요. 결국 유지보수가 힘들어지게 되구요. 프로 개발자는 디자인과 UIUX 지식을 갖추고 디자이너와 대화가 통해야하고 정해진 룰에 따라 코드로 표현할수 있는 개발자입니다. 

솔직히 말해서 제가 이랬습니다. UIUX나 디자인 관련 지식은 전혀 없는 상태에서 디자이너 회의에 참석 했을 때 정말 나는 여기 왜 앉아있는 건가? 라는 생각을 했어요. 그 한시간이라는 회의시간이 얼마나 길던지 처음엔 회의를 하는데 대화내용이 이해가 안되서 답답했던적이 한두번이 아니었어요. 일본어가 딸려서 그런건 아니에요. 애당초 디자인에 대한 개념 자체가 없다보니 이해가 안되고 이해가 안되니깐 그냥 앉아만 있다가 회의가 끝나게 되는 거였어요. 그렇게 디자이너와의 회의가 두세번 끝나고 나니 이러면 안되겠다 싶어서 솔직히 말하고 도움을 구하자고 결정했죠. 프론트엔드 리더와 디자이너에게 개인적으로 연락을 해서 디자인에 관한 지식이 아에없어서 도움이 안되는거 같다. 나도 도움이 되고 싶으니 회의때 나온 얘기들을 나중에 내가 알아들을 수 있게 짧게 설명을 해줄 수 있겠냐… 숙제를 내주면 공부도 해오겠다.. 이렇게 도움을 구했죠. 다행이도 흔쾌히 도와주겠다고 해서 몇주전도 트레이닝을 받았어요. 다들 본업으로 바쁜데 그래도 도와주겠다고 하니 너무 감사할 따름이였습니다. 그렇게 하니깐 이제 회의 내용이 조금씩 들리더라구요. 그리고 회의때 조금씩 발언을 하게 되었고 일년이 지나서 저는 그 회의를 주도하는 개최자가 됩니다. 모두의 의견을 듣고 정리하고 결론을 내고 또 다음 의제를 제안하고 목표를 설정하게 되죠. 제가 이 과정을 거치면서 한가지 알게 된게 있었는데요. 제가 초반에 디자이너와의 회의에서 벙어리가 됬던건 디자인 지식이 없어서만 그런건 아니었다는 점이에요. 또 한가지 부족했던 건 디자이너와의 대화를 제가 두려워 했다는 점이에요. 괜히 말 잘못하면 창피해질거 같고 말을 안하는니만 못할거 같다는 생각이 컸죠. 그래서 더 말을 못했죠. 하지만 그 두려움을 이기고 발전하겠다는 생각으로 행동을 했을 때 저는 디자인 지식 뿐만 아니라 “사람”을 얻을 수 있었죠. 그리고 결과적으로는 프로 개발자로 한걸음 더 나아갈 수 있었습니다. 꼭 디자인너가 아니더라도 여러분의 지금의 상황속에 두려움의 대상이 있을거에요. 그리고 행동을 못하는 이유도 있을 거에요. 저의 경우 실력이 들통날까봐 걱정했던 적도 있어요. 근데 실력이 들통나면 어때요? 실력이 들통나서 프로가 될 수만 있다면 잠깐 쪽팔리면 그만이잖아요. 용기는 행동하는 사람이 가지는 특권이자 선물입니다. 구글의 개발자들을 대상으로 설문조사를 한적이 있었는데 자신을 가장 힘들게 하는게 뭔지에 대해 조사를 했더니 대다수가 나의 실력이 들통나는게 두렵다는 결과가 나왔어요. 구글의 개발자들 조차도 그런 생각을 하고 있다니 신기하지 않나요? 혹시나 저와 같은 분이 지금 이 포스팅을 보고 계시다면 프로 개발자가 되기 위해서 지혜로운 선택과 행동을 하시기 바랍니다.

그럼 이렇게만 하면 프로개발자가 될 수 있는거냐하면 아직 더 있습니다. 생각보다 개발자가 만나는 사람은 꽤 다양합니다. 몇몇 분들은 개발자라는 직업이 컴터앞에 앉아서 그냥 묵묵히 개발만 하는 줄 아는데 현실을 그렇지 않아요. 디자이너 이외에도 기획자랑도 대화를 많이 하고 경우에 따라서는 유저와 대화하기도 합니다. 그중 디자이너와 비슷한 비율로 대화를 많이 하는 대상이 보통 기획자인데요. 기획자와 대화를 할때는 비즈니스적인 관점이 필요합니다. 보통 기획자와는 사양에 관한 대화만 하는줄 아는데 프로개발자라면 그 이상을 대화합니다. 대부분 킥오프때 기획자는 어떤 것을 개발할 것인지… 필요한 사양이 무엇인지를 설명하는데 프로개발자는 그 기획의 의도를 확인하고 비즈니스적인 관점에서 어떤 메리트가 있는지를 확인합니다. 개발자가 이런 내용까지 알아야 하나? 싶겠지만 앞서 말씀드렸듯이 개발자는 그냥 개발만 하는 사람이 아니에요. 다른 포지션의 멤버들과 협업을 할 수 있어야하고 기획자도 협업을 해야하는 대상이에요. 그럼 기획자의 입장에서 생각할 줄 알아야겠죠. 사실 디자이너와 마찬가지로 기획자도 완벽하지는 않아요. 미처 생각하지 못한 부분이 있을 수 있고 개발자 만이 잡아낼 수 있는 논리적 오류를 발견할 수도 있고 차선책을 대안할 수도 있죠. 이런 협업을 하려면 비즈니스적인 관점을 갖는 능력은 필수입니다. 왜냐하면 기획자는 그 많은 TODO리스트 중에서 비즈니스적인 관점에서 우선순위가 높은 것들을 추려서 기획을 하거든요. 개발자가 이런 기획자의 입장을 이해하지 못하면 도움안되는 조언만 하는 꼴이 되는거에요. 

사례를 하나 말씀드릴께요. 예전에 기획자와 이 문제로 조금 트러블이 있을 때가 있었는데 제가 어떤 프로젝트에 참여하게 됬는데 그 프로젝트가 총 세단계에 걸쳐서 개발을 진행하게 되었더라구요. 근데 뚜껑열어보니까 1단계 개발때 만든 페이지를 3단계때는 삭제하고 새로 개발하는 내용이더라구요. 그래서 제가 제안을 했죠. 3단계 개발때 삭제할 페이지를 굳이 1단계때 만들 필요가 있냐? 그냥 바로 3단계 개발을 진행하자… 라고요. 그랬더니 그건 안된다는거에요. 그래서 왜 안되냐고 물어봤더니 이미 이렇게 제안해서 1단계 개발 예산을 따냈다는 거에요. 근데 이미 예산을 땄어도 개발기간을 단축한다면 그게 더 이득이지 않냐.. 라고 반문을 했죠. 근데 이미 정해진 사항이라 변경이 힘들다는 답변이였어요. 개발자인 저는 납득이 안됬죠. 어차피 없어질 페이지 뭐하러 힘들게 시간과 돈을 들여가면서 만드는지 이해가 안됬어요. 나중에 조금 더 이야기 해보니 회사는 1단계 개발로 이 서비스가 어느정도의 가능성이 있는지 테스트 해보려고 했던거였어요. 그래서 개발 후에 어느정도 목표했던 수익이 발생하면 가능성이 있다고 판단하고 2단계 개발로 넘어가려고 했던거죠. 기획자는 한정되어있는 돈과 시간을 바탕으로 총 3단계 기획을 했고 1단계에서 가장 효율적으로 성과를 내려고 했었죠. 그래야 그 다음 개발을 진행할 수 있었으니까요. 어떠신가요? 개발자라고 그냥 코드만 잘짜면 될거같지 않죠? 회사에 소속되어있는 한, 팀에 소속되어있는 한…아니 그냥 1인 개발자라 하더라도 개발자는 개발하려는 대상의 목표와 의도를 알아야 협업도 할 수 있고 목표에 더 빨리 다가갈 수 있는 아이디어도 제시할 수 있어요. 그게 우리 개발자가 한걸음 더 업그레이드 할 수 있는 방법입니다.

제가 이렇게 말을 하고 있지만 사실 저 역시도 프로 개발자가 되는 과정에 있는 한 개발자에 불과해요. 저보다 더 뛰어난 개발자도 많이 봐왔고 어떻게하면 나도 저렇게 될수 있을까 고민을 하고 경험했던 것들을 짧게 정리해 봤습니다. 정리를 하자면 개발자로서 개발 관련 지식을 갖추는 것은 당연해요. 여기서 난이도가 높은 지식을 갖추면 갖출 수록 프로개발자로서 한걸음 더 가까워 질 수도 있겠죠. 하지만 그것만으로는 부족하고 얼마나 다른 개발자들을 배려할 수 있는지. 지금뿐만아니라 다음 유지보수도 생각할 수 있는 능력, 또한 다른 포지션의 멤버들과 얼마나 좋은 협업을 할 수 있는지 생각하고 행동할 수 있다면 여러분은 프로개발자에 한걸음 다가서고 있고 이러한 경험과 잘 다져진 스스로를 잘 어필할 수 있다면 연봉을 높이는 건 어렵지 않을 거에요. 물론 저보다 정말 한참 고수이신 분들의 입장에서는 또 의견이 있을 수도 있겠죠. 이 포스팅을 보시고 이런 경우도 있다~라고 생각되는 분들이 있다면 꼭 댓글로 남겨주시면 감사하겠습니다. 오늘 제가 준비한 포스팅은 여기까지 입니다. 이 포스팅이 도움이 되셨다면 저의 youtube 채널에 오셔서 좋아요와 구독을 꼭 눌러주시고 저는 더 좋은 포스팅으로 여러분들을 다시 찾아뵙겠습니다. 감사합니다.