코드 분석

웹 요청 흐름 완전 정복! 클라이언트부터 서버, 그리고 가시 브라우저까지

mynote6676 2025. 6. 26. 00:33

🧭 전체 흐름 요약 (비전공자 + 시니어 기준)

| 웹에서 내가 주소창에 URL을 입력하면,

그 요청은 클라이언트  -> 서버 -> 데이터베이스 -> 다시 서버 -> 클라이언트로 돌아오는 왕복 여행을 해요.

 

📦 스토리 비유 : 택배 시스템

주인공

👩‍💻 클라이언트(나): " 이 물건 보여줘! " 요청하는 고객

 

📬 컨트롤러 : 고객의 요청을 제일 먼저 받는 택배 기사

 

🧠 서비스 : 그 물건을 어디서 꺼내야 할지 판단하는 매니저

 

📁 리포지토리 : 실제 물건을 꺼내오는 창고 직원

 

💾 데이터베이스(DB): 창고에 쌓여 있는 모든 물건

 

🖼️ 뷰( view) : 꺼낸 물건을 보기 좋게 포장해 보여주는 화면

 

📲 브라우저(사용자 화면) : 결국 이 물건을 받는 고객  ----> (뷰 , 브라우저 차이 참고 요망)

 

---------------------------------------------------------------------------------------------------

🛤️ 실제 웹 요청 흐름

1. 클라이언트가 요청을 보냄

예 : 브라우저에서 https://site.com/board/3 입력

이건 "3번 게시글 좀 보여줘!" 라는 HTTP GET 요청

 

2. 컨트롤러가 요청을 받음

@GetMapping("/board/{id}")
public String detail(@PathVariable Long id, HttpServletRequest request) {

 

** 택배 기사(컨트롤러)** 가 요청을 보고 "오!!! 3번 글을 보고 싶군요!!!! 라고 인식

 

3. 서비스에게 일 시킴

Board board = boardService.findById(id);

 

** 매니저 (서비스)**에게 "3번 물건 어디 있는지 알려줘요" 요청

 

4.리포지토리를 통해 DB에서 꺼냄

return boardRepository.findById(id);

 

** 창고 직원(리포지토리)** 이 실제로 데이터베이스에서 3번 글을 꺼냄

 

5. 서비스 -> 컨트롤러로 결과 반환

DB 에서 꺼낸 데이터가 다시 컨트롤러로 돌아옴

 

6.request.setAttribute("board",board);

컨트롤러는 **뷰(view)**에게 전달하기 위해 택배 박스에 

"board" 라는 이름표를 붙여 포장함 

 

7.뷰(HTML 화면)로 이동

return "board/detail";

 

머스태치나 타임리프가 있는 HTML 화면으로 이동

이 화면은 {{board.title}},{{board.content}}같은 부분을 실제 데이터롤 채움

 

8.완성된 HTML을 클라이언트에게 응답

이 모든 걸 서버가 조립해서, 최종 HTML을 브라우저로 전송

 

🎯

핵심 순서 다시 정리

  1. 클라이언트(브라우저): 요청 발사 → GET
  2. 컨트롤러: 요청 확인 + 서비스 호출
  3. 서비스: 리포지토리 호출
  4. 리포지토리: DB에서 데이터 조회
  5. 서비스 → 컨트롤러로 데이터 반환
  6. 컨트롤러: request에 데이터 담기 (setAttribute)
  7. 뷰(HTML)로 이동: 화면 생성
  8. 클라이언트에게 응답: 브라우저에서 화면 출력
728x90