묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 들으면서 웬만하면 repository 에서 entity 를 받아와서 이걸 Dto 로 변환해서 반환하게끔 처리하는 것을 배웠습니다.다만 실무에서 연관관계 매핑을 쓰지 않을 경우 어떤 전략을 취해야 하는지 모르겠어서 질문드립니다.단일 entity 만을 반환하는 경우 크게 문제되지 않지만, join 을 하게될 경우 entity 가 2개 이상이 필요한데 이 경우 Dto 를 쓸 수밖에 없는 상황이라고 생각됩니다.(혹은 querydsl 에서 Tuple 을 쓸 수 있다고 생각합니다) 이런 경우 어떻게 repository 에서 service 로 데이터를 올려주나요?
-
해결됨모든 웹 개발자가 봐야 할 단 한 장의 지도
강의내용 질문드립니다
안녕하세요!강의를 새로 구매했는데, 이전에 구매했던 강의 내용과 겹치는 것 같아수강하기 전에 미리 여쭤봅니다! [이전에 구매했던 강의]면접 전에 알고 가면 좋을 것들 - 신입 Java 백엔드 개발자편 [새롭게 구매한 강의]모든 웹 개발자가 봐야 할 단 한 장의 지도 혹시 새롭게 구매한 강의가 기존에 있던 강의 내용과중첩되는 내용일까요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빌드 후 libs 없음
[질문 내용]build까지 성공했는데 해당 경로로 들어갔을 때 libs가 없네요 이런 경우에는 빌드가 제대로 되지 않은건가요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
동시 접근 시 lock을 통한 성능 저하 문제
강의를 보다보니 궁금한 점이 있어 질문 남깁니다. 첫번째로 궁금한 점은 AbstractPagingItemReader의 코드를 doRead 함수 안에서 lock을 잡고 있으며, doReadPage가 끝난 후 lock을 푸는 것을 확인할 수 있었습니다..doReadPage에 실제로 paging 로직이 존재하니 사실상 paging 로직은 직렬로 수행되는 것과 다를 바 없을 것이며, 성능적으로 크게 증가하지 않을 것 같다는 생각이 드는데요.. (거의 직렬 처리와 유사할 것 같다는 생각이 드네요..) 사실상 병렬 처리라해도 Reader쪽에서 성능 향상이 거의 없다고 보면 될까요? 두번째로 궁금한 점은 AbstractPagingItemReader 상위 클래스인 AbstractItemCountingItemStreamItemReader의 read 함수를 보니 멤버 변수인 currentItemCount를 증가시키는 로직이 존재하더라구요.. 이 부분도 병렬처리에 문제가 될 것 같다는 생각이 들고 해당 클래스의 주석에도 "Subclasses are inherently <b>not</b> thread-safe." 라고 적혀있는 것으로 봐서는 문제가 존재하는 것 같은데요.. 그럼에도 불구하고 기능상 영향이 없으니 하위 클래스인 AbstractPagingItemReader는 thread-safe하다고 나와있는 것이라고 생각하면될까요??
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
혹시 다음 편은 언제쯤 오픈할까요?
안녕하세요 토비님. 강의 잘 수강하고 있습니다.아직 강의 초반부만 들었지만, 아주 감명깊게 수강중입니다.혹시 다음강의 오픈은 언제쯤 예상하고 계실까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
단일연산
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. final Stock stock = stockRepository.getByProductId(productId); stock.decrease(quantity); stockRepository.save(stock) public void decrease(final Long quantity) { if (this.quantity - quantity < 0) { throw new RuntimeException("재고 부족"); } this.quantity -= quantity; } 락을 건 이유는 decrease 로직에서 quantity를 줄이고 다시 저장했기 때문이라 생각했습니다. stock 상태가 코드레벨에서 변하기 때문에 발생하기 때문입니다.다만 코드레벨에서 변경하지 않고 디비에서 직접 변경한다면(update stock quantity=quantity-1 과 같이) update 자체가 배타락이기 때문에 굳이 락을 걸지 않아도 된다고 판단하였습니다. 그래서 단일 연산으로 해결할 수 없는 상황은 quantity 필드 뿐만 아니라 다른 필드에도 영향이 미칠 때라 생각했습니다. stock 필드에 soft delete 필드 delYn을 추가하고,코드 상에서 만약 재고가 0이면 delYn=True 로 바꾼다 이런 경우일 것 같은데 제가 생각한게 맞을까요? 단일 연산으로도 정합성을 유지할 수 있는데 왜 stock을 다시 저장하는지 모르겠습니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
DB 국제화에 대해서 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]예전에 국제화 강의도 들었습니다.고정값은 properties를 통하여 국제화를 한다고 알고 있습니다. 현재 프로젝트에서 국제화를 진행중인데고정값같은 경우는 프론트에서 국제화를 진행하기로 하였고 게시글같은 경우는 따로 번역을 하여서 백엔드에서 들고있기로 하였는데그렇게되면 기존 DB 구조를 바꿔야할것같아서요.어떻게 보통 실무에서 많이 하시는지 궁금합니다.인터넷에서는 정보가 없어서요.예시같은것을 들어주시면 이해가 좀 될거같습니다. 게시글 테이블로 title, content가 국제화가 된다고 하면 어떻게 해야할까요 ... 왜 그 방법을 사용하는지도 알려주시면 감사하겠습니다.그리고 영한님께서 답변하신 연관된 링크를 보았는데 이해가 가지 않는것도 있습니다.https://inf.run/MSJjn
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 gradlew.bat 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.프로젝트 지웠다가 처음부터 다시 해보기도 하고 질문글 따라 보면서 해봐도 에러가 떠서 어떻게 해야할지 모르겠어요.. .
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
서비스 단위 테스트 코드 작성
MemberFinder 와 같은 유즈케이스 단위로 통합 테스트를 분리 해서 작성하셨는데 단위 테스트의 경우에는 분리를 어떻게 하시나요? MemberService (Query, Modify) 가 없이는 코드가 작성이 되질 않아서 질문 드립니다.
-
미해결Cursor AI로 만드는 생산성 2배 Java Spring 개발
8강 강의영상 나오지 않습니다.
8강 강의영상 나오지 않습니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
domain 모듈에 entity를 정의한다고 했을때
안녕하세요. 궁금한게 있어서 질문 드립니다.domain 패키지에 entity를 위치 한다고 했을때 주석이라고 말씀하신 어노테이션 JPA @Entity를 만들어서 Member로 정의그리고 mongo DB도 필요해서 @Document를 정의해서 domain 패키지에 위치 시켜 Member로 정의이처럼 같은 도메인이 서로 다른 DB로 사용 될때 어떻게 도메인으로 정의해야할지 궁금합니다.그리고 이름이 중복되는 현상도 발생하기도 합니다. 그렇다고 OracleMember, MongoMember로 지을수도 없는것같습니다. 제 생각은 Member라는 도메인이 Domain 패지키에 별도로 나와서 adapter 안에 JPA Persistent의@Entity로 정의된 클래스와Mongo Persistent의 @Document로 정의된 클래스가 위치 되어야한다고 생각하는데 어떤 의견이신지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로젝트를 오픈 할 때 질문
프로젝트 오픈할 때 form 폴더를 선택하는 대신 form폴더 안에 있는 build.gradle을 Open as Project로 오픈하는 이유가 있을까요?PDF대로 따라하다가 문득 궁금해져서 질문합니다.
-
해결됨멀티 모듈 아키텍처로 구현하는 은행 서버 핵심 기능 [ Kotlin & Spring ]
멀티모듈 초기설정
지금 Swagger 적용하기 보고있는데Application.kt 파일 을 작성하는데스프링이 적용이안돼는지 어노테이션 이 원래 빨갛고 노랗게 떠야하는데 안뜨네요강의보고 따라하는중인데 어떻게해야될지 잘모르겠습니다
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
미스터 KILL-9 Processor 단 질문이 있다
안녕하신가 미스터 KILL-9항상 빠르고 친절한 답변 고맙다 이번에 회사 로직 작성중에 조금 막막한 부분이 있어 질문 하러 왔다 reader 엑셀 파일 읽어오고processor 에서 해당 엑셀 데이터 값을 가지고 dao 호출해서 검증하고, 깍고(가공)마지막으로 쓰기 처형하는데 작업을 하는데문제는 가공 단계에서 dao 를 직접 호출하면ExecutorType 이 simple 로 호출되고 쓰기 단계에서 batch 로 ExecutorType 실행되어 에러가 발생한다Cannot change the ExecutorType… 이렇게 말이다..그래서 일단 아래 코드 처럼 해결은 했어 우선 기존 코드는 PoiItemReader -> ItemProcessor<> (여기서 mybatis dao 호출 해서 검증작업도 함) -> MyBatisBatchItemWriter -> 에러 Cannot change the ExecutorType… 해결한 코드 PoiItemReader -> ItemProcessor<> (여기서 mybatis dao 호출 해서 검증작업도 함) -> JdbcBatchItemWriter-> (해결)그런데 이렇게 작성해도 되려나 싶네.. 그리고 String 문으로 쿼리 짜는것도 맘에 안들고..ㅠㅠ
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
오타발견
- 명백한 한계점 (단점): - 네트워크 대역폭 소모: 실제 데이터를 전송하므로 네트워크 부하가 극심하다. 데이터 건수가 많거나 크기가 크면 통신 자체가 병목이 될 수 있다. ("핵탄두 데이터 전송에 따른 통신망 과부하 주의!") - Manager 읽기 병목: Manager 혼자 모든 데이터를 읽어야 하므로, 읽기 자체가 느리다면 원격 청킹은 효과가 없다. ("중앙 정찰 위성의 스캔 속도 한계!") - 복잡성(감시와 디버깅의 지옥문): 역시 미들웨어(Kafka 등)와 프링 인티그레이션 설정이 필수적이다.프링 인티그레이션 ->스프링 인티그레이션
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
OIDC의 id token에 담긴 데이터에 대해
안녕하세요.질문 먼저 요약하자면,id token 에 scope에 포함된 유저 정보가 같이 포함되어 넘어오는게 일반적인지, idtoken 검증만 진행한 뒤 액세스토큰으로 따로 조회하는게 일반적인지 궁금합니다. 1년쯤 전에, 소셜 로그인의 흐름을 이해해보기 위해 스프링 시큐리티 없이 카카오, 네이버, 구글 로그인을 적용해본 적이 있습니다.원래 카카오와 구글은 OIDC를 지원했고, 네이버는 OIDC가 없었는데 최근에 추가되었더라구요.그래서 OAuth2 스펙으로만 구성된 네이버 로그인 코드를 OIDC를 적용한 코드로 수정하고 있었는데.. 그러다가 의문이 생겨서 질문을 드리게 되었습니다. 저는 여태까지 필요한 유저 정보의 scope를 "openid" 항목과 함께 프로바이더에 전달하고,id token을 프로바이더로부터 전달받고, 그걸 검증한 뒤 id token에 담긴 유저 정보를 사용하면 된다고 생각하고 있었습니다.실제로 카카오와 구글은 유저의 email 정보가 id token 페이로드에 담겨있었구요. 네이버 역시 https://nid.naver.com/.well-known/openid-configuration 의 메타데이터 중 scopes_supported 항목을 확인했을때 profile이라는 scope가 존재해서, 코드 요청할때 scope=openid+profile 을 파라미터로 전달했습니다.그런데 id token을 확인해도 유저의 정보가 나오지 않더군요. 처음에는 단순히 네이버가 이 부분을 미구현했나? 생각을 했는데, 좀 찾아보니 id token에는 최소한의 신원만을 포함하고 세부적인 프로필은 따로 조회하는게 맞다는 말도 있더라구요. 그래서 질문을 올리게 되었습니다.
-
해결됨카카오 개발자(면접관)와 함께하는 워크플로우 기반의 대용량 트래픽 처리 기법
중복 컨슘 방지에 대해서 여쭤보고 싶습니다!
만약 카프카를 사용하고 있고 처리 실패하는 경우 retry 큐로 보내서 재시도 하는 방식을 사용하고 있다고 가정하겠습니다. 만약 서버가 메시지를 받아서 처리하던 중에 리밸런싱이 발생했습니다. 메시지를 성공적으로 처리했고 커밋을 하려했지만 리밸런싱이 발생해 커밋을 하지 못했습니다. 그럼 그 메시지는 다른 컨슈머가 다시 받아서 중복으로 처리할 수 있을것 같은데 어떻게 방지를 할 수 있나요..? 찾아보니 인박스 패턴이라는것이 있던데 메시지를 받았을 때 상태를 저장하고 이후에 재시도를 해도 상태값이 있다면 패스하는 방식으로 이해를 했습니다. 하지만 위에 상황에서 첫 컨슘에서 메시지를 처리하고 있다가 리밸런싱이 발생했고 이후에 다시 처리할 때 상태값이 있어서 패스 했습니다. 하지만 이후에 첫 컨슘에서 처리중에 예외가 발생했다면 어떻게 처리를 해야할까요...?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타입 에러 시 BindingResult
지식 공유자님의 코드에서는 FieldError 생성자의 네 번째 파라미터(bindingFailure)가 전부 false로 놔둔 이유는 만약 타입 에러가 나서 바인딩이 실패한 필드는 컨트롤러 메서드의 코드를 실행하기 전에 이미 BindingResult에 들어가 있기 때문에 굳이 코드를 안 적어도 되는 것인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
멤버서비스테스트 부분에서 막힙니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 제목 그대로 오류가 나구요. 원본 코드를 옮겨봐도 의존성 문제인지 오류가 납니다 https://drive.google.com/file/d/1yRhCS0euBPt9YqDHOrYB4kE9A3-QcBjR/view?usp=drive_link
-
미해결
스프링이 기본으로 사용하는 in-memory 세션 저장소에 대한 자료를 얻고 싶습니다.
스프링의 기본 세션 저장소에 대해 깊게 이해하려 조사하던 도중 공식 문서만으로는 이해하기 쉽지 않아 질문글을 올려봅니다.참고하기 좋은 자료가 있을까요?