'

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [STUDY19] JSP web architecture/ forwarding,redirect
    FISA 2026. 1. 19. 17:18

    WS, WAS, Web Container, Servlet Container tomcat clientside server side jsp 의 모든것에 관해서 설명해주고 연관관에 대해 궁금해졌습니다.

     

    1. 전체 구조

    [ Client (Browser) ]
            |
            | HTTP Request
            v
    [ Web Server (WS) ]
            |
            | (정적 자원 or 동적 요청 전달)
            v
    [ WAS (Tomcat) ]
            |
            v
    [ Web / Servlet Container ]
            |
            v
    [ Servlet / JSP ]
            |
            v
    [ DB / 외부 API ]

     

     

    2. Client Side (클라이언트 사이드)

     

    정의는 사용자의 브라우저 환경입니다. HTML CSS JAVASCRIPT가 실행되는 영역이에요.

    html이랑 css js가 무슨 역할을 하는지는 아니까 패스하고,

    특징만 말하자면, 서버 왕복없이 즉각적으로 ui업데이트가 됩니다. 오프라인으로도 동작하구요 정적파일 CDN배포로 서버 부하가 감소해요.

    단점은 소스코드가 그대로 사용자에게 노출되므로 보안 취약하고... 초기 html이 비어있으므로 SEO불리합니다.

    여기에 같이 나오는게 CSR. 클라이언트 사이드 렌더링이에요

    Single Page Application이 CSR방식으로 단 한번만 리소스(html,css,js)등을 로디앟고, 그 후에는 데이터를 받아올 때만 서버와 통신해요. 단 한번만 페이지를 불러오는거죠.

     

    한마디로 말하자면 서버로부터 HTML JS 파일을 한 번 다운로드하고, SPA프레임워크를 실행하고, 상호작용이 일어날때만서버에 요청하는거예요.

     

    이와 반대되는 개념이 SSR. 서버사이드 렌더링이에요.

    서버에서 html,js를 만들고 client에 넘겨지는 방식이죠. Html Response가 넘어오고, page가 보여지고 js가 다운로드 되는거예요.

    장점으론 초기 로딩이 빠르고, html이 body에 content가 담겨있기때문에 SEO에 적합하지만 네트워크 지연이 나타날 수 있어요.

     

     

    3. Web Server (WS)

     

    ws는 http요청을 받아 처리하는 서버에요. apach, nginx가있습니다.

    html css js 이미지 등 정적리소스를 처리하고, 동적요청(servlet/jsp 등)은 was로 전달해요 

    4. WAS (Web Application Server)

    동적 콘텐츠 생성 담당이에요. servlet이나 jsp담당, db연동, 트랜잭션 처리등을 담당하고

    tomcat이나 jboss, weblogic등이 있어요.

     

     

    여기까지 알 수 있는 사실은

     was는 백엔드로직을 수행하고, ws는 요청라우팅과 정적 리소스를 제공해요.

    저는 ws가 프론트 로직 렌더링인줄알았는데, ws는 js실행,dom조작등을 아무것도 안하고 

    파일전달과 요청전달만하기때문에 요청받으면?

    정적파일은 그대로, 동적요청이면 was한테 위임하는 문이라고 볼 수 있어요.

     

    Client (브라우저)
      └─ JS 실행 + 렌더링
           ↑
           | JSON
    WAS (API 서버)
           ↑
    WS (정적 리소스 전달)

    5. servlet

    servlet은 http요청을 처리하기위해 서버에서 실행되는 java클래스에요.

    servlet은 servlet container에 의해 관리되며, http request받아서 비지니스 로직 수행하고 응답을 생성하는 서버측 컴포넌트예요.was 내부에서 실행되고, 반드시 SC가 필요합니다.

    servlet생명주기는

    클래스 로딩
     → Servlet 인스턴스 생성
       → init()
         → service()
           → doGet() / doPost()
         → destroy()

    가돼요. 서브렛 자체 인스턴스는하나. 요청마다 새 스레드를 만들어요.

    • 요청 파라미터 처리
    • 비즈니스 로직 호출
    • DB 연동
    • 결과 결정
    • 다음 페이지 이동 결정 (Redirect / Forward)

    즉 서브렛은 controller역할을 합니다.

     

    서브렛에서 페이지 이동을하고 jsp로 화면을 구성한다구 보면돼요.

    이때 사용하는 것이 forward랑 redirect입니다.

    request.setAttribute("user", user);
    
    RequestDispatcher rd =
        request.getRequestDispatcher("/result.jsp");
    rd.forward(request, response);

     

    servlet이 처리한 결과를 request에 담아서 jsp로 전달하는겁니다.

     

     

    5. Redirect 와 Fowarding 방식

     

    포워딩 방식은, 하나의 http요청(requeest)와 응답(response)를 유지한 채 서버 내부에서 처리 대상을 다른 리소스로 넘기는 방식입니다.

    요청은 한 번이며 클라이언트는 이동 사실을 인지하지못해요. url이 변하지않기때문이죠

     

     

    Client
      └─ HTTP Request
           ↓
        Servlet A
           ↓ (RequestDispatcher.forward)
        Servlet B / JSP
           ↓
      HTTP Response

    같은 servlet container가 같은 request response를 그대로 전달해서 새로운 객체를 만들지 않아요.

    이게 가능한 이유는 request객체가 하나이기 때문이에요.

     

    리다이렉트 방식은, 서버가 클라이언트에게 다른 url로 다시 요청하라 라고 요청하는 방식입니다.

    서버는 응답만 반환하고 실제 이동은 클라이언트가 수행해요.

     

    Client
     ──(요청1)──> Servlet
    Client <── 302 + Location ──
    Client ──(요청2)──> 새로운 URL

    request객체가 사라지는 이유는,, 첫 요청이 종료되면 클라이언트가 새로운 요청을 생성해요.

     

    그럼 보통 요청url -> 내부로직 -> 요청이 완료된 url을할때하는건가?

    에대한거면 맞아요.

    모든 경우가 아니라 상태변경이 일어나면 하는거에요.

     

     

    그럼 만약에블로그 글을하나눌러요 그럼 url이 바뀌잖아요 왜 redirect방식인거예요?

    ->url변경이 일어나는거랑 상태변경의 차이인거죠.

     

     

    url이 바뀌는것과 redirect의 차이점??

    ->url이 바뀌는건 아예 다른 리소스(html,css, db데이터)를 요청하는것이고

    redirect는 같은 리소스에대해 요청을 종료하고 그리소스에서 바뀌는 변경점인건가???

    로그인같은경우, 로그인이라는 페이지에 데이터를 넣고, 그 요청을 종료하고 다른 리소스를 불러오는것인

     

    ->강사님께 여쭤보니 그냥 프론트처리방식, 백단의 api처리방식으로 차이를 생각하면될 것 같아요

    728x90

    댓글

Designed by Tistory.
티스토리 친구하기