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 [3주차] 기본 / 생각 과제 제출 #6

Merged
merged 9 commits into from
May 12, 2023
Merged

#5 [3주차] 기본 / 생각 과제 제출 #6

merged 9 commits into from
May 12, 2023

Conversation

yeseul106
Copy link
Collaborator

@yeseul106 yeseul106 commented May 2, 2023

SERVER PR

💫 Related Issue

🐕 과제 구현 명세

✅ 기본 과제

  • 세미나 시간에 배운 코드 작성 완료 했습니다 !

  • 패키지 구조

    image
    • domain : Entity 등 도메인과 관련된 파일
    • infrastructure : repository 파일

✅ 심화 과제

  • User 테이블과 Post 테이블 ERD는 다음과 같습니다! 연관 관계를 조금 더 공부해보고자, 댓글 Post_Comment 테이블을 추가했습니다 !
    • 유저는 하나의 게시물에 여러 개의 댓글을 달 수 있다.
    • User - Post : 일대다 (One-to-Many) 관계
    • Post - Comment : 일대다 (One-to-Many) 관계
    • Comment - User : 다대일 (Many-to-One) 관계

image

  • 📌 API
domain method route info
User POST /user/signup 유저 생성
Post POST /post 게시물 생성
Post GET /post/:postId 게시물 조회
Comment GET /comment/:postId 특정 게시물의 댓글 목록 조회
Comment POST /comment 특정 게시물의 댓글 생성

✅ 생각 과제


🐥 이런 점이 새로웠어요 / 어려웠어요

  • ☑️ 기본 과제: 기본 과제를 다시 한번 해보면서 저번 기수 node.js 쓸 때와는 또 컨트롤러 단에서 처리해주는 것이나, 계층 구조가 조금씩 달라져서 헷갈리는 부분도 있었던 것 같아요 ! 차분히 정리해나가겠습니다 !!

    • @NotNull , @NotEmpty , @NotBlank 의 차이가 헷갈렸는데 아래에 정리해두었습니다!
    • @Valid은 정확히 무엇을 검증하는 것일까 ?
      • 이 어노테이션이 붙은 객체 검증에 오류가 있다면 MethodArgumentNotValidException 예외가 발생하게 되고, 디스패처 서블릿에 기본으로 등록된 예외 리졸버(Exception Resolver)인 DefaultHandlerExceptionResolver에 의해 400 BadRequest 에러가 발생한다.
      • 이러한 이유로 @Valid기본적으로 컨트롤러에서만 동작하며 기본적으로 다른 계층에서는 검증이 되지 않는다. 다른 계층에서 파라미터를 검증하기 위해서는 @validated와 결합해야 한다.
      • JSR 표준 스펙은 다양한 제약 조건 어노테이션을 제공하고 있는데, 대표적인 어노테이션으로는 다음과 같은 것들이 있다
        • @NotNull: 해당 값이 null이 아닌지 검증함 ("", " "은 둘다 허용)
        • @notempty: 해당 값이 null이 아니고, 빈 스트링("") 아닌지 검증함(" "은 허용됨)
        • @notblank: 해당 값이 null이 아니고, 공백(""과 " " 모두 포함)이 아닌지 검증함
        • @AssertTrue: 해당 값이 true인지 검증함
        • @SiZe: 해당 값이 주어진 값 사이에 해당하는지 검증함(String, Collection, Map, Array에도 적용 가능)
        • @min: 해당 값이 주어진 값보다 작지 않은지 검증함
        • @max: 해당 값이 주어진 값보다 크지 않은지 검증함
        • @pattern: 해당 값이 주어진 패턴과 일치하는지 검증함
    • Controller 단에서 @ResponseStatus 어노테이션으로 각각 상태 코드에 맞춰 해당하는 response를 보내주는 것은 모두 성공에 대한 케이스만 작성해준다.
      • 실패 케이스에 대한 에러 처리는 @RestControllerAdvice 어노테이션을 사용해서 Advice 파일에서 처리를 해주도록 작성한다.
      • 이 부분에 대해서 각 api의 @ResponseStatus 의 상태 코드마다 분기 처리를 해주어야 하면 api 들 사이에서도 중복되는 코드가 많아서 동적으로 바인딩 해주어야 간편한게 아닌가라고 생각했지만, 에러 처리를 모두 Advice에서 해주므로 이 문제가 해결 된다는 것을 처음에 생각을 못했다. 기억하자!
  • ☑️ 심화 과제 :

@yeseul106 yeseul106 changed the title [3주차] 기본/심화/생각 과제 제출 # 5 [3주차] 기본/심화/생각 과제 제출 May 5, 2023
@yeseul106 yeseul106 requested review from dev-Crayon and a team May 5, 2023 13:33
@yeseul106 yeseul106 merged commit ed68a30 into main May 12, 2023
@yeseul106 yeseul106 changed the title # 5 [3주차] 기본/심화/생각 과제 제출 # 5 [3주차] 기본/생각 과제 제출 May 12, 2023
@yeseul106 yeseul106 changed the title # 5 [3주차] 기본/생각 과제 제출 #5 [3주차] 기본 / 생각 과제 제출 May 12, 2023
@yeseul106 yeseul106 deleted the WEEK3 branch June 1, 2023 10:44
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.

[3주차] 기본/심화/생각 과제 제출
1 participant