inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 목록 조회

엔티티 VS 폼객체

446

Ahrisan

작성한 질문수 25

5

강의내용 8:30 내용질문입니다.

 

< API를 만들때는 엔티티를 외부에 반환하면 안된다 >

1. 필드가 그대로 노출됨 (ex.userpassword)

2. API 스펙이 변한다. (엔티티에 로직을 추가했는데 api스펙이 변한다)

 

솔직히 말씀드리면 전부 이해가 안됩니다..ㅠ

이전 강의에서 FORM에 입력되는 데이터를 Member 엔티티를 쓰는게 아니라 따로 만들어준 MemberForm을 쓰는이유는 이해했습니다.

(Member객체 코드가 지저분해질수 있고, Valid 기능같은것을 사용하지못해서)

 

그것과 유사한 이유인것 같은데... 정확히 이해가 안되네요

 

사실 api라는 개념도 정확하게 잡히지 않습니다. 

 

정리해서 질문 하겠습니다.

1. 저희가 강의에서 만들어준 api가 있나요???

 (혹시 MemberController의 메서드들이 모두 api에 속하는건가요?)

 

2.  필드가 노출된다는게 무슨말인지 모르겠습니다.  예를들어 폼에 password입력칸이 있는데, 이게 어떻게 노출이 가능하다는 것인가요?

 

3.  api의 스펙이 바뀐다는 부분이 이해가안됩니다.

api스펙이 무엇을 뜻하며, 그게 바뀌면 무슨 문제가 생기나요?

 

java spring-boot JPA 웹앱 spring

답변 1

0

나무늘보

안녕하세요, 김진영 님. 공식 서포터즈 codesweaver 입니다.
.
1. 웹 API란 웹(HTTP) 요청으로 특정 URL에 규정된 양식으로 데이터를 요청(request)하면 규정된 양식으로 응답(response) 하겠다는 약속입니다. 웹이 시작되려면 일단 URL을 입력하는 단계부터 시작해야하는데 그렇다면 컨트롤러의 메서드들과 매핑하는 단계부터 시작이라는 것을 알 수 있습니다. 질문하신 것처럼 컨트롤러의 메서드들이 API 스펙 중 한개가 되는 셈입니다.

 

2. 데이터베이스에 고객정보를 만약 name, pass, auth 등으로 보관하고 있다고 가정하겠습니다. 이 때 API의 응답값으로 엔티티를 그대로 전달하게 되면 데이터베이스에 어떤 형태로 데이터가 들어가 있는지 상대에게 모두 노출하게 됩니다. 상대에게 불필요한 정보를 노출하는 것은 위험합니다. 또, 엔티티를 그대로 반환하게 된다면 API 응답에 필요없는 항목들도 모두 포함해서 반환하는 문제도 생깁니다. 그래서 엔티티를 직접 반환하지 않고 DTO를 이용하는것이 좋습니다.
.

3. api의 스펙이 바뀐다는 것은 요청하는 URL의 변경, 요청시 필수 파라미터, 응답시 파라미터의 갯수나 타입 등등이 바뀐것을 말합니다. 즉, 요청하고 응답하는 약속이 변경된것을 API 스펙이 바뀌었다고 합니다.


감사합니다.

0

Ahrisan

상세한 설명 감사합니다.

이해에 큰 도움이 되었습니다.

추가로 궁금한점 댓글로 남깁니다.

2번으로 답변주신 내용에 대한 질문입니다.

name,pass,auth 등을 보관하고 있다고 가정하고,  엔티티를 그대로 보내면 디비의 어떤 형태로 데이터가 들어가 있는지 노출된다고 하셨는데,

강의 내용을 보면 MemberForm과  Member엔티티가 비교대상이 였습니다. id를 제외한 데이터는 거의 동일한데. 이것을 멤버폼으로 보내나 엔티티로 보내나 무슨차이인지 모르겠습니다.
(다만 vaild 기능을 비롯하여 멤버엔티티 코드가 지저분해질수 있다는 부분과 api응답에 필요한 데이터만 포함시키기위해 멤버폼을 만든다는것은 이해했습니다.)

0

나무늘보

안녕하세요 김진영님!

질문하신것처럼 현재의 예제코드에서는 Member와 MemberForm이 거의 일치합니다.

다만 실무에서는 Member가 더 다양한 프로퍼티를 갖게 됩니다. 

그래서 Member와 MemberForm의 불일치가 점점 커지게 됩니다.

.

예제를 단순하고 쉽게 만들다 보니 지금은 불필요한 중복처럼 보이게 된 것입니다. :)

감사합니다.

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

23

1

sdk 설정 오류

0

59

2

오탈자 - @Transactional

0

58

1

src/test/resources 테스트 경로 문제

0

54

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

67

1

MemberRepositoryTest 실행오류

0

83

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

187

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

146

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

54

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

77

1

기본 생성자

0

62

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

104

1

멤버서비스테스트 부분에서 막힙니다.

0

168

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

119

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

122

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

115

1

24분 27초 연관관계 편의 메서드 위치

0

115

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

112

2

빌드 툴, Gradle

0

61

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

78

2

Repository에서 EntityManager 주입 방식 차이

0

91

1

롬복과 사용자 정의 setter 메서드

0

74

1

주문 목록 조회 fetch join 질문드립니다

0

85

1

dirty checking 질문드립니다.

0

84

1