본문 바로가기
Spring Framework/SPRING MVC

Spring 역사 #1 (EJB)

by 거북이의 기술블로그 2024. 8. 20.
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를 기본으로 사용한다
  • Session Bean 
    • 상태 없는 세션 빈 (Stateless)
      • 특징
        • 클라이언트의 상태를 저장하지 않는다.
        • 최대 메서드 호출 기간 동안 상태를 저장할 수 있다
        • 메서드 호출 기간이 지나면 상태 정보는 유지되지 않는다.
      • 예시
        • "문의하기" 링크가 있는 애플리케이션일 경우
        • 1) 클라이언트 요청 ( Body : 받는사람 정보 + 보낸사람 정보 )
        • 2) 서버는 "받는 사람 및 보낸 사람" 정보를 기반으로 이메일을 생성할 수 있음
        • 3) 서버는 응답을 통해 클라이언트에게 전달
    • 상태 유지 세션 빈 (Stateful)
      • 특징
        • 메서드와 트랜잭션을 통해 빈과 특정 클라이언트 간의 상호작용을 반영하는 상태정보를 유지
        • 클라이언트와 다른 빈 간의 상호작용을 관리하거나 워크플로를 관리할 수 있다
      • 예시
        • 로그인한 개인이 개인 프로필 정보를 보고 업데이트  
        • 1) 클라이언트 요청 (로그인 데이터)
        • 2) 서버 로직 ( 로그인 데이터 유효성을 검사하는 다른 빈을 호출 )
        • 3) 서버 로직 ( 권한 확인 인증 )
        • 4) 서버 응답 ( 인증된 사용자의 프로필 정보에 액세스하는 빈 호출)
    • 싱글톤 세션 빈
      • 특징
        • 싱글톤 세션 빈은 JVM에서 애플리케이션당 한번 세션 빈이 인스턴스화 되고 애플리케이션이 종료될때까지 존재하도록 보장하는 공식 프로그래밍 구조 제공
        • 여러 인스턴스 또는 여러 빈에서 공유하여 쉽게 사용 가능
        • Stateless 상태 빈과 유사하게 제공되나, 차이점은 한개의 인스턴스를 이용해서 사용하는 점이 차이가 있다.
      • 예시
        • (@Lock(Read)) 기능을 이용하여 "다중" 스레드 액세스 허용
          • 동시성을 올리기 위해 "읽기"에서 다중 스레드 허용
        • (@Lock(Write)) 기능을 이용하여 "단일" 스레드 액세스 허용 
          • "쓰기"를 할 때에는 트랜잭션이 유지되어야 하기 때문에 단일 스레드 허용

 

 

EJB 컨테이너

  • 애플리케이션 서버에 배포되는 빈을 위한 런타임 컨테이너
  • 서버가 시작될 때 자동으로 생성되며 빈과 런타임 서비스 간의 인터페이스 역할
    • 특징
      1. 라이프 사이클 관리
      2. 코드 생성
      3. 보안
      4. 거래 관리
      5. 잠금 및 동시성 제어
    • 장점
      1. 인스턴스 풀링 : 객체를 미리 생성하여 메모리에 저장 후 사용 준비 상태에 들어감
      2. 트랜젝션 처리 : 자동으로 컨테이너가 처리메소드에 대해 트랜젝션 처리
      3. 퍼시스턴스 관리 : 빈의 상태를 메모리에서 사용여부에 따라 활성화/비활성화 처리

 

EJB 활용 시기

  • 안정적인 분산처리를 하기 위해서 활용
  • 많은 동시접속자가 있을때 사용 (많은 동접자 트랜잭션이 필요할때 유용)
  • 속도는 느릴수 있어도, 안정성은 높음

 

EJB 단점

  • 인터페이스와 구현의 구분이 명확하게 되어있지 않음
  • 객체지향적이지 않음
  • 복잡한 구조로 되어있음
  • EJB에 의존적 (테스트가 유용하지 못함 / 컨테이너 안에서만 동작 가능)

 

참고

https://docs.oracle.com/cd/E24329_01/web.1211/e24972/examples.htm#EJBAD122

 

Spring과 EJB는 상호 배타적인 상황이 아니므로, 주어진 문제에 있어 분산이 필요하거나 안정성을 높일때에 EJB도 고려할 수 있다.

'Spring Framework > SPRING MVC' 카테고리의 다른 글

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