Java 적응기 04 - Spring

Posted by 엘키의 주절 주절 on October 29, 2017

개요

C++로 개발하면서 답답했던 점은 바로 API 서버 개발에 편의성이 떨어진다는 점이었다.

C++에는 킬러 웹 프레임워크가 없고, 생산성이 떨어지는 언어라는 단점마저 존재한다. (최적화에 강할 뿐)

실제 지표상으로 C++이나 C언어로 된 REST API 프레임워크는 수도 적고, 사용자도 적은 편이지만 그를 넘어서는 장벽으로는 편견도 크다고 생각한다.

의외로 MS에서 제공하는 cpp rest sdk는 괜찮은 완성도를 보여준다.

이 편견이 얼마나 크냐하면, C언어로 API 서버 개발기는 찬사와 함께 눈초리도 받았을 정도다.

C언어로 API 서버 개발, 생각보다 나쁘지 않아요

내 경험상 다른 언어들 (Rails, Django, Entity Framework)의 프레임워크를 접해봤지만 언어 차원을 넘어서는 어마어마한 유틸리티가 지원되지는 않았었다.

그렇기에 대부분 프레임워크에서 제공되는 기반 기능이 압도적으로 중요하다고 볼 수 있다.

여하튼 자바를 업무 주력 언어로 사용하게 됐다보니, 웹 서버를 개발함에 있어 스프링 부트가 무난한 선택지였다 보니 나도 자연스레 익히고 사용하게 되었다.

스프링의 장단점

내가 느낀 스프링의 단점

  1. Annotation 도배.
    • C#에서 property로 풀었던 문제를 annotation으로 지원하거나 해결하려는 경우가 많음.
  2. 에러메시지가 비 직관적인 경우가 많음.
    • 근본적 원인이 메시지 마지막에 나오지 않아, 어느 부분이 원인인지 찾는 데에 애로사항이 있다.
  3. 버전에 따라 크게 다른 스펙
    • 그만큼 많은 개선과 향상이 있다는 이야기지만, 변화가 꽤 잦고 위에 언급한대로 에러 메시지가 비직관적이라서 바뀐 스펙에 대한 체크를 세심하게 해야 한다.

내가 느낀 스프링의 장점

  1. Annotation과 라이브러리 지원을 통한 다양한 패턴 지원
    • 1번 단점과 상반되는 점이지만, 나는 장점도 많다고 생각한다.
    • 생산성 향상에 의미가 있다. 혹자는 Annotation이 Superb한 기능이라서 위험하고 각종 제약을 무시한다지만, 적절한 사용에서의 장점마저 희석시킬 정도는 아니라고 생각한다.
  2. 있을건 다 있는 라이브러리 풀
    • 진짜 거의 다 있다. 메이저한 라이브러리들은 당연스레 자바 & 스프링을 지원한다.
    • 특히 자연스레 스프링과 연동될거라 예상해서인지, 호환성 테스트가 완료된 점은 아주 맘에 들었다.
  3. 오류에 대한 글이 많다.
    • 메이저해졌다지만, 생각보다 python, ruby의 gem에서 발생하는 오류는 stackoverflow등지에서의 글이 없는 경우가 많다.
      • Rust나 go는 몇배는 더하고
      • 이런 오류 메시지에 대한 기본적인 삽질에서 마저 참고가 될 만한 레퍼런스가 아주 많다.
      • Node.js와 비견될 만한 사용자 풀의 유일한 프레임워크는 spring이란 점은 공감한다.
  4. 개발자 풀도 많다.
    • 다른 웹 프레임워크에 비해, 특히 국내는 압도적으로 스프링 사용자가 많고 지원자도 많다.
    • 그만큼 학습 코스트도 낮다는 점도 장점이라고 볼 수 있다.
  5. 사용자가 많은 만큼 많이 다듬어져있다.
    • MyBatis, JPA 등이 실무에서 다양한 런타임 이슈와 개념적 이슈를 모두 해결한 경험을 가진 훌륭한 라이브러리다.
    • 사실상 대다수의 라이브러리가 초기버전에는 문제의 소지나, 놓친 문제들로 인한 리스크를 안고 있는데 이런 문제가 많이 해결되어있다.

마치며

사실 자바가 표현력에 부족함은 여전히 여러 부분 존재함에도, 스프링 자체는 오히려 이를 annotation과 라이브러리 제공 기능으로 풀어낸 느낌이 강했다.

자바+Netty+Akka를 사용하며 느꼈던 아쉬움이 스프링에 대한 이해도가 높아질 수록 충족 됐음이 이를 반증한다고 생각한다.

의외로 이클립스가 쓸 만하다는 것은 자바 환경 기준인 거 아닌가 라는 생각이 들만큼 편의성 있게끔 만들어주는 plugin이 많았다는 점도 한 몫하지 않나 싶다.