서재무(B) - Implement Spring project with JPA and H2 Database#1
서재무(B) - Implement Spring project with JPA and H2 Database#1Duckssocks wants to merge 1 commit intoGDSC-PKNU-Official:mainfrom
Conversation
Duckssocks
commented
Jul 10, 2024




coke98
left a comment
There was a problem hiding this comment.
JPA를 잘 이해하고 사용해주신 것 같아요. 이후 프로젝트에서는 입력값을 검증하는 방법이나, 예외처리, DTO를 사용하는 방법, 트랜잭션을 활용하는 방법 등 같이 공부해봐도 좋을것 같습니다. 고생 많으셨습니다! 👍
| public class Enrollment { | ||
| @Id | ||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| private int enrollment_id; |
There was a problem hiding this comment.
필드 명들이 스네이크 케이스를 사용하고 있는데요, "column(name = "을 통해 컬럼 네임을 따로 지정해주면, 자바에서의 카멜케이스 네이밍 컨벤션을 지킬 수 있으면서도, JPA의 스네이크케이스에 대한 네이밍 연동을 할 수 있어요 ~!
There was a problem hiding this comment.
레포지토리에서 사용하는 아이디와 다른 테이블에서는 아이디를 Long속성으로 둔 만큼 int -> Long으로 통일해도 좋을 것 같습니다
| } | ||
|
|
||
| public Course getCourse(Long id) { | ||
| return courseRepository.findById(id).orElse(null); |
There was a problem hiding this comment.
지금은 연습 프로젝트이니 null을 반환하는 것으로 끝냈지만, 실제 프로젝트에서는 nullPointerException가능성을 두는 것 보단 orElseThrow()로 예외를 던지고 적절히 처리할 수 있도록 구조를 짜보면 좋을 것 같아요
| } | ||
|
|
||
| public List<Enrollment> getEnrollmentsByCourseId(Long courseId) { | ||
| return enrollmentRepository.findByCourseCourseId(courseId); |
There was a problem hiding this comment.
Jpa 커스텀 쿼리 메서드를 잘 사용해서 깔끔하게 만들어 주셨네요, 지금은 데이터 베이스에 접근하는 코드가 메서드마다 하나씩이기에 큰 이점은 없을테지만, 프로젝트가 복잡해지고, 여러번의 도메인별 접근이 이루어 질 경우가 생기곤 합니다. 그럴때 트랜잭션 어노테이션을 꼭 활용할 수 있으면 좋을 것 같아요
| } | ||
|
|
||
| @PostMapping | ||
| public ResponseEntity<Enrollment> addEnrollment(@RequestBody Enrollment enrollment) { |
There was a problem hiding this comment.
사용자가 모든 값을 입력할 수 있는 body에서 엔티티를 검증없이 바로 바인딩 시키는 방법보다는 중간 클래스(레코드 활용 가능)인 DTO를 활용하는게 더 바람직해요. 이후 사용자가 입력가능한 DTO 클래스 -> 엔티티로 바꾼다면 API 요구사항과 엔티티구조가 다르더라도 유연하게 코드를 짤 수 있기도하구요.