목록IT 일기 (상반기) (398)
겉바속촉
점프투스프링부트 3-10 목표 : 작성한 답변을 수정하고 삭제할 수 있는 기능 만들기 1. 답변 수정 이번에는 답변 수정 기능을 구현해 보자. 질문 수정과 거의 비슷한 방법으로 진행할 것이다. 다만 답변 수정은 답변 등록 템플릿이 따로 없으므로 답변 수정에 사용할 템플릿이 추가로 필요하다. 1-1. 답변 수정 버튼 답변 목록이 출력되는 부분에 답변 수정 버튼을 추가하자. [파일명:/sbb/src/main/resources/templates/question_detail.html] (... 생략 ...) (... 생략 ...) 로그인한 사용자와 답변 작성자가 동일한 경우 답변의 "수정" 버튼이 노출되도록 했다. 답변 버튼을 누르면 /answer/modify/답변ID 형태의 URL이 GET 방식으로 요청될 것..
점프투스프링부트 3-10 목표 : 작성한 질문을 수정하고 삭제할 수 있는 기능 만들기 1. 수정 일시 먼저 질문이나 답변이 언제 수정되었는지 확인할 수 있도록 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 { (... 생략 .....
점프투스프링부트 3-09 목표 : 질문 목록, 질문 상세 화면에 auther 속성을 이용하여 글쓴이 표시 1. 질문 목록 먼저 질문 목록 템플릿에 글쓴이를 표시해 보자. 다음과 같이 테이블 헤더에 글쓴이 항목을 추가하자. [파일명:/sbb/src/main/resources/templates/question_list.html] (... 생략 ...) 번호 제목 글쓴이 작성일시 (... 생략 ...) 글쓴이 항목을 추가했다. 그리고 th 엘리먼트를 가운데 정렬하도록 tr 태그에 text-center 클래스를 추가하고 제목의 너비가 전체에서 50%를 차지하도록 style="width:50%"도 지정해 주었다. 이어서 for 문에도 다음처럼 글쓴이를 적용하자. [파일명:/sbb/src/main/resources..
점프투스프링부트 3-08 목표 : 게시판의 질문, 답변에는 누가 글을 작성했는지 알려주는 "글쓴이" 항목 추가기 1. Question 속성 추가 Question 엔티티에 author 속성을 추가 [파일명:/sbb/src/main/java/com/mysite/sbb/question/Question.java] (... 생략 ...) import jakarta.persistence.ManyToOne; import com.mysite.sbb.user.SiteUser; (... 생략 ...) public class Question { (... 생략 ...) @ManyToOne private SiteUser author; } author 속성은 SiteUser 엔티티를 @ManyToOne으로 적용했다. 여러개의 질..
점프투스프링부트 3-07 목표 : 로그인, 로그아웃 기능 구현하기 1. 로그인 구현하기 회원 가입 단계에서 SITE_USER 테이블에 회원 정보를 저장했다. SITE_USER 테이블에 저장된 사용자명(사용자 ID)과 비밀번호로 로그인을 하려면 복잡한 단계를 거쳐야 한다. 하지만 스프링 시큐리티를 사용하면 이 단계를 보다 쉽게 진행할 수 있다. 다음을 순서대로 따라해 보자. 1-1. 로그인 URL 등록 먼저 스프링 시큐리티에 로그인 URL을 등록하자. [파일명:/sbb/src/main/java/com/mysite/sbb/SecurityConfig.java] (... 생략 ...) @Configuration @EnableWebSecurity public class SecurityConfig { @Bean S..
점프투스프링부트 3-06 목표 : 회원가입 기능 구현하기 이번에는 SBB에 회원가입 기능을 구현해 보자. 1. 회원 정보를 위한 엔티티 지금까지는 질문, 답변 엔티티만 사용했다면 이제 회원 정보를 위한 엔티티가 필요하다. 회원 정보 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성 설명 username 사용자 이름 (사용자 ID) password 비밀번호 email 이메일 1-1. User 도메인 회원은 질문, 답변 도메인이 아니므로 user라는 도메인을 사용할 것이다. 다음과 같이 com.mysite.sbb.user 패키지를 생성하자. 1-2. SiteUser 엔티티 사용자를 관리할 SiteUser 엔티티를 다음처럼 작성하자. [파일명:/sbb/src/main/java/com/mysite/sbb/u..
점프투스프링부트 3-05 목표 : 스프링 시큐리티에 대해 알아보기 스프링부트는 회원가입과 로그인을 도와주는 스프링 시큐리티(Spring Security)를 사용할수 있다. SBB도 스프링 시큐리티를 사용하여 회원가입과 로그인 기능을 만들 것이다. 그 전에 스프링 시큐리티에 대해서 간단하게 알아보고 필요한 설정도 진행해 보자. 스프링 시큐리티란? 스프링 시큐리티는 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 스프링 시큐리티 설치 스프링 시큐리티 사용을 위해 다음과 같이 build.gradle 파일을 수정하자. [파일명:/sbb/build.g..
점프투스프링부트 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번째 게시물이 역순으로 표시되어야 한다. 질문 게시물의 번호를 역순으로 정렬하려면 다음과 같은 공식을 적용해야 한다. 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스 항목 설명 번호 최종 표시될 게시물 번호 전체 게시물 개수 데이터베이스에 저장된 게시물 전체 개수 현재 페이지 페이징..