실무 아키텍처 설계, 장애 대응 시나리오, 튜닝 및 최적화, 그리고 보안 및 이중화 전략까지 포괄해야 합니다. 아래는 시험을 대비한 WEB/WAS 핵심 개념 정리, 시나리오형 문제집, 암기카드, 키워드 인덱스 요약 구성입니다.


📘 1. 핵심 개념 요약 (TA 직무역량 관점)

1.1. WEB/WAS 구조 개요

  • WEB Server: 요청을 정적 리소스(html, css 등)로 처리, WAS로 요청 전달
    • 예: NGINX, Apache
  • WAS: Java Servlet 기반 동적 처리 (Tomcat, JBoss, WebLogic 등)
  • 구성 패턴
    • 단일서버 구성: WEB+WAS 통합 → 빠른 구축, 낮은 확장성
    • 분리 구성: WEB ↔ WAS → 장애 격리, 부하분산 용이

1.2. 주요 아키텍처 설계 고려사항

  • 이중화: L4/L7 로드밸런서, Active-Standby 구성
  • 세션 처리: Sticky Session vs Session Clustering (ex: Redis 기반)
  • Connection Pool: DB와의 연결 성능 및 장애 대응 핵심
  • Reverse Proxy/SSL Offload: NGINX 활용

1.3. 성능 및 보안 튜닝

  • JVM 옵션 설정 (-Xms, -Xmx, GC, Thread)
  • HTTP Keep-Alive, Compression 설정
  • WAS 보안 설정 (context.xml, web.xml, XSS/CSRF 대응)

1.4. 실무 주요 설정 파일

  • server.xml: 포트, 커넥터 설정
  • web.xml: Servlet 매핑 및 보안정책
  • context.xml: DB Connection 설정 및 리소스 관리
  • setenv.sh: JVM 옵션 설정

📚 2. 시나리오 기반 문제집 (20문항)

각 문항은 [문제 - 정답 - 해설] 3단 구성이며 난이도 표시 포함

✅ 예시 문제

문제 1 (난이도: 중)

WAS 서버에서 GC 튜닝 이후 API 응답 시간이 급격히 느려졌다. 가능한 원인으로 적절한 것은?

① GC 로그 미설정으로 모니터링 부재
② Xms, Xmx 설정이 동일하여 Heap 확장이 안됨
③ ThreadPool Core 수 증가
④ ConnectionPool MaxActive 감소
⑤ /dev/random 대기 문제

정답:
해설: Xms와 Xmx가 동일하면 메모리 확장에 의한 GC 이슈는 방지되지만, 설정값이 너무 높으면 Full GC 발생 가능성 및 메모리 오버커밋 문제가 발생할 수 있음.


문제 7 (난이도: 상)

WEB-WAS 분리 구성에서 HTTP 499 오류가 빈번하게 발생하고 있다. 가장 먼저 확인할 사항은?

① NGINX의 proxy_read_timeout 설정
② Tomcat의 maxThreads 설정
③ DB의 slow query log
④ session timeout
⑤ HTTP Keepalive 설정

정답:
해설: HTTP 499는 클라이언트가 응답을 기다리지 못하고 연결을 종료했을 때 발생. 주로 proxy_read_timeout 설정값보다 백엔드(WAS)의 응답이 늦는 경우 발생.


총 20문항 제공 가능
➡️ 요청 시 전체 문항 생성하여 제공해드릴게요.


🧠 3. 암기카드 요약 (Flashcard형)

개념설명
WEB Server 정적 리소스 처리, WAS로 요청 전달 (NGINX, Apache)
WAS 동적 컨텐츠 처리 (Tomcat, WebLogic 등)
Sticky Session L4/L7 로드밸런서에서 세션을 특정 서버에 고정
GC 튜닝 Full GC 발생 빈도, 메모리 누수 확인
ThreadPool 요청 병렬 처리 수 조절, WAS 성능 영향
server.xml 커넥터 설정, 포트 및 SSL 등
context.xml 리소스 설정(DB Pool 등), JNDI 연동
session clustering Redis, DB로 세션 공유하여 무중단 구성
Connection Pool maxActive, minIdle, validationQuery 설정 중요
499 오류 NGINX에서 클라이언트가 응답 기다리지 못하고 종료한 경우

🔍 4. 블로그용 키워드 인덱스 요약본 (Ctrl+F 검색용)

 
#WEB_WAS_구성 #WEB서버역할 #WAS동작원리 #Tomcat_구성파일 #server.xml_설명 #context.xml_DB설정 #web.xml_보안설정 #JVM옵션 #GC튜닝 #Heap메모리설정 #ThreadPool최적화 #NGINX_설정 #proxy_read_timeout #HTTP_499 #세션클러스터링 #로드밸런싱 #StickySession #Session공유 #ConnectionPool튜닝 #ReverseProxy구성 #WAS_이중화 #WAS_장애대응 #WEB_WAS_분리 #SSL_Offload #오류코드_정리 #WAS장애조치

✍️ 다음 추천 학습 흐름

  1. 기본개념 정리: 위 요약 + 암기카드 암기
  2. 시나리오 문제 풀기: 예상 문제집 20문항
  3. 실제 설정파일 분석: server.xml, web.xml, context.xml, setenv.sh 실습
  4. 장애 사례 스터디: HTTP 5xx, GC Delay, ThreadPool Block 등
  5. 오픈북 블로그 세팅: Ctrl+F 검색용 키워드 준비

 

 


🛠 WEB/WAS 실전 장애 대응 시나리오형 문제집 (총 15문항)

각 문항은 **[난이도 표시 포함]**이며, TA 시점에서 판단력, 원인 분석, 조치 방안까지 평가합니다.


✅ NO.01 - HTTP 499 오류 발생

[난이도: 중]
시나리오: 서비스 로그에서 HTTP 499 오류가 증가하고 있다. 클라이언트는 웹브라우저이며, WAS는 Tomcat, WEB은 NGINX이다.

질문: 가장 먼저 확인해야 할 설정은 무엇이며, 그 이유는?

  • 정답: NGINX의 proxy_read_timeout 설정
  • 해설: HTTP 499는 클라이언트가 응답을 기다리지 못하고 연결을 끊을 때 발생한다. 대부분 NGINX가 설정한 proxy_read_timeout보다 WAS의 응답이 늦을 때 발생하며, 이 경우 WAS 응답 시간이 정상인지 확인 후, NGINX timeout을 늘릴 수 있다.

✅ NO.02 - ThreadPool 고갈로 인한 대기

[난이도: 상]
시나리오: WAS에서 API 요청이 지연되고, maxThreads 도달로 새 요청이 지연되며, JVM은 정상 상태이다.

질문: 조치 순서를 서술하시오.

  • 정답:
    1. threadDump로 스레드 상태 확인
    2. Blocking 요청 여부 확인 (ex: DB lock, 외부 API 대기 등)
    3. maxThreads 조정 또는 작업 분산
  • 해설: 단순히 maxThreads를 올리는 것이 아니라, 대기 스레드의 원인을 분석해야 한다. threadDump 확인은 병목 원인 추적의 기본이다.

✅ NO.03 - Connection Pool 고갈

[난이도: 상]
시나리오: DB 연결 오류가 간헐적으로 발생하며, Cannot get a connection 메시지가 보인다. DB 자체는 정상이다.

질문: 가능한 원인과 대응 방안은?

  • 정답: Connection Pool 고갈로 인해 새 요청을 처리하지 못함 → 원인: 커넥션 미반납, 대기시간 초과 등
    • 대응: maxActive, maxWait, validationQuery 설정 확인, 커넥션 leak 점검
  • 해설: 커넥션 풀은 DB 연결 자원으로, 미반납 시 다음 요청이 대기하게 되고 응답 지연이 발생한다. Validation 쿼리 및 Timeout 설정 확인이 필요하다.

✅ NO.04 - session timeout 오류

[난이도: 중]
시나리오: 로그인을 했지만 일정 시간 후 아무 행동 없이 페이지 이동 시 재로그인이 요구된다.

질문: 점검 항목을 모두 나열하시오.

  • 정답:
    • web.xml의 <session-timeout> 설정 확인
    • NGINX idle timeout 확인
    • 로드밸런서(L7)의 세션 유지 여부 확인
  • 해설: 세션 유지 시간은 클라이언트와 WEB, WAS 각각의 timeout에 따라 종료될 수 있다.

✅ NO.05 - GC로 인한 응답 지연

[난이도: 상]
시나리오: WAS 서버에서 주기적으로 전체 API 응답이 멈추는 현상이 발생한다. 로그에는 Full GC가 확인된다.

질문: GC 튜닝을 위해 확인해야 할 항목은?

  • 정답:
    • -Xmx, -Xms 메모리 설정
    • GC 로그 (-Xlog:gc*) 확보
    • heapDump 분석
    • OldGen 증가속도 확인
  • 해설: Full GC는 Old 영역이 가득 차면 발생하며, 메모리 부족 또는 객체 누수가 원인일 수 있다. GC 로그를 통한 분석이 우선이다.

✅ NO.06 - WAS 종료 없이 포트 미응답

[난이도: 중]
시나리오: WAS 프로세스는 떠 있지만, 8080 포트에서 응답이 없다. netstat에선 포트 LISTEN 중이다.

질문: 추가로 확인할 항목은?

  • 정답:
    • ThreadPool 상태 (maxThreads 도달 여부)
    • Application 내부 Blocking (DB, 외부 API 등)
  • 해설: 프로세스는 살아 있어도 모든 요청을 처리하지 못하고 blocking 상태일 수 있다.

✅ NO.07 - WAR 재배포 이후 장애

[난이도: 하]
시나리오: 신규 WAR 파일 배포 이후 기존 REST API가 404를 발생시킨다.

질문: 우선 확인할 항목은?

  • 정답: web.xml servlet mapping 또는 URL context path 설정
  • 해설: 배포 후 404는 매핑 오류나 context path 오류가 주요 원인이다.

✅ NO.08 - Static 리소스 누락

[난이도: 하]
시나리오: 이미지, JS, CSS 파일이 로드되지 않으며 403 오류 발생

질문: 원인과 조치방안은?

  • 정답: NGINX 또는 Apache의 접근 권한 설정 오류
    • 조치: /static/ 경로 접근 허용, SELinux 또는 권한 확인
  • 해설: 보안 설정으로 인한 차단일 수 있다.

✅ NO.09 - 세션 공유 안됨

[난이도: 상]
시나리오: L7 로드밸런서로 여러 WAS로 부하 분산 시 로그인 후 다른 요청에서 세션이 유지되지 않는다.

질문: 가능한 원인과 해결책은?

  • 정답:
    • Sticky Session 미적용 → 해결: Sticky 설정 적용
    • Session clustering 미구현 → 해결: Redis, DB 등 외부 공유 세션 구현
  • 해설: 세션이 노드 간 공유되지 않으면 로그인 상태가 유지되지 않는다.

✅ NO.10 - JSP 컴파일 지연

[난이도: 중]
시나리오: 신규 배포 후 처음 페이지 접근 시 응답 지연이 발생함

질문: 원인 및 개선방안은?

  • 정답: JSP 최초 접근 시 컴파일 발생 → 개선: 사전 컴파일 또는 첫 접근 자동화 스크립트
  • 해설: JSP는 최초 접근 시 컴파일을 수행하며 지연이 발생할 수 있다.

추가 구성 가능한 문제 항목 (예고)

번호장애 유형난이도
11 Tomcat 재시작 후 bind 오류
12 Reverse Proxy 구성 오류
13 /dev/random 대기 이슈
14 Root Context 충돌 이슈
15 XSS 필터 적용 오류


 

 

🛠 WEB/WAS 실전 장애 대응 시나리오 문제집 (30문항)


🔹1~10번: 응답 지연 및 오류 코드 중심

✅ NO.01 [중] HTTP 499 오류 발생

시나리오: 클라이언트 로그에 HTTP 499 오류 다수 발생
질문: 가장 먼저 확인할 설정은?

  • 정답: NGINX proxy_read_timeout
  • 해설: 클라이언트가 응답을 기다리지 못해 끊은 경우 발생하며, WAS 지연 시 timeout을 늘려야 한다.

✅ NO.02 [상] ThreadPool 고갈

시나리오: 요청 폭주 시 thread 수가 maxThreads에 도달
질문: 우선적으로 수행할 조치는?

  • 정답: threadDump로 blocking 원인 확인
  • 해설: 단순 thread 수 증가보단 병목 원인 파악이 선행되어야 함

✅ NO.03 [상] Connection Pool 고갈

시나리오: DB 연결 오류 – “cannot get connection” 발생

  • 정답: 커넥션 미반납 여부, maxActive 확인
  • 해설: Connection leak, validation query, timeout 등 점검 필수

✅ NO.04 [중] Session timeout 현상

시나리오: 로그인 후 일정 시간 뒤 세션 만료

  • 정답: web.xml, LB idle timeout 설정 확인
  • 해설: Client ↔ Web ↔ WAS 모든 경로의 timeout 정책 확인

✅ NO.05 [상] Full GC로 인한 멈춤

시나리오: 주기적 WAS 응답 멈춤

  • 정답: GC 로그 확보 후 heap size, 객체 수명 확인
  • 해설: Old 영역 누수, GC 정책 부적절, Memory over allocation 등

✅ NO.06 [중] WAS 프로세스는 살아 있으나 포트 응답 없음

시나리오: netstat에선 LISTEN, 요청 무응답

  • 정답: ThreadPool block 상태 확인
  • 해설: deadlock, 외부 API wait, DB lock 확인 필요

✅ NO.07 [하] WAR 재배포 이후 REST API 404

  • 정답: URL 매핑 또는 context path 오류
  • 해설: web.xml 매핑 확인

✅ NO.08 [하] 정적 리소스 403 오류

  • 정답: 접근 권한 설정, SELinux 확인
  • 해설: OS 또는 NGINX 보안 정책이 차단했을 가능성

✅ NO.09 [상] L7 LB 세션 미유지

  • 정답: Sticky Session 또는 Session Clustering 미구현
  • 해설: Redis, DB 등 외부 세션 공유 구현 고려

✅ NO.10 [중] JSP 초기 진입 지연

  • 정답: 최초 JSP 컴파일
  • 해설: 사전 컴파일로 지연 최소화 가능

🔹11~20번: 설정 오류 및 배포 장애 중심

✅ NO.11 [중] Tomcat 재기동 후 8080 bind 오류

  • 정답: 이전 프로세스 종료 미완 → ps -ef | grep java 확인
  • 해설: OS 포트 점유 상태를 확인해야 함

✅ NO.12 [하] NGINX reverse proxy 설정 오류

  • 정답: proxy_pass 대상 주소 확인
  • 해설: 슬래시 유무, root vs alias 문제

✅ NO.13 [상] /dev/random 대기

  • 정답: Entropy 부족 → /dev/urandom 사용
  • 해설: TLS handshake 지연 원인

✅ NO.14 [중] root context 중복

  • 정답: context.xml의 path 중복 제거
  • 해설: ROOT.war 중복시 충돌 발생

✅ NO.15 [상] web.xml 필터 설정 오류

  • 정답: URL 패턴 잘못 매핑됨
  • 해설: 필터 우선순위, mapping 순서 확인

✅ NO.16 [중] 비정상적인 reload 후 500

  • 정답: server.xml, context.xml 설정 충돌
  • 해설: 자원 중복 또는 오염된 캐시로 인한 문제

✅ NO.17 [상] OutOfMemoryError: Metaspace

  • 정답: JVM 옵션 중 -XX:MaxMetaspaceSize 증가
  • 해설: 클래스 로더 누수 또는 클래스 재정의 가능성

✅ NO.18 [중] PermGen space 오류

  • 정답: Java 7 이전 → -XX:MaxPermSize 조정
  • 해설: Java 8 이후는 Metaspace로 대체됨

✅ NO.19 [중] WAR 안에 libs 충돌

  • 정답: 의존 라이브러리 버전 불일치
  • 해설: ClassLoader 충돌 → NoSuchMethodError 가능

✅ NO.20 [하] 로컬에서는 정상, 서버에서 오류

  • 정답: 환경변수 또는 시스템 속성 누락
  • 해설: -Dspring.profiles.active 누락 등

🔹21~30번: 보안, 인프라 및 외부 연동 장애

✅ NO.21 [중] CSRF 오류 발생

  • 정답: Referer, Origin 헤더 누락
  • 해설: 웹브라우저 외부 접근 시 차단됨

✅ NO.22 [상] 외부 API 호출 시 timeout

  • 정답: 호출 timeout, retry 정책 미적용
  • 해설: Circuit Breaker 적용 검토

✅ NO.23 [중] TLS 인증서 오류

  • 정답: 인증서 만료 또는 신뢰 anchor 없음
  • 해설: SSL chain 누락 가능성

✅ NO.24 [상] JVM CPU 사용률 100%

  • 정답: Infinite Loop, Busy Wait
  • 해설: jstack, jvisualvm 활용

✅ NO.25 [중] NGINX Keepalive 사용 시 문제

  • 정답: Connection 재사용 실패
  • 해설: backend connection pool 부족

✅ NO.26 [상] Tomcat에 사용자 정의 필터 적용 시 모든 요청 실패

  • 정답: filter에서 예외 처리 누락
  • 해설: chain.doFilter 미호출로 chain 중단됨

✅ NO.27 [하] WAS 로그가 생성되지 않음

  • 정답: log4j/logback 설정 경로 오류
  • 해설: log 디렉토리 권한 포함 확인

✅ NO.28 [상] Redis 기반 세션 장애 발생

  • 정답: Redis eviction 정책 및 TTL 설정
  • 해설: 세션 만료 및 메모리 부족 문제 발생 가능

✅ NO.29 [중] gzip 설정 후 페이지 깨짐

  • 정답: 중복 압축 설정
  • 해설: WAS와 WEB 모두 gzip 시 이중 압축

✅ NO.30 [상] multipart 업로드 오류

  • 정답: maxPostSize 설정 부족
  • 해설: 업로드 용량 제한 기본 2MB

📌 다음 제공 가능 항목

  • [PDF/Word 변환]: 실전 대비 문제집 출력용
  • [암기카드 요약]: 키워드 중심 1줄 요약
  • [Ctrl+F용 키워드 인덱스]: 블로그용 검색 최적화
  • [빈칸형 연습문제/정답 숨김용 버전]

 

🧠 WEB/WAS 실전 장애 대응 암기카드 요약 (30개)

번호키워드암기카드 요약
01 HTTP 499 NGINX의 proxy_read_timeout 설정이 낮으면 WAS 응답 지연 시 499 오류 발생
02 ThreadPool 고갈 maxThreads 도달 시 threadDump로 blocking 원인부터 분석
03 ConnectionPool 고갈 커넥션 미반납, leak 발생 시 DB 연결 오류 발생
04 Session timeout web.xml, LB, NGINX 모두 timeout 설정 확인 필요
05 Full GC 지연 Full GC로 WAS 전체 멈춤 → GC 로그, heapDump 분석 필요
06 프로세스 살아있지만 무응답 포트 LISTEN이어도 blocking thread로 응답 없음 가능
07 WAR 재배포 404 context path 또는 servlet mapping 설정 오류 확인
08 정적 리소스 403 NGINX 권한, SELinux, 파일 권한 설정 확인
09 세션 미유지 Sticky Session 또는 Session clustering 미적용 문제
10 JSP 지연 최초 JSP 접근 시 컴파일 지연 → 사전 컴파일 권장
11 포트 바인딩 실패 이전 WAS 프로세스 종료 안 됨 → ps, lsof로 확인
12 reverse proxy 오류 NGINX proxy_pass 경로 오류 또는 슬래시 누락 문제
13 /dev/random 지연 TLS handshake 지연 → /dev/urandom 사용 권장
14 Root context 충돌 context path 중복 시 충돌 발생 (ex: ROOT.war)
15 web.xml 필터 오류 잘못된 필터 매핑 시 요청 전체 차단 가능
16 Reload 후 500 설정파일 충돌 또는 context 오염 가능성
17 Metaspace OOM -XX:MaxMetaspaceSize 설정 부족 또는 클래스 로더 누수
18 PermGen OOM Java 7 이하에서는 -XX:MaxPermSize로 설정 필요
19 라이브러리 충돌 WAR 내 라이브러리 중복 → NoSuchMethodError 가능
20 로컬만 정상 -Dspring.profiles.active 등 환경변수 누락 의심
21 CSRF 오류 Referer 또는 Origin 헤더 누락 시 필터 통과 실패
22 외부 API timeout Retry, timeout, Circuit Breaker 미구현 시 장애 발생
23 TLS 인증서 오류 인증서 만료 또는 Chain 누락으로 SSL 오류 발생
24 JVM CPU 100% 무한 루프, Busy Wait 발생 → jstack 분석 필요
25 Keepalive 문제 WEB ↔ WAS 간 커넥션 재사용 실패 → connection pool 확인
26 Filter 적용 후 전체 오류 chain.doFilter 호출 누락 시 전체 요청 막힘
27 로그 생성 안됨 log 설정 경로 오류 또는 로그 디렉토리 권한 문제
28 Redis 세션 장애 TTL, eviction 정책 미설정 시 세션 유실 가능
29 gzip 설정 오류 WAS/WEB 모두 gzip 설정 시 이중 압축으로 오류 발생
30 파일 업로드 실패 multipart 설정의 maxPostSize 미조정으로 제한 초과 발생

📌 활용 팁

  • 오픈북용 블로그: Ctrl+F → 키워드 검색 (gzip, 499, GC, threadpool, redis, upload)
  • 시험 직전 스캔: 개념-원인-조치 키워드 3단 기억 반복
  • PDF 카드화 요청 가능: 원하시면 카드 형식으로 PDF 출력도 해드릴게요

'WEB & WAS > 기본 개념' 카테고리의 다른 글

WEB/WAS 실무 심화 핵심 요약  (0) 2025.05.08

+ Recent posts