내가 사용하는 기술이 나의 성장을 도울 수 있을까?
토비님은 세션에서 하나의 질문을 우리에게 던지시면서 시작 하셨다.
한번도 생각도, 접근도 해보지 않았던 질문.
기술과 성장의 관계성에 대한 질문이었다.
나 또한 토비님과 마찬가지로 스프링을 사용하는 개발자다.
과연 스프링을 통해서 내가 성장한다고 말할 수 있을까?
나를 비롯한 대부분의 사람들은 '기술'의 '성장'을 이야기하면,
기술에 대한 '공부'나 '사용' 을 생각한다.
하지만, 토비님이 세션을 통해 말씀하시고자 하는 성장은 그런 의미가 아니었다.
스프링은 '개발자의 성장에 도움이 되는 특성' 을 가지고 있다.
(물론, 그 어떠한 기술을 통해서도 성장할 수 있다.)
기술이라는 것은 단순히 사용하기만 해서는 성장하기 힘들다.
'실전' 에서 사용하지 않으면 성장은 더디거나 할 수 없다.
충분히 공부하고 나서 실전에 사용하겠다는 것 또한 말이 안된다.
개발은 실전이고, '성장' 역시 실전이다.
"개발한다, 무슨 일이 있어도 개발 해낸다."
토비님이 처음으로 스프링으로 개발을 해야겠다고 마음을 먹고 엔터프라이즈 실전 레벨에서 사용하셨을 때 가지셨던 마음..
'무슨 일이 있어도' 라는 전제가 붙고 '해낸다' 로 결론이 지어지면,
그 어떤 상황에서도 성장은 불가피한 일이 된다.
어떤 공식에 맞춰서,
혹은 누가 정해놓은 규칙에 맞춰서 따라 쓰면 어플리케이션이 만들어지는 무언가가 아니다.
물론, 그렇게 하더라도 결과는 얻을 수 있다.
하지만 그것은 기술을 통해 개발하는 것이 아니라, 상품을 사용하는 것에 지나지 않는다.
💡 질문과 탐구를 놓치지 말아야 한다.
- 내가 사용하는 기술은 왜 이렇게 만들어 졌는가?
- 나는 이 기술을 사용해서 왜 이렇게 설계하고 코드를 작성하는가?
- 장단점은 무엇인가?
- 대안점은 있는가?
- 스프링이 강조하는 IoC / DI 는 과연 무엇인가?
- IoC / DI 는 지금 내가 작성하고 있는 코드에 어떤 도움을 주고 있는가?
끊임없이 궁금해 하자.
끊임없이 답을 찾자.
답을 찾았다면 그 답을 의심하고 또 다른 더 좋은 답을 찾기 위해 노력하자.
스프링에 대한 설명은 구글링하면 너무나 방대하게 많이 나온다.
그러나 많은 개발자들은 스프링의 목표와 철학에 대해 자신의 언어로 설명하는 것 을 어려워한다.
면접에서는 외워서 이야기 할 수 있겠지만, 그 이상은 어렵다.
대표적인 키워드들은 다음과 같다.
IoC, DI, AOP, 객체지향, POJO, 등등등..
토비님의 스프링강의에서도 느꼈지만,
스프링은 엔터티, 컨트롤러, 서비스, 레포지토리를 찍어내는 도구가 아니다. 🫠
스프링이 설계된 의도와, 그 의도를 뒷받침하는 철학을 이해하면 내가 사용하고 있는 기술의 정교함이 보인다.
키보드를 쳐서 작성하는 코드에만 집중하는 것이 아니라,
그 속에 있는 원리와 구조를 이해하면 더 깊고 단단한 개발자로 성장할 수 있다.
토비님은 스프링의 대표 예제인 PetClinic 을 스프링 버전이 업데이트 되거나 변동이 있을 때 꾸준히 반복을 하신다고 한다.
스프링을 배우고 알았으면 그걸로 멈추는 것이 아니라, 반복을 통해 익숙해 지는 것이 중요하다. (토비님도 지금까지 하시는데!!)
좋은 훈련 방법
- 클론 코딩한 프로젝트에 새로운 기능 추가 및 설게 구조를 변경해보려는 시도를 하자.
- 실무에서 사용하지 못했던 기술을 도입해보자.
- 실제로 생활에서 사용될 어플리케이션이라고 생각하고 개발하자.
- 테스트코드를 무조건 만들자.
코딩 훈련은 꾸준히 해야한다.
단순히 듣고 따라 치는 것을 넘어서 스스로 목표와 의도를 가지고 개발하는 시간이 필요하다.
스스로의 목표와 의도를 가지고 개발을 하게되면 선택 을 하게되고,
그 선택에서는 고민 이 필요하며,
그 고민을 통한 결정을 통해 만들어진 결과 로 인해 성장할 수 있다.
공유와 논쟁, 성장의 지금길
정리된 글을 작성하거나 발표를 하는 것을 통해 폭발적인 성장이 가능하다.
공유하고 발표를 하기 위해서는 '정리' 가 필요하다.
정리를 통한 성장
- 효율적으로 자신만의 방법을 통해 정리하는 것이 중요하다.
- 단순 카테고리식의 정리는 성장에 도움이 되지 않는다.
- 자신의 언어로 표현하고 정리하는 것이 중요하다.
정의를 내리는 것을 통한 성장
- 나만의 정의를 내리는 것이 중요하다.
- 다른 사람의 설명을 반복해서 외우는 것이 아니라, 자신의 정리가 뒷받침된 한문장의 정의가 필요하다.
- 내가 사용하고 있는 기술과 방법에 대한 나만의 정의가 필요하다.
정리와 정의를 잘해 놓았다면,
해당 내용을 공유하자.
그리고, 공유된 것에 대해 사람들과 논쟁하자.
논쟁은 때로는 불편하기도 하고, 상처가 될 수 있으나
그러한 논쟁을 통해 개발자는 성장한다. 🔥
스프링은 많은 논쟁속에서 만들어진 기술이다.
안락한 환경에 있으면 그곳이 너무 편해서 성장이 부담으로 느껴질 때가 온다.
성장하고 싶다면 나오라.
성장하고 싶은 개발자는 안락한 곳에 있으면 안된다.
특히나 주니어는 그러면 안된다.
잘 보고 갑니당 ^^