WAS(Web Application Server)와 WS(Web Server)의 차이
- Web Server는 정적인 데이터를 처리하는 서버
- Web Server에는 NginX, Apache 등이 있음
- Web Application Server는 Web server에 Web Container를 추가한 것으로 Web Container에서 서블릿, Java code 등을 수행하여 동적인 데이터를 처리하는 서버
- Web Application Server에는 Tomcat, JBoss 등이 있음
- 두 서버 모두 HTTP 프로토콜을 기반으로 함
Spring Framework란?
- Spring Framework는 Java 개발을 편리하게 해주는 오픈소스 프레임워크
- 경량 컨테이너로 자바 객체를 담고 직접 관리함
- 객체의 생성, 소멸, 라이프 사이클을 관리하며 언제든 Spring 컨테이너로부터 필요한 객체를 가져옴
- IOC 기반의 프레임워크
- 객체가 직접 생성하지 않고 외부에서 컨트롤하는 것(제어권이 넘어가는 것)
- IOC는 DI와 DL에 의해 구현됨
- DL : 의존성 검색
- 컨테이너가 제공하는 API를 사용해서 사용하고자 하는 빈을 검색하는 방법
- DI : 의존성 주입
- 빈 설정정보를 바탕으로 컨테이너가 자동으로 의존성을 주입하는 것
- POJO
- 복잡한 EJB와 달리 getter/setter를 가진 단순 자바 오브젝트로 정의
- 단순 오브젝트는 의존성이 없고 추후 테스트, 유지보수가 편리한 유연성의 장점을 가짐
- AOP
- OOP는 관심사가 같은 데이터를 한 곳에 모아 분리하고 낮은 결합도로 독립적이고 유연한 모듈로 캡슐화하는 것
- 이런 과정 중 중복되는 코드들이 많아지고 가독성, 확장성, 유지보수성을 떨어뜨림
- 이를 해결한 것이 AOP
- 핵심 기능과 공통 기능을 분리하여 핵심 로직에 영향을 끼치지 않게 공통 기능을 끼워넣는 개발 형태
- 중복되는 코드를 제거할 수 있고 공통 기능은 한 곳에서만 수정하여 유지보수성이 좋아짐
- Spring은 AOP를 편리하게 사용할 수 있도록 지원함
- MVC
MVC 패턴 (Model2) 출처 : https://khj93.tistory.com/entry/Spring-Spring-Framework란-기본-개념-핵심-정리
- Model
- 데이터 처리를 담당하는 부분
- Service 영역은 불필요하게 HTTP 통신을 하지 않아야하고, View 부분이 변경되더라도 Service 부분은 그대로 재사용할 수 있어야 한다.
- View
- 사용자에게 보여지는 부분
- Controller를 통해 모델의 데이터에 대한 시각화를 담당
- Controller
- View로 부터 받은 정보를 Model에 제공하고 Model로 부터 가공된 정보를 View로 전달
- Spring Framework의 구조
- Spring Core
- Spring Container를 의미함
- 내부의 Bean Factory는 IOC 패턴을 적용하여 객체 구성부터 의존성 처리까지의 역할을 담당
- Spring Context
- JNDI, EJB, Validation, Scheduling, Internalization 등 엔터프라이즈 서비스에 대한 정보를 제공하는 설정 파일
- Spring AOP
- Spring에서 AOP를 적용할 수 있게 도와주는 모듈
- Spring DAO
- Spring JDBC DAO는 추상 레이어를 지원해서 코딩이나 예외처리하는 부분을 간편화시켜 일관된 방법으로 코드를 짤 수 있게 도와줌
- Spring ORM
- 객체-관계-매핑 도구를 사용할 수 있도록 지원
- Spring Web
- Web Application 개발에 필요한 기본적인 기능을 지원
- Spring MVC
- Model2 구조로 Application을 만들 수 있도록 지원
@Transactional의 동작 원리
- 비즈니스 로직과 트랜잭션 코드가 공존하면 코드 중복이 발생하고 비즈니스 로직에 집중할 수 없는 문제 발생
- @Transactional 어노테이션을 사용하면 내부적으로 AOP를 통해 트랜잭션 처리코드가 전, 후로 수행됨
- JDK Dynamic Proxy 혹은 CGLib 방식을 사용해서 트랜잭션 코드를 붙임
- AspectJ를 사용해 직접 바이트코드를 수정할 수도 있음
객체지향이란?
- 프로그램에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 각 객체간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
- 객체를 기반으로 객체간의 의존을 최소화해 결합도를 줄이고 객체를 캡슐화하여 응집도를 높이는 것을 의미함