Follow Work/SpringbootBoard 54

[StringBoot] 추천 (24)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 이번에는 질문과 답변에 "추천(좋아요)" 기능을 구현해 보자. 엔티티 변경 질문, 답변의 추천은 추천한 사람(SiteUser 객체)을 질문, 답변 엔티티에 추가해야 한다. Question Question과 Answer 엔티티에 추천인(voter) 속성을 추가해 보자. 하나의 질문에 여러사람이 추천할 수 있고 한 사람이 여러 개의 질문을 추천할 수 있다. 이렇듯 질문과 추천인은 부모와 자식의 관계가 아니고 대등한 관계이기 때문에 @ManyToMany를 사용해야 한다. package com.gosari.repick_project.question; import com.gosari.repick_pr..

[StringBoot] 수정과 삭제 (23)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 이번장에서는 작성한 질문과 답변을 수정하고 삭제할 수 있는 기능을 추가해 보자. 1.수정일시 2.질문수정 3.질문삭제 4.답변수정 5.답변삭제 6.수정일시표시하기 수정 일시 먼저 질문이나 답변이 언제 수정되었는지 확인할 수 있도록 Question과 Answer 엔티티에 수정 일시를 의미하는 modifyDate 속성을 추가하자. package com.gosari.repick_project.question; import com.gosari.repick_project.answer.Answer; import com.gosari.repick_project.user.SiteUser; import lom..

[StringBoot] 글쓴이 표시 (22)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 앞서 Question 엔티티와 Answer 엔티티에 auther 속성을 추가했다. 게시판의 게시물에는 "글쓴이"를 표시하는 것이 일반적이다. 질문 목록, 질문 상세 화면에 auther 속성을 이용하여 글쓴이를 표시해 보자. 질문 목록 먼저 질문 목록 템플릿에 글쓴이를 표시해 보자. 다음과 같이 테이블 헤더에 글쓴이 항목을 추가하자. question_list.html 번호 제목 글쓴이 작성일시 이전 다음 질문 등록하기 번호 제목 글쓴이 작성일시 글쓴이 항목을 추가했다. 그리고 th 엘리먼트를 가운데 정렬하도록 tr 태그에 text-center 클래스를 추가하고 제목의 너비가 전체에서 50%를 ..

[StringBoot] 엔티티 변경 (21)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 게시판의 질문, 답변에는 누가 글을 작성했는지 알려주는 "글쓴이" 항목이 필요하다. 이번에는 Question과 Answer 엔티티에 "글쓴이"에 해당되는 author 속성을 추가해 보자. Question 속성 추가 먼저 Question 엔티티에 author 속성을 추가하자. package com.gosari.repick_project.question; import com.gosari.repick_project.answer.Answer; import com.gosari.repick_project.user.SiteUser; import lombok.Getter; import lombok.Sett..

[StringBoot] 로그인과 로그아웃 (20)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 로그인 URL 등록 먼저 스프링 시큐리티에 로그인 URL을 등록하자. SecurityConfig.java package com.gosari.repick_project.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.c..

[StringBoot] 회원가입 (19)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 회원 정보를 위한 엔티티 지금까지는 질문, 답변 엔티티만 사용했다면 이제 회원 정보를 위한 엔티티가 필요하다. 회원 정보 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성설명 username 사용자 이름 (사용자 ID) password 비밀번호 email 이메일 User 도메인 그리고 회원은 질문, 답변 도메인이 아니므로 user라는 도메인을 사용할 것이다. user패키지를 생성하자 SiteUser 엔티티 그리고 사용자를 관리할 SiteUser 엔티티를 다음처럼 작성하자. package com.gosari.repick_project.user; import javax.persistence...

[StringBoot] 스프링 시큐리티 (18)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 스프링부트는 회원가입과 로그인을 도와주는 스프링 시큐리티(Spring Security)를 사용할수 있다. 스프링 시큐리티란? 스프링 시큐리티는 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 스프링 시큐리티 설치 스프링 시큐리티 사용을 위해 다음과 같이 build.gradle 파일을 수정하자. dependencies { (... 생략 ...) implementation 'org.springframework.boot:spring-b..

[StringBoot] 답변 개수 표시 (17)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 이번에는 질문 목록에 "해당 질문에 달린 답변 개수"를 표시할 수 있는 기능을 추가해 보자. 코드의 분량은 많지 않지만, 게시판 서비스를 더욱 서비스답게 만들어 주는 기능이다. 답변 개수는 다음처럼 게시물 제목 바로 오른쪽에 표시하자. 번호 제목 작성일시 이전 다음 질문 등록하기 th:if="${#lists.size(question.answerList) > 0}"로 답변이 있는지 조사하고, th:text="${#lists.size(question.answerList)}"로 답변 개수를 표시했다. #list.size(이터러블객체)는 이터러블 객체의 사이즈를 반환하는 타임리프의 유틸리티이다. 이..

[StringBoot] 게시물 일련번호 추가 (16)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 게시물 번호가 1부터 시작되는 문제 현재 질문 목록 화면을 유심히 보면 페이지마다 게시물 번호가 항상 1부터 시작되는 문제가 있다. 페이지를 이리저리 이동해 봐도 게시물 번호는 1부터 시작한다. 이 문제를 해결해 보자. 두번째 페이지로 이동하더라도 여전히 게시물 번호가 1부터 시작된다. 게시물 번호 공식 만들기 만약 질문 게시물이 12개라면 0페이지에는 12번째~3번째 게시물이, 1페이지에는 2번째~1번째 게시물이 역순으로 표시되어야 한다. 질문 게시물의 번호를 역순으로 정렬하려면 다음과 같은 공식을 적용해야 한다. 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - ..

[StringBoot] 페이징 (15)

참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 SBB의 질문 목록은 현재 페이징 처리가 안되기 때문에 게시물 300개를 작성하면 한 페이지에 300개의 게시물이 모두 조회된다. 이번 장에서는 페이징(Paging)을 적용하여 이 문제를 해결해 보자. 만약 로컬서버가 실행 중이라면 로컬 서버를 중지하고 [Run -> Run As -> Junit Test]로 testJpa 메서드를 실행하자. 그리고 다시 로컬서버를 실행한 후에 브라우저에서 질문 목록을 확인해 보자. package com.gosari.repick_project; import com.gosari.repick_project.question.QuestionService; import..