스프링 프레임워크(Spring Framework) 톺아보기 - 기본 개념

Janek·2022년 12월 23일
0

Spring 톺아보기

목록 보기
1/10
post-thumbnail
post-custom-banner

해당 포스팅은 인프런에서 제공하는 김영한 님의 '스프링 핵심원리 기본편'을 수강한 후 정리한 글입니다. 유료 강의를 정리한 내용이기에 제공되는 예제나 몇몇 내용들은 제외하였고, 정리한 내용을 바탕으로 글 작성자인 저의 언어로 다시 작성한 글이기에 서술이 부족하거나 잘못된 내용이 있을 수 있습니다. 그렇기에 해당 글은 개념에 대한 참고 정도만 해주시고, 강의를 통해 학습하시기를 추천합니다.

객체 지향 프로그래밍(Object Oriented Programing)

스프링은 자바(Java) 언어 기반의 프레임워크로 자바가 가진 객체 지향 언어의 특징을 살려 개발하기 위한 기술이다. 그렇기에 객체 지향에 대한 올바른 이해가 있어야 스프링 프레임 워크 또한 제대로 이해할 수 있다.

객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각인 절차 지향 프로그래밍에서 벗어나 기능과 데이터의 집합인 객체와 객체간의 상호 작용으로 보는 시각이다. 객체지향 프로그래밍의 특징은 추상화, 캡슐화, 상속, 다형성이며, 이러한 특징들을 통해 변화에 대한 유연성을 얻을 수 있어 대규모 소프트웨어 개발에 많이 사용된다.

객체 지향 프로그래밍(Object Oriented Programing) 톺아보기

SOLID 원칙

SOLID 원칙은 좋은 객체 지향 프로그래밍의 설계를 위해 제시된 다섯 가지 원칙으로 이를 정리하면 다음과 같다.

SRP(Single Responsibility Principle) : 단일 책임 원칙

  • 한 개의 클래스는 하나의 책임(기능)만 가져야 한다.
  • 하나의 책임은 문맥과 상황에 따라 다르며, 그 책임이 클 수도, 작을 수도 있다.
  • 단일 책임 원칙의 기준은 변경이며, 해당 객체의 변경이 주는 파급 효과가 적을수록 단일 책임 원칙을 잘 따른 것이라 볼 수 있다.

OCP(Open/Closed Principle) : 개방/폐쇄 원칙

  • 소프트웨어 개발은 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
  • 다형성을 통해 역할과 구현을 분리함으로 이를 지킬 수 있다. 하나의 역할을 다양한 객체로 구현할 수 있어야 한다.
  • 이를 위해서는 객체를 생성하고 연관 관계를 맺어주는 별도의 조립 객체가 필요하다.

LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

  • 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바뀔 수 있어야 한다. 즉 하위 클래스는 인터페이스의 모든 기능에 대해 보장되어야 한다.

ISP(Interface Segregation Principle) : 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 한 개보다 낫다.
  • 인터페이스가 자체가 변화되어도 클라이언트에 영향을 끼치면 안된다.
  • 이를 통해 인터페이스의 역할이 명확해지고, 대체 가능성이 높아진다.

DIP(Dependency Inversion Principle) : 의존관계 역전 원칙

  • 추상화(인터페이스)에 의존해야하며, 구체화(구현 객체)에 의존하면 안된다.
  • 구현이 아닌 역할(기능)의 입장에서 추상화해야 한다.

스프링(Spring)

스프링 프레임워크(Spring Framework)

핵심 기술로 스프링 DI 컨테이너, AOP, 이벤트 등이 있으며 웹 기술로는 스프링 MVC스프링 WebFlux 등을 지원해준다. 또한 데이터 접근 기술로 트랜잭션, JDBC, ORM, XML 등을 지원하며, 캐시, 이메일, 스케쥴링 등의 기술 통합과 스프링 기반의 테스트를 지원해준다.

  • 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 등
  • 웹 기술 : 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술 : JDBC, 트랜잭션, ORM, XML 등
  • 기술 통합 : 캐시, 이메일, 원격 접근, 스케쥴링 등
  • 언어 : 코틀린, 그루비

스프링은 DI(Dependency Injection)를 통해 의존성을 주입하여 다형성과 OCP, DIP를 가능하게 해준다.(OCP에서 설명한 조립 객체의 역할을 스프링 컨테이너를 통해 가능하게 해준다.)

스프링 부트(Spring boot)

스프링을 보다 편리하게 사용할 수 있도록 지원해주는 기술로, Tomcat과 같은 웹 서버를 내장하여 별도의 웹 서버 설치 없이 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성할 수 있다. starter를 통해 손쉽게 빌드를 구성할 수 있으며, 스프링과 서드 파티(3rd parth) 라이브러리를 자동으로 구성해준다. 추가로 메트릭, 상태 확인, 외부 구성과 같은 프로덕션 준비 기능도 제공 해준다.

profile
만들고 나누며, 세상을 이롭게 하고 싶습니다.
post-custom-banner

0개의 댓글