Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5기 이경민, 소승수] Spring Boot JPA 게시판 구현 미션 제출합니다. #266

Open
wants to merge 7 commits into
base: voidmelody,-tidavid1---mission
Choose a base branch
from

Conversation

voidmelody
Copy link

📌 과제 설명

Sprint Data JPA를 사용한 간단한 게시판

👩‍💻 요구 사항과 구현 내용

SpringDataJPA 를 설정한다.

  • datasource : h2 database

  • 회원 (user)

    • id (PK) (auto increment)
    • name
    • age
    • hobby
    • created_at
    • created_by
  • 게시글 (post)

    • id (PK) (auto increment)
    • title
    • content
    • created_at
    • created_by
  • 회원과 게시글에 대한 연관 관계를 설정한다.

    • 회원과 게시글은 1 : N 관계이다.
  • 게시글 Repository를 구현한다.

API를 구현한다.

  • 회원 생성

  • 게시글 작성 (POST "/posts")

  • 게시글 조회

    • 페이징 조회 (GET "/posts")
    • 단건 조회 (GET "/posts/{id}")
    • 게시글 수정 (POST "/posts/{id}")
  • REST-DOCS를 이용해서 문서화한다.

✅ PR 포인트 & 궁금한 점

  1. 현업에서 해당 과제처럼 Pageable을 활용해서 페이징을 구현하나요?
  2. 양방향 매핑을 활용하다 보니 test를 작성할 때 매 테스트마다 매핑된 두 객체 다 지워야하는 문제가 발생했습니다.
    현업에서 양방향 매핑보다는 단방향 매핑을 많이 고려해 사용하는 것으로 아는데, 이에 대한 멘토님의 의견이 궁금합니다.

}

@GetMapping
public CommonResult<Page<PostServiceResponseDto>> getAllPost(Pageable pageable) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pageable 인터페이스는 어떤 파라미터들을 제공하고 있는지 알고 계실까요!?
모든 인자 값을 받야하는 경우가 아니라면 제한적으로 제공하기 위해 별도의 클래스를 활용할 수 있을 것 같습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네. 우선 저희가 활용하는 파라미터가 page와 size 정도이므로 분리해서 활용해볼 수 있을 것 같습니다.

Copy link

@SeokRae SeokRae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요. 경민님, 승수님! 멘토 알입니다.

JPA 게시판 구현을 페어로 진행하셨군요.! 고생하셨습니다.
현재는 문법을 배우는 단계이기도 하지만, 과제는 어느정도의 주관이 들어갈 수도 있습니다.
문법을 사용하여 구현하는 것보다, 이를 활용하는 방법을 고민해보는 것도 좋을 것 같습니다.

✅ PR 포인트 & 궁금한 점

현업에서 해당 과제처럼 Pageable을 활용해서 페이징을 구현하나요?

페이징 구현에 Pageable의 구조를 참고하긴 해도, 이를 그대로 사용하진 않을 것 같습니다.
Pageable 인터페이스를 활용한다면, 인터페이스를 구현한 별도의 클래스를 구현해서 사용할 수도 있을 것 같네요.!

테이블 설계 매핑(연관관계) 관련

제가 경험한 실무에서는 연관관계 즉, fk 기능을 적극적으로 사용하여 테이블을 설계하는 경우는 극히 드물었습니다.
물론 fk 기능을 통해 구현하지 않았을 뿐, 논리적으로는 FK의 의미를 갖는 필드를 갖고는 있습니다.

FK를 통해 데이터의 정합성을 높일 수 있으나, 제약 조건이라는 제한으로 인해 발생할 수 있는 부분들이 운영적인 측면에서 이슈가 되는 부분이 생각보다 큽니다.

  1. CRUD의 제한
  2. 부모 테이블 -> 자식 테이블 트랜잭션 관리 영향 전파
  3. 데이터 마이그레이션 및 백업 시 casecade 문제

더 복잡한 내용이 있을 수도 있지만, 제가 아는선에서는 이렇습니다.!

Comment on lines 48 to 50
void tearDown() {
userRepository.deleteAll();
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 @transactional이 있어도 필요한 부분일까요?
제거 해서 돌려봤을땐 문제 없이 돌아가는 것 같은데, 어떤 연관이 있는 걸까요?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

처음 테스트를 작성했을 때 @Transactional 어노테이션을 적용하지 않고 @AfterEach를 활용해서 테스트를 처리하는 방식으로 테스트를 작성했는데 이후 @Transactional 적용 이후 사용하지 않는 메소드를 삭제하지 않은 것 같습니다! 수정하도록 하겠습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants