Framework
- 비즈니스 로직이 빠진 반제품 상태의 애플리케이션
- 더 쉬운 이해를 위한 예시
- 일상 생활 속에서 발표 자료를 만들 때 파워포인트를 찾는다. 하지만 우리가 파워 포인트가 없다고 해서 발표자료를 못 만드는 것은 아니다.
- 직접 그릴 수도 있고, 메모장으로 만들 수도 있다.
- 좀 더 편리하게 발표 자료를 만들기 위해 파워 포인트를 사용하는 것이다.
- 프레임워크도 위와 같이, 좀 더 편리하게 프로그램을 만들기 위해 사용하는 것이다.
Spring Framework
- 스프링이 없어도 우리는 충분히 프로젝트를 끝낼 수 있다. 하지만 스프링이 있다면 보다 짧은 시간에 적은 노력으로 우리가 이루려는 바가 달성될 수 있다.
- 스프링을 사용하면 개발자는 비즈니스 로직에만 집중할 수 있다.
SpringBoot
- Spring의 경우 설정이 반이다. 설정이 아주 번거롭고 복잡하다. 이를 개선해서 설정 자동화를 이루어 낸 것이 Spring Boot 이다.
- Spring Boot는 또한 내장 톰캣과 같은 WAS 환경을 내장해서 실행 속도도 개선했다.
- 또한 단위테스트도 강화해서 프로젝트의 안정성도 강화했다.
- Spring Boot와 상대적인 개념으로 이전까지의 Spring 을 레거시 스프링 이라고 한다.
Spring의 주요 특징
- 스프링의 특징을 소개할 때엔 보통 위와 같은 스프링 삼각형을 활용한다.
DI (Dependency Injection)
- 의존성 주입
- 의존성 : 어떠한 행동을 수행할 때 필요한 것 혹은 사용하는 것
- 예를들어 학교에서 학생에게 수업을 진행할 때 필요한 교안을 제공한다고 치자. 이 것을 학교가 학생에게 의존성을 주입한 것이다. 만약 해당 교안이 없어지면 학생은 학교에게 교안을 요청하면 된다.
- 즉, 의존성은 내가 만드는 것이 아니라 밖에서 만들어서 가지고 오는 것이다.
- DI는 필요한 의존성을 직접 생성하거나 관리하지 않는다. 대신 외부에서 만들어진 것을 주입 받아서 사용한다.
AOP (Aspect Oriented Programming)
- 관점 지향 프로그래밍
- 관심사의 분리를 통해 코드를 모듈화하고 재사용성을 강화하는 프로그래밍 패러다임
- 예를 들어, 음식 배달 서비스를 들어보자.
- 음식 배달의 핵심은 음식을 조리하는 것이다. [ 핵심 관심사 ]
- 하지만 수익을 내야 하니 주문을 받고 배달을 하는 등의 역할 또한 수행해야 한다. [ 부가 관심사 ]
- 핵심 관심사 (core concern)
- 부가 관심사 (cross cutting concern) == 횡단 관심사
- AOP는 위와 같은 부가 관심사들을 모듈화 해서 재사용하는 것을 목적으로 한다.
- 이렇게 AOP를 사용하면 모듈화를 통해 코드의 유지보수성을 향상 시키고 디버깅을 용이하게 하는 등의 이점이 있다.
PSA (Portable Service Abstraction)
- 공통적으로 사용할 수 있는 부분을 추상화된 레이어로 제공하는 것
- 추상화 == 단순화
- 복잡한 서비스를 내부에 숨겨 추상화(단순화) 시키고, 결과적으로 일관된 방식으로 여러 기술에 접근할 수 있게 도와준다.
- 예를 들어, 우리는 자전거 기어를 동작시킬 뿐 자전거 기어가 동작하는 원리에 대해 알지 못한다
- 위와 같이 복잡한 기술은 내부적으로 숨겨서 단순화하여 일관된 방식으로 제공하는 것을 말한다.
POJO (Plain Old Java Object)
- 삼각형 가운데 있는 POJO는 위에서 언급했던 DI, AOP, PSA 등을 처리하기 위해 우리가 이전에 해왔던 평범한 방식대로 평범한 자바 객체를 만들어서 사용하면 된다는 것이다.
- 과거 EJB에도 위와 같은 방식을 수행할 수 있었으나 여러 복잡한 과정이 있었고, 스프링은 그럴 일 없이 그냥 우리가 쓰던 일반 자바 객체를 사용하면 된다는 것이다.
- 예시를 들어보자.
- 햇빛이 강하게 쬐는 여름날, 우리가 할 수 있는 것은 선크림 바르기, 양산 펴기 등이 있다. 이 것은 내가 하는 것이다. (상속 받은 것)
- 여기서 지구 자체적으로 큰 막을 쳐준다면 나는 그냥 나 그 자체 ( 평소 객체 )로 있으면 된다.
- 위의 예시 처럼 아무 조건 없이 클래스가 만들어 지면 ( 나 그 자체 ) 특정 기술이나 환경에 종속될 필요가 없다. 주변에서 (지구) 필요한 것들을 나에게 제공하면 된다. 여기서 지구의 역할을 스프링 프레임 워크가 수행한다는 것이다.