오늘은 Spring의 개념과 특징에 관점을 잡고 블로그를 작성해보려고한다
프레임워크(Framework)란
프로그램을 개발하기 위해 사용되는 틀을 제공하는 프로그램이다
애플리케이션에서 주로 동작하는 핵심 분야에 집중하여 특정 목적을 달성할 수 있도록 관련된 표준이나 뼈대의 역할을 수행하는 의미를 지닌다
일정한 틀과 뼈대를 가지고 일한다는 것은 제공받은 일정한 요소와 틀, 규약을 가지고 무언가를 만드는 것을 말한다
프레임워크를 사용할 때 갖는 장점은 다음과 같다
1. 기본적인 틀이 존재하기 때문에 효율적이다
시간이 절약되고 빠르게 만들 수 있어 개발자들이 개발에만 집중할 수 있다
2. 유지보수가 쉽다
개인이 짠 코드를 다른 사람이 이해하는 데 시간이 걸리지만 프레임 워크는 체계적이기 떄문에 다른 사람이 짠 코드를 또 다른 사람이 고칠 수 있다.
그에 따른 단점도 있다
1. 학습시간이 길다
기본적인 틀과 사용법을 익혀야 하기 때문에 프레임워크 코드 학습에 오랜시간이 걸린다
2, 자유도 낮다
프레임워크는 제작자가 만든 구조에서 크게 벗어날 수가 없기 때문에 개발자가 자유롭거나 유연하기 만들기 어렵다

스프링 프레임워크(Spring Framework)란,
Java 엔터프라이즈, 상업적 개발을 편하게 할 수 있도록 도와주는 오픈소스 경량급 어플리케이션이다
자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로 간단히 스프링이라고 부른다
스프링 프레임워크의 장점은 아래와 같다
1. Java 엔터프라이즈 개발을 편하게 함
엔터프라이즈 개발의 복잡성 걷어내고 편하게 개발할 수 있는 본질적인 솔루션을 제공한다
다양한 필수 요구사항 만족시키며 개발시 어렵고 복잡한 부분 덜어준다
이전 기술에 비해 덜 복잡하기 때문에 도입할 기술 보다 애플리케이션의 비즈니스 로직 자체에 집중하게 된다
*엔터프라이즈 어플리케이션(Enterprise Application)이란
조직 운영의 다양한 프로세스를 간소화하고 자동화하도록 설계된 대규모 소프트웨어 솔루션을 말한다
생산성, 효율성 향상, 부서 간 협업을 향상을 목적으로 설계된다
2. 오픈소스, 경량급이라는 특징이 있다
오픈소스(Open Source)는 소스코드를 모두가 확인할 수 있고, 특별한 정책 및 허가 없이 자유롭게 사용해도 무방함을 의미한다
Spring은 여러 모듈로 구성되어있어 필요한 모듈만 선택적으로 사용할 수 있다
따라사 경량화된 애플리케이션 개발이 가능하다
3. 어플리케이션 프레임워크(Application Framework)
애플리케이션 프레임워크는 소프트웨어 애플리케이션을 설계, 개발, 배포하는 데 필요한 구조, 라이브러리, 모범 사례를 제공하는 소프트웨어 환경이다
스프링은 애플리케이션 개발을 위한 다양한 도구와 구조적 가이드라인을 제공하며 여러 핵심 기능을 포함한 모듈화된 구조를 가지고 있다
스프링은 그외에도 아래의 4가지의 특징으로 설명할 수 있다
POJO(Plain Old Java Object)
: 오래된 방식의 간단한 자바 오브젝트를 의미한다
Java EE 등의 중량 프레임워크들 사용해 해당 프레임워크에 종속된 무거운 객체를 만들게 된 것에 반발한 용어이다
POJO 조건은 순수한 Java만 사용한 객체이기 때문에 특정 기술이나 환경에 종속되면 안된다
외부 기술이나 규약의 변경점이 발생할 때 보다 쉽고 유연하게 대응할 수 있게 한다
IoC(Inversion Of Control), DI(Dependency Injection)의 특징이 있다
스프링 IoC 컨테이너는 객체 생성, 의존성 주입, 객체가 소멸될 때까지 생애주기를 관리한다
객체의 생성과 의존성 주입을 프레임워크(스프링 IoC 컨테이너)가 관리한다
개발자는 객체를 사용하는 데만 집중하고, 객체 관리의 책임은 컨테이너가 맡는다
느슨한 결합(Loose Coupling)은 다른 클래스를 직접적으로 사용하는 클래스의 의존성을 줄인다는 의미를 지닌다
결합도를 낮춰 객체 간 결합을 느슨하게 할 수 있다
이에따라 코드 재사용성을 증가시키고, 단위 테스트가 쉬워진다
하나의 컴포넌트 변경이 다른 컴포넌트의 변경을 요구하는 위험을 줄이기 때문에 시스템을 유지하기 좋고, 프레임 워크를 안정적으로 만들며 시스템의 유연성을 증가시킨다
AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)을 지원한다
AOP는 애플리케이션의 주된 비즈니스 로직 외에 애플리케이션의 여러 부분에 걸쳐 반복적으로 나타나는 공통 기능을 따로 분리해 관리하는 것을 의미한다
Spring은 AOP를 지원하여 로깅, 보안, 트랜잭션 관리 같은관심사를 쉽게 분리하고 구현한다
이를 통해 코드를 더욱 모듈화할 수 있다.
Spring은 선언적 트랜잭션 관리 기능을 제공한다
이를 통해 코드에 직접 트랜잭션 처리를 삽입하지 않아도 되고, 데이터 일관성을 유지하기 쉽다.
PSA(Portable Service Abstraction),이식 가능한 서비스 추상화를 지원한다
스프링 프레임워크는 다양한 기술과 라이브러리의 구현체에 관계없이 동일한 방식으로 접근할 수 있도록 추상화를 제공하는 것을 목표로 한다
이를 통해 개발자는 특정 구현체에 의존하지 않고 코드를 더 유연하고 확장 가능하게 작성할 수 있다
Potability는 의식성을 의미하며 특정 기술이나 라이브러리에 종속되지 않고, 필요에 따라 다른 구현체로 쉽게 전환할 수 있는 것을 의미한다
스프링은 데이터 접근을 API 화하거나 트랜잭션 Annotaion을 통해 트랜잭션 관리를 추상화하는 등의 방식을 사용해 PSA를 구현한다

위의 Spring MVC(Model, View, Controller) 는 스프링의 핵심 모듈 중 하나이다
Spring MVC는 Model, View Controller의 협력 관게를 강조한다
사용자와 서버간의 상호작용에 집중하고 클라이언트와 서버간의 구조관점에서 접근한 개념이다
Model은 데이터와 비즈니스 로직을 포함하며 데이터를 관리한다
View는 사용자에게 보여지는 화면(ThymeLeaf, HTMl 등)으로 데이터를 시각화한다
Controller는 요청을 처리하고 Model과 View 를 연결해 사용자의 요청을 처리한다

Layerd Architecture, 계층화된 구조란 애플리케이션을 계층화하여 모듈화하는 것을 말한다
각 계층 간의 책임을 분리해 유지보수성과 확장성을 향상시킨다
또한 테스트와 디버깅에 유리하다
Layered Architecture의 구성요소는 아래와 같다
Presentation Layer: 사용자와 상호작용하는 Layer 이다
Business Logic Layer: 애플리케이션의 핵심 로직을 처리하는 Layer이다
Data Access Layer: 데이터베이스와 상호작용하는 레이어이다(@Repository, @Entity)
DTO(Data Transfer Object): 프로세스 사이에서 데이터를 전송하는 객체이다
스프링 프레임워크에 대해 모르는 만큼 공부하기가 두려웠다
그러나 찾아보니까 흥미롭고 배웠던 내용도 다시 나와서 더 이해가 잘 간다
내일은 더 열심히 해야겠다 ㅎㅎ 화이팅 ~
'[Kotlin&Spring] 5기 내일배움캠프' 카테고리의 다른 글
| [Kotlin&Spring] 5기 JVM을 메모리 관점에서 보기 (0) | 2025.01.24 |
|---|---|
| [Kotlin&Spring] 5기 Web Server, WAS의 차이와 Tomcat (2) | 2025.01.23 |
| [Kotlin&Spring] 5기 로컬과 웹에서의 Cache (2) | 2025.01.21 |
| [Kotlin&Spring] 5기 API - REST API 중심으로 (0) | 2025.01.20 |
| [Kotlin&Spring] 5기 알고리즘, 시간 복잡도 - ArrayList 와 LinkedList (1) | 2025.01.17 |