inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

3-7. 리텐션 쿼리 작성 및 질문(Weekly, Montly)

해결됨

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

안녕하세요, 강의 수강하면서 Weekly, Monthly Retention 쿼리를 작성해보았습니다! 그리고 질문이 하나 있는데, 첨부해드린 코드는 현재 첨부해드린 사진처럼 오류가 발생합니다. 그런데 Weekly Retention 쿼리를 전부 주석처리하면 Monthly Retention 쿼리는 정상 작동합니다. 반대로 Monthly Retention 쿼리를 주석처리하면 Weekly Retention 쿼리는 정상 작동합니다. 이 현상의 원리에 대한 감이 잡히지 않아서 질문드립니다! 그 외에 쿼리 관련해서 고칠 점이 있다면 편하게 말씀해주시면 감사하겠습니다! WITH base AS ( SELECT 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) diff_of_day DATE_DIFF(event_week, first_week, WEEK) diff_of_week FROM ( SELECT DISTINCT -- 일자별로 중복 제거 user_pseudo_id, -- DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, event_date FROM base ) ), first_month_and_diff AS ( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) diff_of_day DATE_DIFF(event_month, first_month, MONTH) AS diff_of_month FROM ( SELECT DISTINCT user_pseudo_id, --DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), MONTH) AS first_month, DATE_TRUNC(event_date, MONTH) AS event_month, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, event_date FROM base ) ) -- Weekly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS week_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_week) AS first_cnt FROM ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ) ) ORDER BY diff_of_week; -- 추가. Monthly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS month_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_month) AS first_cnt FROM ( SELECT diff_of_month, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_month_and_diff GROUP BY diff_of_month ) ) ORDER BY diff_of_month;

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
lchb0506 댓글 2 좋아요 0 조회수 188

n+1문제 해결

미해결

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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()을 붙여주면 되나요?

  • java
  • jpa
염경호 댓글 1 좋아요 0 조회수 211

엔티티에서 기본형 대신 Wrapper 클래스를 사용하는 이유

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 엔티티 컬럼 생성시 왜 long , int 값이 아닌 Long, Integer 와 같은 Wrapper클래스를 쓰나요?

  • java
  • jpa
바나나 댓글 1 좋아요 0 조회수 163

유입경로 리포트의 경과시간 문의

미해결

실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(26년 Update)

유임 경로에서 경과 시간이 10시간 이상 표시되는 경우가 있어 문의 드립니다. (A -> B -> C) 단계의 유입 경로를 분석 시 (A -> B) 구간의 경과 시간 을 문의 드립니다. A를 최초 방문 후 이후 A를 재방문해 B로 이동한 경우 경과 시간은 A 페이지 최초 방문 시간을 사용 하는지 A 페이지를 재 방문한 시간을 사용 하는지 문의 드립니다. 항상 도움을 주셔서 감사합니다.

  • Google-Analytics
  • Google-Tag-Manager
  • 데이터-리터러시
  • GA4
jiwon 댓글 3 좋아요 0 조회수 126

join 테스트 시 name ='name'으로 찍힙니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] db에는 제대로 name이 저장이 되는데 왜 출력을 하면 name = 'name'으로 찍히는지 모르겠습니다..

  • java
  • spring
  • mvc
  • spring-boot
딩띵 댓글 1 좋아요 0 조회수 92

강의자료

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

-요구사항 분석 챕터에서 중요한 부분 정리 - 통합 구현 등등 동영상아니고 문서형태 강의인데 이 파일들은 다운로드가 안되나요?

  • python
  • java
  • c
  • 정보처리기사
김유라 댓글 2 좋아요 0 조회수 118

기본태그설치에서 태그유형 관련 질문입니다.

미해결

실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(26년 Update)

기본태그 설치에서 태그 유형 선택에 GA4구성을 선택하라고 하셨는데요. 제 컴퓨터에는 GA4이벤트 밖에 안뜹니다. 그리고 이벤트 이름을 작성하라고 되어있는데 어떻게 해야 할까요...???

  • Google-Analytics
  • Google-Tag-Manager
  • 데이터-리터러시
  • GA4
홍지수 댓글 2 좋아요 0 조회수 156

배열 크기 자동으로 설정되나요?

미해결

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

입문편에서는 배열의 크기를 입력하지 않고 데이터를 직접 넣어서 자동으로 크기를 설정할 수 있었는데 int[] students; students = new int[]{90, 80, 70, 60, 50}; 강의에서 실습했던 코드 Student[] students = new Student[2]; students[0] = student1; students[1] = student2; 여기에서 new Student[2]; 의 부분을 new Student[]={student1,student2}; 이렇게 고치면 자동으로 크기를 설정 해 주나요?

  • java
  • 객체지향
dg845704 댓글 1 좋아요 0 조회수 141

같은 이름의 회원 저장

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 강의 내용 잘 수강하고 있습니다. 회원 웹 기능 -조회 까지 수강한 뒤 데이터베이스 연동을 아직 하지 않은 상태입니다. 코드를 모두 따라쳐서 정상작동은 하는 중인데, 웹에서 중복되는 이름을 저장 시 오류가 나면 앞부분 예외처리 부분에서 코드를 잘못 입력한 것일까요 ?

  • java
  • spring
  • mvc
  • spring-boot
wonderwall09in 댓글 2 좋아요 0 조회수 106

강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요

미해결

스프링 시큐리티 OAuth2

강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁 드려요 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • java
  • spring
  • spring-boot
  • oauth
forrest.choi 댓글 2 좋아요 0 조회수 163

회원가입 insert테스트가 안됩니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] join 테스트를 돌리면 insert가 제대로 안됩니다 (select로 확인 안됨) 테스트 후 스프링을 돌려 웹에 등록하면 시퀀스는 테스트 한만큼 증가했습니다

  • java
  • spring
  • mvc
  • spring-boot
댓글 2 좋아요 0 조회수 220

(기출) 2024년 2회 기출문제 수업자료가 강의랑 안맞아요

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

섹션7 (기출) 2024년 2회 기출문제 - 이론 포함 강의내용 0:53:26 자료 12페이지 람다 예제 1 만 있어요 예제 2가 없어요

  • python
  • java
  • c
  • 정보처리기사
마이동 댓글 2 좋아요 1 조회수 149

ExecutorService와 CompletableFuture의 차이점과 역할

미해결

백엔드 개발자 성능 개선 초석 다지기

안녕하세요! 비동기 코드에 관해 질문이 있습니다. ExecutorService 는 스레드를 관리하는 역할을 하는것이고 CompletableFuture 가 실제로는 비동기 요청을 처리하는 것으로 이해하였는데 맞을까요? Future 은 예외 처리를 할 수 없기 때문에 잘 쓰이기 않을까요??CompletableFuture 가 지원하는 기능이 더 많기 때문에 주로 CompletableFuture 를 사용하나요?

  • java
  • mysql
  • spring-boot
  • cache
  • index
EunKyung Hwang 댓글 2 좋아요 0 조회수 311

레디스의 동적 서버 리스트와 샤딩 범위 중복 문제 질문

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요, 강의 잘 듣고 있습니다. ^^ 분산 시스템에서 균등 샤딩 부분을 듣다가 궁금한 점이 생겨서 질문드립니다. 각 서버는 자신의 @Scheduled에 의해 레디스 서버로 조회하여 자신의 인덱스를 찾은 후 이를 기반으로 각자 서버 로컬에서 샤딩 범위를 계산하는 것으로 이해했는데요. 여기서 궁금한 점은 각 서버마다 @Scheduled가 동작하는 시점도 다를테고, 레디스의 저장된 서버 리스트가 동적으로 변하기도 하는데, 이러한 이유로 서로 다른 서버가 부분적으로 겹치는 샤딩 범위를 각자 계산하여 카프카로 중복 전송하는 시나리오가 발생하지는 않는 것인가요? ex) A의 @Scheduled 동작 시점에서는 서버가 3개 뿐이었지만 B의 @ Scheduled 동작 시점에는 서버가 5개로 늘어난 경우 서버 A가 계산한 자신의 샤딩 범위 0~20 서버 B가 계산한 자신의 샤딩 범위 13 ~ 27 답변 주시면 감사하겠습니다. 😊

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
알알이 댓글 2 좋아요 1 조회수 290

좋아요 비관적 락 적용 시 데드락 발생 관련 질문입니다..

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

spring boot: 3.3.2 mysql: 8.0.38 강사님과 동일한 버전 사용하고 있습니다. @Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); // likePerformanceTest(executorService, 3333L, "optimistic-lock"); } private void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType + " start"); long start = System.currentTimeMillis(); for (int i = 0; i < 3000; i++) { long userId = i + 2; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.currentTimeMillis(); System.out.println("lockType = " + lockType + ", time = " + (end - start) + "ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); } 위 테스트를 실행 시키면 pessimistic-lock-1 start lockType = pessimistic-lock-1, time = 5353ms pessimistic-lock-1 end count = 2991 pessimistic-lock-2 start lockType = pessimistic-lock-2, time = 6667ms pessimistic-lock-2 end count = 2991 count 가 3001이 안나오길래 서버 로그를 확인했는데, com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction 이렇게 데드락이 발생됐다는 로그가 출력됐더라구요.. 강사님과 똑같은 코드로 실행한거 같은데, 왜 데드락이 발생한걸까요?? 의심되는 부분은 @Transactional public void likePessimisticLock1(Long articleId, Long userId) { articleLikeRepository.save( ArticleLike.create(snowflake.nextId(), articleId, userId) ); int result = articleLikeCountRepository.increase(articleId); if (result == 0) { articleLikeCountRepository.save( ArticleLikeCount.init(articleId, 1L) ); } } 여러 스레드가 동시에 result == 0 조건에 진입해서 동일한 article_id 를 insert 하려고 하다가 충돌되는 과정에서 데드락이 발생된 것 같은데... 정확한 원인이 뭘까요? 제가 잘못 친게 있어서 그런걸까요..? PessimisticLock1, PessimisticLock2 둘 다 데드 락이 발생한 원인이 궁금합니다! 게시물 생성 시점에 미리 0으로 count를 생성 해놓으면 괜찮을 것 같은데, 같은 코드로 실행했는대도 결과가 달라 질문남깁니다..

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
chobo 댓글 2 좋아요 1 조회수 360

메인 메모리 질문

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] volatile를 통해 메인 메모리에서 값을 바로 확인 하는건데 그러면 메모리는 어떻게 값이 변경 되는 것을 알 수 있는 건가요? 메인 메모리에서 값이 변경이 안되면 volatile을 사용해도 변경 된 걸 알 수 없는거 아닌가요? 제가 너무 깊게 들어간걸까요...ㅜㅜ... 운영체제?를 공부해야 되는 부분일까요??,,

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
딩띵 댓글 1 좋아요 0 조회수 151

MemberRepository 질문 입니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @Autowired public MemberService (MemberRepository memberRepository){ this.memberRepository = memberRepository; } MemoryMemberRepository를 사용 할 수 있는 이유가 해당 구현체를 @Repository로 빈을 등록했기 때문에 @Autowired를 통해 MemberRepository 타입으로 주입받을 수 있는 게 맞을까요?

  • java
  • spring
  • mvc
  • spring-boot
딩띵 댓글 2 좋아요 0 조회수 170

윈도우 JAVA_HOME 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

G:\내 드라이브\인프런 - 스프링 입문 - 김영한\hello-spring>gradlew.bat 이렇게 실행했는데 아래와 같은 에러가 뜨는데 어떻게 해야 하나요? ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation.

  • java
  • spring
  • mvc
  • spring-boot
댓글 1 좋아요 0 조회수 471

설치 관련 질문

해결됨

실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(26년 Update)

안녕하세요. 현재 섹션 5공부 중으로 아무문제 없이 진행해왔습니다. 부끄럽지만, 갑자기 궁금해진 2가지 질문 드립니다. GTM head body 코드 설치 (자사몰ver) GTM으로 GA4설치하기 카페 24로 GTM 코드를 설치하였는데 추후 자사몰 사이트 를 카페24에서 추가 개설 했을 시 TEST사이트에 접목시킨 방법을 동일하게 카페24 에서 자사몰에다가 GTM 코드설치 진행 하면 되는건가요? 아니면 그때는 자사몰 웹 디자인 구성 의뢰를 맡긴 개발자에게 설치 진행 을 부탁하는건가요? ->(개발자에게 부탁하는 이유?의 혼동과 TEST페이지라 간단하게 설치가 가능했던건지? 의문에서 야기됨) 참고자료에 GTM으로 GA4설치하기를 보았습니다. > 구글태그 로 GA4 ID를 넣어서 자료를 GA4에 송신하는 법은 이틀 전 질문으로 깨달았 습니다, # 구글태그매니저를 활용한 구글애널리틱스4 기본태그 설치 (수업 노트 확인 필수!)챕터 >하지만 initialization-All pages 의 트리거 설정이유 가 페이지 뷰를 산출하기 위함 으로써 바뀐 권장사항임을 뜻하는건지 > GA4의 head body 태그 를 GTM (웹에설치된)을 통하여 웹에 GA4를 설치하기 위함 인지 모르겠습니다. (GTM설치와 GA4설치를 둘다 진행하라는 뜻?) (GTM으로 GA4를 설치하는 간편한 방법의 안내?하지만 왜?) 아무 문제 없이 진도를 따라가다가 의문이 생겨서 미련한 질문 남깁니다. 죄송합니다. 어느정도 답은 알 것 같지만 처음 GA를 공부하며 생긴 작은 의구심이 불안하여 여쭤봅니다. 항상 잘 듣고 있습니다. 감사합니다.

  • Google-Analytics
  • Google-Tag-Manager
  • 데이터-리터러시
  • GA4
최종혁 댓글 1 좋아요 0 조회수 124

인기 태그

인프런 TOP Writers

주간 인기글