본문 바로가기
개발 공부 Today I Learned

[국비 61일차 TIL_2] 필수 파일의 대략적인 기본 로직 정리

by 개발자신입 2024. 2. 20.
반응형

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

 

  1. 게시판 목록 표시
  2. 페이징 기능
  3. 게시물 상세 정보 표시
  4. 댓글 목록 표시
  5. 댓글 작성 기능
  6. 게시물 작성 기능
  7. 게시물 삭제 기능
  8. 에러 메시지 표시

 

<!-- 필요한 스크립트 및 스타일 추가 -->


<!-- 글 작성 유효성 검사 및 상세 모달 호출 스크립트 -->
<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에 정의하여 중복을 피하고 관리를 편리하게 합니다.

 

  1. 데이터베이스 설정: 데이터베이스 연결 정보 및 데이터베이스 관련 설정을 정의합니다.
  2. 트랜잭션 관리: 트랜잭션 매니저 설정 및 트랜잭션 속성을 정의합니다.
  3. 컴포넌트 스캔 설정: Spring 컴포넌트 스캔을 통해 어플리케이션에서 사용할 빈을 찾도록 설정합니다.
  4. 보안 설정: Spring Security와 관련된 설정을 추가할 수 있습니다.
반응형

댓글