inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Trong thực tế! Sử dụng Spring Boot và JPA1 - Phát triển ứng dụng Web

Kiểm tra chức năng đặt hàng

상품에서 유저 수정 권한 관련 문의드립니다!!

Đã giải quyết

357

good14110368

3 câu hỏi đã được viết

2

상품 수정을 진행할 때 어떤 인증 절차가 있어야 한다고 해주셨는데요! 제가 진행중인 프로젝트에서는 이 인증 절차를 시큐리티 컨텍스트에서 유저 아이디를 받아와 항상 findByprodcutIdandUserId(상품아이디,유저아이디) 이런 식으로의 인증을 거치고 있습니다!

분명 이런 식과 다른 방법도 있겠지만 여러번 고민과 의논에도 현재 방식보다 간단하고 좋아보이는 방식이 생각이 나지 않아 이렇게 질문드립니다..! 

혹시 영한님께서 사용하시는 실무에서의 인증 절차는 어떤식으로 사용하시는지 깊게 알고 싶습니다!

이 로직이 항상 리팩토링 해달라고 신호를 보내는데 그 방법을 알지 못해서 볼때마다 안타깝습니다.. 

항상 좋은 강의 감사하고 그 내용이 쉽지 않더라도 조언 주시면 공부해서 적용하고 싶습니다!

spring-boot JPA java spring 웹앱

Câu trả lời 4

4

yh

안녕하세요. 요한님

말씀하신 내용을 들어보니, 아마도 사용자 접점의 서비스 API와 내부에서 사용하는 내부 API가 공존하는 것 같습니다.

저는 이 부분은 명확하게 다음과 같이 package부터 api path까지 고려해서 함께 API를 분리하는 것이 좋다고 생각합니다.

- 서비스 API: 실제 사용자 접점에서 사용하는 API, 외부에 열려있고 보안에 매우 취약한 API들로 구성, 대부분 사용자 인증이 필요하고, id + userName 파라미터가 함께 필요함

- 내부 API: 내부망에서 사용하는 API, 어드민, 배치, 시스템 통합, 연동 등등 내부에서 특정 사용자 인증과 관계없이 사용

서비스 API와 내부 API는 공통의 관심사가 다르기 때문에 시간이 지날수록 다르게 발전하는 경향이 있습니다. 서비스 API는 사용자 접점의 변경 라이프 사이클을 따르지면, 내부 API는 내부 시스템간의 변경에 따라 달라지기 때문입니다. 그리고 어드민에서 사용하는 데이터와 사용자에게 노출하는 데이터도 서로 많이 다릅니다. 결국 시간이 지날수록 서로 다르게 발전하게 되는 것이지요.

이렇게 컨트롤러는 이렇게 분리해두고 중복 제거를 위해 공통 로직은 필요하면 공통 클래스(공통 컴포넌트나 서비스 클래스, 또는 이미 만들어서 함께 사용할 수 있는 서비스 클래스)를 만들어서 사용하면 됩니다.

그리고 package와 api path를 분리해두면 특정 URL이나 패키지에 따른 다른 공통 관심사를 따로 적용할 수 있습니다.

감사합니다^^

3

yh

네^^ 감사의 인사까지 저도 고맙습니다 :)

요한님 처럼 계속 의심하고 더 나은 방법이 없는지 고민해야 결국 좋은 개발자로 성장할 수 있다 생각해요.

아키텍쳐에 대한 강의는 언젠가 먼 미래에 꼭 준비할께요 ㅎㅎ

고맙습니다!

1

good14110368

늦은 새벽시간에도 이렇게 답변주시니 감사합니다!!   내부 api와 서비스 api가 서로 다른 방향으로 발전해 나간다고 말씀해 주신 부분을 듣고 무릎을 탁 치게 되었습니다!! 속이 뻥 뚫리는 느낌입니다ㅎㅎ

조금 다른 소리일 수 있겠지만 좋은 패키지 분리와 아키텍쳐에 대해서도 더 공부해야 될 것 같은 생각이 또 드네요! 

다른 질문의 답변글에서 보았던 영한님의 여건이 되실때 아키텍쳐에 관한 강의도 개설하실 수 있다고 하셨는데 querDsl 열심히 공부하면서 기다리고 있겠습니다..!ㅎㅎ 꼭 개설해주셨으면 하는 바람입니다!

감사합니다~!

1

yh

안녕하세요. 요한님^^

궁금한 점이 있는데요. 이 로직이 항상 리팩토링 해달라고 신호를 보낸다고 하시는데, 어떤 이유 때문인지요?

현재 로직을 조금 더 자세하게 로직을 적어주시고, 어떤 점이 부담스러운지 코드로 말씀해주시면 더 도움을 드릴 수 있을 듯 합니다^^

sdk 설정 오류

0

49

2

오탈자 - @Transactional

0

55

1

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

0

50

1

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

0

63

1

MemberRepositoryTest 실행오류

0

81

1

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

1

183

2

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

1

137

2

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

0

51

1

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

0

71

1

기본 생성자

0

60

1

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

0

100

1

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

0

164

4

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

0

116

1

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

0

118

2

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

0

112

1

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

0

113

1

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

0

108

2

빌드 툴, Gradle

0

59

1

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

0

76

2

Repository에서 EntityManager 주입 방식 차이

0

88

1

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

0

71

1

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

0

81

1

dirty checking 질문드립니다.

0

81

1

동시성 관련 질문입니다

0

74

1