게시글
질문&답변
2024.09.24
cqrs에 관하여
안녕하세요 gotjd9773님! 정말 좋은 질문 남겨주셨네요 ☺ 결론부터 말씀드릴게요. “cqrs에 대해서 아느냐?” 라고했을때는 “명령과 조회 책임 분리로, 데이터 저장소에 대한 읽기와 업데이트 작업을 분리를 하는것을 의미합니다. 전통적인 CRUD접근법에서는 동일한 데이터모델을 사용하여 CRUD를 수행하지만 시스템이 복잡해짐에 따라 cqrs로 조회와 업데이트작업에 대한 최적화된 모델로 개선할 수 있게됩니다” “왜 이렇게 구현했느냐?” 라고 했을때는 “고성능이필요한 애플리케이션에서 읽기 쓰기 부하를 분리하고 각각 독립적으로 확장시키기 위해서 구현하였습니다” (부연설명) 첫번째 질문인 “cqrs에 대해서 아느냐?” 라고 했을때는 알고계신 개념을 말씀주시면 됩니다. 정의는 gotjd9773님께서 이미 알고계시기도하고, 웹상에 훨씬 자세하게 나와있기때문에 해당 내용을 참고하시는게 좋을것 같습니다. 오히려 두번째 질문이 더 중요할것같은데요 , cqrs를 안써도되는데 썼기때문에 (물론 모델까지 충실히 분리하진 않았습니다. 요구사항을 보면 거의 1:1이기때문이에요) 합리적으로 설명을 잘 해야겠죠. 과제요구사항에 기반했을때는 대용량트래픽을 대비한 설계가 필요합니다. 이러한 서비스의 경우 보통 읽기의 워크로드가 쓰기보다 훨씬 높습니다. 저의 실무업무 경험상 대고객 트래픽이 중요하면서 굉장히 확장성이 높아야하는 프로젝트의 경우 command와 query서비스를 분리하는 형태가 관리와 유지보수가 쉬웠습니다. 과제에서는 메서드가 몇개 없지만, 실제로 위와같은 개발을 하다보면 서비스를 최대한 분리했음에도 한 화면에 담기지 않을정도로의 많은 양의 메서드가 존재하는경우도 많았습니다. 모델도 당연히 읽기/쓰기에 사용되는 형태도 달라지구요. 또한 읽기와 쓰기가 동일한 데이터베이스를 바라보지 않는 경우도 많습니다. 결론적으로 위와같은 확장성을 고려했을때 코드레벨에서 나누어놓는것이 향후를 생각했을때 최적의 판단이었다라고 생각합니다. 과제내에서 확장될 수 있는 부분은 “6강 면접대비 - 시스템고도화”에서도 말씀드렸다시피 ES와 같은 검색엔진을 도입하는것과 같이 시스템이 점차 확장됐을때 쓰기와 읽기의 데이터소스가 달라질 수 있습니다. 물론 cqrs가 만능이 아닙니다. 복잡성이 높아진다거나 하는 단점도 존재하구요. 다만 현 상황을 해결하기위한 최적의 선택이다라는 기조로 말씀을 이어나가시면 될 것 같아요. 🙂 궁금증이 해결이 되지 않았다면 언제든 다시 말씀주세요 🙏 (인프런 AI인턴이 자동으로 댓글을 달아주는데.. 저건 그냥 참고만해주세요ㅎㅎ 맞는말이라도 내가 작성한 프로젝트에 연관되는 내용으로 설명해야합니다)
- 0
- 2
- 33
질문&답변
2024.09.23
멀티모듈 문의드립니다.
안녕하세요 seunghwan.lee님! 커뮤니티 버전이라 그렇지는 않을것같아요! 정확한 원인 파악을 위해 작성주신 코드내용과 에러메세지를 jaytech108@gmail.com 으로 보내주시겠어요?
- 0
- 2
- 62
질문&답변
2024.09.22
클린한 아키텍쳐에 관하여
안녕하세요 gotjd9773님 질문 남겨주셔서 감사합니다 ☺ 넵 말씀하신 것처럼 하위 계층에서 controller의 dto를 참조하는 것은 지양하는 것이 맞습니다. 이는 계층 간 의존성을 높여 코드의 결합도를 증가시키기 때문에, 저 역시 실무에서는 이러한 접근을 피하고 있습니다. 다만, 강의에서 언급드렸듯이 과제 특성상 제한된 시간 내에 구현해야 하기 때문에 , 재사용성을 통해 구현 속도를 높인 부분 이라고 이해해주시면 될 것 같아요! 시간적 여유가 있다면 mapper등을 통해 각 계층에서 데이터를 변환하여 전달하여 , 계층 간 의존성을 더욱 깔끔하게 분리할 수 있습니다. 만약 면접에서 이 부분에 대한 질문을 받으신다면, 당시 선택의 이유와 판단 근거를 잘 설명해주시면 충분합니다 😄
- 1
- 2
- 42
질문&답변
2024.09.20
LS-3-multi-module 진행하다 에러발생하여 문의 드립니다.
안녕하세요 seunghwan.lee님 ☺ 몇가지 원인이 있을 수 있는데요, 가능성 있는 부분을 먼저 전달드립니다! maven bom 버전 확인 : dependencyManagement 내의 버전에 오타가 있는지 확인해주세요! gradle refresh : ./gradlew build --refresh-dependencies 를 사용하시거나 혹은 ide내에서 Invalidate Caches/Restart 를 눌러서 재시작을 해보시는걸 추천드립니다. 코드일치여부 : 모든 gradle파일의 구성이 강의자료와 똑같이 일치하는지, 번거로우시겠지만 한 번 더 확인 부탁드립니다 🙏 그래도 안된다면 다시 말씀부탁드리겠습니다. 감사합니다!
- 0
- 2
- 52
질문&답변
2024.09.16
멀티모듈 구성에서 하위 모듈은 java 모듈로 하는 이유가 궁금합니다.
안녕하세요 gotjd9773님 질문 남겨주셔서 감사합니다 ☺ 실제 구현해주신 내용이 없어서 정확한 원인은 알기힘드나 추정하건데 두 가지 가능성이 있을 수 있습니다. 첫째, 스프링 프로젝트로 만들면 스프링 관련 의존성들이 자동으로 포함되는데, 이로 인해 다른 의존성과 충돌이 발생했을 수 있습니다. 둘째, 제 강의에서 bootJar설정을 기본적으로 false로 해두고 필요한곳에 true로 열어주는 방식을 사용을 했습니다. 스프링프로젝트는 기본적으로 실행가능한 jar파일을 만드려고하기때문에 충돌이 일어났을 수 있습니다. 원래의 습관대로 스프링 프로젝트로 작업하시려면 설정을 조금 바꿔줘야할 수 있겠네요 😃 (공식문서에 가이드가 있긴한데 https://spring.io/guides/gs/multi-module gotjd9773님의 상황과는 살짝 다른거같아서 참고가 될지는 모르겠습니다 😅 ) 편안한 추석되시고 궁금증이 해결이 되지 않았다면 다시 말씀 부탁드립니다 🙏
- 1
- 1
- 68
질문&답변
2024.08.27
포트폴리오 질문
안녕하세요! 질문 남겨주셔서 감사합니다. 😊 프로젝트에 어떤 기술을 적용할지는 프로젝트의 목표와 해결해야 할 문제에 따라 달라집니다. 중요한 것은 다양한 기술을 사용하는 것이 아니라, 프로젝트의 요구사항을 가장 효과적으로 해결할 수 있는 기술을 선택하는 것입니다. 따라서, 강의에서 다뤘던 기술보다 적게 사용할 수도 있고, 필요에 따라 더 많은 기술을 사용할 수도 있습니다. 단, “닭 잡는데 소 잡는 칼을 쓰는” 것처럼 과도한 기술을 사용하는것은 지양하시는게 좋습니다. 필요 이상의 기술을 적용하면 오버엔지니어링이 될 뿐만 아니라, 면접에서도 긍정적인 평가를 받기 어렵습니다. 중요한 것은 기술의 수가 아니라, 상황에 맞는 적절한 기술을 선택하고 이를 잘 활용하는 것 입니다. 꼭 기억해 주세요. 🙏 감사합니다!
- 0
- 1
- 97
질문&답변
2024.08.19
Readme 파일 작성방법
안녕하세요 걈쟈님~ 질문 남겨주셔서 감사합니다 ☺ README 파일은 프로젝트가 무엇을 하는지, 어떻게 사용할 수 있는지, 그리고 필요한 설정이나 설치 방법 등을 빠르게 이해할 수 있도록 적는것이 좋습니다. 과제제출시 명확한 README 요구사항이 없다면 임의로 작성하셔도 무방합니다. 다만 시스템구조 도식이 들어가면 더 좋을듯합니다. README 작성법에 대한 내용을 조금 더 보강하여 섹션5. 면접대비 - 작업검토 강의의 수업노트에 올려두었으니 참고부탁드립니다. 추가적인 질문이 있다면 편하게 남겨주세요 🙏
- 1
- 1
- 133