본문 바로가기

TIL

[Spring Framework][사용하는 이유]

728x90

학습 목표

  • Spring Framework이 무엇인지 이해할 수 있다. + [Framework와 Library의 차이]

Framework는 우리가 어떠한 애플리케이션을 만들기 위한 틀 혹은 구조를 제공한다.

Framework의 장점

-효율적으로 코드를 작성할수 있다.

아무것도 없는 상황에서 코드를 작성하는것과, 기본 구조가 만들어져 있는 상황에서 코드를 작성하는 것은 많은 차이가 있다 개발하고자 하는 애플리케이션을 밑바닥부터 일일이 전부 개발하는것이 아니라 서로 다른 애플리케이션간의 통신이나, 데이터를 데이터 저장소에 저장하는 등의 다양한 기능들 역시 Framework이 라이브러리 형태로 제공함으로써 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다.

-정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.

우리가 사용하는 Framework의 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 더 빠르고 쉽게 문제점을 파악해 수정할 수 있다. 

동시에 내가 작업했던 코드를 다른사람이 수정할 경우에도 이미 Framework에 규약에 맞게 작성된 코드이기 때문에 빠르게 코드를 파악하고 수정하기 용이하다. 이는 곧 유지보수 이외에도 비슷한 기능을 개발할때 코드의 재사용이 용이하고 기능의 확장 또한 쉽게 확장이 가능하다

Framework의 단점

-내가 사용하고자 하는 Framework에 대한 학습이 필요하다

즉 Framework에서 정하는 규약들을 학습할 시간이 필요하다 Spring의 경우 Java언어에 대한 이해도 필요하지만 추가로 Springdlfksms Framework에 대한 학습이 필요한 이유다

-자유롭고 유연한 개발이 어렵다

우리가 사용하는 Framework에 규약을 벗어나기가 어렵다. 이미 만들어진 애플리케이션에서 Framework를 변경하거나, 유연한 개발을 위해서 Framework를 사용하지 않게 변경할 경우 많은 시간과 노력이 필요하다

 

Framewor과 Library의 차이는?

Library는 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드이다 소프트웨어 관점에서도 Library는 애플리케이션을 개발할 때 필요한 기능을 미리 구현해놓은 집합체이다.

실생활에 가까운 예시로 들면, 차체를 구성하는 Frame, 그리고 바퀴,핸들 혹은 엔진과 같은 다양한 부품들이 모여서 하나의 자동차를 이루고 있다. 이 자동차를 구성하고있는 요소에서 Framework는 자동차의 뼈대를 의마하고, Library는 자동차에서 다양한 기능을 제공하는 부품을 의미한다.

실제로 자동차를 구매후 부품을 교체할 때 Frame은 쉽게 교체할 수 없다. 하지만 바퀴나 와이퍼, 핸들 등은 언제든 쉽게 교체가 가능하다

소프트웨어 관점에서도 한번 정해진 Framework를 교체하는 일은 어렵지만 Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다는 의미이다.

Library는 애플리케이션 흐름의 주도권이 개발자에 있지만, Framework는 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework에있다.

Framework는 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다.

  • Spring Framework을 왜 배워야하는지 이해할 수 있다.

우리가 웹 애플리케이션 개발을 위한 Framework에는 Spring뿐만아니라 ,Django, Express, Flask, Lalavel 등 다양한 Framework를 통해 개발이 가능하다.

각각 Framework마다 사용하는 언어도 다르고 개발 방법도 조금씩 다른데 Spring Framework만의 장점

 

  • POJO(Plan Old Java Object)기반의 구성
  • DI(Dependency Injection) 지원
  • AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원
  • Java 언어를 사용함으로써 얻는 장점

JSP를 이용한 애플리케이션

JSP는 Java Server Page의 약자로 초창기 Java 기반의 웹 애플리케이션 개발은 JSP를 통해 이루어 졌다

JSP개발 방식은 사용자에게 보여지는 View 페이지쪽 코드와 사용자의 요청을 처리하는 서버쪽 코드가 섞여있는 형태의 개발 방식이다

이 방식의 문제점은 코드 자체가 너무 길어서 가독성이 떨어지고, 복잡해보이며 그로인해 유지보수 측면에서 최악의 방식이라 볼수 있다.

JSP방식보다 조금 나은 개발 방식은 Servlet을 이용한 개발 방식이다

 

서블릿(Servlet)을 이용한 애플리케이션

앞에서 설명한 JSP방식 역시 내부적으로는 Servlet 방식을 사용한다 Servlet은 클라이언트 웹 요청 처리에 특화된 Java 클래스의 일종이라 보면되는데 Spring을 사용한 웹 요청을 처리할때도 내부적으로는 Servlet을 사용한다 라는것을 기억하자.

여기서 의미하는 Servlet을 사용한다는 의미는 Servlet을 위한 Java 코드가 클라이언트 측 코드에서 분리되어 별도의 Java 클래스로 관리된다는것을 의미한다.

 

Spring MVC를 이용한 애플리케이션

서블릿 방식의 코드는 클라이언트의 요청에 담긴 데이터를 꺼내오는 작업을 개발자가 직접 코드로 작성 해야되고, 캐릭터셋도 지정해 주어야하는데 반면 Spring MVC방식의 코드는 눈에보이지 않지만 그런 작업들을 Spring에서 알아서 처리해준다

그런데 Spring의 편리함과 간결함에도 불구하고 Spring 기반의 애플리케이션의 기본구조를 잡는 설정 작업이 여전히 불편하다는 단점이 존재한다.

 

Spring Boot를 이용한 애플리케이션

Spring의 복잡한 설정 작업마저도 Spring이 대신 처리를 해주기 때문에 개발자는 애플리케이션의 핵심 비즈니스 로직에만 집중할 수 있게 됐다.

 

Point

Spring Framework이 도입되기 전에는 JSP나 Servlet 기술을 사용한 Model1, Model2 아키텍쳐를 기반으로 한 Java 웹 애플리케이션을 제작했다.

Spring MVC 방식이 도입됨으로써 Java웹 애플리케이션의 제작 방식이 획기적으로 변하게 되었다.

Spring MVC 설정의 복잡함과 어려움을 극복하기 위해 Spring Boot이 탄생하게 됐다.

 

Level Up

  • Java Servlet이란?

Java Servlet 자체를 사용하는 기술은 현재 거의 사용하고 있지 않지만 Servlet은 Spring MVC 같은 Java 기반의 웹애플리케이션 내부에서 여전히 사용되고있다. 

참조 : 자바 서블릿: https://ko.wikipedia.org/wiki/자바_서블릿

  • Servlet Container란?

서블릿 컨테이너는 서블릿 기반의 웹 애플리케이션을 실행하주는 것부터 시작해 서블릿의 생명주기를 관리하며 쓰레드풀(Thread Pool)을 생성해서 서블릿과 쓰레드를 매핑 시켜주기도한다.

참조 : 서블릿 컨테이너: https://ko.wikipedia.org/wiki/웹_컨테이너

아파치 톰캣(Apache Tomcat)은 서블릿 컨테이너의 한 종류로써 Spring MVC 기반의 웹 애플리케이션 역시 기본적으로 아파치 톰캣에서 실행된다.

참조 : 아파치 톰캣

 

728x90

'TIL' 카테고리의 다른 글

[SpringFramework][IoC/DI기초]  (0) 2022.10.15
[SpringFramework][POJO]  (0) 2022.10.14
[Spring][DI]  (0) 2022.10.13
[데이터베이스와 SQL][SQL문정리]  (0) 2022.10.10
[DB][SQL][WHERE][TRUNCATE,DELETE,DROP 차이]  (0) 2022.10.10