2026년판 J2EE 면접 질문 및 답변 Top 40

J2EE/Jakarta EE 면접을 준비 중이신가요? 이 종합 가이드는 아키텍처, 컴포넌트, 패턴, 실전 트러블슈팅을 아우르는 40가지 핵심 기술 질문과 10가지 행동/시나리오 질문 및 전략적 모범 답변을 다룹니다. 고전적인 J2EE 기초를 유지하면서 현대적인 Jakarta EE 맥락에 맞게 업데이트되었습니다.
👉 무료 PDF 다운로드: J2EE 면접 질문 및 답변
핵심 아키텍처 및 플랫폼 기초
1. J2EE 아키텍처 및 핵심 특징
J2EE는 표현, 비즈니스 로직, 데이터 계층을 분리하여 확장성과 유지보수성을 위한 멀티티어 분산 모델을 정의합니다. 컨테이너 관리 서비스(보안, 트랜잭션, 동시성)를 제공하는 표준화된 런타임을 통해 컴포넌트 재사용성과 모듈식 배포를 가능하게 합니다.
| 계층 | 기술 | 책임 |
| 표현 | Servlet, JSP, JSF | UI 처리 |
| 비즈니스 | EJB (세션, 메시지 기반) | 비즈니스 로직 |
| 통합 | JCA | 외부 시스템 (ERP, 메인프레임) |
| 데이터 | JDBC, JPA/ORM | 데이터베이스 접근 |
예시: 뱅킹 포털: 대시보드용 Servlet, 트랜잭션용 EJB, 계좌 데이터용 JDBC.
2. J2EE vs Java SE
Java SE = 핵심 언어, API, 유틸리티. J2EE = 엔터프라이즈 확장: 컨테이너, EJB, Servlet, JMS, JDBC, JPA, JTA, JAAS. Java SE는 데스크톱 도구 구축; J2EE는 분산, 트랜잭션, 보안 엔터프라이즈 시스템 구축.
| 이점 | 설명 |
| 컴포넌트 기반 | 모듈식 개발 |
| 표준화된 API | EJB, Servlet, JMS, JDBC, JPA |
| 내장 서비스 | 트랜잭션, 보안, 풀링 |
| 분산 컴퓨팅 | RMI, JMS, JCA 통합 |
3. EJB 유형 및 용도
| EJB 유형 | 특성 | 용도 |
| 스테이트리스 세션 | 클라이언트 상태 없음, 풀링 | 결제 처리, 검증 |
| 스테이트풀 세션 | 대화 상태 유지 | 쇼핑 카트, 위저드 |
| 싱글톤 세션 | 앱당 단일 인스턴스, 공유 상태 | 캐시, 카운터, 설정 |
| 메시지 기반 (MDB) | 비동기 JMS 소비자, 인터페이스 없음 | 이벤트 처리, 주문 큐 |
| 엔티티 (레거시) | JPA 엔티티로 대체 | 사용 중단 |
4. 서블릿 수명 주기 및 CGI 대비 장점
- 로드 및 인스턴스화 컨테이너에 의해
- 초기화
init()를 통해
- 요청 처리
service(), doGet()/doPost()를 통해
- 소멸
destroy()를 통해
| 서블릿 | CGI |
| 스레드 기반, 고성능 | 프로세스 기반, 느림 |
| 메모리 효율성 우수 | 높은 리소스 소비 |
| 통합 Java 생태계 | 언어 종속적 |
단일 인스턴스가 수천 요청 처리 vs CGI의 요청당 프로세스 생성.
5. 표현 계층에서 JSP vs 서블릿
| 요소 | JSP 선택 | 서블릿 선택 |
| 출력 특성 | 임베디드 Java가 있는 HTML 위주 | 최소 HTML, 로직 중심 |
| 복잡한 로직 | 지양 | 전처리, 계산 |
| 유지보수성 | 깔끔한 분리 | 컨트롤러 역할 (MVC) |
모범 사례: JSP는 뷰, 서블릿은 컨트롤러로 사용.
6. J2EE에서 JDBC: 장단점
| 장점 | 단점 |
| 단순한 SQL API | 보일러플레이트 코드 |
| 벤더 독립적 | 잘못 사용 시 SQL 인젝션 위험 |
| 모든 RDBMS와 작동 | 수동 리소스 관리 |
일반적으로 DAO나 ORM(Hibernate/JPA)으로 래핑하여 추상화.
7. 트랜잭션 관리 유형
| 유형 | 설명 |
| 컨테이너 관리 (CMT) | 어노테이션(@TransactionAttribute)으로 선언적; 컨테이너가 begin/commit/rollback 처리 |
| 빈 관리 (BMT) | UserTransaction으로 프로그래밍 방식; 개발자가 경계 제어 |
| JTA | 리소스 간 분산/글로벌 트랜잭션을 위한 표준 API |
예시: 자금 이체는 원자성 필요; CMT가 실패 시 자동 롤백.
8. JNDI vs RMI
| 특성 | JNDI | RMI |
| 목적 | 리소스 조회 (네이밍/디렉터리) | 원격 메서드 호출 |
| 용도 | DataSource, EJB, JMS 큐 획득 | 원격 EJB 메서드 호출 |
JNDI는 위치 파악; RMI는 통신.
9. JMS: 비동기 메시징 이점
- 논블로킹 → 성능
- 메시지 지속성 → 복원력
- 생산자/소비자 분리 → 확장성
- 포인트투포인트(큐) & 펍섭(토픽)
예시: 이커머스에서 주문 확인 큐잉; 체크아웃 즉시 응답.
10. JSP 태그 유형
| 태그 유형 | 목적 | 예시 |
| 지시자 | 페이지 설정 | <%@ page %> |
| 스크립팅 | Java 임베드 | <% %> |
| 액션 | 서버 컴포넌트 | <jsp:include> |
| 표현 언어 (EL) | 데이터 접근 | ${user.name} |
| 커스텀 | 재사용 가능한 태그라이브러리 | <my:table> |
11. J2EE에서의 MVC
| 컴포넌트 | 기술 | 역할 |
| 모델 | POJO, EJB, JPA 엔티티 | 비즈니스 로직, 상태 |
| 뷰 | JSP, JSTL, JSF | 데이터 렌더링 |
| 컨트롤러 | 서블릿, 프론트 컨트롤러 | 요청 디스패치, 흐름 제어 |
UI/백엔드 병렬 작업 가능.
12. 필터: 횡단 관심사
Filter 인터페이스(init, doFilter, destroy)로 요청/응답 가로채기. 체인 가능. 용도: 인증, 로깅, 압축, 검증.
| 장점 | 설명 |
| 중앙화된 로직 | 횡단 관심사를 한 곳에서 처리 |
| 재사용 가능 | 여러 엔드포인트에 적용 |
| 깔끔한 서블릿 | 보일러플레이트 제거 |
| 쉬운 설정 | web.xml 또는 @WebFilter |
13. DAO 패턴: 언제 & 왜?
DB 접근을 인터페이스 뒤로 캡슐화; 지속성을 비즈니스 로직에서 분리. 이점: JDBC/Hibernate/JPA 교체 가능, 테스트용 모킹, 접근 패턴 표준화.
interface CustomerDAO { Customer findById(Long id); }
14. 보안 구현 방법
| 방법 | 설명 | 예시 |
| 선언적 | web.xml / 어노테이션 | 역할 기반 접근 |
| 프로그래밍 방식 | 코드에서 체크 | request.isUserInRole("ADMIN") |
| JAAS | 플러그 가능한 인증 프레임워크 | 엔터프라이즈 SSO |
| HTTPS/SSL | 전송 암호화 | 보안 로그인 |
15. 애플리케이션 서버 vs 웹 서버
| 특성 | 앱 서버 (WebLogic, WildFly) | 웹 서버 (Apache HTTPD, Nginx) |
| EJB 지원 | 예 | 아니오 |
| 트랜잭션 관리 | 내장 | 없음 |
| JMS | 사용 가능 | 아니오 |
| 복잡성 | 높음 | 낮음 |
16. 세션 관리 기법
| 방법 | 장점 | 단점 |
| 쿠키 | 단순, 자동 | 비활성화 가능 |
| URL 재작성 | 쿠키 없이 작동 | 긴 URL, 보안 위험 |
| HttpSession | 쉬운 API, 서버 사이드 | 메모리 소비 |
| 숨김 필드 | 폼에 단순 | POST만 가능 |
뱅킹: HttpSession + 짧은 타임아웃.
17. 좋은 J2EE 설계 특징
- 명확한 분리: MVC, DAO, 서비스 계층
- 표준 패턴: 프론트 컨트롤러, 비즈니스 델리게이트, 서비스 로케이터, DAO
- 높은 응집도, 낮은 결합도
- 강력한 예외 처리 및 로깅
- 구성 가능, 환경 독립적 배포
18. EL & JSTL: 스크립틀릿 감소
EL: ${customer.name}
JSTL 루프:
<c:forEach var="item" items="${cart.items}"> ${item.name} </c:forEach>
더 깔끔한 페이지; 프론트엔드 개발자가 Java 지식 덜 필요.
19. 일반적인 J2EE 디자인 패턴
| 패턴 | 이점 |
| 프론트 컨트롤러 | 중앙화된 요청 처리 |
| DAO | 지속성 분리 |
| 비즈니스 델리게이트 | 표현 계층 복잡도 감소 |
| 서비스 로케이터 | JNDI 조회 캐싱 |
| MVC | 체계적인 UI 아키텍처 |
20. 커넥션 풀링: 성능 필수
DataSource(JNDI)를 통해 미리 생성된 DB 커넥션 재사용. 컨테이너가 수명 주기, 동시성, 크기 관리. 이점: 빠른 접근, 낮은 리소스 사용, 더 나은 확장성, 신뢰성.
21. 배포 설명자 (web.xml) 관련성
서블릿 매핑, 필터, 리스너, 보안 제약, 세션 설정을 위한 중앙화된 설정. 여전히 환경별 오버라이드, 감사, 엄격한 보안 매핑에 중요—많은 기업이 어노테이션만으로는 선호하지 않음.
22. 스테이트리스 vs 스테이트풀 세션 빈
| 속성 | 스테이트리스 | 스테이트풀 |
| 상태 | 없음 | 클라이언트별 |
| 확장성 | 높음 | 보통 |
| 용도 | 결제, 검증 | 쇼핑 카트, 위저드 |
| 수명 주기 | 짧음 | 김, 패시베이션/액티베이션 |
23. 인터셉터: 모듈식 횡단 로직
@Interceptor + @InterceptorBinding으로 로깅, 감사, 트랜잭션 체크. 이점: 모듈식, 보일러플레이트 감소, 구성 가능한 우선순위.
24. 리소스 주입
| 어노테이션 | 주입 대상 | 예시 |
@Resource | DataSource, JMS, 환경 엔트리 | @Resource DataSource ds; |
@EJB | 엔터프라이즈 빈 | @EJB OrderService svc; |
@PersistenceContext | JPA EntityManager | @PersistenceContext EntityManager em; |
수동 JNDI 조회 제거; 더 깔끔하고 테스트 가능.
25. JCA: 레거시 시스템 통합
리소스 어댑터가 트랜잭션, 보안, 풀링을 관리하며 ERP, 메인프레임, 메시징과 연결하는 표준화된 프레임워크. 인바운드(이벤트 기반) 및 아웃바운드 통신 지원.
예시: 뱅킹 JCA 어댑터 → 고객 레코드용 COBOL 코어.
26. 클래스 로더 및 배포 격리
앱별 클래스 로더가 의존성 격리, 충돌 방지, 핫 디플로이먼트 지원, 공유 라이브러리 가시성 제어. ClassNotFoundException / 버전 충돌 해결.
27. 확장성 요소 및 성능 튜닝
| 요소 | 영향 |
| 세션 크기 | 클수록 확장성 낮음 |
| DB 인덱싱 | 나쁘면 높은 지연 |
| 캐싱 전략 | 비싼 연산 감소 |
| 풀 설정 | 동시성/처리량 제어 |
튜닝: 스테이트리스 EJB, 비동기 메시징(JMS), 스레드 풀, JVM GC, 프로파일링(JProfiler).
28. 메시지 기반 빈 (MDB)
| 특성 | MDB | 세션 빈 |
| 상호작용 | 비동기 (JMS) | 동기 |
| 인터페이스 | 없음 | 로컬/원격 |
| 상태 | 스테이트리스 | 상태풀 가능 |
이벤트 기반 분리.
29. JPA vs 엔티티 빈
- 더 단순한 API/어노테이션 (
@Entity, EntityManager)
- 지연 로딩, 캐싱, 더 나은 성능
- 벤더 독립성 (Hibernate, EclipseLink)
- 직관적인 객체-관계 매핑
30. 서블릿-EJB 통신 및 패턴
JNDI 조회 또는 @EJB 주입으로. 분리 패턴:
| 패턴 | 목적 |
| 비즈니스 델리게이트 | EJB 복잡성 추상화 |
| 서비스 로케이터 | JNDI 조회 캐싱 |
| 세션 퍼사드 | 거친 단위 연산 |
31. 프론트 컨트롤러 패턴
단일 컨트롤러(ActionServlet/DispatcherServlet)가 요청 디스패치, 인증, 로깅, 뷰 선택을 중앙화. Struts ActionServlet, Spring MVC DispatcherServlet이 구현.
32. EJB 수명 주기 및 리소스 관리
| 빈 유형 | 단계 |
| 스테이트리스 | 인스턴스화 → 풀 → 메서드 호출 → 소멸 |
| 스테이트풀 | 인스턴스화 → 메서드 호출 → 패시베이트 → 액티베이트 → 소멸 |
| MDB | 인스턴스화 → 메시지 처리 → 소멸 |
컨테이너 풀링이 부하 하에서 리소스 사용 최적화.
33. 성능 개선 기법
- 캐싱 (로컬/분산: JCache, Redis)
- SQL 최적화, 인덱싱
- HTTP 세션 크기/수명 주기 축소
- 로드 밸런싱, 클러스터링
- JVM 힙/GC 튜닝
- 무거운 리포트에 비동기 JMS
34. WAR vs EAR 패키징
| 특성 | WAR | EAR |
| 웹 컴포넌트 | 예 | 예 |
| EJB 모듈 | 아니오 | 예 |
| 적합한 대상 | 웹 앱 | 엔터프라이즈 앱 |
| 배포 | 단일 모듈 | 멀티 모듈 |
35. 로깅 프레임워크 및 선택 요소
JUL, Log4j2, Logback, 서버 통합. 선택 기준: 비동기 어펜더 (Logback 우수), 설정 유연성 (XML/JSON/Properties), 서버 통합, 동시성 하 성능.
36. 애플리케이션 수명 주기의 리스너
| 리스너 | 목적 |
ServletContextListener | 앱 시작/종료 초기화 |
HttpSessionListener | 세션 생성/소멸 추적 |
ServletRequestListener | 요청 로깅/추적 |
비즈니스 코드 건드리지 않고 이벤트 기반 모니터링.
37. 컨테이너 특징 및 엔터프라이즈 서비스
- 자동화된 수명 주기 관리
- 내장: 보안, 트랜잭션, 스레딩, 풀링
- 통합: 메시징, 지속성, 네이밍
- 설명자/어노테이션으로 설정 주도
EJB 컨테이너가 예외 발생 시 트랜잭션 자동 롤백.
38. 클러스터링: 신뢰성 & 확장성
| 장점 | 설명 |
| 고가용성 | 단일 장애 지점 없음 |
| 로드 밸런싱 | 요청 분산 |
| 페일오버 | 원활한 크래시 복구 |
| 확장성 | 트래픽 증가 시 노드 추가 |
세션 복제로 사용자 상태 보존. 항공권 예약이 연휴 피크 처리.
39. 서비스 로케이터 패턴
EJB, DataSource, JMS에 대한 JNDI 조회 중앙화/캐싱. 해결: 반복 조회 오버헤드, 복잡한 네이밍 로직, 단일 접근 지점.
40. 스테이트풀 세션 빈 단점 및 완화책
| 단점 | 완화책 |
| 메모리 오버헤드 | 세션 데이터 최소화 |
| 클러스터링 복잡성 | 세션 복제 활성화 |
| 긴 수명 주기 | 대화형 상태 필요할 때만 사용 |
🔍 실전 시나리오 질문 (행동 및 상황 기반)
완전한 문장; 필수 문구 각각 정확히 한 번씩 사용.
1. J2EE 아키텍처의 핵심 구성 요소는?
기대: 멀티티어, 주요 API.
답변: "J2EE 아키텍처의 핵심 구성 요소에는 클라이언트 티어, 웹 티어, 비즈니스 티어, 엔터프라이즈 정보 시스템 티어가 포함됩니다. 이 계층들은 Servlet, JSP, EJB, JMS, JDBC와 같은 기술을 사용하여 함께 작동하며 확장 가능하고 모듈화된 엔터프라이즈 솔루션을 제공합니다."
2. 서블릿과 JSP의 차이점?
기대: 요청 처리 vs 뷰 렌더링.
답변: "서블릿은 주로 요청 처리와 비즈니스 로직에 사용되는 반면, JSP는 HTML 내에 Java를 임베드하여 동적 웹 콘텐츠 생성을 단순화하도록 설계되었습니다. JSP는 일반적으로 표현 로직에 사용되고 서블릿은 복잡한 처리를 담당합니다."
3. J2EE에서 트랜잭션 관리?
기대: JTA, CMT vs BMT.
답변: "J2EE 애플리케이션은 Java Transaction API를 사용하여 분산 트랜잭션을 관리합니다. 컨테이너 관리 트랜잭션은 애플리케이션 서버가 경계를 제어하도록 하여 이 과정을 단순화하는 반면, 빈 관리 트랜잭션은 개발자에게 더 세밀한 제어를 제공합니다."
4. 까다로운 J2EE 앱과 성공 요인?
기대: 문제 해결, 팀워크.
답변: "이전 직장에서 엄격한 보안과 고가용성이 요구되는 대규모 금융 애플리케이션을 작업했습니다. 비즈니스 로직에 EJB를 구현하고 커넥션 풀링을 최적화하며 보안 팀과 긴밀히 협력하여 규정 준수 요구 사항을 충족함으로써 성공을 보장했습니다."
5. 민감한 데이터를 위한 안전한 J2EE 앱 설계?
기대: 인증, 인가, 암호화, 안전한 코딩.
답변: "인증과 인가에 JAAS를 사용하고, 안전한 통신을 위해 HTTPS를 구현하며, 모든 입력을 검증하고, 민감한 데이터를 저장 시 암호화하겠습니다. 또한 애플리케이션 서버가 모범 사례에 따라 강화되었는지 확인하겠습니다."
6. J2EE에서 프로덕션 이슈 트러블슈팅?
기대: 압박 대응, 근본 원인 분석.
답변: "이전 직장에서 스레드 덤프를 분석하고 JDBC 커넥션 사용량을 검토하여 성능 저하 이슈를 조사했습니다. 커넥션 누수를 식별한 후 적절한 리소스 정리를 구현하고 재발 방지를 위한 모니터링 알림을 추가했습니다."
7. EJB가 확장성 & 유지보수성 지원하는 방법?
기대: 풀링, 수명 주기, 모듈성.
답변: "EJB는 컨테이너 관리 풀링, 비동기 처리, 분산 배포를 통해 확장성을 지원합니다. 또한 비즈니스 로직을 표현 및 인프라 관심사에서 분리함으로써 유지보수성을 향상시킵니다."
8. 느린 DB 성능 트러블슈팅 단계?
기대: 논리적 병목 분석.
답변: "SQL 실행 계획 분석, 누락된 인덱스 확인, 커넥션 풀 구성 검토로 시작하겠습니다. 그런 다음 J2EE 프레임워크를 사용한 캐싱 전략을 살펴보고 반복 쿼리를 줄이겠습니다."
9. J2EE 프로젝트 간 경쟁 우선순위?
기대: 시간 관리, 커뮤니케이션.
답변: "지난 직장에서 비즈니스 영향을 평가하고 이해관계자와 명확히 소통하며 복잡한 개발 작업을 관리 가능한 세그먼트로 분해함으로써 경쟁하는 작업을 관리했습니다. 이를 통해 품질 저하 없이 일관되게 제공할 수 있었습니다."
10. 레거시 J2EE를 Jakarta EE/모던으로 마이그레이션?
기대: 현대화 전략, 컨테이너화.
답변: "사용 중단된 API 평가, 라이브러리를 Jakarta EE 패키지로 업데이트, 애플리케이션 모듈화로 시작하겠습니다. 이전 직장에서 이 접근 방식을 사용하여 최신 서버로 애플리케이션을 성공적으로 마이그레이션하면서 다운타임을 줄였습니다."