1. Spring Framework란?
- JAVA의 웹 프레임워크로 다양한 애플리케이션을 만들기 위한 틀이다.
- JAVA를 이용한 활용도와 프로젝트의 규모가 커져감에 따라 JSP, MyBatis, JPA등의 기술들을 더욱 편리하게 사용 하기 위해 만들어진 프레임 워크이다.
- 프로젝트 진행시 코드의 중복을 줄여주고, 비지니스 로직을 간단하게 해준다.
2. Framework란?
- 소프트웨어 개발에 있어서 뼈대 역할을 하는 구조화된 환경
- 즉, 기본이 되는 뼈대와 자주 쓰일 법한 기능 등을 모아놓은 구조/환경을 말한다.
※라이브러리와의 차이점
- 라이브러리는 개발자가 주체가 되어 필요한 순간에 가져다 쓰는 것이다.
- 프레임워크는 프레임워크가 주체가되어 프레임워크의 규칙, 약속에 맞게 개발자가 개발을 하는 것이다.
-> 관련 설명(이 유튜버가 설명을 잘 한거 같습니다.)
www.youtube.com/watch?v=t9ccIykXTCM
라이브러리는 라이브러리를 사용한 부분을 바꿀 수 있습니다. 하지만 프레임워크는 그 것을 바탕으로 개발을 진행하기 때문에 바꾸려면 아에 처음부터 다시 시작합니다. 즉 프레임워크는 뼈대이기 때문에 쉽게 바꾸지 못하는 것이죠
간단하게 요약하면 "라이브러리는 개발자가 부르는 것, 프레임워크는 프레임워크가 개발자를 부르는 것!" 으로 요약할 수 있겠네요
3.특징
1. 경량컨테이너
경량급의 뜻은 스프링 자체가 가볍거나 작은 규모라는 뜻이 아닙니다. 오히려 여러개의 모듈로 세분화되고 매우 긴 코드를 가진 복잡하고 방대한 프레임워크입니다.
단, 불필요한 기능들을 제외했다는 면에서 무겁지 않다는 뜻으로 경량급 프레임워크라는 수식어가 붙었습니다. 그 예로 톰캣(Tomcat)이나 제티(Jetty)에서도 완벽하게 동작하는 프레임 워크입니다. 즉, 군더더기 없이 깔끔한 기술을 가졌다는 의미로 '경량급' 프레임워크가 된것 입니다.
또한, 빠르고 간편하게 작성하도록 해줌으로써 생산성, 품질면에서 우수하다는 스프링의 특징입니다.
2. Spring 컨테이너
스프링 프레임워크의 핵심으로 주입을 이용하여 객체를 관리하는 컨테이너입니다. 컨테이너의 사전적 의미는 무언가를 담는 용기, 즉 그릇을 의미합니다. 스프링에서 컨테이너는 자바빈이라는 객체를 관리하는 그릇 정도로 이해 할 수 있는데, 빈의 생성, 관계, 사용, 생명주기 등을 담당합니다.
2. IOC(Inversion Of Controll) 제어의 역행
제어의 역행이란 제어가 사용자에서 컨테이너로 넘어갔다는 뜻입니다. 2번 프레임워크에서 말했다시피 프레임워크는 직접 제어를 하며 개발자가 작성한 코드를 사용합니다.
즉, 스프링 객체의 생명주기를 프레임워크가 대신 해주는 것을 말합니다.
차후에 다루겠지만 @Autowired 등의 annotation을 이용하여 Bean을 자동으로 주입하는 것이 이에 해당합니다.
3. DI(Dependency Injection) 의존성 주입
DI는 구성요소(객체) 간의 의존관계가 있을 경우에 소스내부에서가 아닌 외부 설정파일을 통해 정의되는 방식을 말합니다.
DI는 나중에 구체적인 예를 가지고 다시 언급하겠습니다.
==============================2021-05-03 추가===================================
DI, IOC의 개념을 풀어서 쓴 글입니다.
develaniper-devpage.tistory.com/42
============================================================================
4. AOP(Aspect-Oriented Programming) 관점지향 프로그래밍
AOP는 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통으로 사용하는 기능을 분리하여 관리 하는 특징을 말합니다.
클래스가 여러개 있을 때 서로 같은 기능이 중복되는 부분이 있다고 가정해 볼때, 실용성과 가독성 및 효율성에서 큰 손해를 가져올 것입니다. 이러한 점을 보완하기 위해 중복되는 기능을 모두 빼 놓은 후 필요에 따라 호출하여 쓰는 것이 훨씬 효율적으로 개발할 수 있는 방법입니다.
AOP는 OOP(객체지향프로그래밍)를 더욱 OOP 답게 사용할 수 있는 기법이라고 합니다. 개인적으로 AOP를 이해하는데 조금의 어려움이 있었기에 차후 실제 코드를 사용하여 다시한번 AOP를 다루겠습니다.
5. POJO(Plain Old Java Object)방식
POJO란 특정 기술에 종속되지 않은 순수한 자바 객체를 뜻합니다.
POJO를 지향해야하는 이유는 POJO가 아닌 객체를 사용하면 가독성이 떨어지고 확장성이 떨어지는 등 객체지향적인 설계의 장점을 잃기 때문입니다.
6. MVC(Model-View-Controller) 패턴
Model - 데이터 모델을 의미합니다. 간단히 말하면 다루는 데이터라고 생각할 수 있습니다.
View - 사용자에게 보여지는 화면으로 표현할 수 있습니다.
Controller - 사용자의 요청을 받고, 응답을 주는 로직을 담당합니다.
1. 사용자가 요청을 보내면 DispatcherServlet이 요청을 받습니다.
2. 이 요청은 HandlerMapping을 통해 요청된 URL과 매핑되는 컨트롤러를 찾습니다.
3. 찾은 컨트롤러를 HandlerAdapter에서 Controller를 실행합니다.
4,5. 컨트롤러는 비즈니스 로직을 실행하여 필요한 결과를 만들어 냅니다.
6. 생성된 결과는 ModelAndView, String, Void등의 형태로 리턴되는데 이 때 View에서 참조할 Model을 만들게 됩니다.
7, 8. 결과를 받은 DispatcherServlet은 다시 이 결과를 응답하기 위해 ViewResolver를 통해 필요한 View를 검색합니다.
9~11. 찾은 View에 응답생성을 요청하고 JSP 기타 정적파일들을 이용하여 응답페이지를 만들어 Client에게 응답합니다.
조금 간단하게 Model, Controller, View로 나누어 흐름을 보면 위와 같이 나오겠네요
※ 위의 내용은 제 이해를 바탕으로 쓴 내용들이며 실제와 차이가 있을 수 있습니다. 부족한 내용이나 인지하는 즉시 수정하겠습니다.
4. 공부 목적
이전 까지는 "직접 해보고 프로젝트까지 만들어 봤으면 됐다.", "완성된 코드만 있으면 증거는 충분하다." 라는 생각을 했지만, 취업을 준비하며 한번 해본 프로젝트는 한번 해본 걸로 끝이라는 생각을 하게 되었습니다.
프레임워크를 사용하면서 그 특성을 살리지 못하고 Spring답게, Java답게 프로그래밍 하지 못한 것과 기능 구현만을 목적으로 프로젝트를 진행하다 보니 남는 것도 없고 깊게 파본 기억도 없다는 생각이 들었습니다.
따라서 배우기만 하고 제대로 정리해 본 적이 없는 스프링을 사용되는 개념, 구체적인 소스코드 작성등을 업로드 하며 나중에 다시 참고할 수 있고 공부했다는 흔적을 남기고자 합니다.
5.참고 링크
스프링 프레임워크 및 특징
jerryjerryjerry.tistory.com/62
Spring MVC
'개발 > Spring Framework' 카테고리의 다른 글
[SpringFramework] 2.느슨한 결합 & DI & IOC (0) | 2021.05.02 |
---|
댓글