ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 나의 육각형은 어떤 모습일까? - 육각형 개발자 독서 후기
    독서 및 기타 활동 2023. 9. 30. 00:12

    인터넷을 서핑하던 중 우연히 『육각형 개발자』라는 도서가 출간되었다는 소식을 접하게 되었는데 표지가 상당히 재미있어서 인상적이었습니다.

     

    육각형 개발자 표지

     

    마치 게임에서 캐릭터 스탯을 찍듯이 개발자로서의 능력치를 나타내는 육각형 그래프가 책의 제일 앞장에 나타나있으니 그 모습을 보고 문득 이런 생각이 들었습니다.

     

    현재 나의 육각형은 어떤 모습일까?

     

    시니어 개발자가 되기 위해서는 육각형 개발자가 되어야 한다는 조언이 담긴 책이었지만 아직 주니어레벨인 저에게는 육각형을 가득 채우기에는 아직은 먼 미래였습니다. 그러나 현재상태를 알아야 앞으로 올바른 스탯을 찍어나갈 수 있을 거라는 생각에 성장에 목마른 저에게는 이 책이 더욱 매력적으로 느껴졌습니다.

     

    책이 출간된뒤로 커뮤니티의 많은 분들이 이 책을 읽고 후기를 작성해 주셔서 더더욱 읽어보고 싶다는 생각이 들었던 것 같은데 시간 날 때마다 틈틈이 읽다가 이번에 겨우 다 읽게 되어서 저도 뒤늦게 한번 후기작성을 하게 되었습니다. 그럼 과연 저의 육각형 스탯은 어떤 형태일까요?

     

    나의 육각형은 어떤 모습일지 확인해보자

     


     

    1️⃣ 구현 기술

    첫 번째로 소개되는 역량은 구현 기술입니다. 개발자가 되기 위한 첫 번째 관문과도 같기 때문에 아마 많은 분들이 개발 잘하는 사람을 생각할 때 구현 기술이 뛰어난 사람이라고 생각하지 않을까 싶습니다.

     

    하지만 개발도 점점 다양한 산업과 분야에 맞춰 점점 스펙트럼이 넓어지고 있기 때문에 사실상 모든 기술을 전부다 챙겨가기에는 시간도 부족하고 효율도 떨어집니다. 따라서 책에서는 학습하려고 하는 구현 기술을 정할 때 다음과 같은 기준을 적용하기를 권장하고 있습니다.

     

    • 현재 사용 중인 기술
    • 문제를 해결하기 위한 기술
      • 당장 해결해야하는 문제를 위한 기술
      • 가까운 미래에 해결해야 할 문제를 위한 기술

     

    현재 사용 중인 기술은 말 그대로 프로젝트나 서비스 개발에 필요한 언어, 프레임워크, 라이브러리를 다룰 수 있는지를 의미하고 문제를 해결하기 위한 기술은 두 가지로 나뉘는데 '당장 해결해야하는 문제를 위한 기술'은 현재 사용 중인 기술은 아니지만 발생한 문제와 상황에 따라 반드시 도입해야 하는 기술이고 '가까운 미래에 해결해야 할 문제를 위한 기술'은 현재 문제가 없지만 나중에는 발생할 수 있을 문제를 해결하기 위해 도입해야 하는 기술입니다.

     

    이러한 기준에 따라 상황에 맞게 필요한 구현 기술과 능력을 기르시면 되는데 여기서 중요한 포인트는 이 중에서도 완벽하게 모든 기능을 익히려고 하지 않아도 된다는 점입니다.

     

    제 경험에 빗대어 설명드리자면 이전에 reactflow라는 라이브러리를 이용해서 서비스를 개발하려고 하는데 필요한 기능 이외에도 혹시 다른 좋은 기능들도 소개해보면 좋지 않을까 하는 생각에 공식 홈페이지에 소개된 모든 기능들을 전부 정리해서 회의 때 보고 드렸다가 팀 내 혼란만 야기시켰던 경험이 있습니다.

     

    책을 읽고나서 새로운 기술을 도입하기 위한 R&D를 할 때는 팀에서 꼭 필요한 기능들만 정리해서 보고 드리고 자주 쓸 라이브러리가 아니라면 너무 깊이 학습하지 말아야겠다는 다짐을 하게 되는 계기가 되었습니다.

     

    추가적으로 최신 기술 도입을 위한 R&D에 대한 이야기가 나온 김에 이 또한 책에 좋은 이야기가 담겨있어서 잠깐 소개드리자면 어떠한 기술을 도입할 때는 보수적으로 고민하고 다음과 같은 내용을 신경 써야 한다고 나와있습니다.

     

    • 신뢰 구축
    • 함께 할 동료
    • 타당성
    • 점진적 적용
    • 시장 상황

     

    이 항목들에 대한 자세한 설명은 책에 자세히 나와있으므로 궁금하신 분들은 한 번씩 꼭 찾아서 읽어보시길 권장드립니다.

     


     

    2️⃣ 품질 및 코드 이해

    책에서 소개하는 두 번째 개발자 역량으로는 코드를 이해하고 소프트웨어의 품질을 향상하는 기술입니다. 이 파트에서 재미있게 읽었던 부분은 유지보수와 개발 실력에 관한 이야기인데요. 유지보수만 하다 보면 실력이 늘지 않는다고 생각하는 개발자가 있는데 책에서는 그렇지 않다고 주장하고 있습니다.

     

    사실 이 부분을 읽고 제가 그렇게 생각하고 있었기 때문에 조금 뜨끔 했었는데요. 신규 프로젝트를 진행할 때는 새로운 기술을 사용할 기회가 생긴다면 유지보수를 할 때는 소프트웨어 운영 과정에 필요한 역량을 쌓을 기회가 생긴다고 합니다.

     

    예를들어, 다양한 오류 상황을 마주하면서 자신만의 문제 해결 노하우가 생기기도 하고 테스트 코드와 리팩터링 역량을 기를 수 있게 됩니다. 따라서 유지보수를 하는 것은 소프트웨어 가치 유지라는 중요한 역량을 쌓는 데 좋은 기회로 생각하자는 다짐이 들었습니다.

     

    기능 구현 역량 만큼 중요한 유지보수 역량

     

    추가적으로 코드 이해 역량으로는 말 그대로 코드를 빠르게 이해하는 역량과 클린 코드를 작성하는 역량 두 가지를 소개하고 있는데요. 코드를 빠르고 쉽게 이해하기 위해서는 코드 시각화가 필요하며 책에서는 액티비티, 시퀀스, 클래스, 상태 다이어그램 4가지를 소개하고 그리는 방법에 대해 소개하고 있습니다.

     

    읽으면서 가장 공감이 되었던 건 다이어그램을 그릴 때 유의 사항으로 모든 내용을 상세하게 표시하면 복잡해지기만 하고 정보를 얻는데 방해만 된다는 점이었습니다. 이 때는 다이어그램이 복잡해지지 않도록 목적에 맞게 논리적인 단위로 묶어서 표시하거나 방해되는 요소들은 과감히 생략해 버리는 전략이 필요합니다.

     


     

    3️⃣ 응집도와 결합도

    응집도와 결합도는 프로그래밍을 공부할 때 자주 볼 수 있는 단어입니다. 응집도는 모듈 안에 있는 요소가 함께 모여 있는 정도를 나타내고 결합도는 소프트웨어 모듈이 서로 의존하는 정도입니다.

     

     

     응집도는 높이고 결합도는 낮추자

     

    아마 많이들 주문처럼 외우고 계실 텐데요. 책에서도 응집도와 결합도에 대한 설명을 예시를 통해 보여주면서 이에 대한 개념을 자세히 설명하고 있습니다. 응집도와 결합도 역시 프로젝트를 설계하고 유지보수하는데 중요한 요소이고 꼭 필요한 역량이라고 할 수 있겠습니다.

     


     

    4️⃣ 리팩터링 및 테스트

    네 번째 역량으로는 리팩터링과 테스트를 소개하고 있습니다. 리팩터링은 기존 동작은 그대로 유지하면서 내부 구조를 바꾸는 기법인데요. 이 파트에서 가장 인상 깊었던 내용은 리팩터링을 안전하게 진행하려면 반드시 테스트 코드를 작성해야 한다고 설명합니다.

     

    특히, 레거시 코드에 대한 테스트 코드를 만드는 노력 또한 중요하다고 말하고 있습니다. 시간이 다소 걸리더라도 리팩터링으로 얻는 장기적인 효과가 더 크다면 시간을 들일 만한 가치가 있다고 강조합니다.

     

    요즘 제가 고민하는 것 중 하나가 자바스크립트와 리액트를 사용하면서 프론트에도 테스트 코드를 작성해야 하는가? 에 대한 의문이 들었었는데 안전한 리팩터링을 위해서라면 테스트 코드를 작성해야 한다는 무언의 확신을 얻을 수 있었습니다.

     


     

    5️⃣ 아키텍처와 패턴

    저도 현재 데브옵스를 꿈꾸며 개발자로 커리어를 쌓고 있지만 아직까지는 아키텍처를 설계할 수 있는 역량을 갖고 있지 않은데요. 책에서는 능력 있는 시니어 개발자가 되기 위해서는 아키텍처를 설계할 수 있는 역량을 길러야 한다고 소개하고 있습니다.

     

    이 파트에서 재미있게 읽었던 부분은 보안과 성능간의 트레이드오프였는데 저는 이제까지 보안에는 전혀 관심이 없었고 성능에만 관심이 많았었는데 현재 제가 개발하고 있는 서비스는 보안이 더 중요한 서비스여서 많은 반성과 깨달음을 얻을 수 있었던 파트였습니다.

     

    결국 아키텍처와 관련된 모든 품질 속성을 전부 높이는 것은 시스템 복잡도만 증가시키므로 필요에 맞게 적절히 사용할 줄 알아야 하기 때문에 이를 설계할 수 있는 역량을 기르는 것이 중요하다고 정리할 수 있습니다.

     


     

    6️⃣ 업무 관리, 공유, 리드&팔로우

    다음은 개발 뿐만 아니라 모든 직장인들에게도 해당되는 역량입니다. 즉, 일을 잘하기 위한 역량입니다. 주어진 일을 기간 내에 잘 마무리하기 위해서 필요되는 역량으로 업무 분배, 위험 관리, 요구 사항 대응, 일정 관리 등이 포함됩니다.

     

    이 파트에서는 위험 관리에 대한 내용이 인상적이었는데 주니어 레벨에서의 위험 관리는 어떻게 해야 되는가에 대한 내용을 확인할 수 있었습니다. 실제로 주니어 때는 경험이 부족하기 때문에 일정 관리를 잘할 수가 없습니다.

     

    그래서 항상 시간이 부족하고 야근을 하게 되고 예상 보다 더 오랜 시간이 걸리게 되는데 이 때 리스크 관리를 어떻게 해야 되는가? 저도 마침 궁금했었는데 책에서는 조금 추상적이긴 하지만 어떻게 개발해야 될지 감을 못 잡고 있으면 그것이 위험 신호라고 보고 있습니다.

     

    뭘 어떻게 해야될지 모를 때 혼자서 해결하려고 하는 것은 팀을 위험하게 한다.

     

     

    따라서 위험 신호를 감지하면 즉시 공유해서 관리자가 대비할 수 있는 시간을 마련해주어야 하며 해결 방법을 떠올리는 시간은 반나절 또는 대략 하루 정도가 적당한 고민 시간이라고 설명합니다.

     

    그 외 추가적으로는 커뮤니케이션 역량을 기르기 위한 방법도 소개가 되는데 책의 저자는 어렸을 때부터 타고난 말재주가 부족했는데 꾸준한 글쓰기와 발표를 통해 소통 역량을 높였다고 합니다. 저 역시도 스스로 커뮤니케이션 역량이 부족하다고 생각하는데 꾸준히 글과 발표를 연습해야겠다는 다짐이 들었습니다.

     

    리더와 팔로우 파트에서도 재미있게 읽은 부분은 사람이 아닌 프로세스와 시스템을 변화시켜라 입니다. 사람은 본인 의지가 없으면 변화가 일어나지 않은데 프로세스와 시스템을 바꾸면 사람들이 그 프로세스와 시스템을 따라온다는 얘기였습니다.

     

    이 얘기는 당연히 주니어 레벨한테 해당하는 이야기는 아니지만, 리드 개발자이거나 시니어가 된다면 한번 시도해 보아도 괜찮겠다는 생각이 들었습니다.

     


     

    🔯 과연 나의 육각형 어떤 모습..?

    이제 책을 다 읽었으므로 한번 제 현재 상태의 역량을 평가해보도록 하겠습니다. 과연 제 육각형은 어떤 모습으로 나타났을까요? 제가 생각한 저의 현재 스탯 상태는 다음과 같다고 생각합니다.

    직접 평가해본 나의 육각형 역량

     

    • 구현 기술 : 오류 추적을 위한 디버깅, 일정 수준의 기능·비기능 요구사항을 처리할 수 있는 능력은 있지만 업무 처리속도 개선 필요
    • 품질·코드 이해 : 현재 맡고있는 서비스에 대해서 전반적인 구조와 패턴은 이해하고 있지만 아직까지 클린 코드 작성에 대해서는 부족하다고 생각
    • 아키텍처·패턴 : MVC, 싱글톤, 팩토리 등의 간단한 패턴 사용가능, 아키텍처 설계 경험 없음.
    • 응집도·결합도 : SRP 원칙에 위배되지 않도록 구현하려고 노력하는 정도. 별도의 리팩터링 진행 경험 없음
    • 리팩터링·테스트 : 카탈론과 셀레니움을 이용한 UI 자동화 테스트 코드 작성. 단, Junit과 Jest 사용 경험은 부족.
    • 업무 관리·공유 리드&팔로우 : 꾸준한 사내 R&D 발표와 위키 정리. 여가 시간에도 커뮤니티 활동과 블로그 작성하는 것을 좋아함.

     

    정성적으로 평가하긴 했지만 결과가 많이 처참하네요🥲 반성의 의미로 앞으로 더 열심히 역량을 길러야겠다는 생각이 듭니다.

     


     

    🌠 회고하기

    책을 읽으면서 어딘가에 편협되지 않고 다양한 시각에서 바라본 글이라는 생각이 들어서 좋았던 것 같습니다. 현재 B2B, SaaS 제품을 판매하는 서비스 기업에 다니고 있기 때문에 요즘 특히 떠오르는 대용량 트래픽 처리 경험, MSA 아키텍처 설계 경험 등을 접해볼 기회가 좀처럼 생기지 않아서 사실 과연 나는 올바르게 성장하고 있는 걸까? 남몰래 뒤처지고 있는 건 아닐까? 하는 생각들을 종종 했었습니다.

     

    하지만 이 고민은 거의 맨 앞장에서도 언급되지만 개발자에게 필요한 역량은 구현 기술 외적으로도 성장시켜야 할 역량이 너무나도 많다는 것. 그러니 어떤 구현 기술을 사용하고 싶다는 욕망에 너무 사로잡히지 않아도 된다는 조언이 저에게는 가장 와닿았던 것 같습니다.

     

    지금 당장에는 부족함이 많아도 현재 저에게 부족한 역량과 업무에 필요한 역량들을 앞으로도 계속해서 조금씩 채워나간다면 언젠가는 책의 저자처럼 멋진 육각형 개발자가 되어있지 않을까하는 합리적 낙관주의적인 생각을 가지며 오늘도 꾸준히 성장해 나가도록 하겠습니다.

     

    제목 : 육각형 개발자

    지은이 : 최범균

    출판사 : 한빛미디어

     

    댓글

Designed by Tistory.