F-Lab
🚀
상위 1% 개발자에게 1:1로 멘토링 받아 성장하세요
🚀
상위 1% 개발자에게 1:1로 멘토링 받아 성장하세요

돌아가는 쓰레기 코드 VS 돌아가지 않는 우아한 코드 | 채널코퍼레이션 출신 개발자

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

안녕하세요 여러분!

오늘도 멘토님께 인터뷰한 내용을 가져왔습니다 :-)

 

성장의 의지가 있는 주니어 개발자분들을 위해 채널코퍼레이션 출신 멘토님을 모시고 이야기를 나눴습니다.

 

🚀 멘토님께 질문했습니다!

  • '잘 하는 개발자'의 정의는 무엇일까요? 반대로 '못하는 개발자'의 정의는 무엇일까요?
  • 멘티들에게 주로 강조하는 핵심 메시지는 무엇인가요?
  • ‘이 경험이 없었다면 지금의 나는 없었을 것이다’라고 생각하는 결정적 경험이 있나요?
  • 비개발자와 잘 소통할 수 있는 팁이 있을까요?
     


Q. '잘 하는 개발자'의 정의는 무엇일까요? 반대로 '못하는 개발자'의 정의는 무엇일까요?

저는 '잘 하는 개발자'의 정의를 "건강"하면서 "정해진 일정" 안에 "문제 정의"를 명확하게 하고, "트레이드 오프"를 통해 합리적인 퀄리티의 문제 해결을 수행하는 개발자라고 하고 싶습니다.
조건이 참 많죠? ㅎㅎ 이보다도 더 많지만 실무에 있으면 핵심이라고 생각하는 것들만 추려봤습니다!

 

[건강]
사실상 이게 안되면 뒤에 있는 역량은 모두 무용지물이 됩니다.. 여러분들 꼭 앉아 있을 때도 오래만 앉아있지 말고 중간 중간 스트레칭도 해 주시고, 꼭 유산소든 근력 운동이든 주기적인 운동 습관을 가지시길 바라겠습니다! 늙고 병든 개발자가 되면 안 됩니다 ㅠㅠ

 

[데드 라인]
저는 돌아가는 쓰레기 코드 >>>>> 돌아가지 않는 우아한 코드라고 생각합니다. 간혹 일정을 미뤄서라도 어떻게든 높은 퀄리티의 코드를 만들려고 노력하시는 분들이 계시는데, 코드의 퀄리티도 당연히 중요하지만 고객과의 약속인 일정을 지키는 것이 1순위입니다!
비슷한 내용을 나타내는 방망이 깎던 노인에 대한 포스팅을 읽어보시면 좋을 듯합니다.

 

[문제 정의]
개발자는 문제를 해결하는 사람입니다. 그러기 위해서는 무슨 문제를 해결하는지 문제 정의부터 제대로 해야 올바른 방향으로 일 처리를 할 수 있습니다. 더불어, 문제 정의를 잘하기 위해서는 제품에 대한 이해도도 충분히 쌓아야 합니다.


바로 코딩으로 냅다 들어가기보다는 우리가 해결해야 하는 문제는 무엇인지, 이 문제와 연관된 제품의 도메인은 무엇인지 꼭꼭 잘 파악해 주시면 초반에는 시간이 오래 걸릴지 언정 전체적으로 보면 가장 빠른 길이 됩니다!

 

[트레이드 오프]
위에서 데드라인을 이야기했지만 어쨌든 향후 유지 보수를 위해서라면 적절한 퀄리티의 코드도 당연히 챙겨야 하며, 성능이나 인프라 & 인적 등의 비용적인 측면에서도 잘 생각해야 합니다.


이는 혼자 생각하기보다는 코드 리뷰, 토론 등 다양한 사람들과 의견을 충분히 나누면서 문제를 해결해 나가는 것을 권장합니다. 이런 맥락에서 커뮤니케이션 능력도 중요하다고 볼 수 있겠네요!

 

물론 그 외 탄탄한 CS 지식, 대용량 트래픽 처리 경험, 훌륭한 코드 설계 능력도 등도 중요하지만 지면상 실무하면서 느꼈던 중요 토픽을 뽑아봤습니다 ㅎㅎ

앗! '못하는 개발자'의 정의는 위 정의들의 역이라고 생각하시면 될 것 같네요~

 

Q. 멘티들에게 주로 강조하는 핵심 메시지는 무엇인가요?

저는 남보다는 어제의 나와 오늘의 나를 비교하고, 기본기를 충실히 쌓고, 하나를 하더라도 깊게 학습하도록 조언합니다.

 

남과 비교하다보면 정작 나의 특별함을 잃을 수 있고 남이 정답이 아닌데도 그 사람이 하는 방향으로 맹목적으로 따라가게 됩니다. 그보다는 나 자신을 믿고, 과거의 나에 비해 오늘의 나는 얼마나 성장했는지 하루 하루 회고 글을 쓰는 것을 더 추천합니다.

 

기본기는 워낙 강조해서 지겨우시겠지만 ㅎㅎ 특히 데이터베이스, 운영체제, 네트워크 같은 과목들을 잘 모르면 코딩으로 개발하는 것은 문제 없을지라도, 향후 서비스를 운영해서 장애가 발생했을 때 원인을 찾고 해결하기가 어려워집니다. 가령, 동시성 이슈가 발생했는데 운영체제의 스레드, 동기화 등의 개념을 모른다면 어떻게 해결할지 막막할 수 밖에 없습니다. 따라서 남는 시간을 충분히 활용하여 CS를 공부하시길 추천합니다.

 

깊이 있는 학습은 당연히 중요하겠지만, 정해진 시간 동안 여러 개의 기술을 찍먹하기보다는 하나를 하더라도 제대로 프로젝트에 적용해 보고 동작 원리도 틈틈히 보고 추가적인 성능 개선도 해 보시면 좋겠습니다. 많은 멘티 분들께서 `남들은 Kafka, MSA, k8s, DDD 등의 신기술을 하는데 저도 해야 하지 않나요?` 라는 질문을 합니다. 

 

저는 이들의 기술을 당연히 알면 좋겠지만 얕게 아는 것은 모르는 것과 크게 다르지 않다고 생각하며 Spring 하나를 하더라도, MySQL 하나를 하더라도 어떤 문제를 해결하기 위해 깊이 있는 고민을 통해 잘 썼는지가 더 중요하다고 생각합니다!

 

Q. ‘이 경험이 없었다면 지금의 나는 없었을 것이다’라고 생각하는 결정적 경험이 있나요?

사실상 저를 지금 이 자리에 있게 만든 가장 중요한 경험은 우아한테크코스 백엔드 3기 과정(통칭 우테코)이라고 볼 수 있을 것 같습니다!

 

고작 알고리즘 풀이밖에 할 줄 몰랐던 제가 우테코에 들어가서 찐하게 Java, OOP, Testing, Spring 등을 깊게 학습하고, 수많은 협업 경험을 쌓고, 특히 3개월간 강도 높게 팀 프로젝트 했던 것 등등… 잊을 수 없는 귀중한 경험들입니다. 이를 기반으로 훌륭한 사람들과의 인맥도 만들고 지금도 가끔씩 술 마시면서 인연을 이어가고 있네요~

 

우테코 덕분에 개발자로서 기본기를 잘 쌓을 수 있고 이를 기반으로 취업에도 잘 성공하여 좋은 개발자 커리어를 만들어가고 있으니 결정적 경험이라고 생각합니다.

 

Q. 비개발자와 잘 소통할 수 있는 팁이 있을까요?

비개발자 분들은 보통 제품을 디자인, 기획, 세일즈하시는 분들이 대다수일 것입니다. 예를 들어 기획 분이라면 제품의 새로운 기획을 추가할 때 우리에게 어떤 기능을 추가하려는데 개발적으로 괜찮을지 질문을 주십니다. 이때 여러 가지 이유로 개발이 불가할 수 있는데, 개발적인 용어를 남발하거나 단순히 안된다고만 하면 소통하기 어려워집니다..!

 

따라서 개발적인 용어는 최대한 배제하거나 풀어서 사용하고, 필요하다면 적극적으로 다이어그램을 그려서 시각적인 문서를 만드는 것을 추천합니다. 또한, 기술적 제약 사항에 대해 불가능하다고만 하기보다는 비개발자 분들이 이해할 수 있도록 비즈니스 관점(ex. 비용, 시간, 안전성) 등에서 이야기하거나 다른 대안을 제시하는 것이 좋습니다.

 

추가로, 우리는 제품을 더욱 고도화하는 사람들이므로 제품에 대한 이해도를 꼭 잘 쌓아놔야 비개발자 분들과 소통하기 더욱 수월합니다.

 

[나쁜 예시]
기획자: "사용자가 입력한 데이터를 실시간으로 모든 기기에서 동기화하고 싶습니다."
개발자: "WebSocket 구현이 필요한데, 현재 아키텍처에서는 scale-out이 어렵고 
      데이터 consistency 이슈가 있어서 불가능합니다."

 

[좋은 예시]
기획자: "사용자가 입력한 데이터를 실시간으로 모든 기기에서 동기화하고 싶습니다."
개발자: "실시간 동기화 기능을 구현하려면 현재 시스템에 큰 변화가 필요합니다. 
      마치 수만 명이 동시에 들어오는 채팅방을 만드는 것과 비슷한 작업이에요.
      
      대신 이런 방법은 어떨까요?
      1) 30초마다 자동으로 새로고침 되도록 구현
      2) 사용자가 '새로고침' 버튼을 눌러서 최신 데이터를 받아오는 방식
      
      이렇게 하면 2주 안에 안정적으로 개발이 가능하고, 
      서버 비용도 현재의 2배 이상 증가하지 않을 것 같습니다."

 


 

깊이 있는 인사이트와 현실적인 조언이 담긴 멘토님들의 인터뷰와 커리어 성장 콘텐츠가 데브클럽에서 정기적으로 업데이트되고 있습니다.

실력 있는 현직 개발자 멘토들과 직접 소통하고, 생생한 실무 노하우와 커리어 성장 전략을 배워보세요!

 

👉 데브클럽 평생 990원으로 참여하기

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Python Backend

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    Frontend

    기술과 브라우저를 Deep-Dive 하며 성능과 아키텍처, UX에 능한 개발자로 성장하는 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능 튜닝 능력을 향상시키는 안드로이드 Deep-Dive 과정

  • 코스 이미지
    Flutter

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    React Native

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    Devops

    대규모 서비스를 지탱할 수 있는 데브옵스 엔지니어로 성장하는 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2025