1. Framework
1) 프레임워크 개념
사전적 의미
산출물
- 산출물 사용
개발 시 설계도를 만들고 → 운영팀에게 코드 + 설계도를 넘김
- 산출물 종류
클래스 다이어그램 시퀀스 다이그램 등 UML, 데이터 테이블 등등
- 산출물 필요 이유
⇒ 유지보수 인력이 바뀌더라도 산출물을 보고 동일한 유지보수가 가능
- 현실적인 문제
→ 사람들이 산출물을 안봄…?(시간이 없어서)
→ 내가 가진 지식 및 노하우를 기반으로, 감으로 시스템을 유지보수/관리
프레임워크 사용 이유
- 위와 같은 상황 시 문제점이 발생
- 감으로 하다보면, 원래의 형태가 아닌 시간이 지날 수록 전혀 다른 형태가 되어있음
→ 이게 바로 현실…
- 근본적인 문제 해결 방법 = 프레임워크 사용
- 각 형태의 규격을 정해줌 → 개발자는 살만 덧붙이면 됨
- 개발자는 뼈대를 건드릴 수 없고, 살만 건드릴 수 있음
⇒ 소프트웨어 관점에서 봤을 때 이런 뼈대를 아키텍처라고 함 (= 와꾸 잡기(?))
- 프레임워크를 사용하면?
동일한 아키텍처를 가지고 있기 때문에, 어떤 개발자가 유지보수를 해도 아주 쉽게 해결 가능
❤️ 프레임워크 역할은? 아키텍처 제공 ❤️
- 프레임워크 = 아키텍처(architecture)
Solution vs Framework
- Solution → 완제품, 돈주고 구매, 뼈+살
- Framework → 반제품, 뼈만
2) 프레임워크 장점
- 빠른 구현 시간
- 관리 용이성 증가
- 소스의 양이 아주 많이 줄어듬
- 관리 시간 감소
- 개발자 역량 획일화
- 검증된 아키텍처의 재사용 및 일관성 유지
3) Java 기반의 프레임워크
Presentation
UI, 화면 관련
프레임워크 종류
-
Struts
-
Spring MVC
- MVC(Model View Controller) 아키텍처 제공하는 UI Layer 프레임워크
Spring
프레임워크에 포함
Business
비즈니스 로직
프레임워크 종류
-
Spring IoC
와 Spring AOP
- EJB의 복잡하고, 메모리 무겁고, 유지보수 힘든 문제 극복
- IoC 와 AOP 모듈을 이용하여 Spirng 컨테이너에서 동작하는 엔터프라이즈 비즈니스 컴포넌트를 개발 가능
Persistence
영속화(영구적으로 저장), DB
프레임워크 종류
-
Hibernate
에서 파생된 JPA
- ORM(Object Relation Mapping) 프레임워크 → SQL 자동으로 제너레이션, 자체적으로 생성
- JPA 는 모든 ORM의 자바 표준 API
-
ibatis
에서 파생된 Mybatis
👉 둘 다 자바코드 한줄로 DB 연동을 처리 = 간편
4) 프레임워크 구조
뼈 + 살 + 메타 데이터
- 애플리케이션 개발시 프레임워크를 사용하여 개발
- 덧붙이는 살 부분
확장 모듈 → 비즈니스 로직
- 뼈와 살을 연결하는 부분
메타 데이터 → XML
환경 설정 파일
2. Spring
1) 개념
- 20년동안, 최고의 자바 엔터프라이즈 어플리케이션 개발 자리를 차지하고 있음
- 스프링 프레임워크 구성 → 20여가지 모듈들은 스프링 핵심 기능 제공(DI, APO 등)
- 단일 아키텍처(모놀리스 형태). 마이크로 서비스 아키텍처로 변환 중
- 여러 모듈 중 스프링 부트, 스프링 클라우드, 스프링 데이터, 스프링 배치, 스프링 시큐리티에 중점
2) 특징
1. 경량 lightweight
.jar
파일들이 매우 용량이 적음
- 빠르다, 가볍다
2. POJO 형태의 객체를 이용하여 어플리케이션 개발 및 운영
3. IoC (Inversion of Control)
4. AOP (Aspect Oriented Programming)
5. 컨테이너 (Container) ❗
6. Framework
7. 느슨한 결합
- Spirng 은 모듈화가 되어 있음
- 대부분의 프레임워크는
jar
파일로 구성
Spirng
은 여러개의 jar
파일로 구성
⇒ jar
파일을 각 모듈의 개념이라고 생각해도 됨
8. 테스트 용이성
9. 기능별로 라이브러리를 제공하여 패키지로 제공
3) POJO
개념
내 마음대로 만드는 클래스
스프링 삼각형
1. 의존 관계 주입
2. PSA
- 내가 만든 클래스가 얼마나 추상적으로 잘 작성했는 가
- 내가 만든 인터페이스가 다른 곳에서 잘 활용할 수 있는가
- 기능 변경 시, 핵심 기능은 건드리지 않고 추상화된 부분만 재사용할 수 있도록 작성했는 가
⇒ 이러한 표현 방식들
3. AOP
❤️ 스프링은? 컨테이너이다 ❤️
- 컨테이너
애플리케이션 운용에 필요한 객체를 생성하고 관리
- 내부적으로 객체들의 저장공간으로 컬렉션(Map 같은)을 사용
Spring framwork 을 본격적으로 공부하기 전에 기본 개념부터 이해해보았다