묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결죽음의 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 등)와 프링 인티그레이션 설정이 필수적이다.프링 인티그레이션 ->스프링 인티그레이션
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
게시글 조회 최적화 전략과 게시글 목록 최적화 전략 구분에 따른 정책수립/관리의 비용 관련 문의
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 선생님! 강의 알차게 잘 수강하고 있습니다.현재 90% 수강 완료하였는데, 어렵고 힘들게 여기까지 온 만큼 저의 역량도 비교할 수 없을 정도로 많이 성장한 것 같습니다.먼저 감사의 말씀을 드립니다.일단 현재 게시글 목록 최적화 전략 구현(64강) 강의를 수강 중인데, 이전의 강의 내용(게시글 조회 최적화 전략)과 비교하였을때 최적화 전략을 수립하는 과정과 관련하여 몇가지 의문점이 들어 질문드리게 되었습니다.의문점) - 게시글/카테고리에 대한 게시글 목록 모두 전략을 나누어야 하는가?의문점이 들었던 과정) - 일단 크게 보았을때, 게시글 내용에 대한 캐싱(articleId)과 게시글 목록(*특정 카테고리, board로 지칭)에 대한 캐싱(boardId)으로 내용을 나눌 수 있을 것 같습니다.- 여기서 드는 제 개인적인 생각은, (일단 전략의 당위성이나 세부적인 내용 상관없이) 캐싱전략을 너무 세세하게, 오히려 성능적 이점보다는 관리적 비용이 더 크게 소모되지 않을까 하는 염려가 들 정도로 배꼽이 더 큰 전략/관리방안을 각각 구분해놓는 것이 아닌가하는 생각이 들었습니다.- 예를 들어, 게시글 목록 최적화 전략의 경우 말씀하신대로 최초 목록 조회 진입 시 보여지는 내용이기도 하고 이는 모든 사용자에게 공통적으로 적용할 수 있는 정책이므로 관리의 당위성이나 책임이 명확하다고 생각하였습니다.- 하지만 게시글 조회 최적화 전략의 경우, 목록 최적화 전략을 수강한 이후에는 "게시글 조회"역시 어떻게 보면 그 게시글을 보고싶은 사용자 일부에 대해서만 보여지는 글이므로..지금처럼 모든 생성 글/댓글/좋아요에 대해 ArticleQueryModel 데이터를 생성하는 것이 비용효율이나 관리효율면에서 과연 올바른 방향인지 다소 의문이 들게 되었습니다. 또한, 이러한 전략수립의 당위성을 떠나서 각 조회기능별로 전략을 구상하는게(단건/목록 등) 수립은 가능하더라도 관리가 힘들 것 같은데, 실무적으로 관리가 가능할지 의문이 들기도 하였습니다.최종 질문)- 제가 올바르게 강의내용을 이해하지 못하여 질문드리는 것 일 수 있기에, 일단 제가 들었던 의문이 선생님께서 생각하셨을때, 타당한 의문일지 궁금합니다.- 타당하다면 아래와 같은 "게시글 단건" 조회 전략을 생각할 수 있을 것 같은데, 혹시 바람직한 전략이 될 수 있을지 고견을 요청드려보고자 합니다.- 또한 실무적으로 이러한 다양한 관리전략을 수립하게된 계기가 "성능문제" "사용자 패턴에 따른 문제점 예상" 등, 여러 문제 중 어떠한 부분이 가장 중요하게 작용하는지 궁금하여 질문드립니다.[단건 조회전략 구상 방안] 게시글 조회 전략을 만약 구상한다면(세부적인 전략구현은 생략)- 지금처럼 단건 데이터 생성마다 articleQueryModel을 구성하는 것이 아니라, 각 카테고리별 보여지는 1000개의 데이터에 대해 articleQueryModel 데이터를 구성한다. (*게시글을 보는 것도 결국 최신 1000개의 데이터에 대해서만 볼 것이기 때문이다.)- 인기글 데이터 생성 후 해당 인기글에 대한 articleQueryModel 데이터를 구성한다.(*인기글 데이터에 대해서만 단건 조회 트래픽이 몰릴 것으로 예상할 수 있기 때문이다.)읽어주셔서 감사드립니다.
-
미해결스프링 시큐리티 완전 정복 [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에는 최소한의 신원만을 포함하고 세부적인 프로필은 따로 조회하는게 맞다는 말도 있더라구요. 그래서 질문을 올리게 되었습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
물리샤드, 논리샤드 번호 질문입니다!
안녕하세요!다른 분 질문에 대한 답변을 보고 기본적인 의구심은 해소되었는데요. 혹시 몰라 확인차 여쭙습니다.09:38 피피티에서요.나머지 연산을 이용해서 물리샤드, 논리샤드를 구분하셨잖아요.제가 이해하기로 나머지가 0이면 1번 샤드, 1이면 2번 샤드...이렇게 의도하시려고 했던 것 같아요.https://inf.run/7i72V여기에서 답변해주신 것과 피피티의 샤드 번호 현황?이 달라서 조금 혼란스러웠습니다. 링크 답변을 보면 아주 간단한 샤딩 예시였지만, 물리 샤드가 두 개일 때 % 2를 적용하면 1번 샤드(나머지 연산결과 +1)에는 article_Id가 [2, 4, 6, 8]이 들어가고 2번 샤드에는 [1, 3, 5, 7]이 들어갈 테죠.논리 샤드 기준으로는1번 논리샤드 = [4, 8]2번 논리샤드 = [1, 5]3번 논리샤드 = [2, 6]4번 논리샤드= [3, 7] 1번 물리 샤드에는 1, 3번 논리 샤드2번 물리 샤드에는 2, 4번 논리 샤드(링크 답변과 동일한 분포)이게 제가 위의 답변을 강의 자료에 적용해서 이해한 샤딩 현황입니다! 실제 프로덕션에서도 이렇게 샤딩하는지는 모르겠지만 교육 목적 상 간단한 해싱이었어도 제대로 이해하고 넘어가고 싶었습니다.PPT만 보고는 나머지 연산이 어떻게 사용된 건지 이해가 안 됐는데 답변 보고 이해가 돼서 확인 차 질문드렸습니다.추가적으로 클라이언트는 논리 샤드만 알고 있다고 하셨는데 그럼 물리 샤드 번호는 물리적으로 나뉜 샤드를 구분하는 데만 사용하고 비즈니스 로직에서는 사용되는 일이 없을까요?감사합니다.
-
미해결실전! 스프링 부트와 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
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
여러 엔티티의 조합으로 리포트를 제공해야할 때
안녕하세요 실무에서 헥사고날을 적용 예정 중에 있습니다. 이미 DB 모델링이 되어 있고 하나의 우리 팀 시스템이 아닌 여러 팀의 시스템에서 같은 테이블을 바라보는 경우 헥사고날 적용은 어떻게 해야하는지 궁금합니다. 하나의 애그리거트로 만들 수 없는 여러 엔티티의 조합으로 조회를 할 경우, 예를 들어 백오피스에서 20개 이상의 조건과 각 조건이 여러 테이블에 나뉘어져있어 Join을 걸어야 할 경우의 도메인 모델과 리턴은 어떻게 해야하는지 궁금합니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
예제 빠진부분?
KILL-9: "이 구성이 매우 중요하다. Job 설정을 보면, logFileManagerStep()이 먼저 실행되고, 그 다음에 mergeOutputFilesStep()이 실행되도록 .next() 메서드로 연결되어 있다.없어도 뻔해서 이해되긴하는데,위의 예제에서 Job빈이랑 LogFileManagerStep빈(이건 일부러?) 빼먹은듯?KILL-9: "이 구성이 매우 중요하다.로 검색하면될거야------그리고 그냥 궁금한건데,이번강의챕터가 컨셉자체는 맘에드는데(코드랑 내용이랑 같이 스토리넣어서 말하는거)인프런 강의 시스템상 너무 보기힘들지않아?부록 2: 전장 구축 - Redis to MongoDB 데이터 이관 작전 환경 설정같은거보면,나는 가로휠이 있어서 괜찮았는데 가로휠마우스가 없으면 마우스 드래그로 컨트롤하거나 키보드 화살표로 조금씩 밀어야하는데 이거 너무 보기 힘들거같아스크롤바도 내용화면이 한페이지를 넘어가면 안보이고 그래서다음거 스카이넷보고서인지 그런식으로 개행을 넣던가 하면될거같긴해킬구<스카이넷 ?다음거 원격 파티셔닝 강의 대부분 그냥 서두보고 다 스킵할거같은데,@ConditionalOnProperty로 조건부 빈생성 관리하는거 스킵되는거 아까운데 이거나 줏어가라고 마지막 부록에 넣어줄만하지않음?나도 그냥 내용 대충 훑어만봤는데 저거하나는 건진거같아서
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Member와 MemberDetail 엔티티를 나누는 기준에 대해
안녕하세요.강의 정말 잘 들었습니다. 강의를 듣다가 궁금한 점이 있어 질문 남깁니다.Member와 MemberDetail을 별도 엔티티로 분리한 기준이 궁금합니다.관계가 1:1인 경우에는 엔티티에 너무 많은 필드가 있는 것이 아니면 하나로 관리하는 게 더 개발 편의성이 좋지 않을까? 하는 생각이 들기도 합니다. 실제로 회원 정보 수정 시에 닉네임, 프로필 주소, 자기소개를 한 번에 변경하도록 구현되어 있어, 두 엔티티가 함께 조회/수정되는 것처럼 보입니다.혹시 조회 성능 최적화를 위해 접근 빈도가 낮은 데이터를 지연 로딩하려는 의도인지, 아니면 회원의 본질적 속성(email, status 등)과 부가 정보(등록일시, 프로필 등)를 개념적으로 구분하기 위한 설계인지 궁금합니다.감사합니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?
쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?
-
미해결스프링 시큐리티 OAuth2
loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생
55강 수강 중 client credentials 방식으로 변경 후 테스트 시 이런 에러가 발생합니다. 왜 그런걸까요 ㅜㅜ
-
미해결스프링 배치
스프링 배치 버전 질문
강의에서 사용되는 버전은 Spring Batch 2.5.1이고 최신 스프링 배치는 6 버전 대까지 나온걸로 알고있습니다.그리고, 얼핏 보니 deprecated된 클래스들이 꽤 있던것같은데 (예를들면 SimpleBatchConfiguration 제거, JobBuilderFactory 제거 등), 알아보니 이제 사용자가 더 사용하기 편해졌다(?) 정도인것같습니다. 그래서 질문은 지금 이전버전의 동작방식을 이해해도, 앞으로 나오는 버전들의 동작방식은 그대로인지 아니면 다시 새롭게 배워야할 부분이 많은 지 궁금합니다!
-
해결됨K6로 배우는 Spring Boot 부하 테스트 입문
인프럭스에 데이터는 누가 넣는지
인프럭스에 데이터는 누가 넣는지?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
핵사고날 아키텍처 책을 추천해주실 수 있으실까요??
안녕하세요 토비님언제나 헥사고날 아키텍처는 무엇이고 이걸 적용한다는 것이 왜 좋고 왜 필요하다는 것인지궁금했습니다. 이번 강의를 통해서 대략적인 흐름 어떻게 적용할 것인지 어떤 방향으로 작업 해야 하는지 살짝 이해할 수 있었습니다 조금 더 이해도를 높이고 싶은데.. 혹시 토비님께서 추천하시는 서적이 있으실까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@PostMapping("/members/new")가 동작하지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 올바르게 작성한 것 같은데 등록 버튼 클릭 시 홈으로 돌아오는 것도, sysout 내용이 콘솔에도 찍히지 않습니다 ㅜㅜ
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
댓글 내용 조회 시 어떤 방식을 선택하실까요?
게시글 조회 기능을 확장하려고 할 때 댓글을 조회하는 방향에 대해 고민이 있어서 질문 남깁니다.게시글 하나를 보는 페이지로 사용자가 이동해서, 게시글의 내용과 댓글들까지 이동한 페이지에서 그려야 할 때 게시글 정보와 해당 게시글의 모든 댓글을 가져오는 기능을 신규로 추가하려고 합니다. 해당 기능의 구현에 대해 2 가지 방향을 고민해봤습니다.게시글처럼 댓글까지 캐싱하는 방법Hot data 로 캐싱된 게시글들의 댓글들을 캐싱하는 것을 고민했을 때, 댓글은 게시글보다 훨씬 많은 양이기 때문에 캐싱에 대한 비용이 너무 커지는 것에 부담이 생기는 문제가 있다고 생각합니다.댓글에 대한 조회는 매번 댓글 서비스에서 조회하는 방법실시간으로 게시물의 댓글을 계속 조회한다면, 조회 서비스에 읽기 부하가 크게 걸릴 것으로 생각합니다. 두 방식 다 장단점이 있다고 생각하는데, 강사님께선 어떤 방식으로 게시글 + 댓글 조회 기능을 구현하실지 의견이 궁금합니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
강의 전에 학습할 내용
해당 강의를 수강하기 전에 사전 학습으로 준비하면 좋은 내용들(MySQL, Redis, Kafka, 시스템 설계 등)에 대해 추천해주실 만한 책이나 강의가 있을까요?저에게는 이 강의가 다소 어렵게 느껴져서, 관련 내용을 따로 공부한 후 다시 수강하고 싶습니다.혹시 강의 내용과 연관되어 쿠케님께서 좋다고 느끼셨던 자료나 도움이 되었던 책, 강의 등이 있다면 공유 부탁드립니다!
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegister 질문드립니다.
domain 패키지 안에 activate메서드가 있는데 포트 역할을 하는 MemberRegister 인터페이스에 activate메서드가 또 필요한 이유가 어떤건가요??activate는 외부로 공개될 필요가 없는거 아닌가용??
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberService 코드 작성 중 질의
안녕하세요 실습 중 컴파일 오류가 왜 발생하는지 이해가 안되어 질문 남깁니다. private final MemberRepository memberRepository; private final EmailSender emailSender; private final PasswordEncoder passwordEncoder;해당 코드에서 EmailSender와 PasswordEncoder 부분에서 Could not autowire. No beans of 'EmailSender' type found. 컴파일 오류가 발생합니다. final을 제거하면 컴파일 오류가 발생하지는 않는데요 하지만 github 페이지에 올려주신 소스코드를 보면 현재 영상 시점과 코드 구조가 100% 일치하지는 않지만 스프링 빈 관련 설정을 따로 해준 것 같진 않아보입니다만.. 토비님 영상에서는 오류가 없고 제 코드에서는 컴파일 오류가 나네요. 어떤 시점에 따로 Spring Bean 관련 설정이 되어있는게 있다던가.. 아님 제가 빼먹은 부분이 있다면 알려주실 수 있으신가요? 문제가 되는 부분 전체 코드 첨부드립니다. 시간되실 때 확인 부탁드립니다. 감사합니다. package com.ggne.splearn.application.required; import com.ggne.splearn.domain.Email; /** * 이메일을 발송한다. */ public interface EmailSender { void send(Email email, String subject, String body); }package com.ggne.splearn.domain; public interface PasswordEncoder { String encode(String password); boolean matches(String password, String passwordHash); }
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
서비스 디스커버리 종류
유레카 외에 최근에 자주 사용되는 서비스 디스커버리는 어떤게 있을까요?