거북이-https://velog.io/@violet_evgadn 이전완료

Spring 본문

웹 개발/Spring(이론)

Spring

VioletEvgadn 2022. 8. 2. 22:55

Spring Framework

◎ Framework란?

Framework의 사전적 의미는 "뼈대"이다. 이를 컴퓨터 쪽과 접합하면 뼈대가 되는 코드들이라고 말할 수 있을 것이다.

 

즉, 프레임워크란 SW 구체적인 부분에 대한 설계 및 구현을 쉽게 하기 위해 재사용이 가능한 클래스들을 제공하는 것이라고 말할 수 있다.

 

예시를 들어보자.

차체 외곽을 만드려고 하는데 색깔이 다르다는 이유로 2개의 서로 다른 외곽을 만들 필요가 없다.

차체 외곽을 2개 동일하게 만들고 만들어진 외곽에 프린트칠을 다르게 하여 결과적으로는 다른 2개의 제품을 만드는 것이다. 이 상황에서 차체 외곽이 Framework가 되는 것이다.

 

◎ Spring Framework란?

스프링 프레임워크를 한 마디로 정의하자면 아래와 같다

자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

여기서 애플리케이션 프레임워크는 일반 프레임워크가 1가지 기술에 특화된 목표를 가지고 있는 것과 다르게, 전 영역(모든 기능)을 포괄하는 범용적인 프레임워크를 말한다.

즉, 애플리케이션 프레임워크란 애플리케이션 개발 전 과정을 도와주는 프레임워크라고 보면 되겠다.

 

사실 Spring Framework란 단어 자체가 매우 어려운 개념이다. 그나마 조금 풀어서 설명해보자면 아래와 같다.

 

스프링 프레임워크란 기업 사이즈의 개발 환경, 대규모 데이터 처리와 트랜잭션이 여러 사용자로부터 행해지는 대규모 환경을 위한 애플리케이션을 개발하는데 도움을 주는 프레임워크인 것이다.

 

◎ Spring Framework 장점

개발에 필요한 구조가 이미 만들어져 있기 때문에 필요한 부분을 조금씩 수정하고 조립하는 형태로 쉬운 개발이 가능해졌다.

 

또한 어느정도 품질이 보장되어 있고 이미 복잡한 부분에 대한 코딩이 어느 정도 되어 있는 구조에 원하는 알고리즘만 코드로 짜서 개발하는 형태이기 때문에 개발 시간이 단축된다는 점도 장점이다.

 

◎ Spring Framework 단점

스프링 프레임워크는 결국 "프레임워크"이다. 즉, 이미 형식에 맞춰져있다는 것이다.

만약 이 형식을 벗어난 유연한 개발을 하고 싶다면 Spring Framework는 한계를 보일 것이다.

 

또한 프레임워크 구조를 이해해야 활용할 수 있으므로 이를 이해하는데 오랜 시간이 걸린다는 단점도 존재할 것이다.


Spring Framework 특징

아래 설명할 내용은 Spring Framework의 특징이자 이를 사용하는 이유가 될 것이다.
하지만, 최근에도 Spring Framework가 웹 개발에 있어서 최고의 프레임워크냐고 묻는다면 자신 있게 고개를 끄덕일 수는 없을 것 같다.(이후에 워낙 좋은 프레임워크들이 많이 나왔다) 
그럼에도 불구하고 특징들을 알아 놓는다면, 다른 프레임워크를 활용할 때 왜 좋은지 쉽게 이해할 수 있을 것이다.
스프링을 제대로 공부하기 전에 왜 스프링 프레임워크를 써서 웹 개발을 수행하는지 잘 이해하자

◎ IoC

Spring Framework는 IoC 기반 프레임워크이다. 여기서 우리는 IoC에 대해 알 필요가 있다.

하지만 IoC와 그 구성요소인 DI와 DL은 설명하기에 너무 방대하며, 이전에 Spring Container와 Spring Bean도 설명해야 할 필요가 있다. 따라서, 다음 장에서 더욱 자세히 설명하도록 하겠다

 

◎ POJO기반의 구성

POJO(Plain Old Java Object)는 "평범한 자바 오브젝트"를 의미한다.

 

POJO 이전에는 EJB(Enterprise JavaBeans)라는 것이 유명했다. 이 EJB는 재사용이 가능한 로직을 개발하기 위해 사용되었는데 한 가지 기능을 위해 불필요한 로직이 과도하게 들어가는 단점이 존재했다. 즉 나는 A라는 기능만 넣고 싶은데 이를 위해 B, C 기능에 대한 로직도 포함되어야 했다는 것이다.

 

이런 단점을 보완하기 위해 조명받은 것이 POJO이다.

POJO기반의 구성이라는 말은 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않고 "Java 코드를 이용해서 객체를 구성하는 방식"만 활용해서 개발이 가능하다는 의미이다.

따라서 개발자는 기타 로직을 활용하지 않고 가장 일반적인 Java 코드 형태로 개발을 진행할 수 있게 되었다.

이는 곧 높은 생산성을 이끌었고 유연한 테스트를 할 수 있다는 장점을 가지고 왔다.

 

실제로 Spring Framework는 이 POJO에 대해 아래와 같이 설명한다

"POJO를 사용함으로써, 당신의 코드는 더욱 심플해졌고, 그로인해 테스트 하기에 더 좋으며, 유연하고, 요구사항에 따라 기술적 선택을 바꿀 수 있도록 바뀌었다."

 

◎ AOP 지원

AOP는 관점 지향 프로그래밍의 줄임말이다.

스프링은 AOP를 통해 반복적인 코드를 줄여 핵심 비즈니스 로직에만 집중할 수 있게 도와준다.

 

예를 들어, 메서드의 실행 시간을 재는 코드가 있다고 가정하자. 개발자는 이 실행 시간을 중요시 생각하여 모든 메서드에 해당 로직을 넣으려고 한다.

AOP가 없다면 개발자는 1개 메서드마다 코드를 짜서 넣어야 할 것이다. 하지만 AOP를 활용하면 반복적인 코드를 한 번만 짠 이후 해당 코드를 모든 메서드에 적용시켜 반복적인 코드를 짤 필요가 없게 될 것이다.

 

AOP도 Spring의 핵심 부분이라고 말할 수 있기 때문에 나중에 조금 더 자세히 다루도록 하겠다.

 

◎ 편리한 MVC 구조

MVC란 "Model, View, Controller"를 1단어로 표현한 것이다.

MVC 구조를 통해 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있어 각 계층마다의 역할이 더욱 확실해져 많이 활용되는 구조이다. Spring Framework로 이 MVC 구조를 쉽게 구현할 수 있다.

 

아래 사진을 보면 MVC 구조를 이해할 수 있을 것이다. 화살표는 영향을 미친다는 의미이다.

Model은 데이터로써 Controller에만 데이터(이벤트)를 전달하거나 받을 수 있다.

Controller는 Model에 데이터를 받아 View에 전달하거나 User에게 이벤트를 받으면 이벤트의 처리를 Model을 통해 요청한다.

View는 Controller가 Model에서 받은 정보를 바탕으로 User에게 보여주는 화면을 띄워주는 역할을 하는 것이다

 

출처 : https://m.blog.naver.com/jhc9639/220967034588

 

<Model>

Application의 데이터를 담당하는 부분이다.

 

Model은 몇 가지 특징을 가진다.

 

1. 사용자가 편집하길 원하는 모든 데이터를 가져야 한다.

예를 들어 사용자가 블로그 화면을 본다고 가정하자. 이 경우 Model은 어떤 글이 블로그에 올라와 있고, 어떻게 보여야 하는지, 사진의 크기는 어느 정도인지 등의 정보를 모두 가지고 있어야 한다는 것이다.

 

2. View나 Controller에 대한 정보를 가지면 안된다.

데이터가 변경되었을 때 Model이 직접 View나 Controller를 수정하면 안 된다는 것이다.

온전히 Model은 데이터를 받고 전달하는 역할만 수행해야 한다.

 

<View>

사용자 Interface를 담당한다. 즉, 사용자가 보는 부분을 의미한다.

 

View도 몇 가지 특징을 가진다.

 

1. 모델이 가지고 있는 정보를 따로 저장하면 안 된다.

모델을 통해 사용자 화면에 어떤 이미지가 띄워져야 하는지 등에 대한 정보가 주어질 것이다. 하지만 이 정보를 View 측에서 저장하면 안 된다는 것이다.

만약 그 창에 대한 요청이 새로웠다면 Model에서 정보를 새로 받아 화면을 띄워야지 이전 정보를 활용해서는 안된다는 의미이다.

 

2. Model과 Controller 구성요소들을 몰라야 한다.

Model과 마찬가지로 View 또한 다른 요소들이 어떻게 동작하는지 몰라도 된다. 단순히 Model에게 정보를 받아 화면에 표시해주고 이벤트가 발생했을 때 Controller에 이벤트를  전달해주는 역할만 담당한다

 

<Controller>

데이터와 사용자 Interface 요소들을 잇는 다리 역할을 수행한다.

즉, 사용자가 수행하는 "이벤트를 처리하는 부분"을 의미한다.

 

Controller도 몇 가지 특징을 가진다.

 

1. 모델이나 뷰에 대해 알고 있어야 한다.

Model과 View와는 달리 Controller는 전체 구성에 대해 알고 있어야 한다.

Controller는 결국 Model과 View의 다리 역할로써, Model과 View가 요청하는 작업을 수행해야 할 필요가 있다.

따라서 Model과 View에 대한 정보를 모두 알아 이벤트를 처리하거나 데이터를 전달해주어 Model과 View가 서로의 역할을 수행할 수 있도록 도와줘야 하는 것이다

 

2. 모델이나 뷰의 변경을 모니터링해야 한다

결국 Model과 View는 직접적으로 서로에게 영향을 끼치지 못한다. 따라서 Model과 View는 Controller에 변경을 요청하거나 이벤트에 대한 처리 등을 요청하게 된다. 따라서 Controller는 항상 Model과 View를 모니터링하며 변경 사항을 주시하고, 변경 사항이 왔을 경우 처리하는 메인 로직을 담당해야 하는 것이다

 

◎ WAS에 독립적인 개발 환경

웹 서버에서는 단순 이미지 HTML을 처리하고 WAS(Web Application Server)에서 동적인 데이터를 처리한다.

예를 들어 내가 좋아요를 눌렀을 때 좋아요 버튼이 빨개지는 것은 웹 서버에서 수행되지만, 실제로 좋아요 값이 1 증가되었다는 것은 WAS 상에서 이루어진다는 것이다.

 

Spring Boot는 기본 내장 WAS로 Apache Tomcat을 가지고 있다.

꼭 이 내장 WAS를 활용하지 않아도 되기는 하지만, 개발자는 WAS에 대한 큰 고민 없이 개발을 진행할 수 있다는 특징을 가지게 되는 것이다.


요약

Spring Framework란 "자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크"이다.

 

Spring Framework는 여러 가지 특징을 가진다.먼저 IoC 기반 프레임워크로써, 객체(개발자)가 프로그램 흐름을 주도하는 것이 아닌 특수한 객체(Spring Container)가 프로그램 흐름을 주도한다.또한 POJO 기반의 구성으로 원하는 기능에 집중하여 개발할 수 있으며 이는 높은 생산성과 유연한 테스트를 할 수 있다는 장점을 가지고 왔다.또한 AOP를 지원하는데, 반복적인 기능에 대한 반복적 코딩을 줄여 핵심 비즈니스 로직에만 집중할 수 있게 도와준다.내장 WAS로 Apache Tomcat을 가지고 있으므로 WAS와 독립적인 개발 환경을 가진다.MVC 구조를 편리하게 지원하는데, MVC 구조란 Model, View, Controller 계층으로 나누어 각 계측마다 상호작용하며 프로그램이 수행되는 것이다.Model은 데이터를 전달하거나 이벤트를 통한 데이터 Update 역할을 담당하며 View는 Client에게 보여주는 인터페이스를 담당한다. 마지막으로 Controller는 Model과 View 사이의 징검다리 역할을 하며 실질적인 로직을 처리한다.

'웹 개발 > Spring(이론)' 카테고리의 다른 글

IoC와 DI  (0) 2022.08.03
스프링 컨테이너와 스프링 빈  (0) 2022.08.03
IntelliJ 단축키 + 추천 코딩 방법  (0) 2022.08.02
IntelliJ에 Github 연동하기  (0) 2022.08.02
Project 생성  (0) 2022.08.02
Comments