Q.1
Q. 동욱님이 지금의 생각으로 1년차 백엔드 개발자가 되신다면 어떤 것들에 더 집중하실 것인지 궁금합니다.
A. 음… 이건 조금 생각해봐야할것 같은데..
1년차라면 올해 개발자를 시작하신 분들을 말씀하시는거겠죠?
신입 개발자라면 어떤걸 하는게 좋을까로 생각하고 말씀드릴게요 :)
앞선 답변에서 주니어 개발자가 갖췄으면 하는 마인드로 사냥개와 같은 집요함을 언급했는데요.
(참고: 오늘의 질문 2018.12.16)
이것 외에 기술적으로 필요하다면 저는 2가지를 연습할것 같아요.
격리된 테스트 환경 구축 반복과 사용하는 시스템의 디버깅 방법입니다.
첫번째는 격리된 테스트 환경을 구축하는 연습을 하는 것이에요.
회사에서는 이미 프로젝트 세팅이 다 되어있다보니 제대로 격리된 문제 상황을 만들기가 어렵습니다.
즉, A라는 문제를 만나 B라는 방법으로 해결했지만 실제로는 정확한 해결방법은 C일수도, 문제 자체가 A가 아니라 F일수도 있습니다.
전혀 다른 문제였던거죠.
모든 코드와 환경을 걷어내고, 딱 그 문제상황만 재현해봐야 진짜 문제가 무엇인지 알 수 있습니다.
더군다나 회사의 코드는 외부에 공개할 수도 없죠^^;
실제로 저 같은 경우 Spring 카테고리나, DevOps 카테고리에 있는 글 들은 모두 백지에서 처음부터 테스트 환경을 구축하면서 작성한 글들입니다.
그냥 모든 글은 할때마다 AWS에 새 서버 받아서 설정 처음부터 다 하고, IntelliJ로 프로젝트 새로 생성해서 진행했어요.
그래야 진짜 그 문제가, 그 기능이 제대로 작동하는지 확인할 수 있거든요.
그래서 첫번째로 연습할 것은 회사의 코드가 아닌, 나만의 코드로 문제 상황을 재연해보는 연습입니다.
두번째는 사용하는 시스템의 디버깅 방법을 익히는 것입니다.
저는 개인적으로 SI가 아닌 서비스 회사에서 일하고 있다면 만드는 것 보다 중요한게 사용하는 시스템의 문제를 해결 하는 능력이라고 생각해요.
주변을 보면 특히 Java 개발자들이 타 언어 개발자분들에 비해서 이런 능력이 조금 더 떨어지는 것 같다고 생각을 계속 해왔습니다.
스터디를 참가해보면 항상 만드는 방법에 대해서만 관심이 있으신것 같았거든요.
디자인패턴/스프링 스터디에서 이클립스의 디버깅도 못쓰시는걸 보고 진짜 당황했던적이 있었습니다.
대부분이 Java로 어플리케이션만 개발해서 그런건가 싶기도 해서 더더욱 이 능력을 의도적으로 연습하고 실습해봐야 한다고 생각합니다.
그럼 여기서 얘기하는 시스템의 문제 해결 능력은 구체적으로 어떤걸 얘기할까요?
저는 아래와 같은 경우라고 생각합니다.
- 어플리케이션 코드에 문제가 있다 => IDE의 디버깅 모드로 문제를 확인한다.
- 테스트 코드로 상황 재연후, 수정하면 더더욱 좋음
- DB의 쿼리가 느리다 => 실행 계획을 확인해서 쿼리의 어느 부분이 인덱스를 타지 않고, 성능 저하를 일으키는지 확인할 수 있다.
- Nginx와 같은 데몬들에 문제가 있다 => 각 데몬들의 로그들을
grep
으로 확인한다 - 웹 브라우저에서 어떻게 데이터를 보내는지 알고 싶다 => 브라우저의 개발자 도구로 디버깅
이런 방법들을 제대로 익혀두지 않으면 문제 해결을 못하는 경우가 많더라구요.
저는 3번째 회사까지 오면서 아래와 같은 경우를 정말 많이 봤습니다.
- 브라우저의 개발자 도구를 몰라
alert
으로 디버깅 - IDE의 디버깅 모드를 몰라
System.out.println
으로 디버깅 - 실행계획을 몰라 그냥 데이터의 양이 많다로 치부
- 데몬의 로그 위치를 몰라 그냥
service restart
저도 이랬던 적이 있다보니 이게 얼마나 답답한지 알게되었죠.
그래서 저는 신입 개발자분들이 자꾸 특정 언어의 문법, 프레임워크의 사용법, 게시판 만들기 이런 내용에 집중하시는 것보다 어떻게 디버깅 할것인지에 좀 더 많은 공부를 하시면 좋을것 같아요.
만약 제가 이 기억을 가진채 1년차 개발자가 되어도 똑같이 할거라서요 ^^;