너는 어떤 생각을 가지고 코딩해?
친구의 물음이었다.
친구도 이번에 이직을 한 프론트엔드 개발자이다. 나에게 이직안하니~?를 꾸준히 물어보는 친구.
이제 나도 3년차가 다 되어가서 이직을 고려하고 있는 중이긴하다.
질문이 복합적이고 포괄적이라는 생각이 들어 약간 당혹스러웠지만, 차분히 생각을 해봤다.
코딩의 의미
"코딩한다"라는 의미에는 많은 뜻이 포함되어 있다.
일반인들의 입장에서는 "코드를 타이핑하거나 프로그램을 개발한다" 정도로 인식될 것이고,
나의 입장, 프론트엔드 개발자의 입장에서는 여러 의미를 함축한다
1. 구현 (Implementation)
일반적으로 상상하게 되는 구현 레벨이다. 컴포넌트를 제작하거나, api를 연동, UI 상태 처리, 이벤트 핸들링, 폼 처리, 유틸리티 구현 등이 될 것 같다.
2. 설계 (Architecture)
깊이(Depth)가 깊어질 수록 폴더 구조 설계, 상태 관리 구조 결정, 컴포넌트 분리 및 공통화 등이 중요해진다. 협업 시 특히, 많은 약속이 되어야 하는 부분이고 매끄러운 내부 환경을 조성하기 위해 중요한 부분이라 생각한다. 개발은 특히, 점점 시간이 갈 수록 같은 일이 최소화되어야 하고 자동화되어야 하기에 확장 가능성 있는 설계가 아주 중요하다고 생각한다.
3. 최적화(Optimization)
상태 구조를 최적화 해서 리렌더링 이슈를 만들지 않고, 공통화 레벨을 결정하고 최대한 재사용 가능한 컴포넌트와 유틸들을 공유하는 것. 사용자 경험을 최대화하기 위해 성능을 끌어올리는 것. 이는 지속적인 것으로 프로젝트에 변경사항이 있을 때마다 최적화는 끝없이 고려되어야 하는 부분이라고 생각한다.
4. 디버깅(Debugging)
API를 연동하면서 발생하는 여러 네트워크 이슈, 지정된 타입들과 다른 예외 상황들에 대한 처리, 에러들을 처리하기 위한 확장성있는 타입 정의 등 디버깅은 개발 도중이든 유지/보수 시기이든 지속적으로 이루어진다. 즉, 디버깅은 문제 해결 능력과 연결되는 기본적인 부분들이다.
5. Commit, PR & Review
이 부분이 실무에서 정말 중요한 부분이라고 생각한다. 인사팀, 영업팀, 관리팀에게 문서를 주고 받고 체계화하는 툴이 있다면 개발자들에겐 코드를 잘 문서화해서 전달해야 한다. Commit, Pull Request, Issue 등 모든 카테고리는 약속이 이루어져야 하며, 해당 약속들의 큰 틀은 비슷하겠지만 회사별, 프로젝트별 디테일이 나뉘게 된다. 얼마나 잘 약속이 되어있느냐에 따라 일의 진행속도는 천차만별일 것이다. 커뮤니케이션이 좋은 개발자들은 약속을 잘 이행하고 개선하고 활용한다.
나는 어떤 생각으로 코딩을 하는 지
나는 위 내용들을 Core Value로 두고 코딩을 한다.
팀원들의 성향에 따라 맞춰나가고자 하는 수준이 다르지만, 내가 필요하다고 생각하면 상대를 설득할 수 있어야 하고, 상대의 업무에 부담을 주면 안되기에 추가적인 사항이 생기면 최대한 간단한 방식으로 최대의 효율을 낼 수 있는 방법을 찾곤 한다. 개발뿐만 아니라 다른 영역들도 마찬가지라고 생각한다.
Anyway, 질문이 세부적일 수록 더 좋다고 생각하지만, 오랜만에 저렇게 질문해준 친구가 있어 고민할 수 있는 시간이 있어서 좋았다. 친구야 감사!

(그런데 대답은 약간 얼렁뚱땅...?)