1) 앞으로 공부할 것들
1. 스프링 프레임 워크를 이용해서 '의존성 주입' 에 대한 이해와 테스트
2. 스프링에서 XML을 이용하는 객체 관리 방법
3. 스프링의 테스트 환경 구축
에 대해 공부하기 시작!😊
2) 스프링(Spring)이란?
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로 줄여서 스프링이라고 불린다.
3) 프레임워크(Framework)란?
- 뼈대나 근간을 이루는 코드들의 묶음을 뜻한다.
- 개발자는 각 개개인의 능력차이가 큰 직종이고, 개발자 구성에 따라 프로젝트 결과 역시 큰 차이를 낳는다.
- 이런 상황을 극복하기 위한 코드들의 결과물이 바로 프레임워크이다.
- 프로그램의 기본 흐름이나 구조를 정하고 모든 팀원들이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 된다.
4) 프레임워크의 장점
- 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에 실력이 부족한 개발자라 하더라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다.
- 회사입장에서는 프레임워크를 사용하게 되면 일정한 품질이 보장되는 결과물을 얻을 수 있다.
- 개발자입장에서는 완성된 구조에 자신이 만든 코드를 붙여넣어서 개발하기 때문에 개발시간을 단축할 수 있다.
5) 스프링 프레임워크(Spring Framework)이란?
1. 경량급(light-weight) 프레임워크
- 예전 프레임워크는 다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다 보니 하나의 기능을 위해 너무 많은 구조가 필요했다.
- 기술이 너무나 복잡하고 방대했기 때문에 전체를 이해하고 개발하기에는 어려움이 많았다.
- 그래서 스프링 프레임워크가 등장했고, 특정 기능을 위주로 간단한 JAR파일 등을 이용해서 모든 개발이 가능하도록 구성돼있다.
- 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
- EJB를 주 프레임워크로 사용할 때 불편했던 점들을 해소시켜준다.
6) 스프링 프레임워크(Spring Framework)의 장점
- 복잡함에 반기를 들어서 만들어진 프레임워크
- 프로젝트의 전체 구조를 설계할 때 유용한 프레임워크
- 다른 프레임워크들과의 혼용이 가능하다. 포용력이 높다.
- 개발 생산성과 개발도구의 지원이 가능하다.
7) 스프링 프레임워크(Spring Framework)의 특징
- DI(의존성 주입)을 통한 객체 간의 관계 구성
- POJO 기반의 구성
- AOP(Aspect - Oriented - Progamming) 지원
- 편리한 MVC 구조
- WAS에 종속적이지 않은 개발 환경
8) POJO(Plain Old Java Object) 기반의 구성
- Plain Old Java Object 로 별 다른 뜻이 아닌 단순히 자바 객체를 사용하겠다는 뜻이다.
- 오래된 방식의 간단한 자바 객체라는 의미이며, JAVA코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레임워크에서 그대로 사용할 수 있다는 뜻이다.
9) DI(의존성 주입)을 통한 객체 간의 관계 구성
Dependency
- 의존성이란? 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다.
- ex) A객체가 B객체 없이 동작할 수 없는 현상을 'A가 B에 의존적이다.' 라고 표현한다.
Injection
- 주입은 말 그대로 외부에서 밀어 넣는 것을 의미한다.
- ex) 위의 상황에 B객체를 외부에서 밀어 넣는 것을 의미한다. 주입을 받는 객체 입장에서는 어떤 객체인지 신경을 쓸 필요가 없고, 어떤 객체에 의존하든 자신의 역할은 변하지 않게 된다.
결론
의존성 주입방식을 사용하기 위해서는 ???라는 존재가 필요하게 된다.
스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며
필요한 객체들을 생성하고 주입까지 해주는 역할을 한다.
따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고,
이러한 객체들을 엮는(Wiring) 작업의 형태로 개발하게 된다.
ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라 부르고
빈과 빈 사이의 의존 관계를 XML설정, 클래스설정, 어노테이션 설정 방식을 이용할 수 있다.(미리 설정하는 방법)
10) AOP(Aspect - Oriented - Progamming) 지원
- 관점 지향 프로그래밍
- 좋은 개발환경에서는 개발자가 비즈니스 로직에만 집중할 수 있게 한다.
- 스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공한다.
- 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만
반드시 처리가 필요한 부분을 횡단 관심사(cross concern)라고 한다.
- 스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고 횡단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 한다.
- 이를 통해 생기는 3가지의 이점을 알아보자
1. 핵심 비즈니스 로직에만 집중하여 코드 개발
2. 각 프로젝트마다 다른 관심사 적용시 코드 수정 최소화
3. 원하는 관심사의 유지보수가 수월한 코드 구성 가능
11) 트랜잭션의 지원
- DB작업시 트랜잭션 관리를 매번 상황에 맞게 코드로 작성하지 않고, 어노테이션이나 XML로 트랜잭션 관리를 설정할 수 있다.
✔ 막간 용어 풀이 ✔
애플리케이션 프레임워크
- 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 뜻한다.
- 애플리케이션 프레임워크는 개발의 전과정을 빠르고 효율적으로 진행하는데 일차적인 목표를 둔다.
엔터프라이즈 개발 용이
- 개발자가 복잡하고 실수하기 쉬운 Low Level에 대한 관심을 줄이고, 비즈니스 로직 개발에 전념할 수 있도록 지원한다.
오픈소스
- 스프링은 오픈소스 기반으로 소스코드가 공개되어있고 기능을 추가하거나 수정이 가능하다.
- 국내의 전자정부 프레임워크가 스프링을 기반으로 제작되어 있다.
<주요 구성 요소>
AOP
- 관점 지향 프로그래밍
IoC / DI
- Ioc : 제어의 역전
- DI : 의존관계주입
PSA
- Portable Service Abstractions
- 쉬운 서비스 추상화
POJO(Plain Old Java Object)
- Plain Old Java Object 로 별 다른 뜻이 아닌 단순히 자바 객체를 사용하겠다는 뜻
AOP(Aspect-Oriented Programmig)
- 기능의 관심사를 종단 관심사와 횡단 관심사로 구분하여 핵심 관심사에 집중하고, 횡단 관심사는 시스템(=Framework)에서 담당하게 하는 것
IoC(Inversion of Control) : 제어의 역전
- 프로그램의 흐름을 개발자가 아닌 프레임워크가 주도한다는 의미로 스프링 컨테이너가 프로그램의 흐름을 제어한다는 의미
- 스프링 컨테이너가 제어권을 가짐으로서, DI, AOP 등이 가능해짐
DI(Dependency Injection) : 의존성 주입
- 객체간의 의존성을 자신의 내부코드가 아닌 외부의 주입으로 가능하게 하는 것으로 외부의 설정파일 등을 통해 정의함
- 의존 관계 설정이 컴파일 시가 아닌 실행시에 이루어져 모듈간의 결합도를 낮춤
- 코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드 수정없이 사용가능
PSA(Portable Service Abstraction) : 쉬운 서비스 추상화
- 환경의 변화와 관계없이 일관된 방식의 기술로 접근 환경을 제공하려는 추상화구조를 뜻함
- 추상화란 하위 시스템의 공통점을 뽑아서 분리시키는 것
- 추상화를 하면 하위 시스템이 어떤 것인지 알지 못하거나 하위 시스템이 변해도 일관된 방법으로 접근이 가능
- 일반적인 Mybatis는 다른 Java Framework 에서 사용가능한 라이브러리들과 Spring에서 지원하는
Mybatis 라이브러리는 다르다. Spring 에서는 추상화하여 Mybatis 라이브러리를 제공하므로 Mybatis가 변경이 되어도 Spring에서 제공되는 라이브러리의 사용법은 변하지 않음
<구동원리>
<구성도>
'Back-End > Spring' 카테고리의 다른 글
[Spring] Spring - Mybatis, 로그레벨 설정하기 (0) | 2021.08.27 |
---|---|
[Spring] 스프링 프로젝트 의존성 주입 테스트, 오라클 연동하기 (0) | 2021.08.25 |
[Spring] Lombok 설치하기 (0) | 2021.08.25 |
[Spring] 프로젝트 생성하기(Maven) (0) | 2021.08.25 |
[Spring] STS(Spring Tool Suite) 설치하기 (0) | 2021.08.25 |