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

[3주차 과제] 윤태현 #41

Open
wants to merge 17 commits into
base: YunTaeHyeon
Choose a base branch
from

Conversation

YunTaeHyeon
Copy link

이번 주에 어떤 작업을 했는지 설명해주세요.

postman에서 서버로 post 하는 객체를 엔티티로 하고 있었는데 그것을 DTO로 바꾼 후 기존에는 코드가 잘 실행되는지 컨트롤러에 엔티티를 하나 직접 추가해서 알 수 있었지만 json을 사용해서 서버로 직접 post 할 수 있게 만들었습니다.
응답값은 공부했으나 아직 좀 미흡하고 거래 상품 엔티티인 MemberItem과 그것의 DTO, Repository, 전체 상품 조회와 상품 추가 메소드까지 구현했습니다.

특히 어떤 부분을 리뷰받고 싶나요?

JPA Auditing을 통해 엔티티 등록 시간을 db에 저장하고 그것을 상품페이지에 적용하고 싶은데 잘 안되어서 리뷰받고 싶습니다.


이번 주는 어떻게 학습했나요? 아래 질문에 짧게 답변주세요!

강의 자료를 보고 공부하고 원하는 기능을 구현할 수 있는 법을 구글링을 통해 찾아봤습니다.

이번 주에 학습에 투자한 시간

  • 10시간

학습 하면서 좋았던 점과 아쉬웠던 점

  • 점점 코드와 기능이 많아짐에 따라 뿌듯한 마음이 들었습니다.
  • 에러가 하나씩 나올 때마다 시간이 점점 오래 걸리는 것이 느껴지는 것이 아쉽습니다.

어려움을 겪는 부분

  • jwt 토큰을 통해 로그인 한 후 localhost:8080/user에 어떻게 접속해야 하는지를 모르겠습니다.
    postman에서 해당 url에 대해 get할 때 어떻게 토큰을 가지고 들어갈 수 있나요?

스터디 개선되었으면 하는 점

  • 없습니다.

Copy link
Collaborator

@won983212 won983212 left a comment

Choose a reason for hiding this comment

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

Timestamped까지는 잘 만들어주셨고, 반영되길 원하시는 entity에 이 클래스를 상속시켜주어야 createdAt과 modifiedAt이 생성됩니다!

몇 가지 더 피드백드리자면...

@Data는 가급적 안 쓰시는 것을 추천드립니다.

이걸 사용하면 @Setter를 사용하게 됩니다. 한번 만들어진 dto객체는 외부에서 수정할 수 없게 하는 게 좋습니다. 그러면 객체의 일관성을 보장해주면서 유지보수 관점에서 유리해집니다.
저는 보통 @Getter, @AllArgsConstructor를 섞어 사용합니다. 원래 @AllArgsConstructor도 잘 안쓰는 편이지만(dto말고 특히 id가 포함된 entity에서는 사용하지 않으시는 걸 권장드려요), dto에서는 괜찮을 것 같습니다. 아니면 상황에 따라 builder 패턴도 고려해보세요!

@RequiredArgsConstructor
@Entity //객체라는 것을 알림
@ToString
@Builder
Copy link
Collaborator

Choose a reason for hiding this comment

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

@Builder도 생성자에 붙여 사용하시는 것을 권장드립니다.

Class level에 사용하시면...

  • 모든 필드를 지정할 수 있습니다. 자동생성이 설정된 id와 같이 builder에 포함하지 말아야 할 필드까지 모두 생성됩니다.
  • 따로 생성자를 만들지 않으면, Package level의 모든 필드를 포함한 생성자를 만듭니다. 굳이 all argument 생성자가 생기는 셈이죠.
  • 생성자를 만들때도 반드시 모든 인자가 포함된 생성자가 있어야 합니다.

그래서 권장드리는 방식은 초기화가 필요한 필드가 포함된 생성자를 만드시고, 그 생성자에 @Builder를 적용하시면 좋을 것 같습니다.
문제는 이 방법을 사용하시면 기본 값 지정을 @Builder.Default로 할 수 없게 되지만...

public class Example {
    private long id;
    private long created;

    @Builder
    public Example(long created){
        this.created = created;
    }

    // builder함수는 원래 lombok이 만들어 주는 함수이다.
    public static ExampleBuilder builder() {
        return new ExampleBuilder()
                .created(System.currentTimeMillis()) // 이런 방식으로!
    }
}

builder함수를 직접 재정의해서 기본값을 주는 방식으로 사용할 수 있습니다. 다만 이게 공식 docs에는 없는 내용이라 버전에 따라 바뀔 수도 있습니다 ㅎㅎ..

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

Successfully merging this pull request may close these issues.

2 participants