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

[WEEK2] 기본 과제 & 도전 과제 제출 #4

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

jelliijoa
Copy link
Collaborator

@jelliijoa jelliijoa commented Apr 21, 2023

🫧 SERVER PR

@GO-SOPT-SERVER/kosyullaeng

✨ 과제 구현 명세

기본 과제

Controller

Dto는 계층 간 데이터를 주고받을 때 사용하는 틀의 개념으로 작성했습니다.

Controller는 클라이언트 요청에 대한 Service 호출 처리를 위해 사용됩니다.
Request를 받고 Response를 반환하는데, Response 반환은 심화 과제에서 구현해 보겠습니다!

  • PostingRegisterRequestDto
  • PostingController

Domain

서비스에 필요한 자원을 정의하는 개념으로 작성했습니다.

  • Posting

Service

사용자의 요구사항을 처리하는 공간으로 작성했습니다.

  • PostingService

도전 과제

이번 도전 과제는 회원 등록 및 수정, 삭제를 다양한 HTTP Method로 구현하려고 노력했습니다.


Dto

requestresponse로 나누어서 작성했습니다.

  • request : MemberRegisterRequestDto, MemberUpdateRequestDto
  • response : ResponseDto

Controller

Controller에서는 적절한 HTTP Method와 Mapping을 통해 서비스를 호출했습니다.

  • MemberController
  • 회원 조회 및 삭제는 ResponseDto를 통해 예외 처리를 해줬습니다.

Service

Controller에 의해 호출되어 회원 등록, 수정, 삭제 이외에도 검색 등의 기능을 할 수 있도록 작성했습니다.

  • MemberService

Domain

회원 관리에 필요한 자원을 정의했습니다.

  • Member

도전 과제 실행 화면

1번 회원 등록 완료
1

2번 회원 등록 완료
2

1, 2번 등록 이후 인텔리제이 터미널
3

회원 조회
4

회원 조회 성공
5

회원 조회
6

회원 조회 실패
7

회원 정보 수정
8

회원 정보 수정 후 인텔리제이 터미널
9

회원 정보 삭제 성공
10

회원 정보 삭제 실패
11

회원 정보 삭제 후 삭제한 회원 조회 시 인텔리제이 터미널
12


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

기본 과제

  • PostingResgisterRequestDto에서 private으로 선언된 필드들과 Posting에 private으로 선언된 필드들이 id를 제외하고 모두 동일한데, 두 파일을 왜 구분해서 쓰는 지(Dto가 정말 데이터 전달만을 목적으로 사용하기 때문에 존재하는지) 의문이 생겨서 컨트롤러에서 게시물 등록 서비스를 호출하고, 받아온 request 데이터를 토대로 실제 객체를 생성하면서 작동되는 과정들을 이해하는 중입니다,,

심화 과제

  • Dto에 대한 의문이 기본 과제 할 때보다는 좀 더 가닥이 잡힌 것 같아서 예외처리 Dto도 생성해보았습니다.
  • Dto가 데이터를 좀 더 안전하게 넘겨주기 위한 캡슐화..서비스와 컨트롤러 사이의 중간자 역할..의 개념으로 생각하게 되었는데 이게 방향을 잘 잡은건지 다른 분들의 의견도 궁금해요!!
  • Dto로 예외처리를 해보고 싶어서 구글링 해서 코드에 적용시켜 봤는데 처음이다보니 로직에 확신이 서지 않아서 제가 잘 적용한 건지 모르겠습니다.
  • 스프링이 처음이라 전체적인 코드를 이해하고 구현하는 데 시간이 걸린 것 같습니다! 부족한 부분 언제든지 알려주세요

@jelliijoa jelliijoa requested a review from a team April 21, 2023 16:43
@jelliijoa jelliijoa changed the title [WEEK2] 기본 과제 제출 [WEEK2] 기본 과제 & 도전 과제 제출 Apr 21, 2023
Copy link

@RinRinPARK RinRinPARK left a comment

Choose a reason for hiding this comment

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

윤지님 고생하셨어요!!!👍

request.getAge(),
request.getGender(),
request.getContact(),
request.isMarriage()

Choose a reason for hiding this comment

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

음흠 Getter, Setter 어노테이션에서 is관련 함수도 만들어주나 보네요???!! 몰랐어용

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

넵 getter 함수에서 제공하는건데, 위에 get 메서드들과 똑같은 기능이지만 marriage는 타입이 boolean이라 함수명이 is로 설정된거예요!!

public ResponseDto<String> getOneMember(@PathVariable final Long memberId) {
if (memberService.findOne(memberId) == null) { // 예외 처리 404
System.out.println("존재하지 않는 회원입니다.");
return new ResponseDto<String>(HttpStatus.NOT_FOUND.value(), "404 NOT_FOUND");

Choose a reason for hiding this comment

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

제가 자바 문법이 익숙하지 않아서.. 혹시 이 코드에서는 response패키지에 만들어 두신 ResponseDto클래스에 제네릭으로 선언했던 타입에 String을 넘겨주고 소괄호 속 값을 data로 보내주는 것이 맞나요?!
제가 이해한게 맞는지 모르겠네요 ㅠㅠ

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

responseDto클래스에 제네릭으로 선언했던 타입에 String을 지정해주고, int status에 HttpStatus.NOT_FOUND.value()를, T data(여기서는 제네릭 타입을 String으로 지정해줬으므로 String data)에 "404 NOT_FOUND"를 전달해준거예요!! 소괄호 앞의 값은 status, 뒤의 값은 data로 넘겨줬다고 보시면 됩니다:-)

Comment on lines +51 to +54
return new ResponseDto<String>(HttpStatus.NOT_FOUND.value(), "404 NOT_FOUND");
}
System.out.println(name + "회원 정보 삭제가 완료되었습니다.");
return new ResponseDto<String>(HttpStatus.OK.value(), "200 OK!");

Choose a reason for hiding this comment

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

ResponseDto를 따로 두고 예외처리 해줘서 보기 좋아요!👍


@Getter
@Setter
@ToString(exclude = "id")

Choose a reason for hiding this comment

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

ToString 어노테이션이 따로 있는 줄 몰랐는데 배워갑니다!

@jelliijoa jelliijoa requested review from yungu0010 and onpyeong and removed request for yungu0010 April 27, 2023 10:47
Copy link

@dong2ast dong2ast left a comment

Choose a reason for hiding this comment

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

고생하셨습니다!

public class MemberController {
private final MemberService memberService;

@PostMapping("/member")
Copy link

Choose a reason for hiding this comment

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

/member처럼 mapping마다 경로가 중복되는 부분은 MemberController라는 맨 상위 클래스에
RequestMapping으로 적용하면 하위에서 중복을 피할 수 있어요!

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.

4 participants