1. SRPING FRAMEWORK
스프링 프레임워크는 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크입니다.
1_1. 스프링 등장 배경
- 웹 서비스는 비즈니스 로직이 존재
- 스프링이 등장하기 이전
- 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적 수행
- 비즈니스 로직을 구현하는 기술 자체가 복잡하고 어려웠기 때문
- 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현
1_2. 스프링의 장점
- 오픈 소스
- 프레임워크의 안정성
스프링은 스프링소스(SpringSource)라는 IT 기업에서 관리하고 있다고 합니다. 스프링 코드를 수정하거나 개선하는 일에는 스프링소스의 한정적 인원만 참여해서, 안정적인 개선환경을 보장합니다. - 경량급
스프링은 사실 수십개의 세부 모듈과 수십만줄의 방대한 코드로 이루어진 프레임워크입니다. 다만 경량급이라는 단어를 정의함에 있어서, 스프링 대신 사용하던 기술들과 비교해서 스프링을 사용했을 때 개발자가 작성해야할 코드가 상대적으로 단순하다는 것을 표현하기 위함입니다.
따라서 개발자는 불필요하게 복잡한 코드를 제거하여 코드의 복잡성을 낮출 수 있고, 이는 경량급이라는 표현으로 이어집니다.
1_3. POJO(Plain Old Java Object) 프로그래밍
어떤 객체가 외부의 라이브러리나 외부의 모듈을 가져와서 사용하고 있다면, 그 객체는 POJO라고 할 수 없습니다. 하지만 POJO는 말 그대로, 다른 기술을 사용하지 않는 순수한 Java만을 사용하여 만든 객체입니다. POJO의 장점은 이렇습니다.
- 외부 기술이나 규약의 변화에 얽매이지 않아, 보다 유연하게 변화와 확장에 대처할 수 있습니다.
- 객체지향 설계를 제한없이 적용할 수 있으며, 코드가 단순해져 테스트와 디버깅 또한 쉬워집니다.
여기서 POJO 프로그래밍의 세가지 지향점이 있습니다.
- IoC/DI (Inversion of Control / Dependency Injection, 제어의 역전 / 의존성 주입)
- AOP (Aspect Oriented Programming, 관심 지향 프로그래밍)
- PSA (Portable Service Abstraction, 일관된 서비스 추상화)
1_4. IoC(Inversion of Control) 제어의 역전
제어의 역전은 쉽게 말해서, 객체에 대한 제어권을 개발자가 아니라, Spring 컨테이너가 가지게 된다는 의미입니다.
Spring Container에서는 xml파일 또는 어노테이션 방식으로 스프링 컨테이너에 Bean(객체)를 등록하고, Bean의 생명주기(생성 -> 의존성 설정 -> 초기화 -> 소멸)을 전부 관리합니다. 이를 "제어의 역전"(Inversion of Control)이라고 표현합니다.
bean은 스프링 IoC 컨테이너가 관리하는 자바 객체를 의미합니다
1_5. DI(Dependency Injection) 의존성 주입
의존성 주입은 쉽게 말해서, 클래스 내의 클래스를 구성함에 있어서 해당 의존성을 컨테이너가 주입하는 행위를 말합니다. 아래 그림을 보면 이해가 편합니다.
위의 예제는 어노테이션을 통해, 컨테이너에 들어갈 객체를 지정해주는 것을 볼 수 있습니다.
1_6. AOP (Aspect Oriented Programming, 관심 지향 프로그래밍)
공통관심사항은 모든 핵심관심사항에 공통적으로 적용되는 관심사항을 의미합니다. 대부분의 비즈니스 로직이 섞인 웹을 구성하다보면, 공통관심사항을 수행하는 로직이 겹치기 마련입니다.
이 때 애플리케이션 전반에 걸쳐 적용되는 공통기능을 비즈니스로직으로부터 분리하면서 프로그래밍하는 것을 관심지향 프로그래밍이라고 합니다.
1_7. PSA (Portable Service Abstraction, 일관된 서비스 추상화)
웹 프레임워크 백엔드 개발에서 웹서버와 데이터베이스는 필수적입니다. 웹 서버는 항상 데이터베이스와 소통하며 웹 클라이언트의 요청을 처리하기 때문입니다. 하지만 어떤 상황을 가정해보겠습니다.
MYSQL로 개발을 완료했는데, 이때 MARIA DB로 데이터베이스를 교체해야하는 상황이 있습니다
아마 이런 상황에는 기존 작성 코드를 전부 지우고, 기존 데이터베이스와 새 데이터베이스 간의 사용방법이 다른 코드를 모두 찾아서 일일이 수정해야겠죠.. 하지만 스프링을 사용하면 동일한 사용방법을 유지한 채로 데이터베이스를 교체할 수 있습니다.
- 스프링이 데이터베이스 서비스를 추상화한 인터페이스를 제공해주기 때문에 가능합니다
- JAVA를 사용하여 데이터베이스에 접근하는 방법을 규정한 인터페이스를 제공합니다.
- JDBC(Java DataBase Connectivity)
2. Spring Boot
스프링 부트는 스프링으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해주는 별도의 프레임워크입니다. 기존에 어려운 초기 설정에 쏟아야 했을 시간과 노력을 절약하여 비즈니스 로직을 구현하는데에 집중할 수 있습니다.
기존에는 배포를 할 때에 별도의 외장 웹 서버를 설치하고, 프로젝트를 War 파일로 빌드하여 배포를 진행했는데, 이러한 방식은 처리 속도가 느렸습니다. 하지만 스프링 부트는 자체적인 웹서버를 내장하고 있어, 빠르고 간편하게 배포를 진행합니다. 특히 스프링 부트를 사용하면 독립적으로 실행 가능한 Jar 파일로 프로젝트를 빌드할 수 있어, 클라우드 서비스 및 도커와 같은 가상화 환경에 빠르게 배포 가능합니다.
'웹 애플리케이션 > Spring(스프링)' 카테고리의 다른 글
[스프링]2_스프링 관련 설정(프로젝트 설정 및 시작하기) (0) | 2023.04.05 |
---|