inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

강의 11 질문

해결됨

카카오 면접관이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴

강의의 시퀀스 다이어그램을 보았을 때, 2가지 정도 질문 드립니다. 1) stateless 요청에서 상태값의 전달 관련 일반적으로 웹과 같이 stateless 한 서비스를 고려했을 때, 비동기 처리로 인해 주문서비스가 고객의 주문요청에 대해 (이후의 수행작업과 상관없이) 즉시 리턴하게 되는 것이 예상되는데요. (위 그림에서는 동기적인 flow 로 주문완료 응답을 end point 유저에게 전달하는 것으로 보이긴 합니다만) 주문 완료 페이지에서 주문한 상품 정보나 결제 수단의 상태값 전/후 를 보여주는건 어떤 식으로 동작하게 될까요? 가령, 실물 상품이 아닌 연속선상의 사이버 재화(ex: 네이버포인트 등)를 지급해야하는 입장에서 주문 이전의 재화 정보와 주문 요청 후(최종적으로 트랜잭션 완료된 후의) 증/감 재화 정보를 유저에게 보여주어야 할 수도 있는데, 뒷단의 비동기 작업(이벤트 subscribe)을 수행하는 스레드랑 최초 주문 요청을 받는 요청스레드가 다른 부분에서 고려해야할 것이 더 있을 것 같은데요. 얼핏 생각했을 때는, 사용자에게 즉시 내려주는 응답 페이지는 PENDING 에 해당하는 페이지 UI 로 (ex: 결제 진행중... 표시) 전달하고, 사용자 PENDING 페이지 (클라이언트)에서 몇초 단위의 주기적인 서버 요청 등으로 완료 이벤트를 조회 하도록 처리하여 완료페이지로 리다이렉션 처리되는 방식이 될까요? 이 때, 중간 상태값은 별도 캐시서버등에 저장을 해야 할 것이고요. (리다이렉션 되는 완료페이지와 PENDING 페이지의 state가 또 다르므로) 2) 메시지 브로커(카프카) 를 쓸 때 고려사항 주제랑 좀 벗어난 걸 수는 있는데요, 보통 메시지 발행의 정확성을 위해 CDC (Change Data Capture) 를 설정하는 것이 일반적인 방식으로 알고 있습니다. 다만, 현재 서비스중인 DB 의 설정이나 부하 이슈로 CDC 를 쓰지 못하는 경우에는 어떤 방식으로 처리가능할지가 궁금합니다.

  • java
  • spring
  • mysql
  • spring-boot
  • msa
HW J 댓글 2 좋아요 1 조회수 90

강의 첨부파일 문의

해결됨

카카오 면접관이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴

11번 강의처럼 첨부파일 내려받았을 때 시퀀스 다이어그램 이미지 등이 없는 경우가 종종 존재합니다. 첨부파일이 없는데 아이콘표시가 달린건지 누락된건지 알 수 있을까요?

  • java
  • spring
  • mysql
  • spring-boot
  • msa
HW J 댓글 1 좋아요 0 조회수 74

Ingress실습에 난관이 있습니다

미해결

대세는 쿠버네티스 (초급~중급편)

안녕하세요 강사님. Ingress실습환경을 구축을 위해 아래 Nginx설치 소스가 사용되고 있습니다. (카페 실습자료실 Ingress 페이지의 첫번째 명령문입니다) kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/install/refs/heads/main/ground/k8s-1.27/nginx-1.8.2/nginx-controller.yaml 위 배포파일을 열람해보면 정말 많은 속성들과 쿠버네티스 자원들이 사용되고 있는데요. 이 자원들에 대한 상세한 이해는 건너띄고 학습을 진행하는 것이 도움이 될까요?

  • docker
  • kubernetes
  • devops
  • container
창신동 장첸 댓글 2 좋아요 1 조회수 94

코테의 바이블(java) 와 해당 강의 차이

미해결

2026 코딩테스트 올인원 [JAVA]

코테의 바이블(java) 와 해당 강의 차이가 무엇인가요??? 커리큘럼은 비슷해보이는데 가격이 많이 달라서요!

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
송유진 댓글 2 좋아요 0 조회수 137

기본형과 참조형 타입의 차이 - 설명 질문

해결됨

[CS 기술면접 6] 말이 트이는 자바와 객체지향

7:27 에서 함수 내에서 사용되는 지역 변수 자체는 금방 사라지는데 이러한 값들을 스택이 아니라 힙에 저장하는 것이 유리하다. 라고 설명하셨는데요! 스택이 아니라 힙에 저장 -> 힙이 아니라 스택에 저장 이 맞는 표현인 것 같아서 설명이 잘못된 것인지 제가 잘못 이해하고 있는건지 질문드립니다.

  • java
  • 객체지향
  • 기술면접
  • 카카오공채-개발
  • 카카오공채-채용
호두리 댓글 3 좋아요 1 조회수 139

Image updater 1.0 이후 CRD 기반 변경 시 적용 방법 공유합니다.

미해결

쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)

강사님께서 잘 만들어주신 강의 자료를 그대로 실행해서 실습하는 것도 좋겠지만, 하나 하나 최신 버전으로 설치 구성을 해보면서 섹션 19까지 오게 되었습니다. (그래서 버전이 달라서 안되는 부분은 죄송해서 질문도 못드렸어요.. ^^;) 가장 어려웠던 부분은 loki의 promtail이 사라지고 alloy로 바뀌면서 설치 후 구성해주는 부분과 Image Updater가 annotation 기반에서 CRD 기반으로 바뀐 부분 같아요. 강사님께서 알려주신 annotation을 Image updater 1.0 이후 버전에 적용하는 경우 아래의 CRD를 apply 하면 동일하게 동작합니다. 현재 버전: 1.0.4 (name strategy가 alphabetical으로 변경되었어요.) apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: api-tester-2232 spec: applicationRefs: - images: - alias: <alias> commonUpdateSettings: allowTags: regexp:^1.1.1-[0-9]{6}.[0-9]{6}$ updateStrategy: alphabetical imageName: <Username>/api-tester namePattern: api-tester-2232 namespace: <argo namespace>

  • kubernetes
  • devops
  • argocd
  • container
  • helm
몽하 댓글 1 좋아요 1 조회수 122

파라미터 구분이 안되는지..?

미해결

김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네 [질문 내용] 안녕하세요. 영한님 항상 강의 잘 듣고 있습니다. 듣다가 궁금한 점이 생겨서 질문 남깁니다. 람다는 SAM에만 할당할 수 있다고 하셨는데 그 이유가 매서드가 여러개면 어디에 할당할 수 있을 지 알 수 없다고 말씀 하신 것까지는 이해했습니다. 이미 테스트를 통해 안되는 것은 확인했지만 인터페이스에 파라미터의 구성이나 갯수가 다른 함수가 정의될 경우에도 내부적으로 왜 안되는 지 궁금합니다..! public interface NotSamInterface { void run(); void go(int a); } 이런 경우에는 람다식도 달라지게 될텐데 왜 매핑이 어려운 걸까요..? 감사합니다.

  • java
  • 함수형-프로그래밍
  • lambda
  • optional
JuHee_Lee 댓글 1 좋아요 0 조회수 102

ReentrantLock 동작 원리에 대한 질문입니다.

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ReentrantLock에 대한 순서 보장에 대해 궁금증이 생겨 질문을 남깁니다. producerCond에서 대기하고 있던 스레드가 producerCond.signal() 호출로 깨어났을 때 ReentrantLock의 lock을 얻기 위한 대기 큐로 들어가는 것으로 알고 있습니다. 근데 이때 signal() 호출로 깨어난 A 스레드가 lock 대기 큐로 들어갔는데 앞에 이미 스레드 B가 있어서 B가 ReentrantLock의 lock을 얻어버렸다고 가정했을 때 A는 다시 producerCond.await() 호출로 producerCond 스레드 대기 큐에 들어가면 맨 뒤로 이동할 것 같습니다. 근데 저는 B는 await()에 넣고 A를 실행하는 순서로 순서를 보장하고 싶은데 이것도 더 세밀하게 구현을 할 수 있는 것일까요?? 제가 질문에 대한 설명을 잘 못해서.. 혹시 이해가 되신다면.. 답변해주신다면 감사하겠습니다!

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
닭이된기아 댓글 1 좋아요 0 조회수 115

@StepScope 또는 @JobScope와 JobOperator

해결됨

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

킬구형 아래는 step에서 ItemWriter의 jobParameter자리에 null을 넣는 방식으로 처리한거야. @Scheduled(cron = "0 0 19,22 * * *") fun runSampleJob() { jobOperator.start(sampleJob(),jobParameters) } @Bean fun sampleJob(): Job = JobBuilder("sampleJob",jobRepository) .start(sampleStep()) .build() @Bean fun sampleStep(): Step = StepBuilder("sampleStep", jobRepository) .chunk<String, String>(CHUNK_SIZE) .transactionManager(transactionManager) .reader(sampleReader()) .writer(sampleWriter(null, null)) .build() @Bean @StepScope fun sampleReader(): JdbcPagingItemReader<String> = JdbcPagingItemReaderBuilder<String>() ... .build() @Bean @StepScope fun sampleWriter( @Value("#{jobParameters['title']}") title: String?, @Value("#{jobParameters['content']}") content: String?, ): ItemWriter<String> = ItemWriter { chunk -> ...doSomeWrite } 위 코드를 빈 주입방식으로 변경하는 방법을 모르겠어. 빈 주입 방식으로 변경하면 아래처럼 되잖아? 이때 jobOpterator로 잡을 호출하는 부분까지 파라미터가 올라와버리는데 이걸 어떻게 해야할지 모르겠단 말이야~~! @Scheduled(cron = "0 0 19,22 * * *") fun runSampleJob() { jobOperator.start(sampleJob(**여기를 어떻게 처리하지?**),jobParameters) } @Bean fun sampleJob( sampleStep: Step ): Job = JobBuilder("sampleJob",jobRepository) .start(sampleStep) .build() @Bean fun sampleStep( sampleReader: ItemReader<String>, sampleWriter: ItemWriter<String> ): Step = StepBuilder("sampleStep", jobRepository) .chunk<String, String>(CHUNK_SIZE) .transactionManager(transactionManager) .reader(sampleReader) .writer(sampleWriter) .build() @Bean @StepScope fun sampleReader(): JdbcPagingItemReader<String> = JdbcPagingItemReaderBuilder<String>() ... .build() @Bean @StepScope fun sampleWriter( @Value("#{jobParameters['title']}") title: String?, @Value("#{jobParameters['content']}") content: String?, ): ItemWriter<String> = ItemWriter { chunk -> ...doSomeWrite } 새해 복 많이 받아 형~

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
스프링 댓글 5 좋아요 1 조회수 184

깃허브 코드

미해결

스프링 부트와 리액트로 구현하는 보안 JWT 로그인

강사님 혹시 44강 듣고 있는데 이거 프론트엔드 코드가 깃허브에 있는것과 다른 코드인데 어디서 볼 수 있나요?

  • react
  • java
  • aws
  • spring-boot
  • spring-security
KMC 댓글 1 좋아요 0 조회수 102

그럼 SOURCE나 CLASS는 어떤 경우에 사용하나요?

해결됨

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

특히 SOURCE는 소스 코드에만 남아있는거면 주석이랑 같은거 아닌가요?

  • java
  • 네트워크
  • 객체지향
jkyjong 댓글 2 좋아요 0 조회수 117

"49. 구독매니저 YAML 구조" 강의 kubectl apply 시 에러

해결됨

[2026 NEW] 기초부터 이해하는 쉬운 쿠버네티스 - 리소스편

안녕하세요, 현재 Window 11 환경에서 실습 을 진행하는데 실습 중 문제가 발생하여 문의드립니다. 49. 구독매니저 YAML 구조 강의의 02:09 때 kubectl apply -f . 명령어를 사용한 후에 계속해서 Pod 생성 시에 ImagePullBackOff, CrashLoopBackOff 가 발생합니다. 문제가 발생한 POD 는 다음과 같고, 문제를 일으키는 문제들은 공통적으로 아래와 같은 메시지를 갖고 있었습니다. (kubectl describe 사용)

  • kubernetes
  • msa
  • devops
  • infrastructure
  • container
식빵 댓글 2 좋아요 1 조회수 112

강의 순서가 바뀌었어요~

미해결

자바프로그래밍

12강과 13강 강의 순서가 바뀌었네요.. ^^

  • java
꿈꾸는농부 댓글 1 좋아요 0 조회수 44

강의 마지막 QueryDSL 사용 부분 질문있습니다

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

JPA를 사용하는 강의라고 하지만 QueryDSL에 대한 코드만 딱 보여주고 이게 어떤 dependency를 추가하고 build를 해서 사용해야한다는 등의 설명이 일절 없는것이 아쉽습니다. 강의 교재에도 해당 내용은 기재되어있지 않은데 왜 코드를 실제로 적용하는 부분에 대해서나 테스트 코드 작성에 대해서는 따로 언급이 없으신건가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이승병 댓글 2 좋아요 1 조회수 186

[섹션6 > sm-user] 에서 docker run 실행 부분이 생략된 거 같습니다.

해결됨

[2026 NEW] 기초부터 이해하는 쉬운 쿠버네티스 - 리소스편

안녕하세요, 강의 들으면서 실습을 따라하던 중에 흐름이 끊기는 부분이 생겨서 문의드립니다. 섹션6 > sm-subs 강의 에서 04:52 에 나오는 python test/api_test.py 를 성공시키려면 일단 sm-user container 를 실행시켜야 하는데, 해당 컨테이너를 run 하는 부분이 섹션6 > sm-user 강의에 없는 거 같습니다. 일단은 아래처럼 명령어를 실행해서 진행하고 있는데 맞을까요? cd sm-user docker build -t sm-user . docker run -d -p 5000:5000 --name=sm-user --network=sm-network -e DB_HOST=sm-db sm-user

  • kubernetes
  • msa
  • devops
  • infrastructure
  • container
식빵 댓글 2 좋아요 2 조회수 103

커리큘럼 관련 질문

미해결

2026 코딩테스트 올인원 [JAVA]

학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요. 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요. 편하게 질문주세요:) 직접 답변 드리도록 하겠습니다~ dp나 다익스트라 같은 알고리즘은 이번 강의에서는 아예 다루지 않나요? 기존 올인원 강의(파이썬 버전) 같은 경우엔 포함되어있던데, 혹시 자바 버전도 추가 또는 별도 강의 개설할 예정인지 궁금합니다!

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
에라토스테네스의체 댓글 1 좋아요 0 조회수 91

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 좋은 강의로 공부하고 있는 대학생입니다. 이번 영상에서 ItemService 클래스의 updateItem 메서드에서 값을 변경하는 부분을 각 변수에 대해 set 으로 접근하는 방법 대신 item 클래스 내부에서 change() 메서드를 선언 후 사용하는 방법으로 직접 수정해보려고 합니다. 그런데 만약 클라이언트에서 isbn과 author 값을 수정하고 싶다면, item 도메인에서는 두 변수에 대한 선언이 안되어있는데 item 엔터티 구조를 변경하는 방향으로 수정 로직을 작성해야 할지 궁금해서 질문 남깁니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 74

"서비스와 DNS" 강의에서 사용되는 devwikirepo/ipbot 의 platform 문제

해결됨

[2026 NEW] 기초부터 이해하는 쉬운 쿠버네티스 - 리소스편

안녕하세요, 실습을 진행하던 중 문제가 발생하여 문의드립니다. 미리 말씀드리지만 저는 현재 Window 11 환경에서 실습을 진행중입니다. "서비스와 DNS" 목차에서 03:57 즈음에 알져주시는 명령어를 그대로 입력해봤습니다. 사용 명령어: kubectl run -it --rm --image=devwikirepo/ipbot debug -n hr -- /bin/bash 그랬더니 아래와 같은 에러가 발생했습니다. pod 생성 중에 문제가 생긴거 같아서 kubectl describe 명령어로 상태를 조회해봤습니다. ToastBread → kubectl describe pod debug -n hr Name: debug Namespace: hr Priority: 0 Service Account: default Node: easykube-worker3/172.22.0.3 Start Time: Wed, 31 Dec 2025 14:57:42 +0900 Labels: run=debug Annotations: <none> Status: Pending IP: 10.244.3.4 IPs: IP: 10.244.3.4 Containers: debug: Container ID: Image: devwikirepo/ipbot Image ID: Port: <none> Host Port: <none> Args: /bin/bash State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pd54v (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-pd54v: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt Optional: false DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m2s default-scheduler Successfully assigned hr/debug to easykube-worker3 Normal BackOff 24s (x5 over 116s) kubelet Back-off pulling image "devwikirepo/ipbot" Warning Failed 24s (x5 over 116s) kubelet Error: ImagePullBackOff Normal Pulling 6s (x4 over 2m2s) kubelet Pulling image "devwikirepo/ipbot" Warning Failed 3s (x4 over 116s) kubelet Failed to pull image "devwikirepo/ipbot": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/devwikirepo/ipbot:latest": no match for platform in manifest: not found Warning Failed 3s (x4 over 116s) kubelet Error: ErrImagePull 맨끝에 Events 를 보니 ImagePullBackOff 보고 처음에는 이미지 이름의 철자를 틀렸나 생각했지만, 해당 이름을 그대로 복사해서 docker hub 에서 검색해보니 잘나왔습니다. 좀 더 알아보니 no match for platform in manifest 이라는 문구가 눈에 들어와서 이게 CPU 아키텍처가 호환이 안되는 걸 알아냈습니다. linux/amd64 Window 환경에서도 실행할 수 있는 AMD64 도 지원해주실 수 있을까요??

  • kubernetes
  • msa
  • devops
  • infrastructure
  • container
식빵 댓글 2 좋아요 1 조회수 91

기본 values 파일과 service name에 대한 질문이 있습니다.

미해결

쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)

안녕하세요. 섹션 18에서 values-dev.yaml과 같은 파일을 만들면, values.yaml은 자동으로 읽어온다고 설명해주셨는데, 명령어에는 values-dev.yaml만 명시했는데 자동으로 읽어오는 values.yaml의 조건이 있나요? 가령, 같은 디렉토리에 있어야 된다던지, 모든 values 파일은 무조건 소문자 values로 시작하고 values.yaml 파일은 반드시 존재해야하는 그런 규칙이 있나 해서 여쭤봅니다. 그리고 helm을 통해서 service를 생성할 경우 컨테이너 포트의 이름이 http이고 서비스 포트의 이름도 동일한 http이던데요, 이 둘이 같을 때 문제가 되는 상황은 없는지 궁금합니다. apiVersion: v1 kind: Service metadata: name: api-tester-2223 labels: helm.sh/chart: api-tester-0.1.0 app.kubernetes.io/name: api-tester app.kubernetes.io/instance: api-tester-2223 app.kubernetes.io/version: "v1.0.0" app.kubernetes.io/managed-by: Helm spec: type: NodePort ports: - port: 80 targetPort: http protocol: TCP name: http nodePort: 32223 selector: app.kubernetes.io/name: api-tester app.kubernetes.io/instance: api-tester-2223 containers: - name: api-tester securityContext: {} image: "1pro/api-tester:v1.0.0" imagePullPolicy: Always ports: - name: http containerPort: 8080 protocol: TCP

  • kubernetes
  • devops
  • argocd
  • container
  • helm
몽하 댓글 2 좋아요 0 조회수 94

queue에 값을 추가하는 메서드는 어떤 차이가 있나요?

해결됨

2026 코딩테스트 올인원 [JAVA]

학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요. 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요. 편하게 질문주세요:) 직접 답변 드리도록 하겠습니다~ Queue에 값을 추가하는 메서드는 enque offer 두 가지가 있다고 강의에서 말씀 주셨습니다. 둘 다 똑같이 값을 추가하는걸까요? 만약 맞다면, 어떤 차이점이 있는지 궁금합니다. (어떤 상황에서 사용되는지도 궁금해요.) +추가적으로, queue.poll() 이 dequeue다 라고 말씀 주셨는데, 둘도 어떤 차이가 있는지. 어떤 상황에서 사용하는지도 궁금합니다!

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
겁많은 김앙리 댓글 1 좋아요 0 조회수 108

인기 태그

인프런 TOP Writers

주간 인기글