묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨PM을 위한 데이터 리터러시(프로덕트 데이터 분석)
4-8. 지표 정의하기 연습문제 1~4번
먼저 연습문제 1,2,3번은 모두 비슷한 관점으로 배달 서비스의 특정 기능에 대한 사용성, 활성화 정도에 대한 지표라고 말씀해주신 것을 참고해서 3가지 문제는 모두 비슷한 관점으로 지표를 정의해봤습니다!제가 생각한 세 문제의 공통점은해당 기능에 대한 사용성 또는 '활성화'에 대한 정의가 필요하다.배달 앱의 퍼널 관점에서 보면, 3가지 문제에 나오는 기능들은 모두 기능 사용의 결과로 음식점 결과 리스트를 보여준다. (단, 배너 영역 기능과 동네 맛집 기능은 음식점 리스트가 아닌, 이벤트 페이지 또는 음식점 상세페이지를 보여줄 수 있음.) 저는 두 가지 공통점을 고려해서 기능의 활성화 지표에 대한 후보로 3가지 지표를 생각해봤습니다.클릭률 = 해당 기능 (또는 영역) 을 클릭한 횟수 / 해당 기능에 노출된 횟수페이지 전환율 = 해당 기능 클릭 후 결과로 나오는 음식점 리스트 중에 하나 이상을 클릭하여 음식점 상세 페이지로 이동한 횟수 / 해당 기능을 클릭한 횟수구매 전환율 = 해당 기능을 통해 주문 완료까지 진행한 횟수 / 해당 기능을 클릭한 횟수 셋 중에 어떤 지표를 선택할지는 활성화 지표를 보는 목적과 문제 정의에 따라 달라질 수 있습니다.활성화 지표를 기능에 대한 만족도에 관계없이 '단순히 해당 기능의 반응성'으로 정의한다면 클릭률만으로 충분하겠지만,활성화 지표를 '해당 기능을 통해서 나온 결과에 만족하여 관심이 가는 음식점이 하나라도 존재하는 것'으로 정의한다면, 2번의 페이지 전환율을 함께 활용하는 게 적절하다고 생각했습니다.3번의 구매 전환율의 경우에는 활성화 지표를 '해당 기능이 이후 구매 전환에 기여하는 정도'로 정의한다면 유의미한 지표가 되겠으나, 해당 기능으로 나온 결과에는 만족했더라도 음식점 상세페이지부터 주문 완료까지 이어지는 이후 퍼널에서 불만족하는 부분이 발생하여 주문 전환이 이루어지지 않는 케이스가 존재할 수 있다는 점을 고려해서 저는 기능의 활성화 지표로는 2번 페이지 전환율이 가장 적절하다고 판단했습니다. 위의 결론을 바탕으로 각 문제의 지표를 정리해보면,연습문제 1.메뉴 카테고리와 이런 음식 어때요 기능의 경우에는 활성화 지표를 페이지 전환율 = (메인화면에서 각 영역을 클릭한 후 나오는 음식점 리스트 중에 하나 이상을 클릭한 횟수) / (해당 영역을 클릭한 횟수)로 정의하고, 클릭률 = (해당 영역을 클릭한 횟수) / (메인 화면을 본 횟수)를 보조 지표로 정의했습니다.배너 영역과 동네 맛집 기능의 경우에는 음식점 리스트를 보여주지 않고 바로 음식점 또는 이벤트 상세페이지로 이동하는 경우로 가정했을 때, 활성화 지표를 클릭률 = (해당 영역을 클릭한 횟수) / (메인 화면을 본 횟수)로 정의했습니다. 단, 배너 영역의 경우에는 클릭하고 나서 이벤트 쿠폰 목록을 보여주는 상세 페이지로 이동하는 경우를 예시로 들었을 때, (클릭의 결과로 나오는 쿠폰 중에 하나 이상을 다운로드한 횟수) / (해당 배너를 클릭한 횟수)로 활성화 지표를 정의할 수도 있을 것 같습니다. 연습문제 2.검색 기능의 만족도(=활성화) 지표는 페이지 전환율 = (검색의 결과로 나오는 음식점 리스트 중에 하나 이상을 클릭한 횟수) / (검색 기능을 사용한 횟수) 로 정의했습니다. 유저가 검색 결과에 만족한다면, 검색 결과로 나온 음식점 중에 하나라도 클릭하여 해당 지표가 높아질 것이고, 그렇지 않다면 검색 결과 중에 하나도 누르지 않고 이탈하여 해당 지표에 낮아질 것이기 때문입니다. 연습문제 3.검색 필터 기능의 활성화 지표는 크게 두 가지 차원에서 정의해봤습니다.필터의 종류에 관계없이 검색 필터 기능 자체의 활성화 지표검색 필터의 세부 종류(ex. 배달 빠른 순, 배달팁 낮은 순, 주문 많은 순, 별점 높은 순)에 대한 활성화 지표두 가지 경우 모두 활성화 지표는 페이지 전환율 = (검색 필터 사용의 결과로 나오는 음식점 리스트 중에 하나 이상을 클릭한 횟수) / (검색 필터 기능을 사용한 횟수)로 정의했으며, 여기서 '검색 필터를 사용했다'라는 것은 디폴트 값인 '기본순'이 아닌 다른 필터를 선택하고 적용한 경우를 의미합니다.두 가지 차원으로 지표를 보는 이유는, 1번 지표의 경우는 검색 필터 자체의 활성화 정도를 보는 것이 목적이라면, 2번 지표의 경우에는 각 검색 필터의 세부 종류에 따라서 활성화 지표의 정도를 비교하여, 상대적으로 활성화 정도가 높은/낮은 필터를 확인하고 그에 맞는 실험을 시도하는 것이 목적입니다.예를 들어서, '활성화 지표(2번 지표)가 높은 필터의 순서대로 위에서부터 내림차순 정렬해서 보여주었을 때 검색 필터 전체의 활성화 지표(1번 지표)가 높아질 것이다.' 라는 가설을 세우고, A/B 테스트 등을 통해 검증한 결과를 토대로 검색 필터의 기능을 최적화할 수 있을 것으로 기대했습니다. 문제를 풀면서 질문이 하나 생겼는데, 만약 기능의 활성화 지표를 '해당 기능이 이후 구매 전환에 기여하는 정도'로 정의한다면, 밑의 두 가지 지표 중에 어떤 것이 더 적합한 것인지 궁금합니다!구매 전환율(CVR) = 해당 기능을 통해 주문 완료까지 진행한 횟수 / 해당 기능을 클릭한 횟수해당 기능을 통해서 주문 완료한 횟수 / 전체 주문 완료 횟수 일반적으로는 1번을 쓸 것 같은데 2번도 쓸 수 있는 유의미한 지표가 될지 궁금합니다! 연습문제 4. 배달 서비스에서 가장 중요한 지표결론부터 말씀드리면, 저는 가장 중요한 지표로 월 단위의 주문 완료 횟수를 선택했습니다. 그 선택의 과정을 로직트리로 그려봤는데요, 먼저 배달 서비스의 순이익을 늘리는 중요한 지표를 보겠다는 데서 출발하여 크게 매출을 늘리거나, 비용을 줄이는 파트로 나누었습니다.비용 감소의 측면에서는 라이더에게 지급하는 배달료나 운영비 등은 적정선 이하로 줄이기 어려운 비용이라고 생각해서 중요 지표 후보에서 탈락시켰습니다.매출 파트는 배민 서비스를 기준으로 전반적인 수익 구조에 대해서 찾아본 후에 작성했는데,배달 서비스의 주요 매출원은 크게 음식 배달로 발생하는 수수료와 광고 수수료로 나누었고,광고 수수료는 주문이 발생할 때마다 금액의 일부를 수수료로 얻는 '오픈리스트 광고'와 점주들이 지역별로 깃발을 꽂아서 광고를 노출시키는 대신에 고정 광고비를 내는 '울트콜 광고'와 그 외 광고로 나누었습니다.여기서 배달 중개 수수료와 오픈 리스트 광고는 '배달 주문을 통해서 얻는 매출'로 묶고,배달 주문을 통해서 얻는 매출은 주문 완료 횟수와 주문 한 건당 평균 주문 금액에 비례한다고 정의하여,두 가지 지표를 가장 중요한 지표의 후보로 선정했습니다. 두 지표 모두 중요하다고 생각하지만, 주문 완료 횟수가 더 중요하다고 생각한 이유는 평균 주문 금액이 아무리 많아도 주문 완료 횟수 자체가 적으면 매출에 의미있는 기여를 하지 못한다고 생각했기 때문입니다. 그에 반해 평균 주문 금액의 경우에는 일단 주문을 완료하면, 업체별로 지정한 최소 주문 금액만큼의 하한선은 보장되기 때문에 주문 완료 횟수가 더 유의미한 지표라고 판단했습니다. (하지만 이 부분은 실제 데이터를 보면서 판단하는 게 정확하다고 생각합니다.) '주문 완료 횟수' 지표에 대한 시간축과 차원에 대해서도 고민해봤는데,시간축의 경우에는 배달앱은 SNS처럼 하루에 수시로 접속하거나 주문하는 서비스는 아니며, 하루에 평균 1-2번 정도 주문하는 것이 일반적이라고 생각해서(이 부분도 데이터를 봐야 함), 일 단위로 주문 완료 횟수를 파악하는 것은 의미가 없다고 생각했습니다. 그래서 시간축을 좀더 넓게 잡아서 월 단위의 주문 완료 횟수를 중요 지표로 선택했습니다. 실제 배달 서비스의 VIP 등급도 월 단위의 주문 횟수를 기준으로 한다는 점에서도 유의미한 지표로 판단했습니다. '월 단위 주문 완료 횟수'를 늘리기 위한 방법은 퍼널의 관점에서 맨 끝 단계(결제 단계)부터 개선하는 것이 효과적이라고 생각했습니다. 결제 퍼널 개선을 위해서는 음식을 장바구니에 담았으나, 결제 페이지에서 이탈하는 고객과 이탈하지 않고 주문을 완료하는 고객을 분류하고 두 집단의 고객 행동 간에 어떤 차이가 있는지 데이터를 통해 파악하는 것이 필요합니다. 예를 들어서, 데이터 분석의 결과로 결제 수단을 선택하는 과정에서 이탈률이 가장 높다는 것을 발견했다면, 이탈의 원인에 대한 가설로 '원하는 결제 수단이 없거나 카드 등록 과정이 복잡하다.'를 세우고, 그에 맞는 액션 플랜(간편 결제 도입, 카드 등록 과정의 단순화 등)을 도출한 후, 실험을 통해서 결제 수단의 단순화가 이탈률 감소 -> 월단위 주문 완료 횟수의 증가로 이어지는지 확인해야 합니다. 쓰다 보니까 너무 장황하게 썼나 싶긴 하네요..😂글이 길어져서 일단 4번까지만 올리고 나머지는 다음 글로 올리겠습니다!문제 풀면서 느낀 점은 도메인이나 비즈니스 모델, 수익 구조에 대한 이해가 아직 부족해서 공부가 필요한 것 같네요ㅜㅜ 제가 많이 쓰는 서비스인데도 이 기업이 어떻게 돈을 버는지, 광고 수수료 구조는 어떻게 되는지, 어떤 수익원이 가장 많은 퍼센트를 차지하는지? 등등 모르는 것이나 봐도 헷갈리는 게 많네요..ㅋㅋ 그래서 연습문제 4번이랑 6번을 풀면서 자료조사를 가장 많이 하게 된 것 같아요ㅎㅎ카일 님이 기술 블로그에 쓰신 https://zzsza.github.io/diary/2020/08/02/how-to-study-business/이 글도 읽어봤는데 비즈니스에 대한 이해가 정말 필요한 걸 느끼게 된 것 같아요. 혹시 도메인 관련 공부 방법으로 더 추천해주실 만한 것이 있으면 알려주실 수 있을까요..?
-
미해결
python 숫자 출력
python에서 숫자를 출력할 때 print('{:10d}'.format('42'))을 실행하면 문자열이랑 다르게 왼쪽부터 시작하고 오른쪽에 공백이 생기는 것이 아닌가요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
팝업이 안뜹니다. AssertionError: Tkinter is required for pymsgbox
AssertionError: Tkinter is required for pymsgboxpip install tk 도 해봤지만 자꾸 에러메시지가 뜹니다. 구글링 해봐도 답이 안나와서 질문드립니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
yml파일에서 jpa설정을하고 에러가나요
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [boolean] for value [ture]이런 오류가나는데 뭐가 문제일까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
에러 발생 코드 관련 질문입니다.
//BookService @Service public class BookService { private final BookRepository bookRepository; private final UserLoanHistoryRepository userLoanHistoryRepository; private final UserRepository userRepository; public BookService( BookRepository bookRepository, UserLoanHistoryRepository userLoanHistoryRepository, UserRepository userRepository ) { this.bookRepository = bookRepository; this.userLoanHistoryRepository = userLoanHistoryRepository; this.userRepository = userRepository; } @Transactional public void saveBook(BookCreateRequest request) { bookRepository.save(new Book(request.getName())); } @Transactional public void loanBook(BookLoanRequest request) { // 1. 책 정보를 가져온다. Book book = bookRepository.findByName(request.getBookName()) .orElseThrow(IllegalArgumentException::new); // 2. 대출기록 정보를 확인해서 대출중인지 확인한다. // 3. 만약에 확인해는데 대출 중이라면 예외를 발생시킨다. if (userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)) { throw new IllegalArgumentException("이미 대출되어 있는 책입니다"); } // 4. 유저 정보를 가져온다. User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); // 5. 유저 정보와 책 정보를 기반으로 UserLoanHistory를 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } } 북서비스 코드인데요// 1. 책 정보를 가져온다. Book book = bookRepository.findByName(request.getBookName()) .orElseThrow(IllegalArgumentException::new);이 부분에서 // 2. 대출기록 정보를 확인해서 대출중인지 확인한다. // 3. 만약에 확인해는데 대출 중이라면 예외를 발생시킨다. if (userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)) { throw new IllegalArgumentException("이미 대출되어 있는 책입니다"); } 이 부분 처럼 "존재하지 않는 책입니다" 라는 메세지를 터미널(콘솔인가요? 이거 찍히는 곳 명칭이 터미널인지 콘솔인지 모르겠네요) 에 찍어주려면 어떻게 해야하나요? 그리고 첫 번째 경우와 두 번째 경우에 에러를 발생시키는 방법이 다른 이유는 무엇인지 궁금합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
맥북에서 에뮬, 시뮬레이터 오류들
안녕하세요, 수업 잘 듣고 있습니다.다름이 아니라 이번에는 제가 근무지 이동때문에데스크탑(윈도우)이 아닌 맥북(m1)으로 코딩을 공부하는 중입니다. 현재 가장 최신인 giraffe버전인데, 맥북에서 시뮬레이터로 코딩하면 크롬에서 스웨거도 잘 뜨고, 자동로그인도 잘되어 splashscreen페이지에서 바로 rootTab으로 넘어갑니다. 그런데 그 외의 서버에서 보내오는 이미지나 텍스트 데이터들이 전혀 뜨지 않아 무한 로딩을 합니다ㅠ 그래서 에뮬레이터를 돌려보려고 하니 파일 경로중에 알맞지 않은 문자가 있다는데, 아무리 봐도 '_'(아래바) 제외하고는 전혀 특수문자나 공백은 없습니다.. 에뮬도 안켜지고, 시뮬레이션에 데이터도 안떠서 답답하네요; 도움 구할 곳이 없어 도움 구해봅니다 ㅠ올 한해도 고생 많으셨고, 해피 크리스마스 입니다^^
-
해결됨(UPDATED) Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
train_test_split에 관한 질문입니다.
안녕하세요, 수업을 들으면서 궁금한 점이 생겨 여쭤봅니다. train_test_split() 메소드를 쓰실 때, x 값으로 ratings 을 사용하고, y값으로 user_id 를 사용했는데, 이 부분이 제 직관과 다른것 같습니다. x, y 값을 설정할 땐 학습하려는 데이터를 x, 결과를 얻고싶은 데이터를 y로 설정하는게 맞지 않나요? 즉 여기서는 x를 user_id, movie_id 등으로 설정하고, y를 rating으로 설정하는것이 학습 -> 예측 관계에 맞는것 같아 이부분이 잘 이해되지 않아서 여쭤봅니다. 또한 x데이터 안에 user_id가 이미 있는데, 예측하고자 하는 y를 user_id 로 설정하는 것 또한 잘 이해가 되지 않습니다! 혹시 이부분에 왜 그렇게 했는지 설명 부탁드려도 될까요?
-
미해결[실전]텍스톰 TEXTOM 실전 강의: 빅데이터 논문 작성을 위한 텍스트 분석/텍스트마이닝
강의 내용 참고문헌 질문있어요
선생님 안녕하세요.수업 재밋게 잘 듣고 있습니다.덕분에 쉽게 따라할 수 있을 것 같아요. 궁금한게 있어서요. 강의 섹션4 연구논문 관련 작성 강의에 사용한 "영어 인공지능 앱 리뷰"와 관련된 논문을 사용하셔서 강의를 진행해 주셨는데요, 해당 논문의 출처를 알 수 있을까요?
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
7강 언리얼 C++ 설계 인터페이스 18:40초 언리얼 인터페이스의 DoLess함수는 UFUNCTION사용 여부
7강 언리얼 C++ 설계 인터페이스 18:40초 언리얼 인터페이스의 DoLess함수는 UFUNCTION매크로를 사용하지 않아도 되나요?
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
ftp 공격과정에서 /cmd/unix/reverse (메타스플로잇 리버스쉘 페이로드)
공격대상서버는 linux를 사용하는데 unix 관련 리버스쉘을 페이로드를 사용해도 되는건 linux가 unix 기반이라 그런건가요?
-
해결됨Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
api 사용 시, error가 발생하는 상황은 어떻게 알 수 있을까요?
안녕하세요, 양질의 강의 덕에 조금씩 성장하는 게 느껴지는 요즘입니다. 감사합니다! 이번 강좌를 보면서, 의문이 생겼습니다.firebase에서 제공하는 api를 사용할 때, 어떤 상황에서 에러가 발생하는 지는.. 무엇을 보고 알 수 있을까요?예를들어, 오늘 수업에서 사용한 sendPasswordResetEmail() api를 사용하면서, 기등록된 이메일이 아니면 error가 발생할 것이고, 이를 catch하여 notification으로 '등록되지 않은 이메일입니다.' 라고 처리를 할 생각이었습니다.그런데, 막상 사용해보니 기등록된 이메일 주소가 아니더라도 sendPasswordResetEmail() api는 정상적으로 동작하더라고요. 그리고, 어떤 상황에서 이 api가 에러를 발생시키는지.. 찾지 못했습니다.. 이 일을 겪으면서 의문이 생겼습니다.어떤 api가 어떤 타입의 파라미터를 필요로 하는지는 문서를 통해 알 수 있었는데, 어떤 상황에서 에러가 발생한다는 것은.. 어디에서 찾을 수 있는지.. 궁금합니다! (+) 이메일 전송 작업 전, 우리 서비스에 등록된 이메일인지 여부를 확인하는 api를 firebase가 제공하는지.. 저는 발견하지 못했습니다. 혹시 지금처럼, 제가 원하는 성격을 갖는 api 제공 여부를 확인하는 건.. 어떤 방법이 있을까요?
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
nc로 21번 포트 연결과 ftp로 연결과의 차이점
바로 전 강의와 이번 강의에서 각각 ftp -v 공격대상ip , nc -v 공격대상ip 21 명령을 사용하는데 nc 명령으로 하면 name과 password 없이 로그인이 되고 help같은 명령이 사용가능한데 ftp 명령은 name과 password를 요구하네요. 결국 둘다 같은 ftp 서비스에 접속하는거 아닌가요? 근데 왜 ftp만 name과 password를 요구하고 nc는 요구하지 않죠?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
변수의 값과 리터럴
변수타입 1 강의에서 7:20 쯤 설명하시는 리터럴에 대해 이해가 잘 되지 않는 점이 있습니다. 변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이다. 따라서 리터럴 자체는 변하지 않는다. 라고 강의 내용과 강의자료에 설명이 되어있습니다. 위 내용이 무슨 뜻인지이해가 잘 안됩니다.개발자가 변수에 입력한 값이 리터럴 이고,, 리터럴을 수정하면 변수 값이 변하는 것 아닌가요?
-
미해결실습으로 배우는 OAuth 2.0 개념 원리, 그리고 해킹과 보안
https에서 http로 넘어가지 않을 때 사용한 방법입니다.
혹시나 저와 같은 문제를 겪으신분들이 계실까봐 버프스위터의 크롬으로 동작 시 http로 넘어가지 않는 경우 해결책입니다. 1. 크롬 설정설정 -> 개인 정보 보호 및 보안 -> 보안 -> 세이브 브라우징 항목을 [보호되지 않음(권장되지 않음)], 고급 항목의 [항상 보안 연결 사용] 해제 이전에 버프스위터를 사용하면서 버프스위터 SSL인증서를 자체적으로 사용했던 경우(버프스위터 프록시에서 import/export CA를 적용했던 분들만 포함입니다) 설정 -> 개인 정보 보호 및 보안 -> 보안 -> 인증서 관리 -> 신뢰할 수 있는 루트 인증기관 -> 발급 대상에서 PostSwigger 이라고 되어 있는 인증서 삭제 이것때문에 진도 못나가다가 결국 해결되어서 좋네요ㅎㅎ 혹시 다른분들도 겪으시는 문제일까봐 업로드합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티와 테이블 맵핑 네이밍 규칙 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 보면 엔티티 클래스에서는 pk 필드를 그냥 id 로 선언하고, 테이블에서는 테이블명_id로 설계하십니다.서로 같은 네이밍을 쓰지 않는 이유가 궁금합니다. 다른 비슷한 질문의 경우 아래와 같이 답변 주셨는데, 엔티티의 PK 필드는 ID로 네이밍 하는다는 규칙을 정한것 뿐이지 큰의미는 없다고 봐도 되는걸까요? order 엔티티도 order_id로 하는게 좋지 않나요? 그렇게 하지 않으신 이유가 order에 이미 memberId 필드가 있어서 그런걸까요? 굳이 order_id라고 명명하지 않아도 memberId와 구분되서 그런건가요? ID 컬럼 혹은 id 필드의 명명 규칙은 강의에서 통일성 있게 위에 정리한 기준에 맞게 작성한 것으로 보시면 될 것 같습니다.(orderId로 하여도 문제 없습니다. 자바에서 변수명은 카멜케이스가 관례입니다.)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Component를 InitDb에서 전역으로 해준 것 아닌가요?
@Component를 InitDb에서 전역으로 해준 것 아닌가요?다시 InitService에서 다시 @component를 해주는 이유가뭔지 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
FSoftObjectPtr과 TSoftObjectPtr차이점
9강 44분쯤 약참조를 위해 FSoftObjectPtr를 쓰시는데 이전에는 TSoftObjectPtr를 쓰셧던거같아, 구글에 검색해보니 TSoftObjectPtr는 FSoftObjectPtr를 UObject로 랩핑한 ptr이라고 하는데요, 그런데 굳이 이걸 명시적으로 나누어진이유가 있을것이고 교수님께서 사용하신 의도가 있는거같아서 궁금해서 여쭈어봅니다 해당부분에서는 FSoftObjectPtr 대신 TSoftObjectPtr를 사용해도 같은 결과를 내긴했습니다. 교수님께서는 그냥 예시를 위해 사용하신건지 아니면 특별한 이유가 있는건지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
글동록하는부분에서 등록을 하고나면 나이부분에 값이 00세라고들어가네요 이유가뭘까요??
객채셍성하고 등록화면부분올려드렷어요
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
로그인 적용확인 회차에대해서
위에 내용하고 겹치는듯한데 맞나요?... 로그인 적용확인 회차부터해서 뭔가 내용이 이어지질 않는듯한 느낌이듭니다....
-
해결됨실전! Querydsl
강사님 Pageable->OrderSpecifier 변환 질문이 있습니다.
강의는 스프링 데이터 페이징 활용 3 - 컨트롤러 개발시간은 6:33코드는for (Sort.Order o : pageable.getSort()) { PathBuilder pathBuilder = new PathBuilder(member.getType(), member.getMetadata()); query.orderBy(new OrderSpecifier(o.isAscending() ? Order.ASC : Order.DESC,pathBuilder.get(o.getProperty()))); List<MemberTeamDto> content = query.fetch(); }루트 엔티티가 현재는 member 입니다. 직접 테스트해보고 싶어서 임의의 엔티티 user를 만들고 left join으로 묶었습니다@Override public Page<MemberTeamDto> searchPageComplex(MemberSearchCondition condition, Pageable pageable) { JPAQuery<MemberTeamDto> query = factory .select(new QMemberTeamDto( member.id, member.username, member.age, team.id, team.name, user.name)) .from(member) .leftJoin(member.team, team) .leftJoin(user).on(team.id.eq(user.id)) .where(usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe())) .offset(pageable.getOffset()) .limit(pageable.getPageSize()); JPAQuery<Long> countQuery = factory .select(member.count()) .from(member) .leftJoin(member.team, team) .where(usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe())); for (Sort.Order order : pageable.getSort()) { PathBuilder pathBuilder; if (order.getProperty().equals("name")) { pathBuilder = new PathBuilder<>(user.getType(), user.getMetadata()); } else { pathBuilder = new PathBuilder<>(member.getType(), member.getMetadata()); } query.orderBy(new OrderSpecifier(order.isAscending()? Order.ASC:Order.DESC,pathBuilder.get(order.getProperty()))); } List<MemberTeamDto> content = query.fetch(); return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne); }left join user를 추가하고 조건은 user.id = team.id 로 했습니다.http://localhost:8080/v2/members?page=0&size=3&sort=name,asc&sort=username,asc실행되는 SQL은select m1_0.member_id, m1_0.username, m1_0.age, m1_0.team_id, t1_0.name, u1_0.name from member m1_0 left join team t1_0 on t1_0.team_id=m1_0.team_id left join users u1_0 on m1_0.team_id=u1_0.id order by u1_0.name, m1_0.username limit 0,3;단순한 경우에는 상관이 없지만 조인하는 경우에는 동작을 잘 안한다고 설명을 해주셔서 간단하게 테스트를 해봤는데 동작을 하더라구요 강의 이후에 오류가 수정되어 해결이 된건지 아니면 제가 테스트를 잘못한걸까요?아니면 강사님께서 말씀하신 경우가 이 경우가 아닌 걸까요 ?