[개발] 1년차 개발자가 공부하는 방법

Stark Studio
Cross-Platform Korea
9 min readDec 5, 2020

한 해를 마무리 하며, “벌써 개발자가 된지 1년이라는 시간이 지났구나” 하는 생각이 들었다. 작년에 워킹홀리데이를 끝내고 다시 돌아와 10월 쯤 취업을 한 후 직업으로 개발을 한지 약 1년이 되었다.

지난 1년을 돌아보니 다양한 경험을 많이 했던 것 같다. SOUNDGYM이라는 서비스를 1년 동안 개발 및 운영해보고, Stack Overflow 점수도 올려보고, React를 직접 하나씩 분석하며 글도 썼다. 처음으로 컨퍼런스(2019 Naver Deview)를 가서 좋은 기술과 문화에 대해 알게된 기회도 얻었다.

호주에서 개발을 시작하다보니 주변에 아는 개발자가 없었는데, 개발자 모임도 나가고, 사이드 프로젝트를 하다보니 이제 주변에 아는 개발자가 조금 생겼다.

개발 공부를 한 노트
[그림01] 최근에 동료 분이 추천해주신 <아는만큼 보이는 데이터베이스 설계와 구축> 을 읽으며 정리 중이다.

개인적으로 6개월 마다 “내 실력이 늘고 있는 것이 맞는가?” 하는 불안과 함께 우울하거나, 슬럼프가 왔는데 이 시간은 그냥 버티다 보면 지나간다는 것을 알게 되었다. 인스타그램에서 우연히 다음 글을 보았는데 많은 도움이 됐다.

하기 싫어도 해라, 감정은 사라지고 결과는 남는다.

최근에 퇴사를 하고 계획했던 대로 아는 동생과 창업을 준비하고 있다. 창업을 준비하며, 동생이 개발을 공부하며 자신의 한계에 스트레스를 받는 것을 알게 되었다.

이 글은 그 동생을 위한 글으로, 내 1년의 생각을 정리하는 글이다. 이 글을 통해 “내가 잘 하고 있는 것이 맞나?”라는 의문이 드는 사람들이 용기를 얻길 바란다. 불안함을 절대량으로 이겨내자.

1년차 개발자가 공부하는 방법

1년이 지나며 내가 개발을 접하는 방식을 돌아보았다. 새로운 지식을 배운다는 것은 항상 어려운 것 같다. 최근에 Nest.js를 통해 팀 블로그 서버를 직접 만들어보고 있는 중인데, 새로운 것을 배우면 다음과 같은 생각이 매번 든다.

내가 잘 하고 있는게 맞나? 이 방법이 올바른 방법인가?

처음 개발을 시작했을 때 부터 지금까지 새로운 기술을 배울 때 마다 매번 이런 생각이 드는데, 선배 개발자들과 이야기를 해도 같은 고민을 한다는 것을 알 수 있었다.

아무래도 소프트웨어라는 것이 명확한 정답이 없고 각자의 요구사항에 맞춰 변화해야하는 것이다 보니 확실히 다른 분야에 비해 정답이 맞는지에 대한 고민을 많이하게 되는 것 같다.

정답을 확신할 수 없는 상황에서 지난 1년간 여러 기능을 만들어보며 새로운 기술을 좀 더 빠르게 습득하는 방법이 없을까 고민했다. 이런 고민을 통해 1년간 나는 어떻게 공부 했는가를 정리해 보려 한다.

시작은 컨셉을 이해하는 것 부터

프로그램, 프레임워크, 라이브러리 소프트웨어와 연관된 무엇이든 사람이 만든 것이다. 결국 그 사람의 사고가 녹아있다.

하나의 프로그램이나 프레임워크를 새로 배울 때, 나는 그것이 한 사람을 이해하는 것이라 생각한다. 이를 통틀어 하나의 소프트웨어라고 표현을 하겠다.

하나의 소프트웨어에는 반드시 특정 컨셉이 있다. 즉, 하나의 소프트웨어를 다루면 그 소프트웨어가 탄생한 배경, 기존의 어떤 아이디어에서 영감을 얻었는가에 대한 생각이 존재한다.

새로운 기술을 배울 때 이 부분이 공감이 되지 않으면 그 기술을 써도, 왜 이렇게 쓸 수 밖에 없을까 하는 의문이 든다. 이 생각은 보통 내가 이 기술을 잘 쓰고 있는지에 대한 불안함으로 번지는 경우가 많다.

공항에서 개발 공부
[그림02] 내가 이 기술을 잘 쓰고 있는가 고민이 들면 각 기술에 대한 관점을 배울 수 있는 고전을 읽게 된다.

나는 그래서 이 부분이 공감이 될 때까지 유튜브나 다양한 글 들을 읽어본다. “이 소프트웨어를 왜 만들었을까?”, “어떤 컨셉을 가지고 만들었을까?”를 고민하다 보면 소프트웨어를 만드는 사람들이 무엇을 중요시하고, 어떤 관점을 가지고 개발을 하는지 배울 수 있다.

이런 지식들이 차곡차곡 쌓이며 해당 기술을 이용해 무엇을 할 수 있는지 혹은 비슷한 역할을 하는 기술이 무엇이 있는지를 알게 되었고 실제로 그 기술을 쓸 때 구현체들에 대해 더 빠르게 이해할 수 있었다.

구현체와 컨셉을 구분해 생각하자. 소프트웨어는 사고의 영역이기에 어떤 일을 하기 위한 다양한 아이디어가 나올 수 있고 이를 기능, 즉 코드로 구현한 것이 구현체이다.

실제로 써보고 사람들이랑 이야기 하기

개인적으로 공자의 학이시습지 공부법을 좋아한다. 즉, 컨셉을 이해했으면 실제로 간단한 동작을 구현해 보는 것이다. 대부분 기술은 그에 맞는 기본적인 예시가 있기에 이를 따라서 만들어 보는 편이다.

컨셉을 이해하고 그 기술을 써볼 때 그 기술을 너무 세세하게 알려고 하지 않는다. 새로운 기술은 최대한 얇게 아는 것에서 부터 시작하는 것이 좋다고 생각하는데, 그래야지 포기하지 않고 배울 수 있다.

다만, 기술을 실제로 써보는 것으로 끝내지 않는다. 해당 기술을 다루며 느꼈던 생각이나 궁금했던 점을 사람들과 함께 논의해보고 다양한 의견을 주고 받는다.

Nestjs 코드
[그림03] 최근에 Nest.js를 통해 팀 소개 블로그 서버를 만들어 보고 있는데, Spring을 배울 걸 하고 후회한다.

사람들마다 하나의 소프트웨어를 다루며 하는 생각이 다양하다. 내가 배우고 있는 소프트웨어의 색다른 장점을 알려줄 수도 있고, 나에게 도움이 되는 조언을 더 해주는 것 같다.

이런 환경에서 개발을 오래 하셨던 선배 개발자 분들의 노하우나 경험담을 들 을 수 있는 것에 항상 감사한다. 확실히 개발을 하며 기술에 대한 고민보다 노하우에 대한 고민이 들 때가 더 힘들다고 느끼는 것 같다.

이렇게 사람들과 얘기를 할 때 나는 내가 하는 말이 개연성있는 말인지에 대해 항상 경계한다. 처음에는 지식의 틀이 잡혀 있지 않아 질문이나 내가 하는 말이 이치에 맞지 않았을 것이다.

나는 지식에 대한 엉뚱한 생각을 자주한다. 이렇게 해도 되지 않을까? 저렇게 해도 되지 않을까? 하는 자유로운 생각을 사람들이랑 이야기 하다보면

하지만, 사람들이 해주는 조언이나 반박을 통해 내 생각의 틀을 쌓아가다 보면 이치에 맞지 않은 말이나 질문이 점점 발전하는 것을 알게된다. 나는 이런 것을 단을 맞춰간다고 표현하는데, 이렇게 단을 맞추다 보면 지식의 틀이 생기게 된다.

끝나고 난 뒤 문서화

해당 기술에 대해 배우고 나면 반드시 문서화를 하는 편이다. 추후에 지인들이 물어볼 때 공유를 통해 설명하기가 편하고, 그 지식에 대해 기억이 안 날때 빠르게 다시 그 지식을 얻을 수 있기 때문이다.

특히, 프로젝트의 셋팅이나 개발 환경을 구성하는 것에 대해서는 반드시 적어두는 편이다. 왜냐하면 이런 일은 프로젝트를 진행하며 자주하는 일이 아니기에 다시 하려고 하면 익숙하지 않아 다시 찾아볼 확률이 크기 때문이다.

개발 fail2ban 노션 공부
[그림04] fail2ban 방화벽 셋팅을 했을 때 하는 방법을 적어뒀다. 지인들이 물어볼 때 마다 해당 자료를 공유한다.

개발을 오래할수록 문서화에 대해 중요하다는 사실을 알게 되었다. 사이드 프로젝트나 공부로 하는 개발은 장기간에 걸쳐서 다루지 않지만, 서비스를 운영하면 몇 개월 전에 개발 했던 것에 대해 다시 알아야 할 때가 생긴다.

이럴 때 만약 문서가 있다면, 지난날의 자신에게 고마워하며 더 빠른 생산성을 보장할 수 있다. 조금 귀찮더라도 꾸준히 자료를 만들도록 하자.

올 한해 동안 서버 인스턴스가 죽어 새로 셋팅해야 할 때가 있었는데 그때, EC2 인스턴스 셋팅에 대해 정리한 글이 도움이 되었다. 처음에 셋팅할 때는 하루종일 걸려서 고생했는데, 그때 정리해둔게 큰 도움이 되었다.

노션에 정리한 개발 공부
[그림 05] 올해 초 부터 정리하던 자료들이 제법 다양하게 생겼다. 가끔 이걸 보며 뿌듯해 한다.

문서화를 할 때 최대한 참고자료를 첨부해두는 편이다. 구글링을 하더라도 정보가 많은 시대에서 내가 정리한 문서에서 발생하는 부족함은 참고자료를 통해 채워나갈 수 있게 해뒀다.

문서화를 할 때 나만 볼 것이라는 생각보다는 지인이나 동료에게 공유해도 읽기 편하게 쓰는 것을 중요시한다. 글은 결국 사람이 읽기 위한 것이라 지인들에게 도움이 될 것이라 생각하고 쓰면 좀 더 읽기 쉬운 글이 나온다.

맺음말

지난 1년을 돌아보며 처음 쓴 주니어 개발자가 공부하는 법을 다시 읽어보았다. 그때는 1년이 지나면 든든한 개발자가 되어 있을 것이라 생각했지만, 지금도 여전히 모르는 것이 많다.

내가 아는 것을 믿으면서도 더 나은 방법이 있을 것이라는 사실을 잊지 말자. 내가 모르는 것이 있을까 불안해 하는 것 보다 내가 옳다는 용기를 가지되, 내가 아는 것이 반드시 정답이라는 생각을 버리자.

항상, 내가 이 기술을 잘 이해하고 있는지 의심이 들고 이때마다 기본기가 부족 함을 깨닫고 이를 갈고 닦기 위해 틈틈이 공부 중이다. 기본기는 확실히 작은 시간을 들여 꾸준히 배워야 하는 것 같다.

최근에 개발이든, 팀 문화든 중용이 중요하다는 생각이 자주 든다. 너무 큰 자신감보다는 겸손함을, 내 실력에 대한 불안함 보다는 자신감을 가지는 사람이되기 위해 노력중이다.

1년간 글을 쓰면서 보면 메일이나 SNS로 연락을 해주시는 분들이 생겼다. 항상 열심히 하는 것 같아보이지만 가끔 지칠 때 이런 연락으로 인해 나도 동기 부여가 되었다. 이 글을 통해 항상 응원해주시는 분들에게 감사함을 전한다.

개발 포트폴리오
[그림06] 퇴사를 하며 다니던 회사에서 한 일을 정리해보았다. 같이 일했던 팀원들에게 항상 감사한다.

끝으로, 지난 1년간 개발자로서, 일을 하는 사람으로서 많은 교훈을 준 현구형에게 감사하며, 하기 싫을 때 마다 응원해주는 신림 개발자 형들에게 항상 감사하다는 인사를 전한다.

하기 싫어도 해라, 감정은 사라지고 결과는 남는다.

--

--