CH07 스프링 삼각형과 설정 정보
Last updated
Last updated
저자가 생각하는 스프링에서 가장 중요한 IoC, AOP, PSA 에 대해서 다루는 챕터였다. 좀 옛날 방식의 코드가 많아서 아쉬웠지만(옛날 책이라 그렇다) 기본적인 개념을 충실하게 설명하고 있어서 좋았다.
사실 이번 챕터의 내용이 거의 대부분 백기선님 강의에서 다뤘던 내용들과 겹치는 부분들이 많았어서 새롭게 정리할 내용이 많지는 않았다. cf. (스프링 프레임워크 핵심 기술 강의 정리노트)
거의 대부분이 '스프링 프레임워크 핵심 기술' 강의에서 다뤘던 내용이라 PSA 관련 내용만 간단히 정리하고 이 챕터는 넘어간다.
한 단어로 설명하라 그러면 스프링이 추구하는 '철학' 정도가 될 것 같다. 공통화된 추상화 계층을 제공해서 저수준 모듈이 무엇이 되든 호환성이 높게 하는 것이 핵심이다. 달리 말하면 저수준에의 의존도를 낮춰준다는 것이다.
단적인 예로 JDBC 가 있다.
예를 들어, 스프링의
JdbcTemplate
은 PSA를 통해 여러 종류의 JDBC 드라이버를 동일한 방식으로 다룰 수 있게 해줍니다. 마찬가지로, 스프링의 트랜잭션 관리는 다양한 트랜잭션 관리 기술(JTA, Hibernate, JDBC 등)에 대해 일관된 프로그래밍 모델을 제공합니다.
Spring Data JPA 에서도 보면 결국 인터페이스만 의존하고 구현을 하면 데이터베이스 벤더가 무엇으로 바뀌든 상관이 없다. 상관이 없다는 말은 호환성이 높다는 말이며 이 말도 곧 큰 의미에서 결국 결합도를 낮춘다는 의미이다.
여기서 내가 궁금했던 것은 그럼 왜 Portable 이라는 단어가 쓰였냐는 것이다.
결국 포터블은 경량화되었다는 이야기인데, 경량화가 가지는 근본적인 미덕은 어디든 옮겨 다니기 편하다는 것이다. 그런데 여기서는 옮겨 다니는 주체가 좀 애매한 상황이다. 왜냐면 서비스-라이브러리 가 있다고 했을때 서비스는 그대로 있고 라이브러리가 바뀔 수 있다는 걸 전제로 봐야하기 때문이다.
아무튼 이식성이 높다. 호환성이 높다. 는 의미에서 Portable 의 의미가 쓰인 것이다.
"포터블(Portable)"이라는 단어는 "이동 가능한" 또는 "호환 가능한"이라는 뜻을 가집니다. 여기서 "포터블"은 다양한 환경이나 구현체에서 동일하게 동작할 수 있는 것을 의미합니다.
PSA(Portable Service Abstraction)에서 "포터블"이라는 단어를 사용하는 이유는, 이 추상화 계층을 통해 개발자가 작성한 코드가 다양한 서비스 제공자나 기술 스택에서도 변경 없이 또는 최소한의 변경으로 동작할 수 있게 만들기 위함입니다.
예를 들어, 스프링의 트랜잭션 추상화를 사용하면 개발자는 코드를 변경하지 않고도 JTA, Hibernate, JDBC와 같은 여러 종류의 트랜잭션 관리 기술을 쉽게 교체할 수 있습니다. 이렇게 하면 코드가 다양한 환경에서 유연하게 동작할 수 있게 되므로 "포터블"이라는 표현이 적합하다고 볼 수 있습니다.
이게 비단 스프링에만 쓰인다기 보다 JVM 기반의 언어에도 사용될 수 있다. JVM 위에서 동작이 가능하기 때문에 플랫폼을 상관하지 않고 JVM 위에서 동작만 할 수 있다면 높은 호환성을 가지고 있기 때문이다. 이런 큰 철학이나 원리에 대한 멘탈 모델을 잘 확보해두자