Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

전체 백엔드 흐름 본문

HDC 학습일지

전체 백엔드 흐름

heewon09 2025. 12. 2. 21:23

리액트 -> 스프링 -> 서비스 -> DAO/Repository -> DB -> 다시 리액트

React(Front)
   ↓   HTTP 요청
Controller (Spring)
   ↓
Service
   ↓
DAO / Repository
   ↓
JPA(EntityManager) → JDBC Driver → DB
   ↓
Service
   ↓
Controller
   ↓
React(JSON 응답)

스프링 MVC 내부 흐름 

리액트가 /dept/insert 같은 URL로 요청을 보내면 스프링이 내부적으로 어떻게 처리하는지 정리

1. Front-End -> DispatcherServlet

React가 /write 또는 /insert 요청을 보냄

  • 하나의 HttpServlet 서블릿 컨테이너가 HTTP 요청을 전달하면, service() 메서드를 타고 내부적으로 doGet, doPost 등이 실행Spring MVC 이 로직을 doDispatch() 내부에 집중시켜 관리

   |

스프링 DispatcherServlet이 모든 요청을 가로챔 

  • 스프링 MVC의 프론트 컨트롤러

2. HandlerMapping

DispathcerServlet이 URL 분석

  • /write, /insert, /list 같은 path를 보고
  • 이걸 처리할 Controller 메소드를 찾음

 

3. HandlerAdapter 

Controller 메소드를 실행하기 위한 어댑터

컨트롤러를 실행하는데 필요한 조건을 체크하고, 어떻게 실행할지를 결정합니다.

출처: https://bcuts.tistory.com/431 [Back to the Basics:티스토리]

  • 실행 방식을 결정하는 인터페이스. 단순히 핸들러를 찾는 것에서 끝나는 것이 아니라 실제로 그 (Controller)를 실행하는 로직은 이 어댑터에 위임
  • @RequestMapping 기반 컨트롤러 실행
  • @GetMapping
  • @RestController 등도 등장

 

4. Controller 실행

@RestController 메소드가 실행됨

컨트롤러는 보통 서비스에 넘김:

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "안녕하세요!");
        return "hello"; // hello.html을 의미
    }
}
출처: https://bcuts.tistory.com/431 [Back to the Basics:티스토리]

5. Service 실행

비즈니스 로직 처리
DAO/Repository 호출

6. DAO or Repository 실행

여기가 DB와 직접 연결되는 영역

7. JPA 내부 흐름 

JPA를 사용하는 경우 다음 순서로 진행:

Repository
   ↓
EntityManager
   ↓
JPQL → SQL 변환
   ↓
JDBC Driver
   ↓
DBMS(MySQL, Oracle 등)

DB에서 데이터를 가져오거나 Insert/Update/Delete 실행

8. 결과 반환

Repository -> Service -> Controller -> HandlerAdapter -> DispatcherServlet

컨트롤러가 @RestController이면

ViewResolver로 가지 않고
JSON 변환 후 React로 응답

만약 화면을 보여주는 컨트롤러라면:

ViewResolver -> JSP

엔티티/DTO/DAO/Repository 레이어 역할 정리 

Entity 

  • 테이블을 자바 객체로 표현 
  • DB테이블을 모델링한 클래스
  • JPA가 관리함
  • JDBC -> JdbcTemplate 사용

DTO (Data Transfer Object)

  • 레이어 간 데이터 전달용
  • Controller ↔ Service ↔ Front-end 간 데이터를 안전하게 주고받음
  • 민감 데이터 숨기기 가능(password 등)

 DAO (JDBC / MyBatis 사용 시)

  • SQL을 직접 실행하는 계층
  • 규모가 작으면 제거하기도 함 (Service → Repository 바로 연결)

 Repository (JPA)

  • 엔티티 기반 CRUD를 자동 처리
  • SQL 직접 작성할 필요 없음
  • JPA에서는 DAO 대신 Repository 사용

 4. 정리: 프론트~백엔드 전체 흐름 (심플 + 내부 흐름 포함)

React → Controller

HTTP 요청 도착

DispatcherServlet → HandlerMapping → HandlerAdapter

컨트롤러 메소드 실행


 Controller → Service

  • 비즈니스 로직 위임
  • DTO를 파라미터로 전달(엔티티 직접 X)

 Service → DAO/Repository

  • DB 작업 요청
  • 자바 객체(Entity)를 이용한 작업 수행

 DAO/Repository → JPA EntityManager

  • JPQL → SQL 변환
  • JDBC 드라이버 통해 DB 동작

 DB → JPA → Service → Controller

  • 결과를 다시 레이어로 반환
  • Controller는 JSON 응답 반환

 Controller → Front-End(JSON)

React가 이 JSON을 받아 화면을 구성함


 

1.Stream API 사용 이유

  • List, Map, 배열 등 자료구조를 조작할 때
  • for문 대신 더 선언적으로 처리 가능

예:

list.stream()
    .filter(item -> item.getScore() > 90)
    .collect(Collectors.toList());

 

React → Controller → Service → DAO/Repository → JPA(EntityManager) → DB
DB → JPA → Service → Controller → React(JSON)
-------------
스프링 내부:
DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → Service → Repository
-------------
역할:
Entity = 테이블 모델링
DTO = 레이어간 데이터 전달
Repository = JPA DB 접근
DAO = SQL 직접 접근
Service = 비즈니스 로직
Controller = 요청/응답 처리