[Spring Boot] 객체 지향 설계와 스프링

토끼는 개발개발·2022년 3월 6일
0

Spring Boot

목록 보기
12/18
post-thumbnail

1. 스프링은 어떻게 탄생했는가?


1.1 로드 존슨

로드 존슨이 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주며, 30,000라인 이상의 기반 기술을 예제 코드로 선보였다. 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있다.

책 출간 직후, Juergen Hoeller(유겐 휠러)와 Yann Caroff(얀 카로프)가 로드 존슨에게 오픈소스 프로젝트를 제안했고, 전통적인 EJB라는 겨울을 넘어 새로운 시작이라는 이름으로 '스프링'이라 명명했다.

1.2 스프링 역사

• 2003년 스프링 프레임워크 1.0 출시 - XML
• 2006년 스프링 프레임워크 2.0 출시 - XML 편의 기능 지원
• 2009년 스프링 프레임워크 3.0 출시 - 자바 코드로 설정
• 2013년 스프링 프레임워크 4.0 출시 - 자바8
• 2014년 스프링 부트 1.0 출시
• 2017년 스프링 프레임워크 5.0, 스프링 부트 2.0 출시 - 리엑티브 프로그래밍 지원
• 2020년 9월 현재 스프링 프레임워크 5.2.x, 스프링 부트 2.3.x




2. 스프링이란?


스프링은 어느 하나를 뜻하는게 아닌, 여러 기술의 집합체이다.

👉🏻 https://spring.io/

스프링 공식 홈페이지를 방문하면 정말 많은 프로젝트로 생태계가 형성되어 있다. 각종 데이터베이스에 접근하도록 도와주는 스프링 데이터나, 세션 기능을 편리하게 사용할 수 있도록 돕는 스프링 세션, 보안과 관련된 스프링 시큐리티 등 굉장히 많은 프로젝트들이 있다.

이 중 핵심은 스프링 프레임워크와 스프링 부트이다.


2.1 스프링 프레임워크

• 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타
• 웹 기술: 스프링 MVC, 스프링 WebFlux
• 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원
• 기술 통합: 캐시, 이메일, 원격접근, 스케줄링
• 테스트: 스프링 기반 테스트 지원
• 언어: 코틀린, 그루비
• 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용


2.2 스프링 부트

스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
• 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
• Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
• 손쉬운 빌드 구성을 위한 starter 종속성 제공
• 스프링과 3rd parth(외부) 라이브러리 자동 구성
• 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
• 관례에 의한 간결한 설정




3. 스프링 핵심


스프링은 자바 기반으로, 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. 즉, 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와준다.

그렇다면, 좋은 객체 지향 프로그래밍이라는 것은 무엇일까?
객체지향의 특징에는 대표적으로 추상화, 캡슐화, 상속, 다형성이 있다.

이 중 '다형성'에 대해 살펴보자.



3.1 역할과 구현의 분리

실세계와 객체 지향을 1:1로 매칭할 수는 없지만, 이해를 위해 실세계로 비유해보자.
먼저, 역할과 구현으로 세상을 구분한다고 가정해보자.

위와 같이 두 가지 예시를 들 수 있다.
자동차 역할에 K3가 구현되든 아반떼가 구현되든 운전자는 상관없이 운전할 수 있어야 한다.
공연 무대 또한, 로미오 역할에 장동건이 오든 원빈이 오든 공연은 상관없이 진행되어야 한다.

이렇게 역할과 구현이 분리되면 유연하고, 변경이 용이해진다.
또 다른 장점에는 무엇이 있을까?

• 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
• 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
• 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
• 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.



3.2 다형성

자바 언어의 다형성을 활용하면 다음과 같이 볼 수 있을 것이다.

  • 역할 = 인터페이스
  • 구현 = 인터페이스를 구현한 클래스, 구현객체

오버라이딩을 통해 인터페이스를 빨간색 혹은 초록색으로 구현하면, 클라이언트는 구현된 색상을 바라보게 된다.

한마디로, 다형성을 통해 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있는 것이다. 이렇게 다형성을 활용해 유연하고, 변경이 용이하며 확장 가능한 설계를 하는 것이 중요하다.

스프링은 제어의 역전, 의존관계 주입 등으로 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 그렇기에 스프링을 사용하면 마치 레고 블럭 조립하듯이 구현을 편리하게 변경할 수 있다.




Ref.
스프링 핵심원리(김영한)

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글