본문 바로가기

참고자료

FrameWork 와 SpringFrameWork

1. 프레임워크란 무엇일까

 

프레임 = 틀 , 표준, 구조

워크 = 동작, 행동, 일

 

합치면 뭐가 될까 

틀에 맞는 동작이나 행동이다. 

즉, 프레임워크는 표준 구조를 구현하는 클래스와 라이브러리의 모임이다.

주된 목적은 소프트웨어의 구체적인 부분의 설계와 구현을 재사용할 수 있게끔 하기 위해서이다.

프레임워크를 이용한 개발은 목적에 따라 효율적으로 구조를 짜놓는 개발이다.

 

2. 장점과 단점

장점은

-- 코드를 처음부터 일일이 짜지 않아도 되어 효율적이다. 시간과 비용, 생산성이 올라간다. 

-- 품질이 좋아진다. 반복작업이나 실수하기 쉬운 부분을 어느정도 보완해준다.

-- 유지 보수에 좋다. 회사 입장에서는 체계적이고 형식이 정해져 있어 유지보수에 용이하다.

-- 확장성이 좋다. 새롭게 업데이트 된 항목들을 사용할 수 있다.

 

단점은

-- 학습시간이 길다.

-- 제작자가 설계한 구조를 유지해야 하며, 설계에서 벗어나야 할 필요가 있는 부분은 유연성은 떨어진다.

   

 

3. Spring FrameWork 란?

java 를 사용하는 프레임워크이다.  

POJO 기반의 개발을 편하게 해준다.

 

잠깐 POJO에 대해서 짚고 넘어가자면

POJO 는 Plain Old Java Object 의 약자이다.

말이 거창하지 그냥 우리가 흔히 자바 공부할때 볼 수 있는 클래스들이다. 

그냥 자바 객체라고 생각하자

클래스 설계시에는 가독성과 재사용성에 초점을 둔다.

 

세트로 잘 나오는 내용중 하나가 Beans 클래스이다. 

POJO와는 다르게 엄격한 규칙을 가지고 있다. 

필드는 접근제어자가 private 여야 한다.

또 필드는 getter와 setter가 있어야 하고 getter 와 setter로만 접근되어야 한다.

또 생성자는 argument 를 가지면 안된다. 

 

JDBC, Mybatis, JPA 등의 라이브러리 연동을 지원한다.

전자정부 프레임워크도 Spring 기반이다.

 

4. 그럼 Spring은 왜 쓰는가? Spring 의 특징

-- 다양한 영속성 API 지원

 

-- DI (= Dependency injection)

의존성 주입이다.

객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시킨다. 

DI를 통해서 결합도가 낮아지고 유연성은 증가한다.

이때 자주볼 수 있는게 Inversion of Control 즉, IOC 라고 불리는 것이다.

그냥 대충 이해하고 싶다면 IOC는 방식이다. 디자인패턴의 하나이기 때문이다.

 

DI 는 스프링에서 제공하는 기능이다.

DI는 한마디로 제어의 흐름을 바꾸는 것이다.

이 DI도 스프링 내부의 IOC Container를 통해서 이루어진다.

스프링의 IOC Contrainer 가 객체의 생성과 의존성 관리를 책임진다.

또 IOC Contrainer 는 POJO의 생성, 초기화, 서비스 ,소멸에 대한 권한을 가진다.

개발자들이 직접 스프링에서 쓰이는 객체와 의존성을 Control 해야되는 데

스프링이 객체와 의존성은 Control해서 실제 의존성을 개발자들에게 쥐어주니 

제어의 역전이 일어난 것이라고 볼 수 있다. 

 

-- AOP (= Aspect Oriented Programming)

관점 중심 프로그래밍이다.

로직도 종류가 있다. 

각각 별개의 로직을 종단관심이라고 한다.

그리고 이 종단 관심 전반에서 쓰이는 공통적인 기능들을 횡단관심이라고 한다.

AOP를 써서 중복되는 코드를 분리하면 유지보수, 생산성, 재활용 가능성이 높아진다.

 

예를 들어보자. 

로직이 3개 있다. 근데 공통된 코드들을 각각의 로직에 넣었다. 

만약 공통된 코드를 수정하려면 수정해야 할 횟수는 3번이다. 

근데 3번 수정할 동안 어딘가 오타가 난다면? 그리고 코드의 전체적인 양도 많아진다.

하지만 종단관심과 횡단관심으로 나눈 후 공통코드를 수정해야 한다면

수정해야 할 횟수는 1번이다. 

 

'참고자료' 카테고리의 다른 글

자바 8 과 자바 11의 특징  (0) 2021.10.14
메시지 큐 (Message Queue)란?  (0) 2021.08.28
Request 의 방식의 종류  (0) 2021.07.06
JSON Web Token (JWT)  (0) 2021.07.06
쿠키, 세션, 캐시  (0) 2021.07.06