사랑하애오
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. 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. 1. 14:20

앞 절에서 우리는 질문을 조회하는 기능을 만들었다. 이번에는 질문에 답변을 등록하고 보여 주는 기능을 만들어 보자. 질문 상세 화면에 답변을 입력하기 위한 텍스트 창(textarea)과 버튼을 생성하고, 이 버튼을 누르면 답변이 저장되도록 구현해 보자. MySQL 설정 및 연결 원래는 계속 h2-database를 이용하여 진행하여야 하는데, 솔직히 ui나 혹은 서버 재구동해야지만 h2-console을 들어갈 수 있고 그래서 MySQL Workbench를 활용하여 데이터베이스를 옮기려고 합니다. [파일명:/sbb/src/main/resources/application.properties] # MySQL DATABASE spring.datasource.driver-class-name=com.mysql.cj...

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 질문 상세
JAVA/SpringBoot CRUD Board 2022. 7. 1. 13:46

질문 상세 링크 추가하기 먼저 질문 목록의 제목을 클릭했을때 상세화면이 호출되도록 제목에 링크를 추가하자. 질문 목록 템플릿을 다음과 같이 수정하자. [파일명: /sbb/src/main/resources/templates/question_list.html] 제목 작성일시 제목을 엘리먼트의 텍스트로 출력하던 것에서 링크로 변경했다. 타임리프에서 링크의 주소는 th:href 속성을 사용한다. 타임리프에서 th:href 처럼 URL 주소를 나타낼때는 반드시 @{ 문자와 } 문자 사이에 입력해야 한다. 그리고 URL 주소는 문자열 /question/detail/과 ${question.id} 값이 조합되어 /question/detail/${question.id}로 만들어졌다. 이때 좌우에 | 문자없이 다음과 같이..

[VSCODE] SpringBoot CRUD게시판 만들기 - 서비스(Service)
JAVA/SpringBoot CRUD Board 2022. 7. 1. 13:23

이전 장에서 질문 목록을 만들었다. 이제 질문 목록의 제목 링크를 누르면 질문 상세 화면이 보이게 할 것이다. 하지만 기능을 추가하기 전에 잠시 생각할 것이 있다. 우리는 QuestionController에서 QuestionRepository를 직접 사용하여 질문 목록 데이터를 조회했다. 하지만 대부분의 규모있는 스프링부트 프로젝트는 컨트롤러에서 리포지터리를 직접 호출하지 않고 중간에 서비스(Service)를 두어 데이터를 처리한다. 서비스는 스프링에서 데이터 처리를 위해 작성하는 클래스이다. 서비스가 필요한 이유 서비스가 필요한 이유는 무엇일까? 모듈화 예를들어 어떤 컨트롤러가 여러개의 레포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로 만들어 두면 컨트롤러..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - ROOT URL
JAVA/SpringBoot CRUD Board 2022. 7. 1. 13:15

루트 URL은 http://localhost:8080 처럼 도메인명과 포트 뒤에 아무것도 붙이지 않은 URL을 말한다. 우리는 아직 루트 URL에 대한 매핑을 만들지 않았기 때문에 브라우저에서 루트 URL에 접속하면 다음과 같은 404 페이지가 나타난다. 이번에는 루트 URL 호출시 404 페이지 대신 질문 목록을 출력하도록 해보자. 다음과 같이 MainContrller를 수정하자. package com.mysite.sbb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 도메인 별로 분류하기
JAVA/SpringBoot CRUD Board 2022. 7. 1. 11:02

이제 본격적으로 SBB를 만들어 보자. 다음으로 만들 기능은 질문 목록이다. 하지만 그에 앞서 패키지 정리가 필요해 보인다. 지금까지 우리가 작성한 파일은 다음처럼 com.mysite.sbb 패키지 안에 모두 모여 있다. 이렇게 하나의 패키지 안에 모든 자바파일을 넣고 관리하는 것은 바람직하지 않다. SBB는 도메인별로 패키지를 나누어 자바파일을 관리해 보자. 도메인은 "질문", "답변" "사용자" 처럼 굵직한 요구사항 또는 문제 영역을 대표하는 말이다. 따라서 SBB 프로젝트의 도메인은 다음과 같이 구성할수 있다. question - 질문 (com.mysite.sbb.question) answer - 답변 (com.mysite.sbb.answer) user - 사용자 (com.mysite.sbb.use..

article thumbnail
[VSCODE] SpringBoot CRUD게시판 만들기 - 엔티티(Entity)
JAVA/SpringBoot CRUD Board 2022. 7. 1. 09:45

이제 SBB가 사용할 엔티티(Entity)을 만들어 보자. 엔티티는 데이터베이스 테이블과 매핑되는 자바 클래스를 말한다. SBB는 질문과 답변을 할 수 있는 게시판 서비스이다. 따라서 SBB에는 질문과 답변에 해당하는 엔티티가 있어야 한다. 엔티티는 모델 또는 도메인 모델이라고 부르기도 한다. 이것들을 구분하지 않고 테이블과 매핑되는 클래스를 엔티티라 지칭하겠다. 엔티티의 속성 구상하기 그렇다면 질문과 답변 엔티티에는 어떤 속성들이 필요한지 먼저 생각해 보자. 질문(Question) 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성명설명 id 질문의 고유 번호 subject 질문의 제목 content 질문의 내용 create_date 질문을 작성한 일시 마찬가지로 답변(Answer) 엔티티에는 최소한..