BoardController.java
1. 클래스를 선언하고, 필요한 의존성을 주입합니다.
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
@Autowired
private Util util;
}
2. 메소드 작성 : 각각의 비즈니스 로직을 담당하는 메소드들을 작성
처음부터 어떤 파일을 만들지 로직을 구상한 뒤에 controller에 전부 다 작성해서 만드는 건?
@GetMapping("/board")
public String board(@RequestParam(value="pageNo", required=false) String no, Model model) {
// ...
}
@GetMapping("/detail")
public String detail(@RequestParam(value="no", defaultValue="0") String no, Model model) {
// ...
}
@PostMapping("/write")
public String write(WriteDTO dto, HttpServletRequest request) {
// ...
}
@PostMapping("/commentWrite")
public String commentWrite(CommentDTO comment, HttpServletRequest request) {
// ...
}
@PostMapping("/postDel")
public String postDel(@RequestParam("no") int no) {
// ...
}
3. 비즈니스 로직 구현
각 메소드에 필요한 비즈니스 로직을 구현합니다. 이는 주로 BoardService에서 제공되는 서비스 메소드들을 활용합니다.
4. 뷰 반환
return "board";
BoardService.java
@Service
public class BoardService {
// 게시판 목록 조회
public List<BoardDTO> boardList(int pageNo);
// 글 상세 조회
public BoardDTO detail(int no);
// 글 작성
public int write(WriteDTO dto);
// 댓글 작성
public int commentWrite(CommentDTO comment);
// 댓글 목록 조회
public List<CommentDTO> commentsList(int no);
// 글 삭제
public int postDel(int no);
// 전체 글 수 조회
public int totalRecordCount();
// 글 작성 (HttpServletRequest를 이용한 오버로딩)
public int write(WriteDTO dto, HttpServletRequest request);
}
BoardDAO.java
@Repository
public class BoardDAO {
@Autowired
private SqlSession sqlSession;
// 게시판 목록 조회
public List<BoardDTO> boardList(int pageNo) {
return sqlSession.selectList("board.boardList", pageNo);
}
// 글 상세 조회
public BoardDTO detail(int no) {
return sqlSession.selectOne("board.detail", no);
}
// 글 작성
public int write(WriteDTO dto) {
return sqlSession.insert("board.write", dto);
}
// 댓글 작성
public int commentWrite(CommentDTO comment) {
return sqlSession.insert("board.commentWrite", comment);
}
// 댓글 목록 조회
public List<CommentDTO> commentsList(int no) {
return sqlSession.selectList("board.commentsList", no);
}
// 글 삭제
public int postDel(int no) {
return sqlSession.update("board.postDel", no);
}
// 전체 글 수 조회
public int totalRecordCount() {
return sqlSession.selectOne("board.totalRecordCount");
}
}
board-mapper.xml
resultMap 섹션:
commentDTO 타입에 대한 resultMap을 정의하고 있습니다. 이는 commentDTO 클래스의 필드와 결과 쿼리의 컬럼 간의 매핑을 설정하는 부분입니다.
select 쿼리 (totalRecordCount):
board 테이블의 총 레코드 수를 세는 쿼리입니다. board_del이 '1'인 것만을 대상으로 총 레코드 수를 조회합니다.
select 쿼리 (boardList):
게시판 목록을 조회하는 쿼리입니다. boardview 뷰를 통해 데이터를 가져오며, 페이지네이션을 위해 LIMIT 절이 사용되어 있습니다.
select 쿼리 (detail):
특정 글의 상세 정보를 조회하는 쿼리입니다. board 테이블과 member 테이블을 조인하여 필요한 정보를 가져오고, 해당 글의 댓글 수도 조회합니다.
insert 쿼리 (write):
새로운 글을 작성하는 쿼리입니다. writeDTO 객체의 정보를 이용하여 board 테이블에 새로운 레코드를 추가하고, 추가된 글의 번호를 반환합니다.
insert 쿼리 (commentWrite):
댓글을 작성하는 쿼리입니다. commentDTO 객체의 정보를 이용하여 comment 테이블에 새로운 레코드를 추가합니다.
select 쿼리 (commentsList):
특정 글의 댓글 목록을 조회하는 쿼리입니다. commentview 뷰를 통해 데이터를 가져오며, 해당 글의 댓글 정보를 조회합니다.
update 쿼리 (postDel):
글을 삭제하는 쿼리입니다. 해당 글의 board_del을 '0'으로 업데이트하여 삭제된 상태로 변경합니다.
board.jsp
- 게시판 목록 표시
- 페이징 기능
- 게시물 상세 정보 표시
- 댓글 목록 표시
- 댓글 작성 기능
- 게시물 작성 기능
- 게시물 삭제 기능
- 에러 메시지 표시
<!-- 필요한 스크립트 및 스타일 추가 -->
<!-- 글 작성 유효성 검사 및 상세 모달 호출 스크립트 -->
<script type="text/javascript">
function writeCheck() {
// ... (글 작성 유효성 검사 로직)
}
function detail(no){
// ... (상세 모달 호출 스크립트)
}
// 전자정부 페이징 이동 스크립트
function linkPage(pageNo){
// ... (페이징 이동 스크립트)
}
</script>
<!-- 게시판 목록 및 페이징 -->
<section class="page-section" id="services">
<!-- ... (게시판 목록 및 페이징 HTML) -->
</section>
<!-- 글쓰기 모달 -->
<div class="modal" id="write">
<!-- ... (글쓰기 모달 HTML) -->
</div>
<!-- 상세 모달 -->
<div class="modal" id="detail">
<!-- ... (상세 모달 HTML) -->
</div>
detail.jsp
<!-- 필요한 스크립트 추가 -->
<script type="text/javascript">
// 삭제 확인 창 띄우고 확인 시 삭제 처리
function deletePost(no) {
// ... (Swal.fire와 삭제 처리 로직)
}
// 댓글 길이 확인 및 입력창 유효성 검사
function commentInert() {
// ... (댓글 길이 확인 및 유효성 검사)
}
// 댓글 입력창 글자 수 제한
$(function(){
// ... (댓글 입력창 글자 수 제한 스크립트)
});
</script>
<!-- 게시글 디테일 부분 -->
<section class="page-section" id="detail">
<!-- ... (게시글 디테일 HTML) -->
<div class="container">
<!-- ... (게시글 디테일 내용 및 수정, 삭제 버튼) -->
</div>
<!-- 댓글 입력창 및 출력창 -->
<div class="container">
<!-- ... (댓글 입력창 및 출력창 HTML) -->
</div>
</section>
root-context.xml
Spring 프레임워크에서 사용하는 설정 파일 중 하나입니다.
이 파일은 주로 웹 애플리케이션 컨텍스트의 부모 역할을 합니다. 웹 애플리케이션의 각 서블릿 컨텍스트마다 자신만의 설정 파일이 있을 수 있지만, 공통적으로 사용하는 빈이나 설정은 root-context.xml에 정의하여 중복을 피하고 관리를 편리하게 합니다.
- 데이터베이스 설정: 데이터베이스 연결 정보 및 데이터베이스 관련 설정을 정의합니다.
- 트랜잭션 관리: 트랜잭션 매니저 설정 및 트랜잭션 속성을 정의합니다.
- 컴포넌트 스캔 설정: Spring 컴포넌트 스캔을 통해 어플리케이션에서 사용할 빈을 찾도록 설정합니다.
- 보안 설정: Spring Security와 관련된 설정을 추가할 수 있습니다.
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 62 xxxxxxx] 로그인 확인, 횟수 제한 (0) | 2024.02.22 |
---|---|
[국비 62일차 TIL] 로그인 확인, 횟수 제한 (0) | 2024.02.21 |
[국비 61일차 TIL] spring 글 삭제, 페이징, 로그인 (1) | 2024.02.20 |
[국비 60일차 TIL] spring 글쓰기, 디테일, 댓글 modal (0) | 2024.02.19 |
[국비 59일차 TIL] Spring - 게시판 detail, error, 모달 창 구현 (0) | 2024.02.16 |
댓글