Category 부분에서 요구사항이 들어와서 수정하는 시간을 가졌다.
중간 테이블 생성해서 하는 방식으로 @OneToMany, @ManyToOne 방식으로 하기로 하였으나, 이미 짜여있고 Enum으로 쓰고 있는 결합이 되었는 로직이 많이 있고, 그리고 발표회 날까지 시간이 부족해서 해당 방법은 하지 않기로 함. ( 이래서 설계부터가 가장 중요하다는걸 느꼈다. )
🌈 @ElementCollection
처음 보는 어노테이션을 사용하였다.
이 어노테이션은 엔티티에 PK를 받지않는다. ( 미니 Entity를 만든다는 느낌이다. )
그래서 따로 중간 테이블을 쓰지않고, join 컬럼을 해서 간편하게 사용할수 있다.
참고로, @CoollectonTable은 우리가 수동으로 설정해주는 기능일뿐이지, 없어도 자동으로 기능할수 있게 해준다.
이렇게 해놓으면 DB에서는 ( problem_categories ) 라는 테이블을 생성한다.


확장성을 고려하지 않는다면 이러한 방법도 좋다. ( 특히, 테이블을 생성해서 하나의 필드만 사용하고 있는 경우 등.. )
❓ Difficulty
카테고리를 리팩토링 하면서 발견하게 되었다.
Difficulty가 Problem 엔티티내에서, 데이터 타입이 String difficulty로 되어 있었다. 이렇게 되어있으면 실제 Enum값을 사용하지 않아서 문제가 생긴다. 그래서 Diffuclty difficulty 로 바꿔서 하였다.
변화된 문제 등록 JSON
{
"categories" : ["FOR_BEGINNER", "MATH"],
"title" : "A+B",
"description" : "입력한 두수의 값을 더하고, 결과값을 출력하세요",
"difficulty" : "LV1",
"memoryLimit" : 30000,
"timeLimit" : 1000,
"reference" : "ORIGINAL"
}
JSON 코드의 변화가 생겼다.
카테고리는 이제 리스트 형태로 해서, Enum에 등록되어있는 데이터로 여러개 이상 매핑하게 하여서 작성할수있고,
Difficulty는이제 키 데이터를 제대로 입력해주어야 한다.
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 87 - [ Spring 최종 프로젝트 ( Day 23 ) - 문제 조회 성능 최적화 ] (0) | 2025.06.30 |
|---|---|
| TIL 86 - [ Spring 최종 프로젝트 ( Day 22 ) - S3 문제 이미지 수정/삭제 기능 구현 ] (0) | 2025.06.28 |
| TIL 84 - [ Spring 최종 프로젝트 ( Day 20 ) - S3 문제 이미지 기능 구현, contextLoads() 에러 ] (0) | 2025.06.25 |
| TIL 83 - [ Spring 최종 프로젝트 ( Day 19 ) - S3 문제 이미지 기능 구현, 브로셔 작업 ] (0) | 2025.06.24 |
| TIL 82 - [ Spring 최종 프로젝트 ( Day 18 ) - S3의 잘못된 사용, 기능 구현 ] (0) | 2025.06.23 |