개발/Spring
[Spring] 스프링
JaeHoist
2022. 12. 27. 18:07
2. Spring 기본
(1) 들어가기에 앞서
- Web Server와 WAS의 차이 (참고자료)
- Web Server
- 정적인 리소스(html,css,js)를 제공하는 서버
- 종류 : Apache, IIS, NginX
- Web Application Server
- Web Server + Web Container (Servlet Container)
- 동적인 리소스(DB조회, 로직처리)를 제공하는 서버
- 비즈니스 로직 수행
- JBOSS, Tomcat, Jeus, Jetty
- 분리하는 이유?
- WAS는 복잡한 로직처리를 하고 단순한 정적 컨텐츠는 웹 서버에게 맡기며 기능을 분리시켜 서버 부하를 방지한다.만약 WAS가 정적 컨텐츠 요청까지 처리하면, 부하가 커지고 동적 컨텐츠 처리가 지연되면서 수행 속도가 느려지고 이로 인해 페이지 노출 시간이 늘어나는 문제가 발생하여 효율성이 크게 떨어진다.
- Web application
- Deployment Descriptor
- Deployment Descriptor
- IOC/DI (Inversion OfControl / Dependency Injection) - 제어의 역전 / 의존성 주입
- Application 내의 컴포넌트 간 낮은 결합도와 높은 응집도를 지키게 하는 원리
- Application을 구성하는 객체(Bean)의 생성과 소멸을 개발자가 아닌 Container가 관리함 (라이프사이클에 대한 제어의 역전)
- Bean과 Bean 사이의 의존 관계를 Container가 처리 함 (의존성 주입을 통한 제어의 역전)
- AOP (Aspect Oriented Programming)
- 관점 지향 프로그래밍
- DI가 의존에 대한 주입이라면 AOP는 로직에 대한 주입
- 모든 어플리케이션마다 공통적으로 필요한 기능(횡단 관심사)를 분리
- 중복의 제거를 통해 중요 비즈니스 로직(종단 괌심사)에 대해 더욱 관심을 가지게 함
- 횡단 관심사 → Logging, 인증, 트랜잭션 처리, 비동기 처리
- 종단 관심사 → 과제 생성, 과제 사용자 등록
- PSA (Portable Service Abstraction)
- 환경의 변화와 관계 없이 일관된 방식으로 기술에 접근 할 수 있는 환경을 제공하려는 추상화 구조
→ Spring은 언어가 아닌 기술(구현체의 기술)에 얽매이는 것에 큰 반감을 가짐
→ Spring에서 동작 할 수 있는 Library들은 POJO 기반으로 구현되어 있음 - 대표적인 추상화의 예
- JPA의 구현체인 Hibernate, Eclipse Link를 추상화 하는 Spring Data JPA
- Mybatis를 추상화하는 Spring-mybatis (Spring Data 시리즈가 아님을 유의)
- 환경의 변화와 관계 없이 일관된 방식으로 기술에 접근 할 수 있는 환경을 제공하려는 추상화 구조
- 특정 규약에 종속되지 않는다
→ POJO는 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 한다.
따라서 EJB와 같이 특정 규약을 따라 비즈니스 컴포넌트를 만들어야 하는 경우는 POJO가 아니다.
특정 규약을 따라 만들게 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다.
대표적으로 Servlet을 개발하려면 HttpServlet을 상속해야 하는 사례이다.
- 특정 환경에 종속되지 않는다.
→ 특히 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경정보나 웹 기술을 담고 있는 클래스나 인터페이스를 사용해서는 안된다.
대표적으로 비즈니스 로직을 담은 코드에 HttpServletRequest나 HttpSession과 관련된 API가 등장하는 경우 진정한 POJO라고 볼 수 없다
- Web Server