본문 바로가기

Programming/JAVA

EJB에 대한 질문들~

 
출처 Don't Worry~ Be Happy!! | 바간나
원문 http://blog.naver.com/swucs/40003182876
▒ 게시물 보기 ▒ ▒ 분류 : 전체 ▒   | 목록 | 새글등록
등록자 :  고덕한     최종수정 : 2004-04-30 15:12:35.0 조회 : 12회 
제목 :  [Re][질문]EJB 해보신분 질문이요...

우선 EJB 관련 서적을 참고하는 것이 도움이 될런지는 개인적인 것이기에 뭐라 결론을 내리기는 힘들것 같습니다.
부분으로 전체를 판단하는 것은 잘못된 것이지만, Stateless Session Bean 을 무상태 세션빈으로 번역한걸 보니
번역 업체가 참여했다는 생각을 지울수 없군요.
대부분 상태 없는 세션빈 혹은 그냥 Stateless Session Bean 으로 하는것이 오히려 더 부드럽죠
(그냥 넋두리입니다.)
Session Bean -> Entity Bean -> Table 이런식으로 호출하는 방식은 정석으로 되어있으며
이것을 패턴에서는 Sessin Facade Pattern(세션 퍼싸드 패턴 이라고 읽음) 이라고 합니다.
각 번호에 답은 그 아래에 적어 놓겠습니다.


>>>> 원 본 글 <<<<

 

이번에 처음으로 EJB로 프로젝트를 진행하게 되었습니다.

하다보니 궁금한 점이 생겼습니다.

 

제가 EJB관련 책이 2개가 있는데요...거기에는 먼저 BMP 엔티티빈으로 DB와의 구현을 하고

다시 무상태 세션빈이 다시 BMP 엔티티빈을 호출하고 엔티티빈으로 구현되지 않는 다른 것(예를 들면 게시판 리스트 반환)

들을 구현하는 방식을 쓰더군요..

 

1. 첫번째 궁금한 점은 현업에서는 엔티티빈을 사용하느냐라는 점입니다.

엔티티빈을 사용해서 select할 경우 불필요한 table의 컬럼도 가져와야 하는 점이 있더군요...

불필요한 컬럼을 가져오지 않게 하기 위해서는 세션빈을 이용해야 할 거 같은데...

암튼 현업에서는 엔티티빈을 활용하는지 궁금합니다.

 

현업에서는 Entity Bean 을 사용합니다.
100 가지 종류중에서 1개만 사용해도 사용하는거지요.
중요한건 사용하느냐 사용하지 않는냐가 아니라 얼마나 많이 사용하느냐죠~
처음 EJB 가 국내에 들어와서 개발이되는 시점에, WAS 는 웹로직이 많이 사용되었습니다.
웹로직은 Entity Bean 속도가 굉장히 느렸고, 그 당시에는 BMP Entity Bean 이 주로 사용되었으며
BMP Entity Bean 은 개발이 그냥 C/S 개발보도 오히려 더 힘든 상황에 많이 직면했기 때문에
초기에 EJB 개발시에 세션빈으로 트랜잭션을 처리하도록 유도를 하였습니다.
무엇이든지 첫 단추가 중요하듯이 그래서 그 이후에, 많은 싸이트가 거의 세션빈만 사용하고
Entity Bean 을 사용하지 않는 형태가 개발이 되었고, 서적도 예제가 그런 식으로 되어있습니다.
그러면 과연 현업에서는 Entity Bean 을 사용하느냐에 답변은 Entity Bean 을 얼마나 잘 아는 개발자가
있느냐가 중요하고, 최근 들어서는 많이 사용하는 걸로 알고 있습니다.
Sesstion Bean만이 최적이고, 혹은 Entity Bean 만이 최적이다라는 논리는 잘못된 것이며 둘을 적절히
사용해야 합니다.
EJB 를 강좌시간에 더 많은 이야기를 해드리겠습니다.

 

2. 그리고 엔티티빈의 효율성에 대해서도 Container가 하부단의 처리(예를 들면 트랜잭션)를 해주어서 좋다고 하는데

구체적으로 뭐가 좋은지 잘 모르겠어요...엔티티빈을 쓰면 좋은점이 있을까요?

 

Entity Bean 의 효율성에 대해서 많은 의문점이 있으며, 사실 이것 때문에 외국에서도 많은 논란이 있고
어떤 사람은 Entity Bean 의 폐지론까지 언급하는 사람도 있습니다.
또한 Entity Bean 의 효율성때문에 다른 대안으로 JDO 라는 기술도 나와있습니다.
하지만 Entity Bean 의 장점도 있습니다.
이것은 같은 기술을 가지고 어떻게 활용하느냐에 달려 있으며, 아키텍쳐를 잡고 설계하는 시점에서
얼마나 최적으로 설계하느냐에 따라서 그 활용가치가 달라진다고 생각합니다.
최적으로 사용하려면 기본적으로 EJB Pattern 을 숙지하고 있어야 하며, 개발자의 수준이
이 수준에 도달하지 못하였다면, 오히려 Session Bean 만을 사용하는게 더 나은 경우도 있습니다.
Entity Bean 을 사용하는 장점은 빠른 개발 생산성, 유지보수 편리, 그리고 가장 좋은 트랜잭션의 관리입니다.
특히 CMP Entity Bean 을 사용하면 개발툴을 가지고 금방 개발이 가능하며, 트랜잭션을 WAS 가 알아서 해주기
때문에 트랜잭션에 대해서 거의 신경을 쓰지 않아도 됩니다.
하지만 그만큼 트랜잭션을 잘 알아야지 모르고 그냥 두면 엉뚱한 결과를 초래할 수도 있습니다.
더 구체적인 것을 글로 적기에는 좀 힘든거 같고 위의 사항을 잘 이해하면 될거 같습니다.
이것 또한 강좌때 이야기해 드리겠습니다.

 

 

3. 그리고 예전 누가 구현한 EJB소스를 보니 모두 세션빈으로만 구현이 되어 있었습니다.

이건 그냥 자바로 짠것과 별다른 점이 없어보였습니다...

그렇다면 굳이 EJB가 분산환경이 아닌이상 꼭 사용할 필요가 있느냐는 것이 궁금해요

 

Session Bean 만 사용하여 EJB 를 개발하면 C/S 와 별반 차이가 없습니다.
단 차이점은 Begin trans, commit trans, rollback trans 구문을 적게 사용한다는 거지요.
즉 트랜잭션을 개발자가 일일히 신경을 써서 개발하느냐? 아니면 WAS 가 알아서 해주냐? 의 차이죠
그리고 Connectin Pool 을 누가 관리하고, 자원관리를 어떻게 하느냐에 따른 겁니다.
개발자들은 거의 코딩을 하기 때문에 이러한 환경과 자원에 크게 신경을 쓰지 않지만, 실제로 운영할때는
굉장히 중요한 요소입니다. 구현이 개발의 전부가 아니라는 것이지요.
그래서 C/S 에서 관리할 수 있는 것과 WAS 를 통해서 관리할 수 있는 것은 개발하고 운영하는 관리하는
입장에서는 많은 차이(돈과 시간)가 있습니다.
즉 WAS 가 더 적은 비용에 적은 시간 그리고 적은 노력을 기울일수 있다는 거지요
(이것도 사실 약간 어패가 있습니다.)

 

4. 마지막으로 SessionBean이나 EntityBean을 구현한 Bean클래스에서 멤버변수로 사용되는 클래스들은

직렬화를 위해 모두 java.io.Serializable을 사용해야 하는 건가요?

 

Session Bean 과 Entity Bean 에서 사용되는 객체들은 당연히 모두 객체 직렬화를 해야 합니다.
왜냐면 기본적은 EJB 는 분산환경이기 때문이지요, 분산이라하면 다른 머신끼리 데이터를 전송하는 겁니다.
즉 다른 프로세스 끼리 데이터를 전송하기 위해서는 반드시 객체 직렬화를 해야합니다.
이것을 의문시 한다면 분산을 이해하지 못하는 것과 같습니다.

 

제가 아직 EJB에 대한 확실한 개념이 안잡혀서 질문내용이 영 난잡하네요...

글로 쓰는게 쉽지만은 않네요~~

사실 이번 프로젝트가 제 개인적인 생각에는 굳이 EJB로 구현하지 않아도 될거 같은데

클라이언트의 요청으로 구현하게 되었어요.

EJB 잘 아시는 분, 그리고 교주님 꼭 답변주세요~~

 

EJB 를 사용해야 하느냐 말아야 하느냐는 굉장히 큰 문제이며, 심도있는 논의를 해야 합니다.
EJB 가 만능이며 무조건 EJB 해야 한다는 식의 잘못된 것입니다.
왜 EJB 를 사용해야 되는지 그 타당성을 잘 조사해야 합니다.

이상 도움이 되었는지 궁금하군요.

 

 # 空心 고 덕 한.