과학기술정보통신부에서 주최하는 디지털 청년고민해결단 온라인멘토링에 참여하여 인프런 CTO 이동욱 님 (a.k.a. 향로님) 과의 멘토링을 진행하게 되었다. 이번 멘토링을 통해 얻은 정보와 교훈, 그리고 앞으로의 다짐 등을 정리해보았다.
0. 지원 계기
예전에 한번 학과 홈페이지의 공지사항에 올라오는 여러 게시물 중 정말 해보고싶은 활동이 있었는데 지원 마감일 이후에 글을 확인하여 너무나 아쉽게 기회를 놓친 기억이 있었다. 깊이 탄식하고,, 그 이후로 하루에 꼭 한 번은 사업단 공지를 확인하는 습관이 생겼다. 이번 청년고민해결단 멘토링도 그렇게 매일 확인하던 학과 공지사항에서 발견하게 되었다.
사실 몇 달전까지만 해도 대학원 준비를 하고 있었고 서버 개발자로 진로를 정하게 된 건 정말 최근의 일이라 아직 서버 개발자가 정확히 어떤 일을 하는 직무인지, 어떤 기술을 공부해야 하는지 등 정보가 많이 부족했고 머릿속에 취업을 위한 로드맵을 이제 막 그려나가고 있던 참이었다. 때문에 멘토링을 통해 본격적으로 공부를 해나가기 전에 방향을 좀 잡아보고 싶다는 생각이 많이 들었고 결과적으로는 많은 도움과 자극을 받을 수 있었다.
멘토링을 신청할 때 멘토를 1, 2, 3지망까지 지정하여 신청할 수 있는데 운이 좋게도 1지망으로 신청했던 이동욱 님으로 멘토 배정이 되었다. 이동욱 님은 현재 인프런을 운영하는 인프랩의 CTO이신데 그동안 유튜브나 블로그 등에서 이동욱님의 공부 습관이나 태도, 생각 등을 많이 접하고 배워서 본받고 싶다는 생각을 갖고 있었기에 큰 기대를 안고 멘토링에 참여하게 되었다. 다른 멘티분들도 비슷한 생각으로 이동욱 님을 멘토로 신청하신 것 같았고 그래서 그런지 처음 만났을 때는 분위기가 약간 팬미팅 같았다🤣
1. 나의 질문들
멘토링 시작 전에 사전 질문을 적어내는 란이 있었는데 마치 무언가 공부할 때 그 내용에 대해 너무 모르면 어떤 질문을 해야 할지도 잘 모르는 그런 상황처럼 앞서 쓴 내용처럼 내가 아직 서버 개발자가 뭔지를 잘 모르고 공부한 내용이 너무 없으니 어떤 질문을 해야 할지도 잘 모르겠는 상태구나 하는 걸 깨달았다. (일단 여기서 내가 너무 안일하게 생각하고 있었구나를 느끼고 현타가 많이 왔다.) 그래도 평소에 느끼고 있었던 막연함이나 답답함 같은 것들을 질문에 담아보려고 노력했다. 내가 사전 작성한 질문은 아래와 같다.
- 신입에게 가장 중요한 역량이 무엇이라고 생각하시는지?
- CS 지식이 취업과 업무에서 각각 어느 정도로 도움이 되는지?
- 신입에게 요구되는 서버 개발 관련 직무 능력이 어느정도라고 생각하시는지?
- 학부 시절로 돌아간다면 중요시 여길 것들?
그 외에도 멘토링 진행 전, 진행 중에 떠오른 질문들과 내가 직접 질문하진 않았지만 다른 멘티분들의 질문을 통해 답을 함께 찾을 수 있었던 질문들은 아래와 같다.
- '문제 해결 능력'이라는게 정확히 어떤 것들을 의미하는지
+ 신입 개발자가 문제 해결 능력을 보여줄 수 있는 방법 - 공부할 내용이 많다보니 배워도 계속 까먹는데 이런 것들을 어떻게 해결하셨는지
- 성장하기 위해 가졌던 습관 혹은 만들었던 시스템들
- 취업이 가능한 상태가 되기 위해서는 어느 정도의 성취도를 목표로 잡고 공부해야 하는지
- 흔한 프로젝트 경험에 경쟁력을 부여하는 방법
멘토링을 통해 위의 질문들 대부분에 대한 멘토님의 생각을 들을 수 있었다. 아래에 멘토님 답변 내용을 질문 순서와 무관하게 중요하다고 생각되는 것 순서로 정리해보았다.
2. 멘토링 내용
2-1. 신입에게 가장 중요한 역량
- 가장 중요한 것은 나만의 학습 방법이 갖춰져 있는가? 이다.
- 기술적인 부분도 물론 중요하지만 단순히 먼저 배워서 잘하는 것보다는 얼마나 빨리 자기의 것으로 만드는가 하는 능력이 중요하다.
- 가령 오류가 발생했을 때 단순 복붙으로 오류를 수정하고 덮는다면 시니어로 성장했을 때 문제 해결 능력이 떨어지는 문제가 생길 수 있다.
- 새로운 것을 배우거나 문제를 해결했을 때 그것을 더 좋은 자신의 것으로 만들어낼 수 있는 방법을 가지고 있는 사람이 성장 가능성이 크고 기업에서는 그런 인재를 원한다.
헬스에서 코어 근육을 키우는 것처럼, 본인만의 학습 방법을 먼저 만드시는 걸 우선하세요.
그리고 그 코어 근육을 이용해 어느 공부든 시작만 하시면 돼요.
(https://jojoldu.tistory.com/439?category=689637)
- 이동욱 님의 경우
- 처음에는 책 보고 직접 따라 만들어보기
- 따라 만들어보는 것에 깊이가 부족하다고 느낀 이후로는 스터디 참여
- 스터디에서 남이 발표하는 것을 듣기만 하니 실력이 늘지 않아 직접 강의하는 방법으로 스터디 방식을 바꿈
- 이러한 스터디는 효율성이 떨어진다고 느낌 (발표 자료 준비 시간 등)
- 이때부터 public 한 블로그를 시작함. 남들이 보는 블로그이기 때문에 발표 자료 준비할 때만큼 학습하고 공부할 것이며 다른 사람에게 계속해서 전달될 수 있다는 장점.
2-2 성장 가능성을 표현하는 방법
- https://d2.naver.com/news/3435170 댓글 중 발췌 및 요약
- 신입 기준으로는 당장 쓸 구체적인 응용 기술을 아는 것도 당연히 선택을 받는데 도움이 된다.
(실무자들이 면접을 볼 때 같이 나눌 수 있는 이야기가 많아지기 때문) - 단, 경험이 있어도 그 기술에 대해 자세히 설명할 수 없다면 오히려 경험 안 했다고 이야기하는 것보다 더 부정적인 영향을 미칠 수도 있다.
- 반면 잠깐 써보고 아직 깊이 모르는 기술이라도 구체적인 이야기를 체계적으로 할 수 있다면 더 긍정적인 요인이 된다.
- 예를 들어, MyBatis를 썼는데 어떤 상황이 어려웠고, 알고 보니 MyBatis의 어떤 특성 때문이었고, 이를 어떻게 해결했는지 등에 대한 구체적인 이야기를 하는 사람이면, '이 사람은 쓰는 기술에 대해서 제대로 파악을 하려고 했구나'를 느낄 수 있다.
- 그런 사람이면 MyBatis를 안 쓰고 JPA를 쓰는 프로젝트에라도 바로 적응할 수 있겠구나 하는 느낌을 준다.
- 지원자 입장에서는 성장 가능성을 표현하는 방법은 여러 가지 일 것.
- 위와 같이 실무에서 쓰는 이미 잘 알고 있고, 그걸 학습해온 과정을 설명하는 것도 하나의 방법.
- 학교에서 한 팀 프로젝트라도 남 다르게 한 면이 있다면 실무 기술을 잘 몰라도 충분히 앞으로 성장 가능성을 보여줄 수 있다고 생각한다.
- 코딩 테스트에서 문제를 센스 있게 파악한다던지, 유창하고 거침없이 코딩을 할 수 있는 것도 자신을 잘 드러낼 수 있는 방법이다.
- 신입 기준으로는 당장 쓸 구체적인 응용 기술을 아는 것도 당연히 선택을 받는데 도움이 된다.
글을 쓰다 보니 ‘신입 개발자로 지원할 때는 자신이 앞으로 빠른 속도로 발전할 수 있다는 가능성을 보여주는 것이 중요한데 실무에서 쓰는 기술을 일부 아는 것은 그 방법 중의 하나이다. 그러나 유일한 방법은 아니다.’ 정도로 제 생각은 정리가 되네요.
- 아래와 같은 질문들에 대한 대답을 생각하면서 프로젝트를 수행하고 공부를 할 것.
- 즉, 진짜 그 해답이 좋은 해답이 맞는지 깊이 파볼 수 있는 인재가 될 것.
- 그게 왜 문제였어요?
- 그게 그 문제인지는 어떻게 확인했어요?
- 그게 좋은 해결책이라는 것을 어떻게 판단했나요?
2-3. 기록 및 회고
- 개발 및 공부한 내용을 어디에든지 기록하는 게 당연시되어야 한다.
- 만드는데 절반, 정리하는데 절반의 시간을 할애할 것.
- 매일매일 투두 리스트를 정해놓고(오늘은 어떤 기능을 구현하고 어떤 내용을 공부하겠다) 회고를 진행하라.
- 회고 시 활용 가능한 기법 - 3fs 기법 (Fact, Feeling, Finding)
- Fact - 어떤 일을 했는지
- Feeling - 어떤 느낌이 들었는지
- Finding - 어떤 교훈을 얻었는지
감이 안 오는 분을 위해 한 가지 팁을 알려드리겠습니다. 개인적으로 3Fs를 적용하는 간단한 방법은, 불 끄고 잠자리에 누은 채로 머릿속으로 오늘 하루의 3Fs를 생각해 보는 겁니다. 오늘 내가 뭘 했더라? 어떤 느낌이었지? 어떤 교훈을 얻었나?
(http://egloos.zum.com/agile/v/4122099)
2-4. 학부 시절로 돌아간다면 중요시 여길 것들
- 신입 개발자가 갖추었으면 하는 것은 사냥개와 같은 집요함
- 이 문제는 내가 아니면 해결할 사람이 없다, 내가 어떻게든 해결할 것이다.
- 이게 가장 좋은 방법인가? 더 좋은 방법은 없을까?
- 와 같은 고민을 계속해서 하는 마음가짐이 중요하다.
- '자바랑 스프링 다 땠는데(?) 다음은 뭘 공부하면 될까요?' -> 이는 잘못된 생각
- 내가 쓰는 도구의 디버깅 방법이 뭔지 익히기
- 출력해서 보는 것 만이 디버깅의 전부가 아니다.
- 웹 서버, 클라우드 사용 시에는 이에 대한 로그가 어떻게 찍히는지 등 무시하고 넘어가기 쉬운 부분들을 깊게 파보고 오류가 발생했을 때 해결 능력을 기르기.
- 일을 함에 있어 만드는 것 반, 오류 해결하는 것 반이므로 오류를 추적하여 해결하는 방법을 익히는 것은 생산성 및 결과의 품질을 높이는데 도움이 된다.
- 이러한 면에서도 Test Case는 중요하다.
- https://jojoldu.tistory.com/363 (1년 차 백엔드 개발자가 된다면 집중할 것들) 내용 요약
- 1. 격리된 테스트 환경 구축 반복 연습
- 모든 코드와 환경을 걷어내고 딱 그 문제 상황만 재현해보아야 진짜 문제가 무엇인지 알 수 있다.
- 2. 사용하는 시스템의 디버깅 방법 익혀두기
- 만드는 것보다 중요한 것은 사용하는 시스템의 문제를 해결하는 능력이라고 생각
- 예를 들어, 애플리케이션 코드에 문제가 있으면 테스트 코드로 문제 상황 재연 후 IDE의 디버깅 모드로 문제를 확인.
- Ngnix와 같은 데몬들에 문제가 있다면 각 데몬들의 로그들을 grep 명령으로 확인.
2-5. 혼자 공부하는 시간이 길면 안 된다
- 무조건 커뮤니티에 속하거나 커뮤니티를 만들어 남들과 함께 공부해야 한다.
- 모각코, 슬랙 커뮤니티 등등
- 어떻게든 혼자 공부하지 않으려는 노력이 필요함
- 혼자만의 세상에 빠질 수 있고
- 틀린 것을 맞다고 착각하고 계속 잘못된 방향으로 공부하는 오류가 생길 수 있다.
2-6. 지원은 언제 하면 좋은가?
- 내가 충분히 준비가 되었을 때 비로소 지원하겠다는 생각보다는 먼저 계속 공부하면서 지원해보는 것이 좋다.
- 개발 실력은 자격증과 같은 개념이 아니기 때문
- 공부하고 계속 시험 치고, 공부하고 계속 시험 치고 하는 방식으로 도전하기
- 이러한 경험을 통해 내가 어떤 것이 부족한지 객관적으로 평가받을 수 있다.
- 취업을 위해서는 달리면서 주변 좌우를 살펴보아야 한다.
- 가만히 서있지 않는다! 가 중요하다. 자칫 생산적이지 못한 공부를 하게 될 수도 있다.
- 지금 바로 지원해야 하는 또 다른 이유는
- 면접까지만 가게 되면 무조건 업계에서 인정받는 훌륭한 시니어와 대화를 나눌 수 있는 기회를 얻는 것이기 때문
- 회사에 합격한 이후에서 6개월에 한 번씩 회사에 지원해보는 것이 좋다.
- 업계의 동향을 확인하고 시니어에게 조언을 구하는 방법이기 때문
2-7. 인프라, FE, RDB 등 관련 지식의 필요성
- 어디서 어디까지 범위를 정해놓고 공부하기는 쉽지 않다.
- 다만, 최소한 혼자서 프로젝트 하나를 배포해보는 전체 사이클을 경험은 해볼 필요가 있음.
- 모든 문제를 자바 & 스프링으로 해결하려고 하는 사람을 선호하진 않음.
- 인턴 경험이 중요한 진짜 이유 중 하나도 회사에서 경험한 막히는 부분들을 해결하고 자신의 것으로 만드는 과정이 중요하기 때문.
(이러한 과정을 학습하며 문제 해결 능력을 기를 수 있다.) - 문제를 만나면 해결하고, 또 다른 문제를 만나면 또 해결하고 이러한 방법으로 공부해나가는 것을 추천함.
- 신입 백엔드 개발자에게는 프론트엔드에 대한 지식은 필수적이라고 생각한다.
- 여기서 필수적이라는 이유는 내가 내려준 데이터를 FE에서 어떻게 사용하는가?를 알아야 하기 때문
- 리액트 또는 뷰 등을 통해 간단하게 화면을 만들어보고 싶다.라고 생각할 때 후딱 만들어볼 수 있는 정도로는 알아야 한다.
- 혹은 API가 변경이 되어야 할 때 동시 배포를 어떻게 해결할까? 등에 대한 고민을 해야 하므로 FE에 대한 전반적인 지식은 필요함.
- 추가로 회사의 규모가 작으면 백엔드만 하지 않고, 규모가 커도 간단한 통계, 대시보드 페이지 등 본인들이 필요한 팀 내부의 간단한 서비스는 직접 만들기 때문에 FE에 대한 어느 정도의 지식은 분명히 필요하다.
2-8. CS 지식이 어느 정도로 필요한지? 도움이 되는지?
- 이는 회사마다 다름.
- 예를 들어 네카라의 경우 많이 물어보며
- 알고리즘이 실제 필요한 영역에서만 알고리즘을 요구하면 되므로 배민, 토스 등의 경우 그렇게 까지 깊게 물어보지는 않는다.
- OS의 경우 범위가 넓다.
- 단순히 리눅스 OS에 대한 이해도가 높아야 하는가? 하면 그건 맞음.
- 이는 결국 서비스를 배포하는 환경이 거의 대부분 리눅스이기 때문.
- 단순하게 로그 조회, 파일 수정 등의 작업에서부터 cpu 및 메모리 각각의 점유율 차이를 확인하는 등 CLI에서 뭔가 작업하게 될 상황이 많이 있을 텐데 이러한 상황에서 얼면 안 됨.
- CLI 환경에 익숙해질 수 있도록 환경을 구축하여 연습하는 것이 필요하다.
+ 자주 사용하는 쉘 명령어 알아두기
+ 스크립트 문법 및 실행 방법 알아두기
- 입사 후에는 DevOps 등 특정 분야로 가지 않는다면 큰 도움은 안 된다고 생각한다.
- 그보다는 클린 코드, 리팩토링, TDD, 디자인 패턴 등에 대한 지식이 현업에서는 더 중요하다.
- 단, 네트워크라고 하면 서버 개발을 위한 기본적인 지식, 예를 들어 200, 300번대 응답 코드의 차이, 세션과 쿠키의 차이점, HTML 헤더 & 바디의 차이 및 구성 등에 대해서는 알아둘 필요가 있다.
3. 책 추천
- 애플리케이션 개발 - 클린 코드, 테스트 주도 개발, 리팩터링, 오브젝트 : 코드로 이해하는 객체 지향 설계
- 네트워크 - 그림으로 배우는 HTTP & Network, 웹을 지탱하는 기술(절판)
- DevOps, 인프라 - 리눅스 커널 이야기, 가상 면접 사례로 배우는 대규모 시스템 설계 기초, DevOps 도입하기(위키)
4. 후기
전반적으로 멘토링 이전에 흐릿하게 그려왔던 목표나 계획들이 좀 더 뚜렷해지는 경험이었다. 공부를 하고 있으면서도 내가 잘하고 있는 건지 확신이 없어 막연하게만 느껴졌던 부분들도 좀 명확하게 정리가 되었다.
나의 평소 공부 습관이나 코드 작성 습관 등에 대해서도 고민해볼 수 있는 계기가 되었다. 지금껏 전공 공부를 할 때 나는 pdf 교재가 있어도 무조건 종이로 된 교재를 구입하여 책의 논리를 따라서 다시 한번 내용을 익히는 방법으로 주로 공부했었다. 그동안 이런 방법으로 공부를 하면서 나에게 맞지 않는 공부 방법은 아니라고 생각했지만 최적의 공부법은 아니라고 생각해왔었다. 게다가 그동안은 대학원 진학을 목표로 하고 있었으므로 좋은 성적을 받는 것을 최우선 목표로 삼고 공부를 해왔던 반면 이제는 정해진 범위 내에서 시험만을 목표로 공부하는 것이 아니라 보다 넓은 범위의 내용을 공부해야 하고 최종 목적이 점수를 잘 받는 것이 아니기 때문에 어쨌거나 여러 가지 공부법을 두루두루 시도해보고 변화를 줘보고 싶다는 생각이 들었다.
코드를 작성할 때도 나는 지금까지 우선 덮어놓고 작동이 되는 코드를 작성한 후 동작되는 게 확인되면 그대로 만족하고 제출해버렸었다. 4학년이 될 때까지 테스트 코드나 좋은 코드를 작성하려는 노력을 하지 않았던 게 부끄러웠다. 좋은 코드란 무엇인지 공부하고 좋은 코드를 작성하려는 노력을 해야겠다는 다짐을 할 수 있었다. 이를 위해 당장 실천할 것으로는 스프링 및 자바에 대한 공부와 병행하여 마틴 파울러의 '리팩토링' 책을 잘 이해가 되지 않아도 한 번 읽고 내용을 정리해봐야겠다는 생각을 했다.
회고 관련해서도 내가 뭘 했고 그걸 통해 어떤 것들을 배웠는지 매일매일 기록한다면 이력서를 쓸 때나 동기부여가 필요할 때 좋은 자원이 될 것 같아서 꾸준히 써 봐야겠다는 다짐을 했다. 이를 실천하기 위한 플랫폼이나 방법에 대해 고민하는 중이다.
2시간의 짧은 멘토링이었지만 큰 자극을 받을 수 있었다. 이러한 자극에서 멈추지 않고 계획을 잘 세우고 꾸준히 노력하면서 좋은 개발자가 되어야겠다는 다짐을 하게 되었다. 단 기간 빡세게 공부하고 짜게 식어버리기보다는 하루라도 빠지지 않고 조금씩이라도 매일매일 꾸준히 멈추지 않고 공부하려는 노력을 할 것이다!
'기록 > 후기, 회고' 카테고리의 다른 글
인프콘 2023 후기 (0) | 2023.08.31 |
---|---|
NEXTSTEP TDD, 클린 코드 with Java 피드백 정리 및 후기 (0) | 2023.01.22 |
2022 회고 (0) | 2023.01.21 |
GDG Daegu - devfest 2022 후기 (0) | 2023.01.21 |
쎄트렉아이 인턴 후기 (1) | 2022.12.07 |
백엔드 개발을 공부하고 있습니다.