ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 기본으로 사용한다
    • 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 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
Designed by Tistory.