-
Spring 역사 #1 (EJB)백엔드/SPRING MVC 2024. 8. 20. 14:37
EJB (Enterprise Java Beans)
EJB ?
- Enterprise JavaBeans 는 oracle에서 표준기술로서 내놓은 "비즈니스 로직" 구현을 위한 방법으로 나온 기술이다.
- Bean은 객체라고 이해하면 좋을 것 같다.
- EJB는 이러한 Bean들의 재사용성을 높이고 편리한 개발을 추구했다.
- ex) webLogic , Jeus 등을 이용해 개발됨
Bean 종류
- Bean 종류
- 세션 빈 (session Bean)
- DB 사용 없이 빈을 사용할때에 session Bean 사용
- 주로, 비즈니스 로직 처리
- 엔티티 빈 (Entity Bean)
- DB와의 상호작용을 위해 Entity Bean 사용
- Entity Bean은 DB의 Record를 담당하게 되고, Entity Bean 을 이용해서 해당 CRUD를 진행하게 된다.
- EJB 3.0 이후 부터는 Entity Bean 대신해서 JPA를 기본으로 사용한다
- DB와의 상호작용을 위해 Entity Bean 사용
- 세션 빈 (session Bean)
- Session Bean
- 상태 없는 세션 빈 (Stateless)
- 특징
- 클라이언트의 상태를 저장하지 않는다.
- 최대 메서드 호출 기간 동안 상태를 저장할 수 있다
- 메서드 호출 기간이 지나면 상태 정보는 유지되지 않는다.
- 예시
- "문의하기" 링크가 있는 애플리케이션일 경우
- 1) 클라이언트 요청 ( Body : 받는사람 정보 + 보낸사람 정보 )
- 2) 서버는 "받는 사람 및 보낸 사람" 정보를 기반으로 이메일을 생성할 수 있음
- 3) 서버는 응답을 통해 클라이언트에게 전달
- 특징
- 상태 유지 세션 빈 (Stateful)
- 특징
- 메서드와 트랜잭션을 통해 빈과 특정 클라이언트 간의 상호작용을 반영하는 상태정보를 유지
- 클라이언트와 다른 빈 간의 상호작용을 관리하거나 워크플로를 관리할 수 있다
- 예시
- 로그인한 개인이 개인 프로필 정보를 보고 업데이트
- 1) 클라이언트 요청 (로그인 데이터)
- 2) 서버 로직 ( 로그인 데이터 유효성을 검사하는 다른 빈을 호출 )
- 3) 서버 로직 ( 권한 확인 인증 )
- 4) 서버 응답 ( 인증된 사용자의 프로필 정보에 액세스하는 빈 호출)
- 특징
- 싱글톤 세션 빈
- 특징
- 싱글톤 세션 빈은 JVM에서 애플리케이션당 한번 세션 빈이 인스턴스화 되고 애플리케이션이 종료될때까지 존재하도록 보장하는 공식 프로그래밍 구조 제공
- 여러 인스턴스 또는 여러 빈에서 공유하여 쉽게 사용 가능
- Stateless 상태 빈과 유사하게 제공되나, 차이점은 한개의 인스턴스를 이용해서 사용하는 점이 차이가 있다.
- 예시
- (@Lock(Read)) 기능을 이용하여 "다중" 스레드 액세스 허용
- 동시성을 올리기 위해 "읽기"에서 다중 스레드 허용
- (@Lock(Write)) 기능을 이용하여 "단일" 스레드 액세스 허용
- "쓰기"를 할 때에는 트랜잭션이 유지되어야 하기 때문에 단일 스레드 허용
- (@Lock(Read)) 기능을 이용하여 "다중" 스레드 액세스 허용
- 특징
- 상태 없는 세션 빈 (Stateless)
EJB 컨테이너
- 애플리케이션 서버에 배포되는 빈을 위한 런타임 컨테이너
- 서버가 시작될 때 자동으로 생성되며 빈과 런타임 서비스 간의 인터페이스 역할
- 특징
- 라이프 사이클 관리
- 코드 생성
- 보안
- 거래 관리
- 잠금 및 동시성 제어
- 장점
- 인스턴스 풀링 : 객체를 미리 생성하여 메모리에 저장 후 사용 준비 상태에 들어감
- 트랜젝션 처리 : 자동으로 컨테이너가 처리메소드에 대해 트랜젝션 처리
- 퍼시스턴스 관리 : 빈의 상태를 메모리에서 사용여부에 따라 활성화/비활성화 처리
- 특징
EJB 활용 시기
- 안정적인 분산처리를 하기 위해서 활용
- 많은 동시접속자가 있을때 사용 (많은 동접자 트랜잭션이 필요할때 유용)
- 속도는 느릴수 있어도, 안정성은 높음
EJB 단점
- 인터페이스와 구현의 구분이 명확하게 되어있지 않음
- 객체지향적이지 않음
- 복잡한 구조로 되어있음
- EJB에 의존적 (테스트가 유용하지 못함 / 컨테이너 안에서만 동작 가능)
참고
https://docs.oracle.com/cd/E24329_01/web.1211/e24972/examples.htm#EJBAD122
Spring과 EJB는 상호 배타적인 상황이 아니므로, 주어진 문제에 있어 분산이 필요하거나 안정성을 높일때에 EJB도 고려할 수 있다.
'백엔드 > SPRING MVC' 카테고리의 다른 글
Spring Bean (+ Bean Factory) (0) 2024.08.21 Spring 컨테이너 (0) 2024.08.21 SOLID 규칙 적용 (+순수 자바 버전 , spring) (0) 2024.08.21 Spring 역사 #3 (Spring의 탄생) (0) 2024.08.20 Spring 역사 #2 (POJO) (0) 2024.08.20