![22. 작성자(Author) 생성 - 점프 투 스프링부트(게시판 만들기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3C2r%2FbtrU9dXusTN%2FOmQx8kafccuDeYKwp0Et01%2Fimg.png)
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. Question 속성 추가 Question 엔티티에 author 속성을 추가하자. (... 생략 ...) import javax.persistence.ManyToOne; import com.example.board.user.SiteUser; (... 생략 ...) public class Question { (... 생략 ...) @ManyToOne private SiteUser author; } 여러개의 질문이 한 명의 사용자에게 작성될 수 있으므로 @ManyToOne 관계가 성립한다. Answer 속성 추가 Answer 엔티티에도 추가해주자. (... 생략 ...)..
![스프링 시큐리티 권한 부여](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7IGKy%2FbtrUYPxjMUG%2Fj7CPsdUfQ1QfYzP9mIKUT1%2Fimg.png)
문득 점프 투 스프링부트 교재를 공부하다 시큐리티는 인증과 권한을 담당한다는 문구를 보고 관리자같은 권한을 따로 부여하는 방법이 궁금해졌다. 해당 글은 스프링 시큐리티 - 점프 투 스프링부트(게시판 만들기) 편과 연계된다. 만들어 놓았던 SecurityConfig를 살펴보자. package com.example.board.practice; (... 생략 ...) @Configuration @EnableWebSecurity public class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests().requestMatchers( new AntP..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 로그인 구현하기 회원 가입 단계에서 SITE_USER 테이블에 회원 정보를 저장했다. SITE_USER 테이블에 저장된 사용자명(사용자 ID)과 비밀번호로 로그인을 하려면 복잡한 단계를 거쳐야 한다. 하지만 스프링 시큐리티를 사용하면 이 단계를 보다 쉽게 진행할 수 있다. 로그인 URL 등록 먼저 스프링 시큐리티에 로그인 URL을 등록하자. SecurityConfig.java package com.example.board.practice; (... 생략 ...) public class SecurityConfig { @Bean SecurityFilterChain fil..
![20. 회원가입 - 점프 투 스프링부트(게시판 만들기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsDHc4%2FbtrU1NS3ioK%2FCOIOKlYTMJTVgmfuLWZbwk%2Fimg.png)
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 회원 정보를 위한 엔티티 회원 가입 시 회원 정보를 위한 엔티티에는 최소한 ID, PW, email이 필요하다고 가정하겠다. SiteUser 엔티티 사용자를 관리할 SiteUser 엔티티를 작성하자 파일경로 : /practice/src/main/java/com/example/board/user/SiteUser.java package com.example.board.user; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; im..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 스프링 시큐리티 설치 스프링 시큐리티는 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 스프링 시큐리티 사용을 위해 다음과 같이 build.gradle 파일을 수정하자. (... 생략 ...) dependencies { (... 생략 ...) implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.t..
![18. 게시물에 답변 개수 표시 - 점프 투 스프링부트(게시판 만들기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz8OcO%2FbtrUXofxuJu%2FYYbFUklHLyWVZwFfKHeaJK%2Fimg.png)
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 답변 개수 표시하기 question_list.html 템플릿에 코드를 추가하자. (... 생략 ...) (... 생략 ...) th:if="${#lists.size(question.answerList) > 0}"로 답변이 있는지 조사하고 th:text="${#lists.size(question.answerList)}"로 답변 개수를 표시했다. #list.size(이터러블객체)는 이터러블 객체의 사이즈를 반환하는 타임리프의 유틸리티이다.
![17. 게시물에 일련번호 추가하기 - 점프 투 스프링부트(게시판 만들기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1eAKX%2FbtrUYPqlCM9%2F2L5iDKgyHkRRs6g8qhKXy0%2Fimg.png)
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 게시물 번호 공식 만들기 만약 질문 게시물이 12개라면 0페이지에는 12번째~3번째 게시물이, 1페이지에는 2번째~1번째 게시물이 역순으로 표시되어야 한다. 질문 게시물의 번호를 역순으로 정렬하려면 다음과 같은 공식을 적용해야 한다. 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스 항목 설명 번호 최종 표시될 게시물 번호 전체 게시물 개수 데이터베이스에 저장된 게시물 전체 개수 현재 페이지 페이징에서 현재 선택한 페이지 (만약 페이지가 1부터 시작한다면 1을 빼주어야 한다. 하지만 스프링부트의 페이징은 0부터 시작하므로 1을 뺄..
![16. 페이징 - 점프 투 스프링부트(게시판 만들기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRPsMC%2FbtrU141ln8X%2FPt2YAzgz7Iu3zWlKfqmKa0%2Fimg.png)
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 테스트 데이터 만들기 페이징을 구현하기 전에 페이징을 테스트할 수 있을 정도로 충분한 데이터를 생성하자. 대량의 테스트 데이터를 만드는 가장 간단한 방법은 스프링부트의 테스트 프레임워크를 이용하는 것이다. PracticeApplicationsTests를 수정하자. package com.example.board; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.Sp..