티스토리 뷰

프레임워크
뼈대나 근간을 이루는 코드들의 묶음. 
라이브러리란, 개발자가 작성해놓은 코드파일을 의미하며, 
API란, 여러 라이브러리가 모여있는 패키지(JAR)를 의미한다.
프레임워크란, API가 굉장히 많이 모여져서 덩치가 커져있는 것을 의미한다.
개발자는 각 개개인의 능력차이가 큰 직종이고, 개발자 구성에 따라
프로젝트 결과 역시 큰 차이를 낳는다. 이런 상황을 극복하기 위한
코드의 결과물이 바로 프레임워크이다.
프로그램의 기본 흐름이나 구조를 정하고 모든 팀원이 이 구조에 자신의 코드를
추가하는 방식으로 개발하게 된다.

프레임워크의 장점
개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에, 실력이 부족한 개발자라 하더라도
반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다.
회사 입장에서는 프레임워크를 사용하면 일정한 품질이 보장되는 결과물을 얻을 수 있고,
개발자 입장에서는 완성된 구조에 자신이 맡은 서비스에 대한 코드를 개발해서 넣기 때문에 
개발 시간을 단축할 수 있다.

스프링 프레임워크
경량 프레임워크(light-weight)
서버를 만드는 데 들어가는 시간이 가장 빠름.
예전 프레임워크는 다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다보니,
하나의 기능을 위해서 너무 많은 구조가 필요했다.
기술이 너무나 복잡하고 방대했기 때문에, 전체를 이해하고 개발하기에는 어려움이 많았다.
그래서 스프링 프레임워크가 등장했고, 특정 기능을 위주로 간단한 JAR파일 등을 이용해서
모든 개발이 가능하도록 구성되어 있다.

스프링 프레임워크의 장점
- 복잡함에 반기를 들어서 만들어진 프레임워크(경량화)
- 프로젝트 전체 구조를 설계할 때 유용한 프레임워크(서버 제작의 빠른 속도)
- 다른 프레임워크들의 포용, 여러 프레임워크를 혼용해서 사용 가능하며 이를 접착성이라고 한다.
- 개발 생산성과 개발도구의 지원

스프링 프레임워크의 특징
- POJO 기반의 구성
- DI를 통한 객체간의 관계 구성
- AOP 지원
- 트랜잭션 관리
- 편리한 MVC 구조
- WAS에 종속적이지 않은 개발 환경

스프링 부트
스프링 프레임워크를 사용함에 있어서 초기 설정 및 필요한 라이브러리에 대한 설정의 어려움이 많으며,
시간이 너무 많이 걸리기 때문에 자동 설정(AutoConfiguration)과 개발에 필요한 모든 것을 관리해주는
스프링 부트를 선호한다. 각 코어 및 라이브러리의 버전들도 맞추어야 하지만 스프링 부트를 사용하면
이러한 복잡성을 해결하기에도 좋다.

라이브러리의 덩치가 커지면 프레임워크
api vs 프레임워크 : 라이브러리 양 차이

 


[POJO(Plain Old Java Object) 기반의 구성] - 자바 쓸 수 있다!
오래된 방식의 간단한 자바 객체라는 의미이며, JAVA 코드에서 일반적으로
객체를 구성하는 방식을 스프링 프레임워크에서 그대로 사용할 수 있다는 말이다.

[의존성 주입(DI)를 통한 객체간의 관계 구성]
의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다.
예를 들어 A객체가 B객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현한다.
하나의 객체a에서 다른 객체b를 필요로 할 때 a가 b에 의존한다.

보통 new를 통해서 메모리 할당을 함.
di기법 : 다른 누군가가 new를 해줘서 주소를 전달해주는 방식.(주입) 
요리(application)가 주체, 칼
요리 안에 칼이라는 객체가 있어야 함.
상황에 맞게 프레임워크가 알맞는 칼을 주입해줌.
요리가 칼한테 의존한다
두 객체간의 관계를 형성할 때 누가 누구한테 의지를 하고 있느냐, >> 의존성
의존성이 스프링이 판단한 다음에 알맞는 객체를 주입을 해준다 >> 의존성 주입
★컨트롤러는 DAO에 의존적이다? 컨트롤러의 메소드 안에서 new를 함.
의존성은 메소드 안에서 new하는 게 아니고 필드에서 new하는 것을 말함.
고로, 컨트롤러와 DAO는 의존성의 관계가 아님.
필드 안에서 new를 할 때만 해당됨. 메소드 안에서는 무조건 new를 해야 함.

주입(Injection)은 말 그대로 외부에서 밀어 넣는 것을 의미한다.
예를 들어 어떤 객체가 필요로 하는 객체를 외부에서 밀어 넣는 것을 의미한다.
주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하든 자신의 역할은 변하지 않는다.

** 의존성
ⓐ →→→→→→→→→→→→ ⓑ
ⓐ객체에서 ⓑ객체를 직접 생성
(a가 b한테 의존하고 있음)

** 의존성 주입
ⓐ →→→→→???↔↔↔↔↔ ⓑ
ⓐ는 ⓑ가 필요하다는 신호를 보내고, ???가 ⓑ객체를 외부에서 생성하여 주입하게 된다.

의존성 주입방식을 사용하기 위해서는 ???라는 존재가 필요하게 된다.
스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며,
필요한 객체들을 생성하고, 필요한 객체들을 주입해주는 역할을 한다.
따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고,
이러한 객체들을 엮는(wiring) 작업의 형태로 개발하게 된다.

ApplicationContext가 관리하는 객체들을 빈(Bean)이라 부르고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로는
XML, 어노테이션, JAVA 방식이 있다.

@Autowired 나 주입받을 거야~

[AOP의 지원]
OOP ( object-oriented programming ) 객체지향 프로그래밍
AOP ( aspect-oriented programming ) 관점지향 프로그래밍
Aspect 관점

출력(로그작성), 예외처리, 트랜잭션 >> 횡단 관심사(공통)
종단 관심사(분리)

관점 지향 프로그래밍.
좋은 개발환경에서는 개발자가 비지니스 로직에만 집중할 수 있게 한다.
스프링 프레임워크는 반복적인 코드를 제거해 줌으로써 핵심 비지니스 로직에만 집중할 수 있는 방법을 제공한다.
보안이나 로그, 트랜잭션, 예외처리와 같은 비지니스 로직은 아니지만,
반드시 처리가 필요한 부분을 횡단 관심사(cross-concern)라고 한다.
스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고 횡단 관심사는 모듈로 분리하는
프로그래밍을 AOP라고 한다. 핵심 비지니스 로직에만 집중하여 코드 개발이 가능해지고,
각 프로젝트마다 다른 관심사 적용 시 코드 수정을 최소화할 수 있으며,
원하는 관심사의 유지보수가 수월한 코드로 구성이 가능해진다.

[트랜잭션의 지원]
DB 작업 시 트랜잭션을 매번 상황에 맞게 코드로 작성하지 않고, 어노테이션이나 XML로
트랜잭션을 쉽게 관리할 수 있다.

트랜잭션 : commit, rollback
@Transactional
하나의 영역이 트랜잭션으로 묶임. 메소드가 종료되면 알아서 커밋까지 자동으로 해주는 것.  
exception이 발생하면 rollback해라는 설정을 할 수 있음.
스프링 프레임워크에서는 이런 설정도 지원해준다.


[단위테스트]
전체 Application을 실행하지 않아도 기능별 단위 테스트가 용이하기 때문에
버그를 줄이고 개발 시간을 단축할 수 있다.


WAS에 종속적이지 않은 개발 환경 > 자바 어플리케이션으로 와스 환경을 구축할 수 있음. > 단위테스트

'2022 > spring boot' 카테고리의 다른 글

day02[Proxy(프록시)]  (0) 2022.11.03
day02[spring MVC 실습]  (0) 2022.11.02
day02[spring MVC2, thymeleaf]  (0) 2022.11.02
day02[oracle cloud]  (0) 2022.11.02
day01[IntelliJ]  (0) 2022.11.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함