🔄 흐름 예시로 다시 보기 (쑥갓칼국수 주문)
- 손님이 쑥갓칼국수 주문
- 알바생(Controller) 이 주문서를 받아
- 주방 매니저(Service) 에게 전달
- Service는 이벤트 여부 확인 후 “쑥갓 할인 적용”
- **주방장(DAOImpl)**에게 요리 지시
- 주방장은 **레시피(Mapper)**를 보고
- **디지털 냉장고(DB)**에서 재료 꺼내 요리
- 결과를 **배달 가방(Model)**에 담아
- **손님(View)**에게 음식 전달!
🍜 스프링 구성요소별 필수 요소
@Controller | @Controller | 해당 클래스가 웹 요청 처리하는 클래스임을 표시 | 알바생 명찰 |
@RequestMapping("/order") | 요청 경로 설정 | 손님이 주문서 내는 종이 | |
@ModelAttribute | form 데이터 자동 바인딩 | 주문서 보기 좋게 정리해주는 기계 | |
Model model + model.addAttribute() | View로 데이터 전달 | 배달가방에 음식 담는 작업 |
@Service | 클래스에 붙여서 서비스 계층임을 표시 | 주방 매니저 명찰 | |
@Autowired 또는 @Inject | DAO 객체 주입 | 무전기: 주방장 호출 | |
public void orderNoodle(...) | 비즈니스 로직 수행 메서드 | 메뉴 결정 / 할인가 적용 등 |
없음 (인터페이스는 어노테이션 안 씀) | 메서드 시그니처만 선언 | 주방에서 사용할 도구 리스트 | |
ex) public void insert(OrderDTO dto); | DAOImpl에서 구현될 메서드 선언 | 주방장이 따라야 할 규칙 |
@Repository | DB 작업을 하는 클래스임을 표시 | 냉장고 접근 가능한 요리사 명찰 | |
@Inject 또는 @Autowired | SqlSession 또는 Mapper 주입 | 무전기 | |
sqlSession.insert(...) 또는 mapper.insert(...) | SQL 실행 | 요리사가 요리하는 장면 |
<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 |