요약

  • 장점 : 스프링 프레임워크는 기본 셋업을 해주고 많은 것들을 추상화 해 두어 프로젝트를 빠르게 시작할 수 있게 해줌.
  • 단점 : 그러나 장기적으로 비용이 발생할 수 있다.
  • 내 생각 : 모든 프레임워크가 디테일들을 추상화 하지만, 스프링은 그 정도가 크다고 생각할 수 있다. 하지만 스프링을 쓰지 않을 수는 없고, HTTP, DB 등fundamental을 잘 이해하고 있는 채로 써야 한다.

장기적 관점

  • 어노테이션 (스프링 AOP) 를 통한 방법은 프레임워크를 배우기 힘들게 만들기도 하며 디버깅 하기 힘들게 만든다.
    • 예시 : @GeneratedValue 같은 어노테이션이 누락된 경우, Id 를 수동으로 지정하라는 에러가 나온다. 얘가 어느 구현체에서 발생해주는 메세지인지 찾기도 힘들고 위 어노테이션이 문제였다는 걸 눈치채기도 힘들다.
  • 어노테이션은 코드는 깔끔해지지만 디테일을 감추고 있기 때문에 나중에 어떤 문제가 발생할지 예상하기 힘들다.
  • 의존성 주입은 코드의 유연성과 테스트 용이성을 위해서지만, 실제론 복잡하게 의존하는 많은 싱글턴들을 만들게끔 유도한다.
    • 반성할 점 : 테스트 코드를 제대로 짜 봤다는 느낌을 받은적이 없다.
  • 자동생성 쿼리들은 CURD 쿼리들을 쉽게 만들 수 있지만 조금만 복잡해지거나 튜닝이 필요한 경우 사용하기 힘들어진다. 가장 중요한 건 실제로 어떤 쿼리가 나가는지 정확히 이해하지 못하게 된다는 것.
    • QueryDsl 같은 경우도 from subquery 를 만들지 못하는 등 한계가 존재.