제시해 주신 SampleController.java 코드는 스프링(Spring) 기반의 웹 애플리케이션에서 **게시판 기능(CRUD 및 검색, 페이징)**을 처리하는 핵심 컨트롤러입니다.
각 @RequestMapping 메소드(기능)별로 상세하게 단계적으로 설명해 드리겠습니다.
| 요소 | 설명 |
|---|---|
@Controller |
이 클래스가 Spring MVC의 컨트롤러 역할을 한다는 것을 선언합니다. |
Logger log |
log4j를 사용하여 애플리케이션 실행 중 디버그 정보나 오류를 기록합니다. (디버깅 목적) |
@Resource(name="sampleService") |
SampleService 객체를 주입받습니다. 컨트롤러는 서비스 계층을 호출하여 실제 비즈니스 로직(데이터 처리, DB 접속 등)을 수행합니다. |
CommandMap commandMap |
사용자가 웹에서 전송한 모든 요청 파라미터(데이터)를 담는 객체입니다. JSP의 <input> 필드 값 등이 이 객체에 자동으로 담깁니다. |
ModelAndView mv |
서버에서 클라이언트(브라우저)로 전달할 **데이터(Model)**와 **화면(View, 즉 JSP 파일 경로)**을 담는 객체입니다. |
/sample/openBoardList.do)이 메소드는 게시판 목록을 보여주는 핵심 기능입니다.
| 단계 | 코드 | 설명 |
|---|---|---|
| 1. View 지정 | mv = new ModelAndView("/sample/boardList"); |
클라이언트에게 boardList.jsp 화면을 보여주겠다고 지정합니다. |
| 2. 서비스 호출 | Map<String, Object> resultMap = sampleService.selectBoardList(commandMap.getMap()); |
SampleService의 selectBoardList 메소드를 호출하여 DB에서 게시글 목록을 가져옵니다. 이때, 검색 조건(searchType, searchKeyword)과 페이징 정보가 담긴 commandMap을 함께 전달합니다. |
| 3. 데이터 추가 (페이징) | mv.addObject("paginationInfo", ...) |
서비스 계층에서 계산된 **페이징 정보(전체 글 수, 현재 페이지 등)**를 JSP로 전달하여 하단의 페이지 번호 목록을 표시하는 데 사용됩니다. |
| 4. 데이터 추가 (목록) | mv.addObject("list", resultMap.get("result")); |
DB에서 조회된 실제 게시글 목록 데이터를 JSP로 전달하여 테이블에 출력합니다. |
| 5. 검색 조건 복원 | mv.addObject("searchType", ...) |
사용자가 목록으로 돌아왔을 때, 이전에 검색했던 키워드와 타입(제목, 내용 등)을 검색창에 자동으로 다시 표시하기 위해 JSP로 전달합니다. |
/sample/insertBoard.do)새로운 게시글을 작성하고 저장하는 기능입니다.
| 단계 | 코드 | 설명 |
|---|---|---|
| 1. View 지정 | ModelAndView mv = new ModelAndView("redirect:/sample/openBoardList.do"); |
작업 완료 후, redirect:를 사용하여 게시글 목록 화면으로 강제 이동을 지시합니다. (새로고침 문제 방지) |
| 2. 서비스 호출 | sampleService.insertBoard(commandMap.getMap(), request); |
SampleService를 호출하여 DB에 게시글 내용과 첨부 파일 정보를 저장하는 비즈니스 로직을 실행합니다. |
| 3. 반환 | return mv; |
목록 페이지로 리다이렉트 됩니다. |
/sample/openBoardDetail.do)특정 게시글을 클릭했을 때 상세 내용을 보여주는 기능입니다.
| 단계 | 코드 | 설명 |
|---|---|---|
| 1. View 지정 | ModelAndView mv = new ModelAndView("/sample/boardDetail"); |
boardDetail.jsp 화면을 보여주겠다고 지정합니다. |
| 2. 서비스 호출 | Map<String,Object> map = sampleService.selectBoardDetail(commandMap.getMap()); |
CommandMap에 담긴 **게시글 번호(IDX)**를 사용하여 서비스에서 상세 내용, 첨부 파일 목록, 이전/다음 글 IDX를 모두 조회합니다. |
| 3. 데이터 추가 (본문) | mv.addObject("map", map.get("map")); |
게시글의 제목, 내용, 작성자 등 본문 정보를 JSP로 전달합니다. |
| 4. 데이터 추가 (파일) | mv.addObject("list", map.get("list")); |
해당 게시글에 첨부된 파일 목록 정보를 JSP로 전달합니다. |
| 5. 데이터 추가 (이전/다음) | mv.addObject("prevNextBoard", map.get("prevNextBoard")); |
이전 글과 다음 글의 IDX를 JSP로 전달합니다. 이 데이터는 boardDetail.jsp에서 이전/다음 버튼 활성화 및 이동에 사용됩니다. |