프로그래밍/SPRING

스프링 전체 구조 + 칼국수집 비유 정리표

Cognivox 2025. 5. 23. 14:26
반응형

🔄 흐름 예시로 다시 보기 (쑥갓칼국수 주문)

  1. 손님이 쑥갓칼국수 주문
  2. 알바생(Controller) 이 주문서를 받아
  3. 주방 매니저(Service) 에게 전달
  4. Service는 이벤트 여부 확인 후 “쑥갓 할인 적용”
  5. **주방장(DAOImpl)**에게 요리 지시
  6. 주방장은 **레시피(Mapper)**를 보고
  7. **디지털 냉장고(DB)**에서 재료 꺼내 요리
  8. 결과를 **배달 가방(Model)**에 담아
  9. **손님(View)**에게 음식 전달!

🍜 스프링 구성요소별 필수 요소

구분꼭 들어가는 것설명비유
@Controller @Controller 해당 클래스가 웹 요청 처리하는 클래스임을 표시 알바생 명찰
  @RequestMapping("/order") 요청 경로 설정 손님이 주문서 내는 종이
  @ModelAttribute form 데이터 자동 바인딩 주문서 보기 좋게 정리해주는 기계
  Model model + model.addAttribute() View로 데이터 전달 배달가방에 음식 담는 작업
 

Service (클래스)꼭 들어가는 것설명비유
@Service 클래스에 붙여서 서비스 계층임을 표시 주방 매니저 명찰  
@Autowired 또는 @Inject DAO 객체 주입 무전기: 주방장 호출  
public void orderNoodle(...) 비즈니스 로직 수행 메서드 메뉴 결정 / 할인가 적용 등  
 

DAO (인터페이스)꼭 들어가는 것설명비유
없음 (인터페이스는 어노테이션 안 씀) 메서드 시그니처만 선언 주방에서 사용할 도구 리스트  
ex) public void insert(OrderDTO dto); DAOImpl에서 구현될 메서드 선언 주방장이 따라야 할 규칙  
 

DAO 구현체 (DAOImpl)꼭 들어가는 것설명비유
@Repository DB 작업을 하는 클래스임을 표시 냉장고 접근 가능한 요리사 명찰  
@Inject 또는 @Autowired SqlSession 또는 Mapper 주입 무전기  
sqlSession.insert(...) 또는 mapper.insert(...) SQL 실행 요리사가 요리하는 장면  
 

Mapper (XML 파일)꼭 들어가는 것설명비유
<mapper namespace="OrderMapper"> 어떤 DAO랑 연결되는지 표시 요리책의 이름표  
<select>, <insert>, <update> SQL 정의 요리 레시피  
parameterType, resultType 전달/반환 데이터 형식 요리 재료와 결과물 종류  
 

| DB | 필수 없음 | 오라클/마리아DB 등 외부에 있는 저장소 | 디지털 냉장고 |


✅ 보너스: 어노테이션 요약 비유 모음

어노테이션설명비유
@Controller 웹 요청 처리 알바생 명찰
@Service 서비스 로직 처리 주방 매니저 명찰
@Repository DB 처리 담당 클래스 냉장고 접근 가능한 요리사 명찰
@Autowired / @Inject 의존성 주입 무전기
@RequestMapping URL 경로 매핑 주문서 종이
@ModelAttribute form 데이터 정리 주문서 정리 기계
model.addAttribute() View에 값 전달 배달 가방에 음식 넣기

 

 

| @Service | @Service | 주방 매니저 명찰 (요리 지시 및 판단 담당) |
| | @Inject, @Autowired | 무전기 (주방장과 연결하는 수단) |

| DAO (인터페이스) | 없음 | 도구 설명서 (요리사가 따라야 할 규칙만 적힘) |

| DAOImpl | @Repository | 냉장고 열 수 있는 요리사 명찰 |
| | @Inject, @Autowired | 무전기 (냉장고 접근 위한 무전기) |
| | sqlSession 사용 | 직접 요리하는 행동 (레시피 따라 조리) |

| Mapper (XML) | <mapper>, <insert> 등 | 요리 레시피북 (정확한 요리 방법 적힘) |
| | namespace, parameterType, resultType | 요리에 필요한 재료와 결과물 정의 |

| DB | 없음 (외부 시스템) | 디지털 냉장고 (재료 보관 창고) |

| Model | model.addAttribute() | 음식 담는 배달 가방 |

| View (JSP 등) | JSP, HTML, Thymeleaf | 손님 앞에 놓이는 실제 칼국수 (완성된 화면) |

 

🍜 전체 흐름 예시

💬 손님: “쑥갓 칼국수 하나요!” (웹 요청)


1. Controller (알바생)

  • @Controller
  • @RequestMapping
  • 주문서(DTO)를 받아 Service 호출
  • model.addAttribute()로 결과를 View에 전달
    📝 역할: 손님 주문 접수 → 주방 매니저 호출

2. Service (주방 매니저)

  • @Service
  • @Inject, @Autowired로 DAO 연결 (무전기)
  • 쑥갓 메뉴인지 확인 → 가격 결정
  • DAO 호출
    📝 역할: 주문 분석, 가격 결정, 주방장 호출

3. DAO (도구 리스트 인터페이스)

  • 인터페이스 (어노테이션 없음)
  • insert(OrderDTO dto) 같은 메서드 정의
    📝 역할: “주방장이 이런 도구 써야 해!” 라고 정의만 함

4. DAOImpl (주방장)

  • @Repository
  • @Inject, @Autowired로 SqlSession 주입 (무전기)
  • sqlSession.insert("orderMapper.insert", dto)
    📝 역할: 레시피 보고 실제로 요리함

5. Mapper (요리 레시피북)

  • orderMapper.xml
  • <insert id="insert"> … </insert>
  • SQL이 실제로 작성되는 곳
    📝 역할: 정확한 요리법이 적힌 레시피북

6. DB (디지털 냉장고)

  • SQL 실행 → 저장하거나 꺼내옴
    📝 역할: 재료가 실제로 보관되어 있는 창고

7. Model (배달 가방)

  • Model model
  • model.addAttribute("칼국수", 결과값)
    📝 역할: 주방에서 나온 음식 담아서 손님에게 전달

8. View (손님 앞 테이블)

  • JSP, HTML, Thymeleaf 등
  • 배달된 칼국수를 손님에게 시각적으로 보여줌
    📝 역할: 손님이 실제로 받는 음식 화면

 

 

| @Service | @Service | 비즈니스 로직 수행 (조건 판단, 계산, 흐름 제어) |
| | @Inject, @Autowired | DAO 객체 의존성 주입 |

| DAO (인터페이스) | 없음 | DB 작업 메서드 시그니처 정의 (select, insert 등) |

| DAOImpl | @Repository | DB 작업 클래스 선언 및 예외 자동 처리 지원 |
| | @Inject, @Autowired | SqlSession 또는 Mapper 주입 |
| | sqlSession, mapper.method() | 실제 SQL 실행(DB 접근) 수행 |

| Mapper (XML) | <mapper>, <insert>, <select> 등 | SQL 정의 및 실행을 위한 구문 작성 |
| | namespace, parameterType, resultType| DAO 메서드와 연결될 SQL 구성 정보 정의 |

| DB | 없음 (외부 시스템) | 실제 데이터 저장 및 조회 수행 |

| Model | model.addAttribute() | View로 전달할 데이터 저장 객체 |

| View (JSP 등) | JSP, HTML, Thymeleaf 등 | 사용자에게 최종 결과 화면 제공 |

반응형

'프로그래밍 > SPRING' 카테고리의 다른 글

스프링 구조 짜기 예시 (MVC 패턴)  (0) 2025.05.22
프로젝트 만들기 순서  (0) 2025.05.20
sts 다섯개 설정 언어셋  (0) 2025.05.19