묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실습으로 배우는 선착순 이벤트 시스템
안녕하세요 질문 있습니다!
현재 카프카로 데이터를 보내기전에 redis를 사용하여 발급된 쿠폰 개수에 대한 동시성 처리를 해서 개수에 대한 검증 로직이 있다고 앞서 강의에서 얘기를 하셨습니다. 그러면 발급된 쿠폰 개수가 100개 되고 난 이후의 요청은 그냥 무시하면 되나요?쿠폰이 천개, 만개 이렇게 매우 많다면 쿠폰 발급에 대한 요청을 바로 DB에 저장을 하면 DB에 부하가 심해져서 카프카를 도입해 이러한 부하를 낮춘다고 이해를 했습니다. 궁금한 점은 DB에 대한 부하를 낮춰도 이벤트 시기에 수많은 사용자들의 요청으로 인해 서버 자체에 대한 부하는 굉장히 심할꺼 같은데 서버에 대한 부하를 낮추는 방법은 없나요?현재 흐름이 쿠폰 요청 -> 서버 -> reids에서 쿠폰 개수 확인 -> 카프카 -> 컨슈머 -> DB 인데 이러한 흐름을 요청 -> 서버 -> 카프카 -> 컨슈머 -> redis에서 쿠폰 개수 확인 -> DB 이렇게 바꾸는 방식은 어떤지 궁금합니다. 이런식으로 하면 서버쪽에서 카프카로 데이터를 비동기로 전송한다면 서버 자체에도 부하가 낮아지지 않을까 라는 생각이 들어서 여쭤 봅니다.redis streams나 래빗엠큐 같은 다른 기능들도 있는데 Kafka를 사용하신 이유가 궁금합니다.만약 쿠폰 발급이 100개처럼 적게 발급하는 시스템이라면 굳이 카프카를 도입을 할 필요가 없는건가요?publisher가 카프카로 데이터를 보내면 consumer가 바로 받아와서 DB에 처리를 하면 안되겠죠? 이렇게 처리를 하면 바로 DB에 저장을 하는 상황이니 DB에 부하가 심해진다고 생각합니다.현재 강사님이 알려주신 코드를 바탕으로 시스템을 구축하고 여기에 부하 테스트를 한다고 했을때 어떤 식으로 단계를 잡아서 부하 테스트를 하면 좋을지 조언을 해주실 수 있을까요 한번에 너무 많은 질문해서 죄송합니다.
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
교안으로만 공부해도 충분할까요?
팬심 또는 언젠간을 위해 강의를 전부 구매했습니다.구매 후 기본편 까지는 강의를 다봤거든요.그런데 교안을 너무 잘만드셔서 교안만 봐도 될꺼같다 라는 생각이 들더라구요.물론, 강의를 진득하게 듣고 이해하여, 그것을 체화하면 자바에 대해 더 깊게 이해할 수 있겠지만,문제는 역시 트레이드오프... 시간이 너무 많이 걸리네요. 자바 고급 2편까지 1달 반에서 2달 내로 끝내고 싶은데 강의를 들으면 도저히 그 시간을 맞출 수 없을꺼같아서 질문해봅니다.제목 그대로 교안만으로도 충분할까요?
-
미해결김영한의 실전 자바 - 중급 2편
Tree
혹시 스택,큐,set, hash등의 강의는 있는데, tree 에 대한 강의는 없는 것 같은데 다른 편에서 Tree 에 대해서 어느정도라도 다루어주시나요 ?
-
미해결Practical Testing: 실용적인 테스트 가이드
서비스단 private 메서드의 책임을 새로운 객체로 분리 시, repository 의존성 이슈에 대해
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 우빈님! 강의 너무 잘 듣고 있는 컴공과 대학생입니다!!이번 목차에서 말씀해주신 내용을 바탕으로 개발한 프로젝트에 테스트코드를 작성하기 위해 리펙토링을 하던 도중, 의문점이 생겨서 질문 드립니다.강의에서 말씀해 주신 것처럼, 서비스단의 private 메서드가 가지는 책임을 서비스단이 아닌 다른 객체로 책임을 위임하는 것이 더 객체지향적이라 생각해서 저도 똑같은 방식으로 리펙토링을 진행중입니다.그런데, Layered architecture 에서 서비스단이 레포지토리단에 의존하고 있고, 강의에서와 마찬가지로 레포지토리단에 의존하고 있는 private 메서드인 경우에도 이 메서드의 책임을 서비스가 아닌 다른 객체로 위임하는 것이 과연 괜찮은 건지에 대한 의문이 들었습니다.Layered architecture 를 따른다면, 서비스단만이 레포지토리에 대한 의존성을 가게끔 하는 것이 맞지않나 라는 생각이고, 또 레포지토리의 변경이 발생했을때, 변경이 확산되는 범위를 서비스단으로 국한시키는 것이 더 좋은 게 아닐까라고 생각합니다.강사님의 생각이 궁금합니다!! 답변 달아주시면 감사하겠습니다!
-
미해결파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
m_redirect_url에 대해 문의 드립니다.
영상이 이해가 잘 안되 몇번을 돌려봤습니다. 제가 이해하고 있는게 맞는지 알고 싶어 문의 드립니다.모바일에서는 콜백함수의 동작이 되지 않기 때문에, m_redirect_url 인자에 url 정보를 정의하면, 결제 페이지 이동 후, 자동으로 정의된 페이지로 이동이 된다check_url에 의해 order.pk, payment.pk 인자 정보를 받기 때문에 order_check은 별도의 추가 코드 없이 pc와 모바일에서 동일한 동작을 보장받을 수 있다.제가 이해하는게 맞는지 알고 싶습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 javascript 오류
[질문 내용]강의를 따라가며 실습을 진행하는 도중 다음과 같은 문제가 발생합니다. 코드는 그대로 복붙했고 intellij ultimate 사용중이며 스프링은 3.3.5버전입니다.혹시 위와 같은 현상을 해결하는 방법을 알 수 있을까요...? 아무리 검색해봐도 나오질 않습니다 ㅠㅠ
-
미해결
플러터에서 다른 컴퓨터에서 옮길때 전에 부모 디텍토리가 존재한다고 합니다
플러터에서 다른 컴퓨터에서 옮길때 전에 부모 디텍토리가 존재한다고 합니다 부모 디텍토리 캐시를 지우거나 현재 컴퓨터 디텍토리로 변경하는 법을 알려주세요 비디오콜 강의파일이 갑자기 작동이 안되요!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다.
문제를 보고 제가 직접 먼저 풀어봤는데 답은 맞게 나오는데 , 뭔가 좀 허술한 부분이 있을거 같아서요 ,코드 리뷰좀 부탁드립니다. function solution(a, b, c) { let cnt = 0; let sum = 0; let lt = (rt = 0); while (lt < a && rt < a) { rt++; sum += c[rt]; if (sum === b) { cnt++; lt++; sum -= c[lt]; } } return cnt; }
-
미해결파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
cancle에 대해 문의 드립니다.
코드의 내용을 보자면 admin에서 action을 이용해 여러개의 쿼리셑을 받아 각각을 한번씩 처리합니다.@admin.display(description=f"지정 주문결제를 취소합니다.") def make_cancel(self, request, queryset): for order in queryset: order.cancel("관리자가 주문결제를 취소했습니다.") self.message_user(request, f"{queryset.count()}개의 주문결제를 취소했습니다.")그런데 Order의 cancel()에서 orderpayment_set, 즉 manytomany 중계 테이블내 모든 관련한 결제 내역을 가져와 cancel을 시도합니다. 결제 가능 여부를 확인하는 코드에서 보자면def can_pay(self) -> bool: return self.status in (self.Status.REQUESTED, self.Status.FAILED_PAYMENT)두 가지 조건만 있습니다. 실패했거나, 성공한 경우 입니다. 때문에 DB에는 관련한 주문이 여러간의 실패 + 1건의 성공의 이력인데 굳이 모든 이력을 가져와 cancel을 하는 이유가 무엇인지 알고 싶습니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
구버전 영상 학습해야 하나요?
구버전 영상도 학습해야 하나요?
-
미해결그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
clusterrolebinding의 --namespace 옵션의 역할
[질문 하기]clusterrolebinding은 namespace와 상관없이 clusterrole을 바인딩 시키는데,공식문서(https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_clusterrolebinding/)에 보면 옵션중에 -n / --namespace가 존재합니다.이 옵션은 어떤 역할을 하나요?
-
해결됨디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비 강의(Encase/Autopsy)
EnCase를 사용할 수 없을 때 쓰기 방지 설정 문의
EnCase를 사용할 수 없는 환경이라서 문의드립니다. 어차피 이미징 할 때는 FTK Imager로만 하고, EnCase를 사용하지 않을 것이기 때문에,EnCase를 활용한 FastBloc SE 쓰기방지 설정은 하지 않고, 윈도우 레지스트리로만 해도 무방한지요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
선생님 교재요...
섹션 뒤로 갈 수록 좀 많이 심화인거 같은데... 28~35정도가 심화라고 생각하면 될까요? 저번에 1유형에서 0점이어서 지금부터 하고 있는데 자신감이 너무 떨어져요..ㅋㅋ ㅠㅠㅠ
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 동기화 매니저와 커넥션 풀
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]데이터 소스로 HikariDatasource를 사용하면트랜잭션 매니저를 통해 트랜잭션을 시작할 때 커넥션을 획득하게 되는데 이 때 획득하는 커넥션은 커넥션 풀에서 하나 가져와서 트랜잭션 동기화 매니저에 넘겨주는거죠?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
결측치가 포함된 object 컬럼의 레이블 인코딩
2025 시나공 빅데이터 분석기사 실기 교재를 가지고 공부하고 있습니다.p.245 / 04.데이터 전처리 / 레이블 인코딩 관련 문의입니다.결측치를 가지는 object 컬럼의 경우레이블 인코딩을 하는 경우 "결측치"를 하나의 값으로 분류하는 거 같습니다.이러한 경우 레이블 인코딩 후 결측치가 존재하지 않는 것으로 결과가 나옵니다. 문의)결측치를 포함한 object 타입의 컬럼의 경우결측치 변환 후 레이블 인코딩을 진행하는 게 맞는지?결측치와 관계없이 레이블 인코딩을 진행하는 게 맞는지?문의드립니다.
-
해결됨[7일완성]생각하는 데이터베이스모델링
12_논리적인 모델링(독립형,상속형PK)에서 질문드립니다.
안녕하세요!강의에서 수강취소의 경우 수강번호(AK)를 WHERE절로 삭제한다고 말씀하신 부분에 추가적으로 궁금한게 있어서 질문드립니다. 예를들어 수강취소를 한다고 할 때 수강 테이블에 DEL_YN이라는 컬럼이 있고 삭제의 경우 delete가 아닌 DEL_YN을 N에서 Y로 update한다면, 학생코드/과목코드/DEL_YN이 1/1/Y인 레코드가 여러개 있을 수 있고 1/1/N인 레코드는 하나만 존재해야할 것 같습니다. 제가 생각하는 방법이 정상적인 방법인지도 궁금하고, 또 이 경우에는 학생코드, 과목코드, DEL_YN=N 이렇게 3개를 묶어서 PK를 해야하는지 그리고 수강취소 예시에서 delete가 아닌 DEL_YN같은 값을 update해야한다면 보통 어떤식으로 제약조건을 추가하는지 말씀 부탁드립니다.감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
df.drop 문의
df = df.drop(cols,axis = 1)cols 변수가 예시에서는 [,]의 시리즈 형태인 것 같은데그럼 만약 age 열을 삭제하기 위해서 시리즈 형태로 만들어서df.drop(['age']) 로 하면 왜 안되는건가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
df.drop으로 열 바로 삭제 문의
여기서 age 열을 바로 삭제하려면 어떻게 코딩하나요? df.drop('age') ..?
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
RDMA 코드 질문
안녕하세요 🙂RDMA 코드 중에서, fifo의 출력으로 받아오는 ARLEN_r 이 어디에서 쓰이는건지 모르겠습니다 🤔 38장 2부 34분쯤에 이에대한 설명이 나오는데, "다음 transaction의 ARLEN이 셋팅된다" 하셨는데 어떻게 셋팅 되는건지 관련 코드를 못찾겠습니다..!그 외 r_burst_cnt_r 도 같은 맥락으로 어디에서? 이게 쓰이는건지 코드에서 찾을 수가 없어서 도움 요청드립니다!==================
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
삭제를 눌렀을때의 오류..
안녕하세요 강사님 영상으로 스프링을 처음 배우기 시작하여 공부 중인데 도서관 애플리케이션에서 사용자를 등록은 가능하나 삭제를 눌렀을때 서버 내부 오류입니다라는 내용이 나오는데요 에러 내용은 .. java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:186) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:161) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:107) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar:6.1.14]at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:936) ~[spring-webmvc-6.1.14.jar:6.1.14]at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:596) ~[tomcat-embed-core-10.1.31.jar:6.0]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar:6.1.14]at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar:6.0]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar:6.1.14]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar:6.1.14]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar:6.1.14]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar:6.1.14]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar:10.1.31]at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]이런 내용으로 출력이 됩니다. 도무지 해결할 방법을 찾이 못해 질문드립니다~