토비의 스프링을 읽고 배우고 느낀점들을 정리합니다.
우리에게 좋은 기준을 제시해 주려고 노력하는 스프링을 소개 받은 느낌이다. 그 스프링은 좋은 기준을 입에만 담고 있지 않고 몸소 자신을 그 기준으로 다듬어 발전시켜 왔고 그로 인해 우리에게 다양한 기능을 일관된 방식으로 제공할 수 있게 되었다는 결론도 듣게 된다. 사실 스프링의 뒤에는 오랜 시간 수 많은 개발자들의 더 나은 것을 향한 고민과 노력이 숨어있다는 역사도 듣게 되었고, 성장의 배경에는 오픈소스 생태계가 있었다는 사실도 듣게 되었다. 스프링을 잘 배우기 위한 방법은 스프링이 품고 있는 가치와 원리를 먼저 배우고, 그것으로부터 스프링이 만들어낸 수 많은 기술에 대해 이해한 다음 적절한 것들을 선택하는 방법을 배워야 하며, 그리고 실제로 애플리케이션을 구현하고 스프링을 확장해 가는 방법을 배워야 한다고 했다. 끝으로 스프링을 잘 배웠는지 확인해 보려면 내가 더 좋은 개발자가 되었는지, 내가 개발하는게 더 행복한지 확인해 보면 된다는 말을 보며 더 좋은 개발자, 더 행복한 개발자가 되게 하는 것이 스프링의 최종 목표가 아닌가 생각해 보게 되었다.
스프링은 우리가 코드를 어떻게 작성해야 하는지 기준을 제시해 준다. 그리고 그 기준을 스스로에게도 적용하여 우리의 객체(코드)를 생성하고 관리해 주는 틀을 제공한다. 뿐만 아니라 우리가 애플리케이션을 개발할 때 필요로 하는 다양한 영역에서 활용할 수 있는 방대한 API들 역시 일관된 방식으로 제공해 준다. 스프링이 추구하는 핵심에는 IoC/DI, 서비스 추상화, AOP 라는 세 가지 핵심요소가 자리잡고 있다.
스프링은 더 나은 방법과 전략을 찾으려고 고민하고 연구한 많은 개발자들의 수고가 오랜 시간에 걸쳐 집약된 결정체이다. 스프링은 많은 개발자들이 제안했던 아이디어를 구체화된 프레임워크로 만들어내고, 만들어진 프레임워크를 오픈소스 생태계에서 효과적으로 검증하고 발전시킨 결과물이다.
스프링은 목적을 이룰 수 있는 가장 단순하고 명쾌한 접근 방법을 지향한다. 스프링은 유연성과 확장성을 중요한 가치로 내세운다. 스프링은 개발자들에게 스프링을 확장해서 사용하도록 권장한다. 단순함과 유연함이 스프링의 성공의 이유이다.
스프링은 처음에 배우기 쉬운 프레임워크가 아니다. 그러나 한 번 원리를 제대로 이해해두면 확장되는 것들을 쉽게 받아들일 수 있다. 스프링을 다음 세 단계를 통해 학습해 보자. 먼저 스프링의 핵심 가치와 그것을 스프링 스스로 어떻게 적용하고 있는지를 이해해야 한다. 그리고 가치와 원리를 바탕으로 스프링이 다방면에서 제공하고 있는 다양한 기능들을 이해하고 내 상황에 맞게 그것들을 선택하는 방법들을 학습해 가야한다. 마지막으로는 다양한 기술들을 실제로 어떻게 개발에 적용하고 또한 더 나아가 스프링을 나만의 것으로 결합하고 확장하는 연습을 해야 한다.
스프링을 제대로 학습했는지 확인해 보기 원한다면 스프링을 배운 후 내가 더 좋은 개발자가 되었는지 확인해보라. 내 코드가 더 깔끔하고 단순하면서 객체지향 원칙에 충실하게 작성되었는지, 생산성과 품질이 더 나아졌는지, 더 많은 테스트 코드를 작성하고 있고, 유연하고 확장하기 쉬운 코드를 짜고 있는지 확인해 보라. 무엇보다 개발이 좀 더 즐거워 졌는지 확인해 보라.