프레임워크란?
라이브러리와는 뭐가 다를까?
둘 다 다른 누군가가 쓴 코드이다. 하지만 ‘누가 누구를 컨트롤 하는가’에서 컨셉의 차이가 나타난다.
라이브러리는 내가 필요할 때 가져와서 사용한다. 쉽게 말해서 집을 지을 때 필요한 연장을 가져와서 사용하듯이 사용자가 라이브러리(도구)를 제어할 수 있다.
반대로 프레임워크는 내가 부르지 않는다. 프레임워크가 사용자를 부른다. 프레임워크를 사용할 때는 프레임워크의 규칙을 따라야 하며 규칙을 어긴다면 작동하지 않는다. 예를 들어 스프링 프레임워크에서는 원하는 동작을 얻기 위해서는 적절한 클래스에 알맞은 애너테이션을 달아야 하고 특정 파일은 정해진 명명 규칙이나 디렉터리 구조를 따라야 한다.
Gof의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson)은 "프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"이라고 정의했다.
프레임워크를 라이브러리의 집합이라고 말할 수도 있다. 즉 라이브러리는 부품이고 프레임워크는 구조이자 뼈대이다.
왜 프레임워크를 사용?
웹 프레임워크를 예로 들어보자.
프레임워크를 사용하지 않는다면 소켓 열고, 포트 매핑하고, 요청 오면 요청에 따라 분기 처리하고 응답 결과를 요쳥 헤더 값을 통해 만들고…
개발자가 해결하고 싶은 것은 비즈니스 로직인데 비즈니스 로직 외에 일에 많은 신경을 써야 한다.
프레임워크를 이용하면 개발자는 비즈니스 로직 개발에 더 집중할 수가 있다.
왜 스프링인가?
스프링 말고도 웹 프레임워크는 있는데 왜 스프링 프레임워크를 써야 할까. 우아한테크코스 스프링 MVC 수업에서 브리 코치는 간단히 다음과 같이 말했다.
잘 동작하는 웹 애플리케이션을 쉽게 만들기 위해
애초에 스프링의 핵심 개념은 무엇일까. 웹 애플리케이션을 만들고 DB 접근을 편리하게 해주는 기술인가. 아니면 서버도 자동으로 띄어주는 기술인가.
스프링 공식 문서에서 스프링의 디자인 철학을 다음과 같이 설명하고 있다.
- 설계 결정을 연기할 수 있다. 예를 들어 스프링에선 코드를 변경하지 않고 지속성 공급자를 변경할 수 있다. (DI 컨테이너)
- 다양한 관점을 수용한다. 유연성 있게 다양한 관점에서 요구 사항을 지원한다.
- 강력한 하위 호환성을 제공한다. 버전 간의 주요 변경 사항이 거의 없도록 주의 깊게 관리되었다.
- 직관적이고 수년에 걸쳐 유지되는 여러 버전의 API를 만드는 데 많은 노력을 기울임
- 높은 코드 품질을 유지한다. 의미 있고 최신이며 정확한 Javadoc을 중시한다. 패키지 간의 순환 중속성이 없는 깨끗한 코드 구조를 가지고 있는 몇 안 되는 프로젝트 중 하나이다.
스프링 핵심 원리 - 기본편에서 김영한 님은 스프링 프레임워크의 진짜 핵심을 다음의 이유로 설명하신다.
- 스프링은 자바 언어 기반의 프레임 워크
- 자바 언어의 가장 큰 특징 - 객체 지향 언어
- 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
- 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
결론
즉, 웹 서버라던지 DB 접근이라던지의 비즈니스 로직 외의 기술들을 편리하게 이용할 수 있다는 장점도 있지만, DI 컨테이너나 IoC 같은 기술을 통해 강력한 객체지향 애플리케이션을 만드는데 엄청난 도움이 되기 때문에 많은 기업과 개발자들이 스프링 프레임워크를 이용한다고 이해할 수 있었다.
참고
'스프링' 카테고리의 다른 글
[Spring] @Transactional과 @Async (0) | 2022.11.17 |
---|---|
[Spring] AOP와 동적 프록시 (0) | 2022.11.17 |