제시해 주신 SampleController.java 코드는 스프링(Spring) 기반의 웹 애플리케이션에서 **게시판 기능(CRUD 및 검색, 페이징)**을 처리하는 핵심 컨트롤러입니다.

@RequestMapping 메소드(기능)별로 상세하게 단계적으로 설명해 드리겠습니다.


1. 기본 구성 요소 및 설정

요소 설명
@Controller 이 클래스가 Spring MVC의 컨트롤러 역할을 한다는 것을 선언합니다.
Logger log log4j를 사용하여 애플리케이션 실행 중 디버그 정보나 오류를 기록합니다. (디버깅 목적)
@Resource(name="sampleService") SampleService 객체를 주입받습니다. 컨트롤러는 서비스 계층을 호출하여 실제 비즈니스 로직(데이터 처리, DB 접속 등)을 수행합니다.
CommandMap commandMap 사용자가 웹에서 전송한 모든 요청 파라미터(데이터)를 담는 객체입니다. JSP의 <input> 필드 값 등이 이 객체에 자동으로 담깁니다.
ModelAndView mv 서버에서 클라이언트(브라우저)로 전달할 **데이터(Model)**와 **화면(View, 즉 JSP 파일 경로)**을 담는 객체입니다.

2. 게시글 목록 조회 및 검색 (/sample/openBoardList.do)

이 메소드는 게시판 목록을 보여주는 핵심 기능입니다.

단계 코드 설명
1. View 지정 mv = new ModelAndView("/sample/boardList"); 클라이언트에게 boardList.jsp 화면을 보여주겠다고 지정합니다.
2. 서비스 호출 Map<String, Object> resultMap = sampleService.selectBoardList(commandMap.getMap()); SampleServiceselectBoardList 메소드를 호출하여 DB에서 게시글 목록을 가져옵니다. 이때, 검색 조건(searchType, searchKeyword)과 페이징 정보가 담긴 commandMap을 함께 전달합니다.
3. 데이터 추가 (페이징) mv.addObject("paginationInfo", ...) 서비스 계층에서 계산된 **페이징 정보(전체 글 수, 현재 페이지 등)**를 JSP로 전달하여 하단의 페이지 번호 목록을 표시하는 데 사용됩니다.
4. 데이터 추가 (목록) mv.addObject("list", resultMap.get("result")); DB에서 조회된 실제 게시글 목록 데이터를 JSP로 전달하여 테이블에 출력합니다.
5. 검색 조건 복원 mv.addObject("searchType", ...) 사용자가 목록으로 돌아왔을 때, 이전에 검색했던 키워드와 타입(제목, 내용 등)을 검색창에 자동으로 다시 표시하기 위해 JSP로 전달합니다.

3. 게시글 등록 (/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; 목록 페이지로 리다이렉트 됩니다.

4. 게시글 상세 조회 (/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에서 이전/다음 버튼 활성화 및 이동에 사용됩니다.