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

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

수정 일시 먼저 질문이나 답변이 언제 수정되었는지 확인할 수 있도록 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; } 이와같이 수정하면 다음처..

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

게시판의 질문, 답변에는 누가 글을 작성했는지 알려주는 "글쓴이" 항목이 필요하다. 이번에는 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 ..

이번에는 SBB에 회원가입 기능을 구현해 보자. 회원가입 기능을 만들어 보았다면 웹 프로그래밍은 거의 마스터했다고 할 수 있다. 그만큼 회원가입 기능은 웹 사이트에서 핵심 중의 핵심이라 할 수 있다. 회원 정보를 위한 엔티티 지금까지는 질문, 답변 엔티티만 사용했다면 이제 회원 정보를 위한 엔티티가 필요하다. 회원 정보 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성설명 username 사용자 이름 (사용자 ID) password 비밀번호 email 이메일 User 도메인 그리고 회원은 질문, 답변 도메인이 아니므로 user라는 도메인을 사용할 것이다. 다음과 같이 com.mysite.sbb.user 패키지를 생성하자. SiteUser 엔티티 그리고 사용자를 관리할 SiteUser 엔티티를 다음처럼..

스프링부트는 회원가입과 로그인을 도와주는 스프링 시큐리티(Spring Security)를 사용할수 있다. SBB도 스프링 시큐리티를 사용하여 회원가입과 로그인 기능을 만들 것이다. 그 전에 스프링 시큐리티에 대해서 간단하게 알아보고 필요한 설정도 진행해 보자. 스프링 시큐리티란? 스프링 시큐리티는 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 스프링 시큐리티 설치 스프링 시큐리티 사용을 위해 다음과 같이 build.gradle 파일을 수정하자. [파일명:/sbb/build.gradle] (... 생략 ...) dependencies { (...

지금까지 만든 SBB로 질문 목록을 조회하고 질문을 등록하고, 다시 내용을 보고 답변을 달고 이렇게 조작을 하다 보면 아마도 불편함을 느끼게 될것이다. 그것은 바로 메인페이지(Home)로 돌아갈 수 있는 기능이 없기 때문이다. 이번에는 이러한 불편을 해소할 수 있는 내비게이션바를 만들어 보자. 네비게이션바는 모든 화면 위쪽에 고정되어 있는 부트스트랩 컴포넌트이다. 부트스트랩 내비게이션바: https://getbootstrap.com/docs/5.1/components/navbar/ Navbar Documentation and examples for Bootstrap’s powerful, responsive navigation header, the navbar. Includes support for bra..