inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

섹션12의 HTTP 서버1 - 시작에서 27분에 질문있습니다.

해결됨

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

다른 브라우저를 사용해야 테스트가 확실히 된다고 하셨는데 같은 브라우저일 때는 왜 테스트에 어려움이 있는걸까요? 어차피 쓰레드 하나로 순차 동기 실행 아닐까요? 궁금합니다!

  • java
  • 네트워크
  • 객체지향
열심인 참새 댓글 1 좋아요 3 조회수 227

cmd창.. 인텔리제이 소켓만들기 (실습)

미해결

Java TPC 실전프로젝트 (Java API 활용)

소켓 실습하고 있는데 cmd창에서 src까지 들어갔는데 자꾸 클래스를 찾을 수 없다 합니다..ㅠ 구글링도 해보았으나 뭐가 문제일까요... ㅠ

  • java
  • 객체지향
red9123 댓글 2 좋아요 0 조회수 202

[빠짝스터디] 3주차 리텐션 과제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

노션 링크로 업로드 합니다! https://qkffpsxkdlwm.notion.site/3-13a35e3a8bef8019b7a6d9c6abc72193?pvs=4

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
jihyun lee 댓글 1 좋아요 0 조회수 119

split 메서드에서 "|" 문자를 인식하지 못하는 문제

미해결

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

이유는 모르겠습니다만 제 컴퓨터에서는 DELIMITER 로 지정한 문자 "|" 가 split 메서드에서 작동하지 않더라구요. window를 사용하는데 그 때문인지는 모르겠습니다. 그래서 저는 DELIMITER = "\\|" 로 지정해 동작시켰습니다. 강사님과 split 메서드가 다르게 작동하는 이유는 뭘까요?

  • java
  • 네트워크
  • 객체지향
김근태 댓글 2 좋아요 0 조회수 222

[빠짝스터디 3주차 과제] 리텐션 분석

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

노션에서 작성했습니다! https://salt-baron-5c5.notion.site/3-13aa734e64b880a1a9a1e84a92fa3593

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
JYP 댓글 1 좋아요 0 조회수 150

[빠짝스터디] 3주차 리텐션 과제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

Notion 링크로 대체합니다. https://colney4844.notion.site/3-13a59b98d5db80438b7fcef0146771f6?pvs=4

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
이재헌 댓글 1 좋아요 0 조회수 143

영속성 컨텍스트 1차캐시 질문

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요! 질문이 생겨 질문글 남깁니다 :) 영속성 컨텍스트는 트랜잭션을 사용하면 생겨난다 라고 말씀 해주셨는데요. 이중에 1차 캐시 부분에 대한 내용이 궁금해서 코드를 작성하던중에 의아한점이 생겼습니다. @Transactional public List<UserResponse> getUsers() { User user = userRepository.findById(4L).orElseThrow(); user.updateName("test"); userRepository.findById(4L); userRepository.findById(4L); return userRepository.findAll() .stream() .map(UserResponse::new) .toList(); } 우선은 위 내용인데요, updateName을 호출한 시점에 변경 감지가 되어서 update문이 호출 되었는데, 이후에 로그로 찍히는 select문이 없더라구요. 1차캐시가 진행되면 그 이후에 객체의 값이 변경 되더라도 그 내용까지 다시 반영해서 캐싱 해주는걸까요? public List<UserResponse> getUsers() { userRepository.findById(4L); userRepository.findById(4L); userRepository.findById(4L); return userRepository.findAll() .stream() .map(UserResponse::new) .toList(); } 그리고 두번째 질문은 코드를 이런식으로 트랜잭션 어노테이션 없이 작성했을 때 인데요. 제 추측은 트랜잭션 어노테이션이 없으니 영속성컨텍스트가 생성되지 않을것이고 그에따라 select문이 3번 호출될것이다. 였는데 실행해보니 select문은 한번만 호출되더라구요. 나름대로 왜일까 고민해본 결론은 findById가 구현된 SimpleJpaRepository클래스에 붙어있는 Transactional이 영향을 주는건가? 싶긴 한데 명확한 답은 모르겠습니다 ☹ 1차캐시에 한해서는 트랜잭셔널과는 독립되게 영속성컨텍스트가 동작하는걸까요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
김영욱 댓글 2 좋아요 1 조회수 196

[빠짝스터디 3주차 과제] 리텐션 연습문제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

1. Weekly Retention WITH base AS ( SELECT DISTINCT DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), MONTH) AS event_month, user_id, user_pseudo_id, event_name, platform, event_params FROM advanced.app_logs ), user_visit_base AS ( SELECT user_pseudo_id, MIN(event_week) OVER (PARTITION BY user_pseudo_id) AS first_visit_week, event_week AS visit_week FROM base ), user_visit_weekdiff AS ( SELECT first_visit_week, DATE_DIFF(visit_week, first_visit_week, week) AS week_diff, COUNT(DISTINCT user_pseudo_id) AS visit_users FROM user_visit_base GROUP BY ALL ) SELECT first_visit_week, week_diff, visit_users, SAFE_DIVIDE(visit_users, FIRST_VALUE(visit_users) OVER (PARTITION BY first_visit_week ORDER BY week_diff ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS retention FROM user_visit_weekdiff 2. Retain User → New User, Current User, Resurrected User, Dormant User -- 한 달(30일)을 기준으로 구분하였다. -- 신규 유저: 최근 한 달 이내 새로 방문 -- 기존 유저: 최근 한 달 이내 재방문, 그 이전 한달에도 방문 -- 복귀 유저: 최근 한 달 이내 재방문, 그 이전 한달에는 방문 X -- 휴먼 유저: 최근 한 달 이내 재방문 X WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs ), user_first_last AS ( SELECT user_pseudo_id, MIN(event_date) AS first_date, MAX(event_date) AS last_date FROM base GROUP BY user_pseudo_id ), last_event_date AS ( SELECT MAX(event_date) AS current_date FROM base ), user_activity AS ( SELECT user_pseudo_id, event_date, LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date) AS next_event_date, CASE WHEN DATE_DIFF(LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date), event_date, DAY) > 30 THEN 1 ELSE 0 END AS dormant_history FROM base ), user_types AS ( SELECT u.user_pseudo_id, u.first_date, u.last_date, led.current_date, MAX(us.dormant_history) AS dormant_history, CASE WHEN DATE_DIFF(led.current_date, u.last_date, DAY) > 30 THEN 'dormant_user' WHEN DATE_DIFF(u.last_date, u.first_date, DAY) <= 30 THEN 'new_user' WHEN MAX(us.dormant_history) = 1 THEN 'resurrected_user' ELSE 'current_user' END AS user_type FROM user_first_last AS u CROSS JOIN last_event_date AS led LEFT JOIN user_activity AS us ON u.user_pseudo_id = us.user_pseudo_id GROUP BY u.user_pseudo_id, u.first_date, u.last_date, led.current_date ), first_week_and_diff AS ( SELECT ut.user_type, fw.user_pseudo_id, fw.event_date, DATE_DIFF(DATE_TRUNC(fw.event_date, WEEK(MONDAY)), DATE_TRUNC(ut.first_date, WEEK(MONDAY)), WEEK) AS diff_of_week FROM base AS fw JOIN user_types AS ut ON fw.user_pseudo_id = ut.user_pseudo_id ), user_cnt_by_type_and_week AS ( SELECT user_type, diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY user_type, diff_of_week ), retention_base AS ( SELECT user_type, diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER (PARTITION BY user_type ORDER BY diff_of_week) AS first_user_cnt FROM user_cnt_by_type_and_week ) SELECT user_type, diff_of_week, ROUND(SAFE_DIVIDE(user_cnt, first_user_cnt), 2) AS retention_rate FROM retention_base ORDER BY user_type, diff_of_week 3. retention이 높은 그룹? current user: 최고 0.41 (4~5주차) new user: 최고 0.11 (1,3주차) resurrected user: 최고 0.14 (9~12주차) dormant user: 최고 0.09 (3주차) 리텐션이 그나마 높은 그룹: current user current user, resurrected user 리텐션 분포의 경우 상승세 → 하강세 경향성을 보여 피크를 찍을 때 즈음 어떤 이벤트가 있었다고도 추측할 수 있다. 4. click_payment 이벤트를 중점으로 본 Weekly Retention? WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE 1=1 AND event_name = "click_payment" ), event_week_and_first_week AS ( SELECT DISTINCT DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date), WEEK(MONDAY)) AS first_week FROM base ), retention_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY day_of_week) AS total_user FROM ( SELECT DATE_DIFF(event_week, first_week, WEEK) AS day_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM event_week_and_first_week GROUP BY day_of_week ) ) SELECT day_of_week, ROUND(SAFE_DIVIDE(user_cnt, total_user), 2) AS retention FROM retention_base ORDER BY day_of_week

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
sjb2774 댓글 1 좋아요 0 조회수 159

ddl-auto 관련 질문.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요, 24강 수강중에 궁금한점이 생겨 문의 남깁니다. 야믈파일에 설정한 ddl-auto옵션 관련해서 validate로 값을 바꾼 뒤 몇가지 테스트를 해보았습니다. age필드를 완전히 제거 name필드를 named 명칭으로 변경. name필드의 column()안에 들어가는 속성값들을 변경. 이렇게 3가지를 해보았는데 실질적으로 테이블과 일치하지 않는다 라며 서버를 실행하지 않는 경우는 2번 name필드가 다른 명칭으로 변경되었을 때 한가지 경우더라구요. age는 nullable이라 아에 필드가 명시되지 않아도 일치한다고 판단하는걸까요? column 어노테이션 안에 들어가는 값들은 감지하지 못하는게 맞나요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
김영욱 댓글 2 좋아요 1 조회수 131

[빠짝스터디 3주차 과제] 리텐션 과제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

Notion으로 작성하여 링크를 첨부합니다. https://polite-vinyl-a61.notion.site/3-13a4994b207d804f969dc98e5bce9794

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
MS 댓글 1 좋아요 0 조회수 140

채팅기능 getAllUsers 질문드립니다.

해결됨

[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)

Error: async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding 'use client' to a module that was originally written for the server. 이라는 에러가 뜨고 유저리스트가 빈배열 리턴되는데 이런 경우 어떻게 처리해야하나요?

  • firebase
  • next.js
  • tailwindcss
  • react-query
  • supabase
Kunkun 댓글 2 좋아요 0 조회수 224

[빠짝스터디] 3주차 과제 제품 현황 분석 : 리텐션 분석

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

과제. 직접 retention 구해보기(주별 weekly) WITH base AS ( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_week_and_diff AS( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) AS diff_of_day, DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, event_date, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) ), user_cnt_and_diff AS( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY ALL ORDER BY diff_of_week ), retain_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_week) AS first_user_cnt FROM user_cnt_and_diff ) SELECT diff_of_week, ROUND(SAFE_DIVIDE(user_cnt, first_user_cnt), 2) AS retention FROM retain_base 과제. 월별 리텐션 쿼리 작성해보기 WITH base AS ( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_month_and_diff AS( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) AS diff_of_day, -- DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week DATE_DIFF(event_month, first_month, MONTH) AS diff_of_month FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), MONTH) AS first_month, event_date, DATE_TRUNC(event_date, MONTH) AS event_month FROM base ) ), user_cnt_and_diff AS( SELECT diff_of_month, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_month_and_diff GROUP BY ALL ORDER BY diff_of_month ), retain_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_month) AS first_user_cnt FROM user_cnt_and_diff ) SELECT diff_of_month, user_cnt SAFE_DIVIDE(user_cnt, first_user_cnt) AS retention FROM retain_base 리텐션 연습문제 Weekly Retention을 구하는 쿼리를 바닥부터 스스로 작성해보세요. # 답 -- Weekly Retention을 구하자! (Retention이란, 시간이 흐르면서 다시 제품을 사용하는지 측정하는 지표) -- 첫 방문 후 매주 재방문 비율(weekly retention)을 계산하자! WITH base AS ( SELECT DISTINCT ###### DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, ###### user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2023-08-31" ), event_week_and_first_week AS ( SELECT DISTINCT DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date), WEEK(MONDAY)) AS first_week FROM base ), retention_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY day_of_week) AS total_user FROM( SELECT DATE_DIFF(event_week, first_week, WEEK) AS day_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM event_week_and_first_week GROUP BY ALL ) -- ORDER BY day_of_week ) SELECT day_of_week, SAFE_DIVIDE(user_cnt, total_user) AS retention FROM retention_base Retain User를 New + Current + Resurrected + Dormant User로 나누는 쿼리를 작성해보세요 # 답 -- 신규 유저: 첫 활동일 기준 7일 이내 -- 기존 유저: 첫 활동일 기준 7일 이후, 마지막 활동으로부터 90일 이내 -- 휴면 유저: 마지막 활동일 이후 90일 이상 경과 -- 복귀 유저: 90일 이상 비활성화 이후 다시 돌아온 유저 WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs --WHERE event_date BETWEEN "2022-08-01" AND "2023-08-31" ),user_first_last AS ( SELECT user_pseudo_id, MIN(event_date) AS first_date, #OVER(PARTITION BY user_pseudo_id)를 넣으면 윈도우함수사용과 GROUPBY졸 사용 비교했을 때처럼 중복행이 생긴다 MAX(event_date) AS last_date FROM base GROUP BY user_pseudo_id ), last_event_date AS ( -- 원래라면 CURRENT_DATE()로 해야하지만, 앱로그 데이터의 마지막 날로 설정. SELECT MAX(event_date) AS current_date FROM base ), user_activity AS ( -- 90일 이상 제품을 사용하지 않았다면 1, 아니면 0 SELECT user_pseudo_id, event_date, LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date) AS next_event_date, CASE WHEN DATE_DIFF(LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date), event_date, DAY) > 90 THEN 1 ELSE 0 END AS dormant_history FROM base ) -- user_types AS ( SELECT DISTINCT u.user_pseudo_id, u.first_date, u.last_date, led.current_date, us.dormant_history, CASE WHEN DATE_DIFF(led.current_date, u.last_date, DAY) > 90 THEN 'dormant_user' WHEN DATE_DIFF(u.last_date, u.first_date, DAY) <= 7 THEN 'new_user' WHEN dormant_history = 1 THEN 'resurrected_user' ELSE 'current_user' END AS user_type FROM user_first_last AS u CROSS JOIN last_event_date AS led LEFT JOIN user_activity AS us ON u.user_pseudo_id = us.user_pseudo_id 주어진 데이터에서 어떤 사람들이 리텐션이 그나마 높을까요? 찾아보세요 WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs ), user_first_last AS ( SELECT user_pseudo_id, MIN(event_date) AS first_date, MAX(event_date) AS last_date FROM base GROUP BY user_pseudo_id ), last_event_date AS ( SELECT MAX(event_date) AS current_date FROM base ), user_activity AS ( SELECT user_pseudo_id, event_date, LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date) AS next_event_date, CASE WHEN DATE_DIFF(LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date), event_date, DAY) > 90 THEN 1 ELSE 0 END AS dormant_history FROM base ), user_types AS ( SELECT u.user_pseudo_id, u.first_date, u.last_date, led.current_date, MAX(us.dormant_history) AS dormant_history, CASE WHEN DATE_DIFF(led.current_date, u.last_date, DAY) > 90 THEN 'dormant_user' WHEN DATE_DIFF(u.last_date, u.first_date, DAY) <= 7 THEN 'new_user' WHEN MAX(us.dormant_history) = 1 THEN 'resurrected_user' ELSE 'current_user' END AS user_type FROM user_first_last AS u CROSS JOIN last_event_date AS led LEFT JOIN user_activity AS us ON u.user_pseudo_id = us.user_pseudo_id GROUP BY u.user_pseudo_id, u.first_date, u.last_date, led.current_date ), first_week_and_diff AS ( SELECT ut.user_type, fw.user_pseudo_id, fw.event_date, DATE_DIFF(DATE_TRUNC(fw.event_date, WEEK(MONDAY)), DATE_TRUNC(ut.first_date, WEEK(MONDAY)), WEEK) AS diff_of_week FROM base AS fw JOIN user_types AS ut ON fw.user_pseudo_id = ut.user_pseudo_id ), user_cnt_by_type_and_week AS ( SELECT user_type, diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY user_type, diff_of_week ), retention_base AS ( SELECT user_type, diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER (PARTITION BY user_type ORDER BY diff_of_week) AS first_user_cnt FROM user_cnt_by_type_and_week ) SELECT user_type, diff_of_week, ROUND(SAFE_DIVIDE(user_cnt, first_user_cnt), 2) AS retention_rate FROM retention_base ORDER BY user_type, diff_of_week current user의 1주차 리텐션은 0.11부터 시작해서 5~6주차에는 0.15까지 오릅니다. new user의 경우 1주차까지 밖에 리텐션을 구하지 못하고, 0.06입니다. resurrected user의 경우 1주차 리텐션은 0.04부터 시작해서 7주차에는 0으로 빠르게 감소합니다. dormant user의 경우 휴면고객의 리텐션을 구하는 것이 의미가 있는지 잘 모르겠지만, 1주차 리텐션은 0.05부터 시작해서 11주차까지 0으로 감소합니다. 리텐션이 그나마 높은 유저는 current user이고, 리텐션이 주마다 서서히 증가하거나 감소하는데 2주차에 오른 것으로 보아 기능 배포나 이벤트가 있지 않았을까 예상해봅니다. Core Event를 “click_payment”라고 설정하고 Weekly Retention을 구해주세요 WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE event_name = "click_payment" ), event_week_and_first_week AS ( SELECT DISTINCT DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date), WEEK(MONDAY)) AS first_week FROM base ), retention_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY day_of_week) AS total_user FROM ( SELECT DATE_DIFF(event_week, first_week, WEEK) AS day_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM event_week_and_first_week GROUP BY day_of_week ) ) SELECT day_of_week, ROUND(SAFE_DIVIDE(user_cnt, total_user), 2) AS retention FROM retention_base ORDER BY day_of_week app_logs 테이블에서 event_name이 click_payment인 것만 필터 걸어서 리텐션 구하기를 진행했는데 이렇게 푸는 것이 맞을까요..?

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
민영 김 댓글 1 좋아요 0 조회수 156

쿠폰 생성 에러 처리에 관해서 질문이 있습니다.

미해결

실습으로 배우는 선착순 이벤트 시스템

안녕하세요 강사님 강의 잘 봤습니다. 덕분에 kafka와 redis를 어떤식으로 사용할 수 있는지 많은 걸 엿볼 수 있는 느낌이었습니다. 강의가 다 진행되고 난 후 궁금한 점이 하나 있습니다. 쿠폰 생성 에러 처리 관련되어서 질문이 있는데, 만약 메시지를 수신하는 쪽이 아니라 발송하는 쪽에서 문제가 생겼다면 어떻게 해야하나요? 예를들어 redis에서 increment로 수량에 대해서 가져왔지만, 만약 kafka에 메시지를 보내는 것이 실패 될 경우 reids에 있는 값을 다시 하나 줄여야할 것 같습니다. 이런 경우 try catch 블럭으로 처리를 하는 지? 아니면 다른 방식으로 예외처리 하는지 궁금합니다.

  • java
  • docker
  • spring-boot
  • kafka
  • redis
홍혁준 댓글 2 좋아요 0 조회수 253

String클래스 리터럴 방식 관련 질문

해결됨

김영한의 실전 자바 - 중급 1편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. String 선언시 리터럴 방식으로하면 String Pool에 해당 문자열이 있는지 확인하고, 있다면 해당 문자열의 참조값을 사용하는 것으로 알고 있는데요. 반면 new 연산자를 이용하는 방식은 String Pool 을 거치지 않고 항상 새로운 String 객체를 생성하는걸로 알고있습니다. PDF 파일 2페이지에 이런 내용이 있는데요. 편의상 쌍따옴표로 문자열을 감싸면 자바 언어에서 new Stirng("hello") 와 같이 변경해준다. 리터럴 방식도 new 연산자를 이용하는 방식으로 자바가 변경해주는거라면 Heap 영역에 항상 새로운 String 객체를 생성하게 되는게 아닌지 궁금합니다. 감사합니다. 😃

  • java
  • 객체지향
  • string
pej4303 댓글 1 좋아요 0 조회수 155

[28000][1045] Access denied for user 'root'@'localhost' (using password: YES)

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

인텔리제이 내에서 데이터베이스를 실행하려고 하면 [28000][1045] Access denied for user 'root'@' localhost ' (using password: YES) 이와 같은 경고문이 뜹니다. 해결방안을 알고 싶습니다!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
kangaroo125 댓글 2 좋아요 0 조회수 275

13강 코드 작성 후 피드의 유저 데이터가 보이지 않는 문제

해결됨

Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)

안녕하세요, 강의 잘 듣고 있습니다! 12강까지는 다른 유저의 게시물이 잘 보이고, 피드 상단 선택 시 프로필까지 잘 넘어갔었는데, 13강을 끝까지 듣고 코드 작성 후 빌드를 했더니 아래 화면처럼 유저의 데이터가 불러와지지 않고, 프로필로 이동도 안되며 어떤 동작도 하지 않습니다 ㅜㅜ FeedCellView에서 계속 ProfileViewModel(user: user) 을 생성하는 부분에서 문제가 되는 것 같은데,, 어떻게 해결해야 할 지 모르겠습니다. 아래 오류 이미지도 첨부하겠습니다. 감사합니다

  • ios
  • firebase
  • swiftui
  • mvvm
댓글 3 좋아요 1 조회수 247

문제풀이 질문입니다.

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 처음에 제가 풀 땐 이렇게 해서 풀었는데 nullPointException 에러가 터졌습니다. 이런 에러가 터진 이유와 그리고 제 생각이 왜 틀린건지 설명해주시면 감사하겠습니다.

  • java
  • 객체지향
성호 댓글 1 좋아요 0 조회수 123

영한 강사님! 타입 이레이저 방식의 한계 부분 질문

해결됨

김영한의 실전 자바 - 중급 2편

제네릭 타입 이레이저 PDF 기준 30p 부분인데 컴파일 이후에는 제네릭 타입 정보가 존재하지 않기 때문에 instanceof나 new를 허용하지 않는다는건 잘 이해를 했습니다. 근데 밑에 코드를 보면 public void create() 부분이 일단은 public void create() {return new T();} 이 부분이 public T create() {return new T();}로 되어야하는거 아닌가요?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
조아름 댓글 2 좋아요 0 조회수 154

10 게시물 화면에서 조금헷갈려서요

미해결

Flutter로 SNS 앱 만들기

2:46 10 게시물 화면에서 제가 제대로 이해하고 있는지 알려주세요 조금헷갈려서요 feedId의미: a라는 유저의 게시물에 b유저가 좋아요. 눌렀다면 feedId는 b가 들어가고 feedLists의미: a라는 유저의 게시물에 b,c,d유저가 좋아요. 눌렀다면 feedLists는 b,c,d가 들어간다 이렇게 이해하면 되나요

  • flutter
  • android
  • firebase
  • dart
vadain2000 댓글 2 좋아요 0 조회수 158

final String과 int의 차이점

미해결

나도코딩의 자바 기본편 - 풀코스 (20시간)

13강 상수를 배우고 있는데요. final String KR_COUNTRY_CODE = "+82"; system.out.println(KR_COUNTRY_CODE); 에서 상수를 쓸건데 int가 아닌 final String 을 사용하는 이유는 + 82 때문에그러는걸까요? 숫자만 쓰는게 아니라 + 기호를 사용하기 때문에 문자열 String에 final을 붙여서 final String을 사용하는걸까요?

  • java
  • 객체지향
자두왕자 댓글 2 좋아요 0 조회수 177

인기 태그

인프런 TOP Writers

주간 인기글