STS 코드 크기 키우는 방법!!
Command + (+, -) 하면 됨 (윈도우는 몰라..)
✔️ 엔터티로 테이블 매핑하기
- Question.java
package cohttp://m.mysite.sbb;
import java.time.LocalDateTime;
import java.util.List;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
private List<Answer> answerList;
}
- Answer.java
package cohttp://m.mysite.sbb;
import java.time.LocalDateTime;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
@ManyToOne
private Question question;
}
- h2-console에 로그하면 파일에 Answer, Question 추가된 것 확인 가능

✔️ Repository
- 생성된 데이터베이스 테이블의 데이터들을 CRUD 할 수 있도록 도와주는 인터페이스
- Entity 객체와 DB 테이블 간의 연결을 처리
- 중간다리 역할 만들기 -> Repository 생성
Interface로 생성하기

- QuestionRepository
package cohttp://m.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface QuestionRepository extends JpaRepository<Question, Integer> {
}
- AnswerRepository
package cohttp://m.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AnswerRepository extends JpaRepository<Answer, Integer> {
}
✔️ JUnit
- 레포지토리 및 모든 계층의 테스트용으로 사용 가능
- JUnit은 테스트 코드를 작성하고, 작성한 테스트 코드를 실행할 때 사용하는 자바의 테스트 프레임워크 >> Test 용이다
- build.gradle
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
✔️ 질문 데이터 저장하기

- SbbApplicationTests.java
package com.mysite.sbb;
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository questionRepository;
@Test
void testJpa() {
Question q1 = new Question();// Question에 연결하겠다
q1.setSubject("sbb가 무엇인가요?");
q1.setContent("sbb에 대해서 알고 싶습니다.");
q1.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q1); // 첫번째 질문 저장
Question q2 = new Question();
q2.setSubject("스프링부트 모델 질문입니다.");
q2.setContent("id는 자동으로 생성되나요?");
q2.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q2); // 두번째 질문 저장
}
}
✔️테스트 코드 실행/저장 실습
- JUnit Test 클릭



- h2-console에서 Question 선택하고 Run

- 데이터가 나온다

✔️ 도메인별로 분류하기
- 패키지 생성하기


- 3개 생성(answer, question,user)

- 각 패키지에 맞는 .java 파일 이동


옮긴다음
- Answer.java에 추가해주기 (import 위치가 바뀌니까)
>> 서로 다른 영역에 있어서 Answer <-> Question 서로 바라보게 import 해 줘야함
import com.mysite.sbb.question.Question;
- Question.java에도 추가된지 확인(여기는 알아서 되는듯)
import com.mysite.sbb.answer.Answer;
✔️ 질문 목록 만들기
이거 할꺼다~ html 형식으로 출력 할꺼야

매핑 렛츠고!
- QuestionController 생성

package cohttp://m.mysite.sbb.question;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class QuestionController {
@GetMapping("/question/list") // localhost:8080/question/list로 접속하면
@ResponseBody
public String list() {
return "question list"; // 이 문자 출력해라
}
}
- 확인

✔️ 템플릿 설정 - html 설정해서 출력하자
- build.gradle에 추가
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
- src/main/resources > templates > New - File > question_list.html 생성

- question_list.html에 코드 입력
- h2는 글자 크기
<h2>Hello Template</h2>
- Edit code - QuestionController.java
@Controller
public class QuestionController {
@GetMapping("/question/list")
// @ResponseBody 필요없으니 삭제
public String list() {
return "question_list"; // question_list.html 파일을 출력해라~
}
}
- 재실행

✔️ 데이터를 템플릿에 전달하기
우리가 이전에 웹에서 QUESTION table 데이터를 출력해봤던것처럼
웹페이지에다가 html로 css 설정하여 데이터 뽑아보기
- QuestionController.java
package com.mysite.sbb.question;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Controller
public class QuestionController {
private final QuestionRepository questionRepository;
@GetMapping("/question/list")
// @ResponseBody 필요없으니 삭제
public String list(Model model) {
List<Question> questionList = this.questionRepository.findAll(); // 연결된거 다 가져와
model.addAttribute("questionList", questionList); // 가져온거 questionList에 넣기
return "question_list";
}
}
- question_list.html 웹 수정
<table>
<thead>
<tr>
<th>제목</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tr th:each="question : ${questionList}">
<td th:text="${question.subject}"></td>
<td th:text="${question.createDate}"></td>
</tr>
</tbody>
</table>
- 재실행

'ICT 네트워크 과정' 카테고리의 다른 글
| 0613 :: Spring Boot 게시판 생성 (2) (1) | 2025.06.13 |
|---|---|
| 0612 :: Spring Boot 게시판 생성 (1) (0) | 2025.06.13 |
| 0610 :: Spring Boot(2) - 웹을 만들어보쟈~ (1) | 2025.06.10 |
| 0610 :: Spring Boot(1) - Spring Boot, Lombok 설치 & 설정 (1) | 2025.06.10 |
| 0604 :: Linux(1) - M1 VM Fusion 에서 Ubuntu 22 설치하기 (1) | 2025.06.06 |