| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 게시판 리뷰 만들기
- Spring
- Algorism study
- side project
- MegabyteSchool
- 국비지원교육
- crud
- View
- #패스트캠퍼스 #국비지원교육 #메가바이트스쿨 #MegabyteSchool #개발자취업부트캠프 #내일배움카드
- tomcat
- Interface
- #javaStudy
- spring boot
- MVC
- group study
- 메가바이트스쿨
- Java
- GIT
- 개발자취업부트캠프
- github
- 클래스 상속
- 클래스 class
- Entity
- 내일배움카드
- array
- Sts
- 패스트캠퍼스
- AWS
- 게시판 만들기
- MVC 패턴
- Today
- Total
tuter77
게시판 만들기(5) - review 엔티티 만들기. 본문
● 앞서 공부했던 내용 피드백.
▷ 피드백
이전의 블로그 게시글에 올려놓은 코드들을 팀장님이 피드백 해주셨는데, 일단 독자적으로 코드를 쓴것이 아니라 실망하신 눈치였다.
능력부족이 체감되었지만, 그래도 각 기능들이 swagger를 통해 정상작동하여서 나름은 뿌듯했었다.(계속하다보면 나만의 코드도 쓸수있지않을까..)어쨌든 궁금했던, 어노테이션과 RequestDTO Body의 연관성에 대해선 원래는 크게 연관이 없다고 하셨다.다만 DTO 파일 내에선 어노테이션 중 @SETTER가 기존엔 파라미터 바디로 바꾸어주는 역할을 해서 해당 어노테이션을 제거하면 작동을 하지 않아야한다는데, 왜 그런지는 멘토님께 문의하기로 했다.
다만, 요청으로 오는 파라미터는 json(네트워크 상 주고받는 경량의 데이터 형식) objectMapper로 파싱(데이터를 뽑아내서 배열 등의 형태로 저장하는 과정) 되고, form 태그로 들어온 데이터가 Setter 어노테이션으로 들어간다고 한다고 추가적으로 설명해 주셨는데 잘 이해가가지않아 찾아봤다.
- json의 형태

요청들은 위와 같은 형태로 서버에 전달된다는데, 이 형식그대로라면 데이터를 사용할 수 없어서 사용할 수 있게끔 변경해주는게 parsing이라는 것 같다.
또한 이렇게 parsing된 데이터들이 setter라는 어노테이션을 통해 코드에 기재한 매개변수로 제공되어 각 기능들에서 사용할 수 있게 해준다는 것.
얼추 의미는 사용할 수 있게 가공했다는 정도는 알겠다.
다만, 아까 말한것처럼 어떻게 @setter가 없이 작동되는지는 해결하지 못했다.
▷ 다음 과제
댓글기능을 구현하려고 했지만, 데이터가 헬스장의 정보여서 리뷰로 엔티티 이름만 바꾸어 구현하기로 했다.규칙은 Review 엔티티와 healthInfo 엔티티를 양방향 관계로 설정하고, 내용으로는 id와 컨텐츠만 넣는것이다.원래는 각 리뷰의 CRUD역시 구현해야하나 나를 포함한 조원들이 아직 CRUD를 독자적으로 만들어보지 않아 다음으로 미루게 되었다.
● Review 엔티티 만들기
▷ HealthInfo 엔티티
@Id
@Column(name = "healthInfo_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ..
@Builder.Default
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "healthInfo")
private List<Review> reviews = new ArrayList<>();
public void addReview(Review review, String title, String contents){
reviews.add(review);
review.setTitle(title);
review.setContents(contents);
}
먼저 일대다의 관계가 될, 기존의 healthInfo 엔티티에는 위와 같이 id값을 PK로 지정하고 column 어노테이션과 이름을 달아 Review 엔티티에서 참조할 수 있게 했다.
그리고 아래에, @Builder.Default 어노테이션은 초기화에 사용하기위해 넣었는데, 초기화 값을 정하지도 못하고 명확히 이해하지 못해서 일단 두었다.
그리고 연관관계 설정을 위한 Onetomany 어노테이션을 통해 Review 엔티티와 일대다의 관계를 맺었다.
괄호 안의 옵션은 n+1문제를 위해 로딩방식을 lazy로 설정하고, 엔티티의 상태 변화를 전이하기 위해(영속성 관리) cascade.all을 넣었다.
이어 mappedBy옵션으로 Review에 생성될 healthInfo라는 변수가 관계의 주인임을 표기했다.
아래 List 구문은 Review 를 리스트로 받게끔 선언한 내용이다.
addReview 메서드는 아직 사용하진 않았는데, 후에 Review를 작성하면 타이틀과 set 메서드를 이용해 내용을 추가해서
review 리스트에 더해주는 내용이다. 매개변수로 위 3가지를 받고있다.
▷ Review 엔티티
@Entity
@Getter
@Setter
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String contents;
@ManyToOne
@JoinColumn(name = "healthInfo_id")
private HealthInfo healthInfo;
}
Review 엔티티는 healthInfo 엔티티와 다대일의 관계를 맺는 연관관계의 주인으로 만들었다.
데이터가 각 헬스장의 정보이므로, 헬스장에 대한 리뷰가 여러개 달릴 수 있다는 의미이다.
id는 기본값으로 가지고 title과 content를 멤버변수로 가진다. 위에 getter와 setter 어노테이션이 있어 다른 클래스에서 get(), set() 메서드로 값을 받거나 변경할 수 있다.
맨 아래에 Manytoone 어노테이션으로 다대일의 관계임을 선언하고, JoinColumn어노테이션에 앞서 설정한 healthInfo의 id값을 참조 값으로 사용함을 선언했다.
위 내용은 2023.01.09에 공부한 내용입니다.
'GroupStudy' 카테고리의 다른 글
| 게시판 만들기(7) - 저장, 삭제 기능 구현 (0) | 2023.01.29 |
|---|---|
| 게시판 만들기(6) 엔티티 연관관계 설정 및 view구현. (0) | 2023.01.29 |
| 게시판 만들기(4) - 데이터를 입력하여 CRUD구현. (0) | 2023.01.29 |
| 게시판 만들기 : ManyToOne 조사 (0) | 2023.01.29 |
| 게시판 만들기(3) (0) | 2023.01.29 |