ArgumentResolve에서 ID 반환에 대해 #170
Replies: 2 comments 2 replies
-
OSIV를 처음 학습한 제가 이해한 것이 맞는지 잘 모르겠어서 정리해보겠습니다. 🤯
말씀해주신 고민은 3번에 관한 내용으로 생각됩니다. 현재 코마 프로젝트는 스프링 기본 설정에 의해 OSIV 설정이 켜져있는 상태입니다. ArgumentResolver에서 Student를 검증한 상황이지만 그 과정에서 Student 객체는 영속화되었고( 여기까지가 제가 이해한 내용입니다. 틀린 부분이 있다면 지적해주시면 감사하겠습니다.
최종적으로 제 결론은 아래와 같습니다. 1. OSIV 기능을 off한다. 제 이해가 부족하여 글이 너무 길어진 것 같습니다. 긴 글 읽어주셔서 감사합니다! 😊 |
Beta Was this translation helpful? Give feedback.
-
OSIV를 끄는 것은 성능 이슈, 트랜잭션 관리 문제, 그리고 리소스 사용 최적화 측면에서 좋은 선택입니다. 추가적으로 유저의 로그인 여부와 권한을 체크하는 로직을 서비스 로직과 분리하는 것은 좋은 접근 방식입니다. 다만 OSIV를 끄고 ID를 받아오는게 좋은 것 같습니다. 이유는 다음과 같습니다. 제 의견을 다음과 같습니다. |
Beta Was this translation helpful? Give feedback.
-
안녕하세요? 친애하는 코마 여러분
제가 첫 페어프로그래밍하면서 정말 생각없이 도입했던 ArgumentResolver에 대해 변경하고자하는 내용이 생겨 이렇게 말씀 올려봅니다.
정말 부끄럽지만 OSIV 설정 및 인증 방식에 관련하여 한가지 수정하는것을 제안드리고자 discussion 올려봅니다.
쉽게말해 OSIV는 Entity의 생명주기를 Controller Layer까지 관리하게 두는 설정으로 이 설정이 켜져있는 경우 Controller Layer의 로직이 수행될 때 까지 Database Connection을 물고있게 되는 문제점이 발생하게됩니다.
다시말해 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 DB Connection을 물고있게 되는거죠.
이 설정은 불필요하게 DB Connection을 길게 물고있기 때문에 보통은 OSIV 설정을 끄는 편입니다. (default는 true)
이에 로직에 작성되어있는 내용 중 다음과 같은 부분이 신경쓰였습니다.
Service에서 받는 저 엔티티는 영속화와는 관계없이 신뢰할 수 없는 객체가 됩니다. ArgumentResolver로부터 조회되고 Service에 도착했지만 안에 무슨 무시무시한 값이 있을지 알 수 없습니다.
이에 ArgumentResolver에서 인증된 값을 반환할때 studentId (혹은 userId)와 같이 ID를 반환하고 service에서 Repository로 조합해서 사용하는 방식으로 수정하는 건에 대해 제안드려봅니다.
항상 감사합니다 😊
Beta Was this translation helpful? Give feedback.
All reactions