묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결시작하는 PM/PO들에게 알려주고 싶은, 프로덕트의 모든 것
목표 설정 방법에 대한 질문
안녕하세요! 강의 잘 듣고 있습니다. 기능 출시 후 성과 지표를 확인했을때, 목표한 만큼 유저들이 이용하면 1차적으로 성공한 것으로 판단한다라고 설명해주셨는데요, 그렇다면 이 목표를 합리적으로 설정할 수 있는 기준이나 방법이 따로 있을까요? 제가 생각하기로는 예를 들어 신규 기능을 출시한다면 이전에 비슷한 신규 기능을 출시했을 때 데이터를 토대로 목표를 설정할 것 같은데요, 이 방법이 일반적인가요? 그런데 기존에 쌓인 데이터가 없거나 처음으로 제품을 출시하는 경우 등 과거 데이터와 비교가 어려운 경우, 통상적으로 어떤 방법을 활용하시나요?
-
미해결실전! Querydsl
n+1문제 해결
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에서도 EntityGraph에서와 동일하게 처리하려면 public List<OrderSearchMDDto> search(OrderSearch orderSearch) { return queryFactory .select(new QOrderSearchMDDto( order.id, order.member.name, order.orderDate, order.orderStatus, order.delivery.address )) .from(order) .join(order.member, member).fetchJoin() .join(order.delivery, delivery).fetchJoin() .where( nameLike(orderSearch.getMemberName()), statusEq(orderSearch.getOrderStatus()) ) .fetch(); }이런식으로 뒤에 fetchJoin()을 붙여주면 되나요?
-
미해결Real MySQL 시즌 1 - Part 1
GAP 락에 대한 질문 드립니닷..!
해당 강의와 직접적으로 연관있지는 않으나, Lock 관련하여 공부하던 중 성욱님의 MySQL GAP Lock (두번째 이야기) 글을 보게 되었습니다.우선 정말 많은 도움이 되었음에 감사드리며, 해당 글 관련하여 질문을 드리고 싶습니다. (SELECT FOR UPDATE와도 관련있는 내용이라, 이곳 게시판을 통해 질문 드립니다.)위 글의'왜 supremum 레코드를 잠그나요 ?' 단락에서, 8, 9 번째 과정을 보면 다음과 같습니다.8. 다음 페이지에서 id=137 보다 큰 (첫번째) 레코드인 id=138 읽기9. WHERE 조건에 일치하지 않으므로 잠금 걸지 않음그런데 그 아래에서 다음과 같은 내용을 말씀해 주십니다.'REPEATABLE-READ 격리 수준을 사용하는 MySQL 서버에서는 검색하고 스캔했던 인덱스 레코드를 잠근다는 아주 기본적인 규칙 때문에 잠금이 발생하고 있었던 것이죠. 사용자 데이터가 아닌 시스템 레코드(supremum)까지도 말이죠.'그러나 이 설명에 따르면, '왜 supremum 레코드를 잠그나요 ?' 에서 언급한 동작에 모순이 발생하는 것 같습니다.5,6,7 번 과정에서는 supremum record를 읽었기에 잠갔음에도 불구하고,8, 9번의 과정에서는 id=138 읽었지만 잠그지 않고 종료했기 때문입니다.위 내용이 모순된 것이라 가정하고,왜 supremum record에 Lock이 걸리도록 동작했는지에 대한 이유를 개인적으로 찾아보고 공부한 내용들에 기반하여 추측해 보았습니다. (아직 내용을 완벽히 공부하지 못해 틀린 내용이 있을 수 있습니다. 혹시 틀린 부분이 있다면 지적해주시면 감사하겠습니다!)MySQL 의 공식 문서의 내용에 따르면, Gap Lock은 Gap Lock 의 기준이 되는 index record 이전의 간격을 잠급니다.A next-key lock on an index record also affects the “gap” before that index record- MySQL 공식문서 - Next Key Lock그러나 Gap락이 특정 index record 이전의 간격을 잠근다는 위 설명에 따르면, 어떤 index의 가장 마지막 record 이후의 간격을 잠글 수 있는 방법이 없어집니다. (Gap Lock 은 이전 간격을 잠그는 것이므로)따라서, 마지막 record 이후의 값을 잠글 수 있기 위해 supremum pseudo record 를 두었을 것이라 예상합니다.supremum pseudo record(인덱스가 가질 수 있는 가상의 가장 큰 값) 에 대한 GAP Lock은 supremum pseudo record 이전의 간격들을 잠그기 때문입니다.이는 공식 문서의 다음과 같은 내용을 통해 뒷받침할 수 있을 것 같습니다.'Suppose that an index contains the values 10, 11, 13, and 20. The possible next-key locks for this index cover the following intervals, where a round bracket denotes exclusion of the interval endpoint and a square bracket denotes inclusion of the endpoint:'(negative infinity, 10] (10, 11] (11, 13] (13, 20] (20, positive infinity)For the last interval, the next-key lock locks the gap above the largest value in the index and the “supremum” pseudo-record having a value higher than any value actually in the index. The supremum is not a real index record, so, in effect, this next-key lock locks only the gap following the largest index value.- MySQL 공식문서 - Next Key Lock이를 바탕으로 '왜 supremum 레코드를 잠그나요 ?' 의 원인을 분석해보면 다음과 같습니다.- 우선 3,4 번 과정에서 id=137 인 index record를 읽습니다. - 이때 id는 PK 이므로 값이 유니크하기에, BETWEEN 136 AND 137 조건을 통해 137이라는 값을 찾았으면, 해당 값이 조건을 만족하는 가장 마지막 값이라는 것을 알 수 있습니다.- 따라서 id=138 을 더 이상 탐색하지 않고 종료하게 되는데, 이때 id=137은 해당 PK 인덱스(리프노드 페이지) 의 가장 마지막 값이므로, supremum 레코드를 이용하여 추가적인 간격을 잠구는 것이지 않을까 하는 생각이 들었습니다.위 부분에 대한 성욱님의 의견을 듣고 싶어 질문드렸습니다.---이와 별개로, 추가 궁금증이 있습니다.1. MySQL 공식 문서에서도 언급되었던 InnoDB performs row-level locking in such a way that when it searches or scans a table index, it sets shared or exclusive locks on the index records it encounters. 라는 문장에서 검색되거나 스캔된 의 의미가 잘 이해되지 않습니다.예를 들어, id를 PK로 갖는 어떤 테이블에서, id = 3 인 row 를 탐색하기 위해서는,B-tree의 root 부터 시작 ~ leaf 노드로 이동 후, leaf node의 페이지의 전체 데이터를 스캔해야 하지 않나요?예를 들어 id=3 인 record 가 들어있는 leaf 노드의 페이지에 id가 1 ~ 5 까지 있다고 하면,leaf 노드의 페이지로 진입하여 1부터 순차 탐색을 진행할 것 같은데, 그렇게 되면 1~5 까지의 index 값 사이에서 3을 탐색하는 데 1과 2를 먼저 찾을 것이므로, id가 1, 2, 3인 row가 모두 잠겨야 하지 않나 하는 생각이 들었습니다. 혹시 공식문서에서 언급한 검색 혹은 스캔된의 의미가, 조건에 사용된 인덱스가 걸린 필드 값만 확인하는 것은 포함하지 않는 것일까요?(ex - 위 예시에서 id가 1인 인덱스 확인조건에 부합되지 않으므로 넘어감. (스캔되었다고 보지 않음)id가 2인 인덱스 확인조건이 부합되지 않으므로 넘어감id가 3인 인덱스 확인조건에 부합되므로 나머지 값 읽어옴.)위 내용들에서, 제가 어떤 부분을 잘못 생각하고 있는지 알 수 있을까요?정말 좋은 강의와 글 공유해 주셔서 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티에서 기본형 대신 Wrapper 클래스를 사용하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]엔티티 컬럼 생성시 왜 long , int 값이 아닌 Long, Integer 와 같은 Wrapper클래스를 쓰나요?
-
해결됨시작하는 PM/PO들에게 알려주고 싶은, 프로덕트의 모든 것
취준생인 경우 데이터 분석 역량은 어떻게 쌓으면 좋을까요?
PM으로서 데이터 분석 역량 쌓기 연습을 해 보고 싶은데, 실제 제품의 데이터를 분석해보면 가장 좋을 것 같습니다. 그런데 취준생인 상황에서, 실제 제품의 데이터를 볼 수 있는 기회가 제한되어 있으니 구체적으로 고민하는 데 어려움이 있습니다. 이런 경우 활용해볼 방법이 있을까요? 간접적으로라도 실제 제품의 데이터를 확보할 수 있는 방법이 있을까요?혹은 추정치를 계산해보는 것도 도움이 될까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링부트 스타터로 스프링 프로젝트를 생성하는 이유가 뭔가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 선생님!Q. 스프링 강의인데 왜 스프링부트 프로젝트를 사용하는 건가요?(질문을 적고 보니 되게 따지는 것처럼 보이는데 아닙니다ㅠㅠ 단순한 궁금증입니다..) 일단 저는 스프링부트가 스프링을 더 쉽게 사용할 수 있도록 설정을 자동으로 해준다, 정도로 알고있습니다. 그냥 스프링부트로 스프링 프로젝트를 한다는 것이 조금 혼란스러워서 질문 남깁니다!
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
프로메테우스랑 로키스택 설치관련 질문
안녕하세요. 강의 잘 보고 있습니다.제가 현재 맥 환경에서 사용중인데요. 제가 기존에 사용하는 페러럴즈라는 VM프로그램이 있는데, 그거로 사용시에 대쉬보드설치는 완료했는데, 프로메테우스랑 로키스택의 경우는 설치가 되지 않더라구요. 현재 제가 작은 서버를 하나 가지고 있어서 네트워크를 고정아이피로 사용중인데요. 그래서 192.168.56.x를 사용할수 없어 제가 사용하는 ip를 기반으로 VM IP를 또한, 공유네트워크를 사용할 수 없어 기본어뎁터를 베이스로하는 브릿지 모드로 맞췄습니다. 빠른설치 게시글을 통해서 해당 부분 ip를 변경해서 대쉬보드 설치는 완료해서 띄울 수 있었는데요. 프로메테우스와 로키스택의 경우는 pending이 발생하거나 설치자체가 안되는지 상태를 알수없다는 STATUS만 나오게 됩니다. 그래서 깃허브에 올려놓으신 yaml파일을 읽어보았는데요. 프로메테우스와 로키스택에서는 ip를 명시하는 부분은 없더라구요?(다른 yaml파일에서는 발견함) 왜 이런 현상이 나타나는지 모르겠습니다. 크러쉬가 일어나지도 않아서 로그가 남겨지진 않구요... 뭐가 문제일까요?ㅠㅠ 그래서 UTM을 설치해서 실행했을때는 문제가 없이 동작했습니다. 다른 부분이라하면 ip만 강의와 다르게 했을 뿐인데 .yaml파일에 ip명세가 문제가 아니라면 뭐가 문제일까요?
-
해결됨시작하는 PM/PO들에게 알려주고 싶은, 프로덕트의 모든 것
전환율 관련 질문
지표 분석을 통해 의사결정하는 예시를 들어 주시면서, "우리 서비스의 전환율이 같은 업계 다른 회사 서비스에 비해 높은 편이라면, 전환율을 높일 수 있는 여지가 많지 않기 때문에 전환율을 높이는 우선순위가 높지 않다" 는 의사결정 흐름을 말씀해주셨는데요, 다른 서비스의 전환율을 알 수 있는 방법으로는 어떤 게 있나요?
-
미해결Airflow 마스터 클래스
airflow 자격증명 관련문의
안녕하세요 airflow 관련 자격증이 있는지 궁금합니다. 구글링 해보니 따로 안나오는 것 같아서요..!보통 어떤식으로 airflow 사용역량을 어필 할 수 있는지 궁금합니다 .
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
isLandMineCell() 메서드 질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 리팩토링한 MinesweeperGame.open() 메서드에 대해서 질문있습니다! private static void open(int row, int col) { if (row < 0 || row >= BOARD_ROW_SIZE || col < 0 || col >= BOARD_COL_SIZE) { return; } if (BOARD[row][col].isOpened()) { return; } if (isLandMineCell(row, col)) { return; } BOARD[row][col].open(); if (BOARD[row][col].hasLandMineCount()) { return; }수업을 따라오면서 isLandMineCell()은 Cell이 지뢰인지 확인하는 메서드이기 때문에 MineSweeperGame 클래스의 메서드가 아닌, Cell 클래스의 메서드가 되어야 open 메서드가 동일한 추상화 레벨을 갖는게 아닌가 하는 의문이 들었습니다. if (BOARD[row][col].isOpened()) ... if (isLandMineCell(row, col)) ...위 두 조건문의 추상화레벨이 통일되지 않다는 생각도 들었구요. isLandMineCell이 Cell 클래스의 메서드로 작성하지 않은 이유가 뭔지 궁금하고, 제가 가지고 있는 생각(추상화레벨 관련)이 잘못된 이유도 궁금합니다. 항상 친절한 설명 감사합니다 많이 배우고 있습니다:)
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
유입경로 리포트의 경과시간 문의
유임 경로에서 경과 시간이 10시간 이상 표시되는 경우가 있어 문의 드립니다.(A -> B -> C) 단계의 유입 경로를 분석 시 (A -> B) 구간의 경과 시간을 문의 드립니다.A를 최초 방문 후 이후 A를 재방문해 B로 이동한 경우 경과 시간은A 페이지 최초 방문 시간을 사용하는지 A 페이지를 재 방문한 시간을 사용하는지 문의 드립니다. 항상 도움을 주셔서 감사합니다.
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
openai 429 에러 문의
위와 같이 충전도 했고 사용한 current usage도 0 달러인데 429 에러가 뜹니다. 혹시 이유가 뭘까요?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
7.7 리뷰 삭제 실습
안녕하세요!등록되어 있는 리뷰를 삭제하기를 누르게 되면"Error: Internal Server Error" 에러가 발생합니다 백엔드 로컬 서버 콘솔에서는 아래의 사진과 에러 메세지가 뜹니다해결했습니다!
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
워드프레스가 어렵네요 ㅠㅠㅠ
80포트를 이미 사용중이여서50080을 사용중인데 (iptime에서 포트포워딩 되어 80으로 들어가므로 강의 코드는 계속 그대로 써도 상관없었습니다)워드프레스 로그인 하니까 50080포트가 사라지면서 80 포트로 되어서 로그인 페이지 처리가 안되는 것 같은데 워드프레스를 잘 모르니까 어디를 고쳐야할지 모르겠네요..아마 워드프레스에서 다시 서버 도메인으로 리다이렉션 시키는 부분이 있는 것 같은데 그때 80포트로 시켜버리나봐요..
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
Cell[][]BOARD 매개변수받기
강의 질문 있습니다![섹션4.객체지향패러다임] - SRP: Single Responsibility Principle 강의 - 14분38초경 코드28번줄 cosoleOutputHandler.showBoard(BOARD); 이 부분에서 해당 Cell[][]BOARD를 매개변수로 받고 showBoard(Cell[][] board) 사용되는 부분이 이해가 잘 안갑니다..! 흐름이 어떤식으로 진행되며, 어떤 과정으로 코드가 진행되는지 궁금합니다!
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 부탁드립니다.
kdh05157@gmail.com
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ConsoleInputHandler에서 왜 final붙여야 하는지
18줄 코드인 final을 붙여야하는 이유가 있을까요?
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
hello world 적용문제(vi, gedit 모두)
안녕하세요 🙂[1. 질문 챕터] : [HDL 0장] Hello World 프로그램 (맛비 세계에 오신 것을 환영합니다.) 3분 30초경[2. 질문 내용] : vi, gedit 두 가지방법으로 모두 시도해보았습니다.기존에 적혀있던 hello matbi's world 를 hello world 로 적은 후, esc -> :wq 했습니다.(vi) 하지만 출력은 계속 기존 메세지로 나오네요. .v 파일에 제가 수정한 내용이 적용이 안된 것 같습니다. vi 내용입니다.해당 내용 esc -> :wq 후에finish에는 ; 없는거 수정했습니다.빌드내용입니다. 아래쪽 보시면 [INFO] hello Matbi's world 가 나오고있네요[3. 시도했던 내용, 그렇게 생각하는 이유] : vi 입력 후 다른 화면으로 넘어가는데 그 중간 절차가 궁금합니다.
-
해결됨친절한 블렌더 - [LV.3] 캐릭터 애니메이션
Sculpt Mode의 대칭 기능 Symmetrize와 Mirror Modifier 관련 질문입니다.
안녕하세요. Sculpt Mode의 대칭 기능 Symmetrize를 사용해서 팔 반대 부분도 만들어주려했는데요~오리진 Crtl A - Apply All를 하지 않고 작업을 계속 해서 그랬던건지.. 팔 부분 대칭도 되지 않고 몸통 수정한게 반대쪽에는 적용이 되지 않아서요.이후 Alt Z 눌러서 몸통 반 지운 후 Mirror Modifier에서 얼굴 스포이드 찍어서 반대쪽도 똑같이 만들어준 후 Apply 했고 오리진도 Crtl A - Apply All 눌러줬습니다ㅠㅠ Symmetrize 사용하지 않고 Mirror Modifier로 작업해도 이후 수업에 지장을 받지 않는거 맞을까요?(차이점이 어떤건지도 궁금합니다..)쓰다보니 길어졌습니다ㅠㅠ 바쁘시겠지만 답 해주시면 감사하겠습니다~
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 생성자 메서드 of, from
정적 생성자 메서드의 메서드 명을 정하실 때 of 혹은 from 그 외 추가로 create 등등... 몇 가지 더 있는걸로 아는데, 그 차이가 제 입장에서는 되게 미세하기도 하고 잘 와닿지 않는데 강사님은 어떤 기준을 두고 메서드 명을 정하시나요??