SpringFramework/BASIC

스프링 프레임워크의 기본 개념 정리

유혁스쿨 2020. 8. 28. 23:31
728x90
반응형

스프링프레임워크 라는게 무엇인가 왜 등장했고 왜 사용하는가 어디에서 주로 사용하는가

Maven이라는 저장소는 무슨일을 하는가

 

스프링 프레임워크(SpringFramework)

 

스프링 프레임워크는 현재 5가 최신버전이며 4버전을 현재까지 가장 많이 사용하고 있습니다.

4버전 부터는 RestAPI기능이 추가되었습니다

RestAPI란 의존 환경이 하나의 백엔드 서버를 두고 많은 클라이언트들이 붙게됩니다, 웹 브라우저가 될수도있고 안드로이드폰, 아이폰이 될수도 있습니다. 그래서 하나의 백엔드를 쓰기위해 사용되는 API입니다.

스프링에는 4버전부터 RestAPI를 구축할 때 사용할 수 있도록 RestController라는 기능이 도입되었습니다.

5버전부터 Reactive앱을 만들기위한 기능들이 추가되었습니다.


 

스프링은 크게 Spring Framework Springboot두가지로 나뉘게됩니다.

 

Spring Framework

SpringBoot

Legacy Project

Boot Project

커스텀

(모든 모듈과 기능들을 사용자가 직접 설정)

기본설정

(톰캣 등 기본 기능과 모듈들이 내장)

준비된게 없으니 설정해서 사용하세요

기본적으로 세팅해놨으니

더 쓰고싶은 기능이 있다면

입맛에 따라 넣어 사용하세요


 

프레임워크에 대해서 이야기 해보겠습니다.

프레임워크 - 뼈대를 이루는 코드들의 묶음

-프레임 워크란 기본 뼈대 입니다. 자동차를 만들때 뼈대를 구현한 다음 만듭니다.

-프레임 워크는 방향성을 제시하고 원하는 기능을 빠르게 만들 수 있게 합니다.

 

재밌는 이야기로 예를들어 보겠습니다

 

우리가 부대찌게를 끓인다고 할때 끓이기 까지 준비해야하는 여러 과정들과 방법들이 있습니다

 

첫번째 방법으로 마트에가서 재료를 삽니다.

우리가 만약 고추장이 필요하다면 마트에서 고추장을 구매합니다.

이때에 고추를 구매해서 고추장을 직접 만들수도있습니다.

구매하지 않고 직접 농사를지은 고추로 고추장을 만들수도 있겠죠.

햄이 필요하다면 햄도 구매하면 됩니다.

하지만 돼지를 직접 잡아서 말린후 숙성,훈제를 해서 햄을 직접만들수도 있습니다.

그밖의 야채, 떡, 라면, 파, 양파 등의 모든 재료를 산 후 하나 하나 칼질등으로 가공해서 냄비에 넣고 끓입니다.

 

두번째 방법으로는 마트에가서 햄과 야채 등 재료들을 각각 구매해서 썰고 씻고 데치는 등 요리를 하기위한 재료 손질등의 가공을 마친 후 냄비에 넣고 끓입니다.

 

세번째 방법입니다. 레토르트 부대찌게... 재료가 1인분으로 포장되어 있는 제품을 사다가 냄비에 부워 끓입니다.

스프링 프레임워크가 바로 세번재 방법입니다.

스프링 프레임워크를 사용하면서 우리는 웹페이지를 구성하기위한 개발만을 합니다.

일련의 작업들, 내부에서 객체를 관리하고 라이프사이클을 관리하고 각 객체들을 연결하는 작업들을 해줍니다.

스프링 프레임 워크는 바로 웹페이지 제작에 대한 생산성을 높여주게됩니다.


 

스프링 프레임워크의 주요 기능으로는 DI, AOP, MVC, JDBC등을 제공합니다.

DI(Dependency Injection) : 의존성주입

AOP(Aaspect Oriented Programming): 관점지향 프로그래밍

MVC(Model View Controller)

JDBC(Java DataBase Conectivity)

쉽게 말해 이러한 주요 기능들을 아주 쉽게 사용할 수 있도록 해주는 템플릿 이라고 빗대어 말할수있습니다.

 

모듈

- 라이브러리

- 프레임워크 안에 들어있는 기능

 

스프링에서 모듈이란 무엇일까요?

스프링 안에서 템플릿 기능들을 쉽게 사용할 수 있도록 미리 만들어져서 묶어놓은것들을 모듈이라고 볼수있습니다


-# POJO(Plain Old Java Object) 기반의 프레임워크

자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 스프링 컨테이너로 부터 필요한 객체를 얻어올 수 있습니다.

자바기반의 plain한 객체에대해서 객체지향개념을 그대로 사용하는 기반 OOP기반,자바의 객체기반을 잘 잡아주는 프레임워크입다.

- 자바객체의 라이프사이클 : 객체가 생성되고 (new로 생성되고 heap에서 소멸되는 라이프사이클)

- 스프링 컨테이너 : 스프링에 존재하는 하나의 박스

ㄴ 집사 - 장을봐서 부대찌게재료들을 항상 넣어둔다.

 

-# DI(Dependency Injection)

각 계층이나 서비스 들 사이 또는 객체들 사이에 의존성이 존재할 경우 스프링 프레임워크가 서로를 연결시켜줍니다.

이는 클래스들 사이에 약한 결합을가능케 합니다.

기존의 객체를 사용하는방식은 우리가 필요할때 new연산자로 혹은 필요할때 객체를 리턴해 주는 메서드로 객체를 생성하고 받아왔습니다

하지만 의존성 주입이라는 기능을 사용한다면 우리는 가만누워서 집사(Container)한테 집사야! 햄주입! 이러면 햄객체가 알아서 주입됩니다. 변수선언만 했는데 객체가 막 들어오게되죠

 

만약 우리가 연예기획사를 운영하는 사장입니다. - 연예기획사라는 객체가 존재

연예기획사가 생산적이기 위해서는 연예인,직원,소비자가 필요합니다.

ㄴ이때 연예기획사는 생산을 위해서 연예인에,소비자,직원들에게 의존적이게 됩니다.

ㄴ직원은 핸드폰에 의존적 (휴식시간에 핸드폰을 하겠죠?)

 

객체안의 필드들,Attribute속성,멤버변수들을 선언하는데 그것들이 또 하나의 객체가 될 수 있다는것 입니다.

스프링은 그것들을 조립하게됩니다. 의존적인객체 즉,그 안에 꼭 있어야하는 객체

그런 의존성이 존재할경우 서로에대한 의존성을 자동으로 잡아줍니다. 필요한객체를 꺼내서 자동으로 주입해준다

ㄴ new 연예기획사() 객체생성 - 연예인이없네?

스프링: 너 그거 없으면 안되는데? 하나 주입해줄게!(라고 말하며 연예인 하나 잡아다가 주입)

 

-# AOP(AaspectOrientedProgramming) - 관점지향 프로그램

트랜잭션 , 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용할 수 있습니다.

로깅 : 우리가 주로 사용하는 log로는 - System.out.println()메서드가 있습니다

"~메서드가 호출됨." 이것을 우리가 매일넣어줘야합니다...

스프링에서는 이렇게 공통적인 기능을 하는것들을 설정했을때 자동으로 딱딲딲ㄸ까ㄸㄱ쏴줍니다

 

-# 확장성이 높다

스프링프레임워크 소스는 모두 라이브러리로 분리시켜 놓음으로써 필요한 라이브러리만 가져다 쓸 수 있습니다. 그리고 많은 외부 라이브러리들도 이미 스프링 프레임워크와 연동되고 있습니다.

JSP Servlet DBConnector나 JSTL문법을위해 라이브러리를 직접 다운받아서 파일을 직접 넣어줬습니다.

스프링 프레임워크는 JSP와 다르게 라이브러리를 코드로 다운받을 수 있습니다.

 

-# Model2방식의 MVC Framework를 지원

JSP Servlet에서는 직접 FrontController을 제작해서 URL매핑등록, doGet(), doPost(), View안내 지정등을 다 코드하여 사용했으나스프링에는 프론트컨트롤러가 미리 만들어 져 있습니다.

자동으로 계층간 연결을 해줍니다. 순수 개발에만 집중할 수 있도록 도와줍니다.


 

모듈 이란?

모듈이란, '전체를 다루는 일부'를 뜻합니다.

그리고, 일반적으로 컴퓨터 용어에서 부르는 모듈이란 '컴파일이 완료된 바이너리'입니다.

또한, 이 때의 모듈에서는 기존의 모듈의 의미인 '어떤 일부'라는 의미가 들어가야겠지요.

즉, 컴퓨터 용어에서 모듈은'라이브러리'를 말하게 되는 것입니다.

라이브러리는 여러가지의 타입들, 함수들을 모아둔 집합의 용어를 뜻합니다.

그렇다면 모듈과 라이브러리는 뭔 차이일까요?

라이브러리라는 모듈을 사용할 때에는 '어떤 것의 일부'로 사용된다는 의미가 좀더 강하게 됩니다.

모듈이라는 용어는 여러 부분에서 사용이 됩니다.

어디에서 사용되냐에 따라서 중심적인 의미는 같으나, 조금씩 의미가 달라지는 경향이 있을 수는 있습니다.

이미 컴파일이 완료됬는데 '어떠한 것에 대한 일부'로 사용된다는 의미로써,

라이브러리를 뜻하는 것일 수도 있지만, 중심적인 뜻은 같지만 틀이 변형된 뜻으로 해석될수도 있습니다

 

다음 표는 스프링 프레임워크에서 제공하고 있는 기본적인 모듈 입니다

스프링 모듈

기능

spring-core

스프링의 핵심인 DI(Dependency Injection)와 IoC(Inversion of Control)를 제공

spring-aop

AOP구현 기능제공

spring-jdbc

데이터베이스를 쉽게(적은 양의코드) 다룰수있는기능 제공

spring-tx

스프링에서제공하는트랜잭션 관련기능 제공

spring-webmvc

스프링에서 제공하는 컨트롤러(Controller)와 뷰(View)를 이용한스프링MVC 구현기능제공

 

 

스프링 프레임워크에서 제공하는 모듈을 사용하려면 모듈에 대한 의존성을 개발 프로젝트에 xml파일등을 이용해서 개발자가 직접 하면 됩니다

xml설정방식 : Maven방식, Maven폴더구조인 Maven Repository를 사용합니다.


스프링 컨테이너(IOC) : 스프링에서 객체를 생성하고 조립하는 컨테이너(Container)로, 컨테이너를 통해 생성된 객체를 빈(Bean)이라고 부릅니다. 이때에 Bean객체는 xml파일을 생성후 선언합니다.

ㄴ제어의역전 : 제어가 역전되었다 즉, 순서가 바뀌었다.

 

 

 

 

IOC : 제어의역전 - 미리 필요한것을 다 준비후 필요할 때 마다 꺼내서 사용

기존방식

스프링 방식

부대찌게를 끓일때 햄이 필요하다.

햄을 사러가야 하는게 우선이다

햄이 필요하면 집사(Container)한테 말을 해놔라(xml) 햄이 필요하다고

햄을 사러가는것을 new 햄() 이라고 했을 때,

햄을 샀으면 햄 변수에 주입을 해줘야 한다.

햄이 떨어질 때 마다 집사(Container)가 햄을 채워놓는다

 

 

728x90
반응형