사랑하애오
[VSCODE] SpringBoot CRUD게시판 만들기 - SBB 추가 기능
JAVA/SpringBoot CRUD Board 2022. 7. 6. 11:33

구현할 SBB의 기능은 아쉽지만 여기까지이다. 함께 더 많은 기능을 추가하고 싶지만 이 책은 SBB의 완성이 아니라 SBB를 성장시키며 얻게 되는 경험을 전달하는 것을 목표로 하고 있다. 다루지 못했지만 구현하면 좋을것 같은 기능들이 몇 가지 있는데 여기에 간단하게 소개해 보았다. 아래에 소개한 기능들을 여러분 스스로 하나씩 구현해 가다보면 스프링부트에 대해서 더 깊게 이해할수 있게 될 것이다. 답변 페이징과 정렬 현재 하나의 질문에 무수히 많은 답변이 달릴 수 있는 구조이다. 만약 답변이 100개가 된다고 상상해 보자. 성능을 위해서라도 답변의 페이징은 반드시 필요할 것이다. 그리고 답변을 보여줄 때에도 최신순, 추천순 등으로 정렬하여 보여줄 수 있는 기능도 필요할 것이다. 유명한 질문 답변 사이트인 ..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 검색
JAVA/SpringBoot CRUD Board 2022. 7. 6. 11:29

이번에는 SBB에 검색기능을 추가해 보자. 참고로 검색은 이 책에서 다루는 가장 어려운 부분이다. 차분한 마음으로 따라오기 바란다. 검색 기능 SBB는 질문과 답변에 대한 데이터가 계속 쌓여가는 게시판이므로 검색기능은 필수라고 할 수 있다. 검색의 대상은 질문의 제목, 질문의 내용, 질문 작성자, 답변의 내용, 답변 작성자 정도로 하면 적당할 것이다. 즉, "스프링"이라고 검색을 하면 "스프링" 이라는 문자열이 제목, 내용, 질문 작성자, 답변, 답변 작성자에 존재하는지 찾아보고 그 결과를 화면에 보여주어야 한다. 이런 조건으로 검색하려면 다음과 같은 SQL 쿼리가 실행되어야 한다. select distinct q.id, q.author_id, q.content, q.create_date, q.modif..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 앵커
JAVA/SpringBoot CRUD Board 2022. 7. 5. 17:56

이제 SBB가 점점 완성 되어가고 있다. 이번에는 더 많은 기능을 추가하기 전에 발견된 몇 가지 문제점을 해결하려고 한다. 발견된 문제점은 답글을 작성하거나 수정한 후에 항상 페이지 상단으로 스크롤이 이동되기 때문에 본인이 작성한 답변을 확인하려면 다시 스크롤을 내려서 확인해야 한다는 점이다. 이 문제는 답변을 추천한 경우에도 동일하게 발생한다. Ajax와 같은 비동기 통신 기술을 사용하여 이 문제를 해결할 수도 있지만 여기서는 보다 쉬운 방법으로 이 문제를 해결해 보자. HTML에는 URL 호출시 원하는 위치로 이동시켜 주는 앵커(anchor) 태그가 있다. 예를 들어 HTML 중간에 라는 앵커 태그가 있다면 이 HTML을 호출하는 URL 뒤에 #test 라고 붙여주면 해당 페이지가 호출되면서 해당 앵..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 추천
JAVA/SpringBoot CRUD Board 2022. 7. 5. 16:43

엔티티 변경 질문, 답변의 추천은 추천한 사람(SiteUser 객체)을 질문, 답변 엔티티에 추가해야 한다. Question 우선 Question 엔티티에 추천인(voter) 속성을 추가해 보자. 하나의 질문에 여러사람이 추천할 수 있고 한 사람이 여러 개의 질문을 추천할 수 있다. 이렇듯 질문과 추천인은 부모와 자식의 관계가 아니고 대등한 관계이기 때문에 @ManyToMany를 사용해야 한다. 참고 : https://docs.oracle.com/javaee/7/api/javax/persistence/ManyToMany.html ManyToMany (Java(TM) EE 7 Specification APIs) Specifies a many-valued association with many-to-many..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 수정과 삭제
JAVA/SpringBoot CRUD Board 2022. 7. 5. 15:23

수정 일시 먼저 질문이나 답변이 언제 수정되었는지 확인할 수 있도록 Question과 Answer 엔티티에 수정 일시를 의미하는 modifyDate 속성을 추가하자. [파일명:/sbb/src/main/java/com/mysite/sbb/question/Question.java] (... 생략 ...) public class Question { (... 생략 ...) private LocalDateTime modifyDate; } [파일명:/sbb/src/main/java/com/mysite/sbb/answer/Answer.java] (... 생략 ...) public class Answer { (... 생략 ...) private LocalDateTime modifyDate; } 이와같이 수정하면 다음처..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 글쓴이 표시
JAVA/SpringBoot CRUD Board 2022. 7. 5. 13:05

앞서 Question 엔티티와 Answer 엔티티에 auther 속성을 추가했다. 게시판의 게시물에는 "글쓴이"를 표시하는 것이 일반적이다. 질문 목록, 질문 상세 화면에 auther 속성을 이용하여 글쓴이를 표시해 보자. 질문 목록 먼저 질문 목록 템플릿에 글쓴이를 표시해 보자. 다음과 같이 테이블 헤더에 글쓴이 항목을 추가하자. [파일명:/sbb/src/main/resources/templates/question_list.html] (... 생략 ...) 번호 제목 글쓴이 작성일시 (... 생략 ...) 글쓴이 항목을 추가했다. 그리고 th 엘리먼트를 가운데 정렬하도록 tr 태그에 text-center 클래스를 추가하고 제목의 너비가 전체에서 50%를 차지하도록 style="width:50%"도 지정..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 엔티티 수정
JAVA/SpringBoot CRUD Board 2022. 7. 5. 11:10

게시판의 질문, 답변에는 누가 글을 작성했는지 알려주는 "글쓴이" 항목이 필요하다. 이번에는 Question과 Answer 엔티티에 "글쓴이"에 해당되는 author 속성을 추가해 보자. Question 속성 추가 먼저 Question 엔티티에 author 속성을 추가하자. [파일명:/sbb/src/main/java/com/mysite/sbb/question/Question.java] (... 생략 ...) import javax.persistence.ManyToOne; import com.mysite.sbb.user.SiteUser; (... 생략 ...) public class Question { (... 생략 ...) @ManyToOne private SiteUser author; } author ..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 로그인과 로그아웃
JAVA/SpringBoot CRUD Board 2022. 7. 4. 17:09

SBB는 여러 사람이 사용하는 게시판 서비스다. 그러므로 질문한 사람, 답변한 사람을 구별하는 로그인, 로그아웃은 필수 기능이다. 앞서 회원 가입 기능을 구현했으므로 이제 로그인, 로그아웃 기능을 구현할 수 있다. 로그인 구현하기 회원 가입 단계에서 SITE_USER 테이블에 회원 정보를 저장했다. SITE_USER 테이블에 저장된 사용자명(사용자 ID)과 비밀번호로 로그인을 하려면 복잡한 단계를 거쳐야 한다. 하지만 스프링 시큐리티를 사용하면 이 단계를 보다 쉽게 진행할 수 있다. 스프링 시큐리티는 방대한 프레임워크이다. 스프링 시큐리티는 방대한 프레임워크이다. 따라서 스프링 시큐리티가 내부적으로 어떻게 동작하는지 알기 위해서는 스프링 시큐리티에 대해서 자세히 공부해야 한다. 다음을 순서대로 따라해 보..