스프링의 의미와 시작
오늘부터 정독을 시작한 "스프링 부트로 개발하는 MSA 컴포넌트 - 김병부"라는 책을 토대로 배운 것과 느낀 것을 기록해 나갈 것이다.
오늘의 기록은 "스프링의 의미와 시작"이다.
● 스프링(Spring)?
스프링의 등장은 개발하기 복잡하고 어려운 기존의 EJB(Enterprise Java Beans)를 대체하기 위해 만들어진 프레임워크로, 힘든 개발을 했던 겨울이 가고 개발하기 좋은 봄(Spring)이 왔다는 의미이다.
● 스프링과 EJB의 차이점
위에서 스프링은 EJB를 대체하기 위해 만들어졌다 했는데, 그 차이점은 무엇일까?
▶우선 EJB는 객체지향적이지 않고, 프로그래밍 모델 또한 복잡하다. 프로그래밍의 난이도는 개발자의 생산성에 크게 기여된다. 하여 사용법이 어려운 프레임워크일 수록 사장될 수 밖에 없는 것이다.
▶반면 스프링 프레임워크는 관점지향적으로 공통 모듈을 분리시켜 중복 코드를 제거하고, 유지보수도 쉬워지며 재활용성도 높아진다. 그리고 스프링 프레임워크는 사용법 또한 EJB에 비해 월등히 쉬워졌다.
▶EJB는 프레임워크 코드와 개발자가 작성한 코드의 결합이 높다(의존성이 높다). 그 이유는 EJB를 사용하기 위해서 특정 패키지에 포함된 인터페이스를 클래스에 구현하거나 상속받아 메서드를 오버라이드 해야한다. 이 과정에서 프레임워크의 메서드가 사용자 클래스에 구현되는데, 이를 프레임워크 코드가 침투된다고 한다.
▶하지만 스프링은 프레임워크 코드와 개발자의 코드가 결합도가 낮다. 그 이유는 POJO(Plain Old Java Object) 객체를 기반으로 하기 때문이다. 개발자는 POJO 클래스를 개발하고, 스프링 컨테이너는 이 POJO 객체의 생성, 의존성 주입, 객체 소멸까지 생명주기를 관리한다. 여기서 POJO 객체는 특정 기술에 종속되지 않는 순수 자바 객체를 의미한다.
● 스프링의 핵심 요소
스프링 프레임워크의 핵심 요소는 다음과 같다.
■ 의존성 주입
■ 관점 지향 프로그래밍
■ 서비스 추상화
위 세 가지 요소는 책에서도 중요하다고 나와있지만 조금 뒤에 세세히 다뤄줄 것 같다.
오늘 읽은 바로는 스프링의 대략적인 장점과 핵심 기술들의 대략적인 기능을 알 수 있었다. 앞으로 책의 내용이 완전한 내 지식이 될 때까지 독서와 기록을 이어갈 것이다.