필자는 소프트웨어 마이스터 고등학교에 2학년으로 재학 중입니다.
23년 8월 24일에 열린 4개소마고 연합 콘서트에서 들은 강연이 감명 깊게
와닿아 이 때 필기한 내용들을 정리된 글로 다시 써볼까 합니다.
강연해주신 Line Biz+ 문범우 개발자님께 감사드리며,
좋은 강연 듣게 해주신 우리 학교를 포함한 4개 소마고에 감사를 드립니다..!
저희 학교에서는 개발을 공부하며 다른 외부 활동에 대한 가치를 소홀히 매기는
학생들도 간혹 보였습니다.
이 글에서 다룰 것들은 개발자에게 있어 이런 다양한 경험들이 왜 중요한지입니다.
저도 강연을 듣기 전에는 이런 경험들에 대해 소홀히하는 경향이 있었습니다.
외부 경험이 왜 중요한지를 소프트웨어 개발자의 정의와도 관련지어 이야기하고,
따라서 업무를 즐겁게 만드는 방법에 대해서도 이야기해보겠습니다.
도메인이라는 영역을 알고 계신다면 더욱 도움이 될 것 같습니다.
홍보...차원이긴하지만 이와 관련해 제가 책을 읽고 도메인에 대한 내용을 짧게
정리하여 쓴 글 하나 추천드리겠습니다ㅎㅎ. 링크
한 기업이 금융과 관련된 도메인을 처리해야 한다고 생각해보겠습니다.
해당 업무를 처리할 때, 개발자가 금융에 대한 도메인에 지식이 있다면 어떨까요?
배경지식이 없는 개발자보다 훨씬 효율적으로 업무 처리를 할 수 있을 것입니다.
물론 도메인을 지정해놓고 개발할 수도 있겠지만, 살아가며 우리가 예상하지
못한 여러가지 도메인을 해결해나가야할 상황이 올 수 있습니다.
특정 도메인에서 일해보거나, 배경 지식이 있다는 것은 얼마나 많은 분야에서 자신의
개발 역량을 보여줄 수 있는지와 직결되기도 합니다.
스티브 잡스도 컴퓨터 산업 종사자들이 부족한 것이 다른 경험, 즉 외부의 경험이라고 이야기했습니다.
개발자들이 현업에서도 사이드 프로젝트를 하는 이유가 무엇일까요?
물론 급전을 벌기 위해서, 커리어를 위해서 등 많은 이유도 있겠지만,
다양한 도메인을 직접 경험해보기 위해 개발하기도 합니다.
현업 개발자분들도 사이드 프로젝트를 진행할 때 개발 실력은 출중하시나, "뭘 만들지?"라는 고민을
많이 하신다고 합니다. 봐왔던 게 개발과 관련된 서적, 강의밖에 없었으니까요.
다른 분야에서 개발이 왜 필요한지, 어떻게 필요한지를 인지하지 못하는 것입니다.
말 그대로, 개발자 기술 역랴잉 서비스와 고도화되어있지 않은 역량이 매우 많습니다.
해당 역량에 관심이 있는 개발자가 마음 먹고 관련 서비스를 하면 1등하는 것도 어려운 일은 아니겠죠.
실제로 그런 역량에 관심을 가져 창업을 하거나 은퇴하시는 분들도 계신다고 합니다.
최근에는 여러 지하철역에서의 칼부림 사건이 이슈가 되기도 했습니다.
이 사건이 이슈가 되자, 한 개발팀은 이틀 만에 예고 사건들을 보여주는 웹 사이트를 개발했다고 합니다.
어떻게 그게 가능할까요?
이 개발 팀은 전에 코로나19 관련 지도를 개발한 개발팀이라고 합니다.
해당 도메인과 관련된 지식이 있으니, 관심이 생기고 이슈가 터지면 바로 개발이 가능한 것입니다.
이런 식으로 여러가지의 경험을 넓혀가야 상황이 터지거나 타이밍을 잘 잡아 바로 개발할 수 있습니다.
현업 개발자 중 기술적으로 코로나 맵을 만들지 못하는 사람은 거의 적을 것입니다.
그렇다면 어떤 부면에서 차이가 날까요?
바로 다른 도메인에 얼마나 관심을 가지고, 외부적인 경험이 얼마나 있냐에 대해 차이가 납니다.
가지고 있는 우물 안에 있는 것이 아니라, 이 우물을 얼마나 확장시키려는지에 대해 차이가 나는거죠.
더 나아가 코드만 계속 작성하는 것보다 외부 경험이 왜 중요한지에
대해서 업무 프로세스와 관련하여 설명해보겠습니다.
소프트웨어 개발자란 무엇일까요?
주어진 문제를 소프트웨어 개발과 관련된 기술을 통해 해결해나가는 직무이며,
서비스가 개발되면 시작부터 끝까지 해당 서비스를 담당하는 직무이기도 합니다.
개발자가 해야하는 일은 단순 코드 작성만이 아닙니다.
조금씩 다를 수 있지만, 보통의 회사에서 업무 프로세스는 다음과 같다고 합니다.
회사에서는 개발자들이 하고 싶은 것들과 다르게, 기획팀과 사업팀에서 도메인과
요구사항을 정의하고, 이 요구사항에 대해 리뷰를 하는 시간을 개발팀과 가집니다.
개발팀은 문서만 받고 바로 개발을 할 수 있는게 아니라 요구사항에 대해 분석해야합니다.
기능이 왜 필요한지, 문제는 없을지, 기한은 얼마나 걸릴지 회의가 필요하죠.
또한 몇 달 안에 개발 가능하다 같은 공수를 측정해서 다른 부서에게 알려야 합니다.
그리고 서비스 배포의 일정을 잡게 되는 것인데, 이는 회사마다 조금 다르다고 합니다.
여러가지 이유가 있을 수 있지만, 공수 파악이 제대로 되지 않아 밤새는 경우가 많다고 합니다.
사실 기획팀이나 사업팀에서 비즈니스와 관련해 일정을 미루는 것은 그렇다지만,
개발팀에서 일정을 미루는 것은 조금 이슈가 있다고 해요.
그래서 요구사항을 보고 3시간이면 되겠다! 라고 생각했는데 생각보다 변경사항과
연결할 것들이 많으면 6시간, 10시간씩 일하게 되는 것이랍니다.
공수 파악이 끝나면 개발이 시작됩니다.
기능을 구현하는 것은 당연하고, 그 다음으로 중요한 것은 클린 코드입니다.
일주일 뒤에 개발이 끝나면 다시 그 코드를 보아야 합니다.
또한 나 혼자 개발하는 것이 아니라, 다른 개발자들도 내가 짠 코드를 보고 충분히
이해할 수 있도록 컨벤션에 맞추어 깔끔한 코드를 짜는 것이 중요합니다.
이를 위해 개발팀 내에서는 서로의 코드를 리뷰하는 코드 리뷰 시간을 가진답니다.
기능적인 부분은 당연하고, 설계나 패턴적인 부분에 대해서도 많이 이야기한다고 합니다.
개발이 끝나면 개발자들끼리 Sanity Test라는 베타 테스트를 진행합니다.
정식적으로 다른 부서에서 테스트를 진행하기 전에 기본적인 테스트를 진행한다고 합니다.
다음은 베타 테스트로 배포를 하면, QA팀이 여러가지 시나리오로 테스트를 진행합니다.
테스트는 매우 까다로운데, 버튼이 하나 있으면 더블 클릭이나 세부 클릭 등
사용자가 이렇게까지 할까 싶을 정도로 모든 테스트를 진행합니다.
장애가 발생하지 않는지 테스트 후, 해당 테스트 내용을 개발팀이 받아 버그를 픽스합니다.
픽스가 끝나면 사용자에게 공식적으로 서비스가 릴리즈됩니다.
회사에서는 위와 같은 싸이클이 계속 돌아갑니다. 우리가 개발을 하는 동안 기획팀과 사업팀은
다음 요구사항에 대한 준비를 하고 있죠.
단순히 개발자는 코드를 짜는 사람이다 라고 하기에는, 코드 작성은 너무 작은 영역입니다.
코드를 작성하면 그에 대해 함께 다양한 사람들과 이야기해야 하며, 그만큼
회의나 이야기할 시간들도 너무 많습니다.
개발자가 담당해야하는 비개발적인 지식들은 생각보다 많습니다.
협업 능력과 커뮤니케이션을 더해, 다른 능력들도 매우 중요하죠.
프로그래머스에서 2023년에 설문조사를 하나 했다고 합니다.
어떤 것 때문에 커리어를 고민하시나요? 라는 질문이 있었는데요,
예비 개발자들이 '전문성 부족'이라는 항목에 73.7%를,
3년차 개발자들이 70%를 선택, 10년차 개발자들이 되어서야 47%로 떨어졌다고 해요.
개발자들은 회사에 들어가 아무리 열심히 공부해도 전문성이 없다고 생각합니다.
그래서 늦게까지, 주말에도 계속 공부를 하게 되는거죠.
그러다보니 개발이라는 우물에 계속 갇혀있게 됩니다. 전문성이 부족한건 알겠는데,
너무 기본적인 것에만 몰두하면 안된다는 거죠.
개발하는 시간이 주로 이루어져있다면, 그 중 몇 시간은 떼서 외부 경험을 하는 것이 좋습니다.
개발 공부만 해도 효과는 있으나, 생각보다 미비합니다. 개발자라는 커리어로 더 높게
성장하려면, 인정받는 개발자가 되고 싶다면 비개발적인 외부 경험을 키우는 것도 중요합니다.
다양한 사람들과 다양한 경험들을 해보며 우물 안을 넓혀야 합니다.
독서도 매우 좋지만, 독서 뿐만이 아니라 더욱 다양한 상황들에 놓여진다면 우리가
구사할 수 있는 언어가 더욱 다양해지겠죠.
현업에서도 비개발자와 이야기하는 경우가 많습니다. 기획팀, 사업팀, QA팀 및 테스트팀과도
이야기하는 상황도 많습니다.
이에 대해 디테일한 부분은 개발팀만이 이해하고 있죠.
그래서 일반적인 사람들에게도 개발적인 영역을 이해할 수 있게 하는 능력이 필요합니다.
말하는 스킬을 늘려야하죠.
강연하신 개발자님은, 지인이 서버가 왜 터지는거냐고 이야기하신 적이 있다고 합니다.
그러자 개발자님께서는 "네 집이 5평인데 평소에 5명 들어오다가 갑자기 200명이 들어오면 집이 안터지겠니?"
라고 이야기하셨다고 해요ㅋㅋㅋ. 되게 재밌는 비유죠.
그럼 애초에 집이 넓으면 되는거 아니냐는 질문을 하자,
혼자사는 집을 갑자기 언제 올지 모르는 사람들을 위해 펜트하우스로 구비할 거냐고 되물으셨다고 합니다.
정말 입담이 좋으신 것 같아요ㅋㅋㅋㅋ
그렇듯 항상 트래픽을 위해서 서버스펙을 좋게 유지할 수는 없죠.
회사에 가게되면 이렇게 기획팀과 사업팀에게 더 많은 비유를 해 설명해야하는 경우가 많습니다.
로직이 복잡하고 볼륨이 커질수록 시스템의 복잡성도 올라가고, 미들웨어나 DB가 많을 수록
개발자들도 이해가기 어려울 때가 있답니다.
그래서 다른 부서에 문제상황을 이야기하거나 기능 추가가 어렵다고 이야기해야하는데,
다양한 상황과 경험을 만나지 못하면 이를 설명하는 것이 매우 어려워요.
강연자님께서 회사에서 재무 기획을 관련한 개발을 맡으신 적이 있다고 해요.
그런데 이에 대해 알지 못하니 이해도 안되고, 이해가 되지 않으니 개발이 재미가 없어지며,
도메인에 대해 경험이 없으면 입력 출력값만 확인하는 기계가 될 수 밖에 없다고 합니다.
그래서 같이 개발하시는 분과 전산에 대해 반년 정도 공부하셨다고 해요.
이에 관련된 공부를 하니 개발에 대해 흥미가 생기고, 뭘 개발하는지 알게되고,
특정상황에 대해 어떤 케이스가 있는지 알 수 있으니 프로세스를 이해하여 방지하고,
기획팀고 사업팀과도 티키타카가 잘되며 한번 이야기하면 바로 알 수 있게 됐다고 합니다.
우물을 넓혀보는 것이 생각보다 어렵진 않지만, 한 번도 안해본 사람은 조금 망설이게 됨.
한 두번 경험을 해보면 내가 모르는 점이 온대도 공부하는 것을 당연시하게됩니다.
이왕 일하는 거 즐겁게 일하기 위해, 개발하는게 무엇인지 다른 팀에게 제안하며 주도하는
개발을 해보는 건 어떨까요?
내가 이미 속해있는 그룹에서 무언가 활동을 하는 것도 좋지만,
이를 벗어나 다른 그룹에서 동아리 활동을 하는 것도 좋습니다.
항상 만나는 사람들과는 그 안에 우물이 생깁니다.
그 우물에만 너무 오래있고 집중한다면 우물에 갇히게 되고, 외부적인걸 보기 어려워져요.
허나 처음보는 사람들과 열려있는 곳에 들어가서, 만나지 못한 사람들을 만나게되면
한번도 해보지 않아 조심스럽다면 내부적인 동아리에서 시작하는 것도 좋아요.
스터디라 해도, 내가 책을 혼자 읽는 것과 다른 사람과 책을 읽고 토론하는 것은
굉장히 포커싱이 달라요.
토론을 하게 되면 두 번 읽는 효과가 생깁니다. 기회, 시간, 여건이 되면
스터디를 해도 다른 사람들과 토론식으로 하는 것도 좋습니다.
이렇듯 외부 활동을 하면 내가 개발자의 입장에서 보지 못한 경험들을 볼 수 있습니다.
단지 취업하고 싶어서, 돈을 일찍 벌기 위해 취업하게 된다면 나중에 취업했을 때
내가 왜 취업했고, 이런 일을 하면서까지 일해야하나? 라는 번아웃이 올 수 있습니다.
어떠한 강점이 있고, 어떠한 약점이 있는지를 정확히 알지 못한다면 자신감이 떨어지고,
자신이 정확하게 무엇을 원하는지도 표현하기 힘들 수 있습니다.
그래서 지금부터라도 경험을 통해 본인의 강점과 단점을 파악하고 이를 활용하면 좋을 것 같습니다.
만약 개발을 떠나, 개발보다 재밌는 분야가 생긴다면 강연자님은 한달 뒤라도
그 일을 꼭 하겠다는 목표가 있으시다고 합니다.
이러한 외부 경험들도 중요하지만, 가장 중요한 것은 개발 역량입니다.
개발 역량 없이 외부 경험들을 체험한다면 그냥 잘 놀러다니는 사람이 될 뿐이랍니다.
개발 역량을 강화하며, 여러가지의 외부 경험들도 체험하는 도메인 넓은 개발자가 되었으면 좋겠습니다.
저 또한 그런 욕구가 있으며, 이를 위해 열심히 여러 공부에 정진하겠습니다.
다시 한번 강연해주신 문범우 개발자님 감사합니다!!
잘 읽었습니다. 정리해주셔서 감사합니다 👍👏