게시판 페이지 무작정 따라하기 Ep.2

Joonseo·2024년 2월 8일

무작정 따라하기

목록 보기
3/5

1. 게시물 리스트 게시판 만들기

🧑🏻‍💻 게시물의 데이터를 DB에 보관하는 것까지 완료했으니 이제 그 데이터를 기반으로 리스트를 한번 만들어보자.

  • 먼저 리스트를 만들 무작위 데이터를 mariaDB 에서 생성해보자.

  • 먼저 위와 같이 코드를 작성해주고 use board 에 커서를 두고 command+Enter 한번, call testDataInsert;에 커서를 두고 command+Enter 를 눌러주자

  • 그러면 위와 같이 120개의 데이터가 잘 들어갔음을 확인할 수 있다. 이제 이 데이터를 개발중인 사이트에서 목차로 볼 수 있게끔 해보자.

  • 먼저, boardController 로 이동해 위 내용을 추가하여 boardlist 를 주소에 매핑해주자.

  • 그 다음 templates 하위에 boardlist 라는 이름의 html 파일을 추가하고 아래와 같이 작성하자.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>게시글 리스트 게시판</title>
</head>
<style>
  .layout{
    width : 500px;
    margin : 0 auto;
    margin-top : 40px;
  }
</style>
<body>
<div class="layout">
  <table>
    <thead>
    <tr>
      <th><b>No</b></th>
      <th><b>Title</b></th>
    </tr>
    </thead>
    <tbody>
    <tr>
      <td>1</td>
      <td>제목입니다</td>
    </tr>
    </tbody>
  </table>
</div>
</body>
</html>
  • 저장 후 실행한 뒤, /write/list에 접속해보면 아래와 같이 출력되는 것을 확인할 수 있다.

  • 이제 실제 DB에 있는 데이터를 목차로 불러와보자.

  • 먼저 boardService 로 이동해 해당 코드를 추가해준다.

반환형 List<Board>Board 자료형을 List 배열 에 넣어 반환한다는 의미이다.

  • 그리고 아까 작성한 boardList 매소드를 다음과 같이 수정한다. addAttribute 함수를 사용함으로써 전에 작성한 boardlist() 에서 반환해 준 List<Board>형 의 데이터를 boardlist html 파일로 넘겨주는 형식이다.
  • 😃 이제 넘겨받은 데이터를 페이지에 출력해보자.

  • 먼저 html 테그 안에 위와 같이 추가해주자. thymeleaf 기능을 사용할 수 있도록 해주는 역할이다.

<!DOCTYPE html>
<html lang="en" xmlns:th="https://thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>게시글 리스트 게시판</title>
</head>
<style>
  .layout{
    width : 500px;
    margin : 0 auto;
    margin-top : 40px;
  }
  table {
    width: 100%;
    border-collapse: collapse;
  }
  th, td {
    padding: 10px 5px;
    text-align: center;
  }
</style>
<body>
<div class="layout">
  <table>
    <thead>
    <tr>
      <th><b>No</b></th>
      <th><b>Title</b></th>
    </tr>
    </thead>
    <tbody>
    <tr th:each="board: ${list}">
      <td th:text="${board.id}">1</td>
      <td th:text="${board.title}">제목입니다</td>
    </tr>
    </tbody>
  </table>
</div>
</body>
</html>
  • 전체 코드는 다음과 같다. tbody 부분을 설명하자면 ${list} 부분에는 아까 넘겨준 List<Board> 형의 데이터가 들어온다. List 안에는 Board 형의 데이터가 들어있으며 이 데이터를 하나씩 꺼내서 board 에 담는다. 그리고 . 연산자를 통해 board 에 있는 데이터인 idtitle 에 접근하는 방식이다.

  • 이제 저장하고 다시 실행한 후 /board/list/로 접속해보자.

  • 위와 같이 리스트가 잘 출력되었음을 확인할 수 있다!!!

  • 보통 목차에서 Title 부분을 클릭하면 그 게시물의 목차와 내용을 볼 수 있다. 그 기능을 한번 구현해보자.

  • 먼저 게시물의 내용을 보여줄 상세페이지를 구성해보자.

  • templates 하위에 boardview 라는 html 파일을 하나 만들어주고 다음과 같이 작성하자.

  • 그런 다음 Controller 로 넘어와 해당 html 파일을 /board/view 경로에 매핑해주자.

  • 그리고 잘 매핑이 되었는지 /board/view 경로로 이동해 확인해보자.

  • 문제 없이 매핑된 것을 확인할 수 있다!!😃

  • 이제 BoardService로 이동해 해당 게시물을 클릭했을 때, 그 게시물을 불러올 수 있도록 작업해주자.

boardRepository 의 메소드중 findById().get() 는 정수형 id 를 인자로 받아 해당 id와 일치하는 id를 갖고 있는 Board를 리턴해준다.

  • 실제로 여기서 get() 메소드는 Board 자료형을 리턴한다고 명시되어있다.

  • 위와 같이 boardView 메소드를 수정해주자. boardview html 파일에 받아온 Board 를 넘겨주는 과정이다. boardlist 에서 넘겨준 방식과 비슷한 맥락.

/board/view 에 접속할 때 /board/view?id=3 이렇게 접속하게 되면 id3 인 게시물의 상세 내용을 보여주는 구조이다.

  • 그리고 boardview로 돌아와 <body> 부분을 다음과 같이 수정해준다. 이제 사용자가 id=3 인 게시물을 조회했을 때 해당 게시물의 제목과 내용이 보여질 것이다.

  • /board/view?id=3 으로 접속하면 위와 같이 id=3 인 게시물이 잘 조회가 된다. 근데 일일히 URL의 id값을 변경해서 접속하는 경우는 없을 것이다. 게시물 리스트 페이지에서 제목을 클릭하면 해당 게시물로 넘어가게 링크를 걸어주자.😄
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>게시글 상세 페이지</title>
    <style>
        .container {
            text-align: center;
        }
        .bordered-section {
            border-bottom: 1px solid #000;
            padding-bottom: 10px;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>

<div class="container">
    <div class="bordered-section">
        <h1 th:text="${board.title}">Title</h1>
    </div>
    <div>
        <p th:text="${board.content}">Content</p>
    </div>
</div>

</body>
</html>
  • 위 코드는 가시성을 높이기 위해 TitleContent 사이에 구분선 을 추가한 것이다.

  • 이제 Title 부분에 링크를 걸어줄건데, 링크의 주소는 어떻게 될까? 우리가 만든 /board/view 로 이동해 클릭한 게시물의 id값을 갖고 넘어가야한다. 아마 형식은 /board/view?id=4 이런 형식이지 않을까?

  • boardlist html 파일로 돌아가 <tbody> 부분을 다음과 같이 수정해준다. 아까 href링크 를 걸어주는 테그이고 그 뒤의 값은 링크에 대한 주소 정도로 이해하면 되겠다.

  • 이제 다시 /board/list 로 접속해보자.

  • 보이는 것과 같이 전과 다르게 Title 부분에 링크가 걸려있다. 한번 눌러서 접속해보자.

  • 이렇게 클릭한대로 접속이 되는 것을 볼 수 있다!!!
profile
🧑🏻‍💻

0개의 댓글