Spring과 Spring boot에 대해서 알아보도록 하겠다.
Spring이란?
스프링은 웹사이트 개발을 위한 백엔드 프레임워크이다.
Java의 활용도가 높아졌고 따라서 프로젝트 규모도 커지게 되었다. Java에서 JSP, MyBatis, JPA 등 여러 가지 기술을 사용하는데 이 기술을 Spring을 이용하여 좀 더 편하게 사용할 수 있다.
- 스프링은 자바 언어 기반의 프레임워크
- 자바 언어의 가장 큰 특징 - 객체 지향 언어
- 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크이다.
Spring의 특징
1. Ioc(Inversion of Control, 제어의 역행)
제어의 주체가 개발자가 아닌 프레임워크라는 뜻으로 때에따라 프레임워크가 작성된 코드를 호출하는 기술
객체의 생명주기의 관리까지 모든 객체에 대해 제어권을 프레임워크가 가진다.
- 프로그램의 흐름(객체나 메소드의 호출)을 개발자가 아닌 프레임워크가 주도하는 것
- 객체의 생성부터 생명주기 관리를 컨테이너가 맡아하는 것
- @Autowired로 Bean을 주입하는 것 또한 Ioc이다
- 제어권이 컨테이너로 넘겨지면서 DI, AOP 등이 가능해졌다.
2. DI(Dependency Injection, 의존성 주입)
의존성 객체를 개발자가 생성하지 않고 클래스를 Bean으로 등록해놓으면 Bean으로 등록된 객체를 프레임워크가 찾아서 알아서 주입해주는 기술
객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입시켜주는 방식
모듈 간의 결합도가 낮아지고 유연성이 높아진다.
장점
Unit Test가 용이해진다.
코드의 재활용성이 높아진다
객체 간 족속 성을 줄일 수 있다.
결합도가 낮추면서 유여한 코드를 작성할 수 있다.
3. AOP (Aspect Oriented Programming)
각 코드마다 공통 관심사를 분리하여 모듈화 하는 프로그래밍 기법이다.
객체 지향적으로 프로그래밍을 했음에도 로그, 트랜잭션, 성능확인 등 공통적인 관심사가 중복되는 문제점을 해결하기 위해 프록시 패턴을 사용하여 코드를 분리하여 관리하는 기술이다.
4. POJO(Plain Old Java Object)방식
POJO는 getter와 setter를 가진 단순한 자바 오브젝트이다
별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없이 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.
Spring boot란?
Spring Framwork 기반 프로젝트를 복잡한 설정 없이 쉽고 빠르게 만들어주는 라이브러리이다. 개발자가 모든 설정을 할 필요 없이 자주 사용되는 기본 설정을 알아서 해준다.
Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치 안 해도 되고 손쉬운 빌드 구성을 위한 starter 종속성 제공, 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성할 수가 있다.
Script
Spring이란?
- Spring은 java 언어기반의 프레임 워크이다
- 자바 언어의 가장 큰 특징 - 객체 지향 언어
객체 지향 특징
추상화, 캡슐화, 상속, 다형성
객체 지향 프로그래밍
객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 떄문에 대규모 소프트웨어 개발에 많이 사용된다.
역할과 구현을 분리
자바 언어의 다형성을 활용
역할 = 인터페이스
구현 = 인터페이스를 구현한 클래스, 구현 객체
객체를 설계할 때 역할과 구현을 명확히 분리
다형성의 본질
인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작한다.
클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경 가능
스프링과 객체 지향
다형성이 가장 중요
스프링은 다형성을 국대화해서 사용
스플링에서 제어의 역전, 의존관계 주입은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 한다.
Spring 특징
IOC, DI, AOP, POJO 가 있다
SpringBoot란?
프로젝트를 복잡한 설정 없이 쉽고 빠르게 만들어준다.
개발자가 모든 설정을 할 필요 없이 자주 사용되는 기본 설정을 알아서 해준다
Tomcat 같은 웹 서버를 내장해서 별도의 웹서버를 설치 안 해도 된다.
스프링 이야기에 왜 객체 지향 이야기가 나오는가?
DI컨테이너 -> 다형성, OCP: 개방 폐쇄 원칙, DIP의존관계 역전 원칙을 가능하게 지원한다.
클라이언트 코드의 변경이 없이 기능 확장
참고자료
https://velog.io/@alghrksl/Spring-Spring-%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'Spring' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈 (0) | 2022.07.10 |
---|---|
객체 지향 프로그래밍 (0) | 2022.06.01 |
JpaReporitory vs EntityManager (0) | 2021.11.23 |
엔티티 설계 주의점 (0) | 2021.11.21 |
Maven vs Gradle (0) | 2021.11.05 |