해당 포스팅은 인프런에서 제공하는 김영한 님의 '스프링 핵심원리 기본편'을 수강한 후 정리한 글입니다. 유료 강의를 정리한 내용이기에 제공되는 예제나 몇몇 내용들은 제외하였고, 정리한 내용을 바탕으로 글 작성자인 저의 언어로 다시 작성한 글이기에 서술이 부족하거나 잘못된 내용이 있을 수 있습니다. 그렇기에 해당 글은 개념에 대한 참고 정도만 해주시고, 강의를 통해 학습하시기를 추천합니다.
스프링은 자바(Java) 언어 기반의 프레임워크로 자바가 가진 객체 지향 언어의 특징을 살려 개발하기 위한 기술이다. 그렇기에 객체 지향에 대한 올바른 이해가 있어야 스프링 프레임 워크 또한 제대로 이해할 수 있다.
객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각인 절차 지향 프로그래밍에서 벗어나 기능과 데이터의 집합인 객체와 객체간의 상호 작용으로 보는 시각이다. 객체지향 프로그래밍의 특징은 추상화, 캡슐화, 상속, 다형성이며, 이러한 특징들을 통해 변화에 대한 유연성을 얻을 수 있어 대규모 소프트웨어 개발에 많이 사용된다.
객체 지향 프로그래밍(Object Oriented Programing) 톺아보기
SOLID 원칙은 좋은 객체 지향 프로그래밍의 설계를 위해 제시된 다섯 가지 원칙으로 이를 정리하면 다음과 같다.
핵심 기술로 스프링 DI 컨테이너, AOP, 이벤트 등이 있으며 웹 기술로는 스프링 MVC와 스프링 WebFlux 등을 지원해준다. 또한 데이터 접근 기술로 트랜잭션, JDBC, ORM, XML 등을 지원하며, 캐시, 이메일, 스케쥴링 등의 기술 통합과 스프링 기반의 테스트를 지원해준다.
스프링은 DI(Dependency Injection)를 통해 의존성을 주입하여 다형성과 OCP, DIP를 가능하게 해준다.(OCP에서 설명한 조립 객체의 역할을 스프링 컨테이너를 통해 가능하게 해준다.)
스프링을 보다 편리하게 사용할 수 있도록 지원해주는 기술로, Tomcat과 같은 웹 서버를 내장하여 별도의 웹 서버 설치 없이 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성할 수 있다. starter를 통해 손쉽게 빌드를 구성할 수 있으며, 스프링과 서드 파티(3rd parth) 라이브러리를 자동으로 구성해준다. 추가로 메트릭, 상태 확인, 외부 구성과 같은 프로덕션 준비 기능도 제공 해준다.