목록IT 일기 (상반기)/SPRING 기초 (42)
겉바속촉
점프투스프링부트 3-04 목표 : 게시물 제목 옆에 답변 개수 표시하기 이번에는 질문 목록에 "해당 질문에 달린 답변 개수"를 표시할 수 있는 기능을 추가해 보자. 코드의 분량은 많지 않지만, 게시판 서비스를 더욱 서비스답게 만들어 주는 기능이다. 답변 개수는 다음처럼 게시물 제목 바로 오른쪽에 표시하자. [파일명:/sbb/src/main/resources/templates/question_list.html] 번호 제목 작성일시 (... 생략 ...) th:if="${#lists.size(question.answerList) > 0}"로 답변이 있는지 조사하고, th:text="${#lists.size(question.answerList)}"로 답변 개수를 표시했다. #list.size(이터러블객체)는 ..
점프투스프링부트 3-03 목표 : SBB 서비스 개선 게시물 번호가 1부터 시작되는 문제 현재 질문 목록 화면을 유심히 보면 페이지마다 게시물 번호가 항상 1부터 시작되는 문제가 있다. 페이지를 이리저리 이동해 봐도 게시물 번호는 1부터 시작한다. 이 문제를 해결해 보자. 게시물 번호 공식 만들기 만약 질문 게시물이 12개라면 0페이지에는 12번째~3번째 게시물이, 1페이지에는 2번째~1번째 게시물이 역순으로 표시되어야 한다. 질문 게시물의 번호를 역순으로 정렬하려면 다음과 같은 공식을 적용해야 한다. 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스 항목 설명 번호 최종 표시될 게시물 번호 전체 게시물 개수 데이터베이스에 저장된 게시물 전체 개수 현재 페이지 페이징..
점프투스프링부트 3-02 목표 : 페이징 적용하기 SBB의 질문 목록은 현재 페이징 처리가 안되기 때문에 게시물 300개를 작성하면 한 페이지에 300개의 게시물이 모두 조회된다. 이번 장에서는 페이징(Paging)을 적용하여 이 문제를 해결할 것. 대량 테스트 데이터 만들기 페이징을 구현하기 전에 페이징을 테스트할 수 있을 정도로 충분한 데이터를 생성하자. 대량의 테스트 데이터를 만드는 가장 간단한 방법은 스프링부트의 테스트 프레임워크를 이용하는 것이다. 다음처럼 테스트 케이스를 작성하자. [파일명:/sbb/src/test/java/com/mysite/sbb/SbbApplicationTests.java] package com.mysite.sbb; import org.junit.jupiter.api.Te..
점프투스프링부트 3-01 목표 : 내비게이션바 만들기 1. 내비게이션바 내비게이션바는 모든 페이지에서 공통적으로 보여야 하므로 다음처럼 layout.html 템플릿에 추가해야 한다. [파일명:/sbb/src/main/resources/templates/layout.html] SBB 로그인 항상 홈 페이지로 이동해 주는 'SBB' 로고를 가장 왼쪽에 배치했고, 오른쪽에는 '로그인' 링크를 추가했다. 이제 질문 목록 페이지를 요청하면 화면 상단에 다음과 같은 내비게이션바가 보일 것이다. 내비게이션바의 'SBB' 로고를 누르면 아무 곳에서나 메인 페이지로 돌아갈 수 있다. 'SBB' 로고를 눌러서 잘 작동하는지 확인해 보자. 그리고 부트스트랩 내비게이션바에는 재미있는 기능이 하나 숨어 있다. 아무 페이지나 접..
점프투스프링부트 2-16 목표 : 오류 메시지를 출력하는 부분을 공통 템플릿으로 작성해두기 1. 오류 메시지 공통 템플릿 오류 메시지를 표시하는 공통 템플릿을 다음과 같이 작성하자. [파일명:/sbb/src/main/resources/templates/form_errors.html] 출력할 오류메시지 부분에 th:fragment="formErrorsFragment" 속성을 추가했다. 2. 질문 등록 템플릿에 적용하기 이제 위에서 작성한 오류 메시지 공통 템플릿을 사용해 보자. 먼저 question_form.html 파일에 적용해 보자. [파일명:/sbb/src/main/resources/templates/question_form.html] 질문등록 제목 내용 타임리프의 th:replace 속성을 사용하면..
점프투스프링부트 2-05 목표 : 질문 등록 기능 만들기 1. 질문 등록 질문 등록을 하려면 먼저 "질문 등록하기" 버튼을 만들어야 한다. 다음처럼 질문 목록 하단에 버튼을 생성하자. [파일이름:/sbb/src/main/resources/templates/question_list.html] (... 생략 ...) 질문 등록하기 링크 엘리먼트( ... )이지만 부트스트랩의 btn btn-primary 클래스를 적용하면 버튼으로 보인다. 이제 "질문 등록하기" 버튼을 누르면 /question/create URL이 호출될 것이다. 2. URL 매핑 그리고 컨트롤러에 /question/create에 해당되는 URL 매핑을 추가하자. [파일명:/sbb/src/main/java/com/mysite/sbb/quest..
점프투스프링부트 2-14 목표 : 템플릿 상속 지금까지 작성한 질문 목록, 질문 상세 템플릿은 표준 HTML 구조가 아니다. 어떤 웹 브라우저를 사용하더라도 웹 페이지가 동일하게 보이고 정상적으로 작동 하게 하려면 반드시 웹 표준을 지키는 HTML 문서를 작성해야 한다. 1. 표준 HTML 구조 표준 HTML 문서의 구조는 다음과 같아야 한다. [표준 HTML 구조의 예] (... 생략 ...) 표준 HTML 문서의 구조는 위의 예처럼 html, head, body 엘리먼트가 있어야 하며, CSS 파일은 head 엘리먼트 안에 링크 되어야 한다. 또한 head 엘리먼트 안에는 meta, title 엘리먼트 등이 포함되어야 한다. (... 생략 ...) 위에서 은 table 태그이고 ~ 처럼 table 태..
점프투스프링부트 2-13 목표 : Bootrstrap 프레임워크 사용해보기 1. 부트스트랩 설치 우선 다음 URL에서 부트스트랩을 다운로드 하자. 부트스트랩 다운로드 - https://getbootstrap.com/docs/5.2/getting-started/download/ 부트스트랩은 3.x, 4.x, 5.x 등의 버전이 존재하고 메이저 번호(3, 4, 5)에 따라 그 사용방법이 다르다. 이 책은 부트스트랩 버전 5 기준으로 실습을 진행한다. 부트스트랩 다운로드 페이지 접속후 "Download" 버튼을 누르면 다음과 같은 파일이 다운로드 된다. bootstrap-5.2.3-dist.zip 압축파일 안에는 많은 파일들이 있는데 이 중에서 bootstrap.min.css 파일을 카피하여 스태틱 디렉터리에..
점프투스프링부트 2-12 목표 : 화면에 디자인 적용하기 1. 스태틱(static) 디렉터리 스타일시트 파일은 스프링부트의 스태틱 디렉터리에 저장해야 한다. 스프링부트의 스태틱 디렉터리는 다음과 같다. /sbb/src/main/resources/static 2. 스타일시트 스타일시트 파일은 스태틱 디렉터리에 저장해야 한다. 스타일시트 파일(style.css)을 다음과 같이 작성하자. [파일명:/sbb/src/main/resources/static/style.css] textarea { width:100%; } input[type=submit] { margin-top:10px; } style.css 파일은 질문 상세 화면에 사용하기 위해 작성했다. 답변 등록시 사용하는 텍스트 창의 넓이를 100%로 하고 ..