inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

Cannot find module 에러

해결됨

손에 익는 Next.js - 마이그레이션하기

vite 로 작성한 경우를 마이그레이션 하는데요. 강의에 따라서 진행하였는데 최종 아래처럼 에러가 발생합니다. Require stack: \node_modules\next\dist\server\dev\next-dev-server.js vite\node_modules\next\dist\server\dev\next-dev-server.js vite\node_modules\next\dist\server\next.js vite\node_modules\next\dist\server\lib\start-server.js package.json 은 아래와 같아요. { "name": "next-migration-02-vite", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "next dev", "build": "next build", "lint": "next lint", "start": "next start" }, "dependencies": { "next": "^14.1.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { "@types/node": "20.11.24", "@types/react": "^18.2.56", "@types/react-dom": "^18.2.19", "@typescript-eslint/eslint-plugin": "^7.0.2", "@typescript-eslint/parser": "^7.0.2", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.56.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "typescript": "^5.2.2", "vite": "^5.1.4" } } 관련해서 안내좀 부탁드립니다. 좋은 주말 되세요~

  • react
  • next.js
  • vitejs
억수 댓글 2 좋아요 0 조회수 909

결측값 채우지관련해서

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하십니까? 결측값 채우기 중 최빈값 관련해서,, m = X_train['workclass'].mode()[0] 여기서 mode()과 mode()[0]의 차이는 무엇인지요? 즉 [0]의 쓰임이 무엇인지? 다른 중앙값, 평균 등은 이런게 없는데 왜 최빈값만 이런게 뒤에 붙는지요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
kccjjang 댓글 2 좋아요 0 조회수 256

환불요청 실습 진행 적용 불가

미해결

네이버 카페 DB 추출 프로그램 개발 강의 [selenium]

네이버 카페 DB를 수집하기 위해 강의를 구입하였는데... 내용이 어려워 강의내용을 복습하다 보니 4강에서 부터 실습이 전혀 진행이 안되네요 2024년 2월 날짜 기준 강의 내용 과 현재의 패턴이 달라 적용이 안되네요 강의내용과 다름(네이버카페 쪽지에 아이디를 찾을 수가 없어 )패턴 실습 진행이 불가능합니다.. 네이버카페 보안강화로 인한 강의"내이버카페 DB추출 프로그램 개발"내용은 적용 불가능한 것으로 판단됨 이 부분 확인 부탁 드리며 환불 요청 드립니다.. 환불사유 일반 강의도 아닌 "네이버 카페 DB추출 프로그램 개발" 강의 인데 강의 실습이 진행되지 않는점. 특정 프로그램 개발만을 위한 짧은 강의만으로 이루어진 강의. 네이버 보안으로 막힌 부분으로 인프런측에서 이 강의는 삭제를 해야할 사안 같네요. 답변 연락부탁드립니다.

  • 웹-크롤링
  • selenium
  • flask
cws6775 댓글 1 좋아요 0 조회수 331

로긴할 때 폰으로 보안코드 보낸거 입력하라는거요..

미해결

[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발

로긴할 때 폰으로 보안코드 보낸거 입력하라는거요.. 정보 저장하고 신뢰하는 기기로 설정해서 수동 로긴을 해도 다시 프로그램으로 로긴 하려하면 또 보안코드 입력하라고 떠서 로긴부터 막히는데 방법 없을까요?

  • python
  • selenium
마루 댓글 1 좋아요 0 조회수 247

멜론 유저에이전트 값 입력했음에도 창접속이안되여 ㅜㅜ

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

#라이브러리 from selenium import webdriver # Selenium의 웹 드라이버를 사용하기 위한 모듈을 임포트 from selenium.webdriver.common.by import By # Selenium에서 사용하는 By 클래스를 임포트합니다. 이 클래스는 웹 요소를 검색하는데 사용 from selenium.webdriver.common.keys import Keys #키보드 입력을 제어하기 위한 Keys 클래스를 임포트 from selenium.webdriver.chrome.service import Service # Chrome 드라이버 서비스를 사용하기 위한 모듈을 임포트 from selenium.webdriver.chrome.options import Options # Chrome 드라이버 옵션을 설정하기 위한 클래스를 임포트 from webdriver_manager.chrome import ChromeDriverManager #Chrome 드라이버를 자동으로 설치 및 관리하는 데 사용되는 매니저를 임포트 import time #시간 관련 함수를 사용하기 위한 time 모듈을 임포 myOption = Options() myAgent = '''Mozilla/5.0 (Linux; Android 9.0; SAMSUNG SM-F900U Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36''' myOption.add_argument(f"user-agent = {myAgent}") myOption.add_argument("--start-maximized") myOption.add_experimental_option("detach",True) myOption.add_experimental_option("excludeSwitches", ["enable-logging"]) myService = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=myService, options=myOption ) url = "https://m2.melon.com/index.htm" time.sleep(2)

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
동휘김 댓글 1 좋아요 0 조회수 270

선생님 혹시 SSV 파일을 json으로 변환할 방법이 있을까요?

미해결

파이썬으로 뭘 만들지? 남박사의 파이썬 알쓸파잡

안녕하세요. 선생님 수업을 통해 크롤링까지는 성공했습니다. HTTP POST 요청으로 받아왔는데요. 다만 Response가 넥사크로에서 사용하는 "SSV"형식으로 왔습니다. SSV:UTF-8ErrorCode:string=0ErrorMsg:string=Dataset:ds_PageList_RowType_TAXNO:string(255)TAXIDX:string(255)MEMBNAM:string(255)TSDATE:string(255)TSTIME:string(255)ACQBID:string(255)CARD_NAME:string(255)HID:string(255)ACQHID:string(255)TERMID:string(255)MTRCNO:string(255)CDNO:string(255)AUTHNO:string(255)ISTMMON:string(255)CURRCODE:string(255)AMT1:bigdecimal(25)AMT2:bigdecimal(25)AMT3:bigdecimal(25)ACQDATE:string(255)DDCEDI:string(255)...... <생략> 이렇게 못생긴 데이터가 왔는데요. 이걸 json으로 파싱하고싶어서요. 이리저리 혼자서 아스키코드 찾아보고 US, RS 사용해서 어떻게든 파싱은 했는데, 제가 짠 로직이 맞나 싶어서요. (일단 작동은 되는데.. ) 혹시 선생님이라면 어떻게 하실까 싶어서요. 이런걸 잘 파싱하려면 알고리즘을 공부해야되는걸까요? 아! 그리고 깃헙에 혹시 라이브러리가 있나 찾아봤는데요. 안나오더라구요. 이게 제일 슬펐어요. 그나저나 저런거 만드는 사람들은 정말 괴물같네요.. 저런걸 도대체 어떻게 만드는 걸까요? (코드가 본문에 저렇게 붙여넣어지는 기능도 신기하네요.. 저런건 또 어떻게 만드나요?)

  • python
  • 웹-크롤링
  • gui
포포 댓글 2 좋아요 0 조회수 846

최신 셀레니움 테스트 소프트에 의해 제어...

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

안녕하세요~ 예전에 셀레니움좀 하다가 다시 최근에 만지작 하고 있습니다. 최신 셀레니움의 경우 크롬드라이버 버전 다운로드 필요없이 되더라구요! 아무튼 셀레니움 options값을 통해서 자동화제어창 문구 안뜨게 하고, user agent 값에 정상적인걸 나오게 해놓으면 상대방 서버에 접속했을 때 티가 안날까요? 나쁜짓 하려는건 아니고, 네이버랑 다음에서 그냥 단순반복 작업을 셀레니움으로 시킬까 하는데 이게 이상하게 보일까 싶어서 궁금합니다. 과도하게 요청하는것도 아니고 그냥 느릿느릿하게 작업하게 했거든요. 근데 이렇게 숨겨도 맘먹고 찾아내서 조치를 취할 수 있을까요?

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
김선영 댓글 1 좋아요 1 조회수 268

insta_mobile.py 링크만 무한루프 뜹니다. 왜 그런가요?

미해결

[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발

def insta_mobile_work(device, max_work): links = read_links() print(links) cnt = 1 for link in links: if cnt >= max_work: print(link) print("이제 작업 종료하겠습니다") break try: visited_links = [] # 이미 좋아요, 댓글, 팔로우를 신청한 링크 리스트 with open('visited.txt', 'r') as f: while True: line = f.readline() if not line: break _link = line.rstrip() visited_links.append(_link) if link in visited_links: print("이미 방문한 링크입니다.") continue print(f"{cnt} 번째 링크 방문 {link}") # link = link.replace("https://","") device.press('home') device.open_url(link) time.sleep(0.2) if device(text="작업을 수행할 때 사용하는 애플리케이션").exists(timeout=2): # 삭제되었거나, 잘못된 URL 저장된 경우에 continue continue ''' visited_account check 목표 : 최대 3회까지 계정 방문하는 기능 ''' visited_accounts = [] with open('./visited_account.txt', "r") as f: while True: line = f.readline() if not line: break account = line.rstrip() visited_accounts.append(account) # 몇 번 방문했는지 정보 획득 account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() visited_count = visited_accounts.count(account_id) if visited_count >= 3: # 3회 이상 방문일 때는 다음 링크를 방문하도록 한다 # continue가 실행되면 여기 밑에있는 코드가 실행이 안됨 (for 문 안에서 사용가능) continue ''' 1. 좋아요 누르기 - 단, 좋아요가 이미 눌러져 있으면 Pass ''' # 좋아요 버튼 나타나는것 기준으로 5초까지 대기 if not device(resourceId="com.instagram.android:id/row_feed_button_like").exists(timeout=3): device.swipe_ext("up", scale=0.75) time.sleep(3) alreadyLiked = False if device(resourceId="com.instagram.android:id/row_feed_button_like").exists( timeout=5): # 만약 ,좋아요 버튼이 안 눌러져있으면 좋아요 버튼을 누른다 if device(resourceId="com.instagram.android:id/row_feed_button_like", selected=False): device(resourceId="com.instagram.android:id/row_feed_button_like").click() time.sleep(1) if check_bot_detection(device): print("[봇 탐지] - 좋아요 시도 실패") raise Exception("[봇 탐지] - 좋아요 시도 실패") else: alreadyLiked = True time.sleep(3) # ''' # 2. 댓글 달기 - 랜덤 멘트를 미리 작성해놓고, 랜덤으로 뽑아서 댓글 달기''' # if not alreadyLiked: # device(resourceId="com.instagram.android:id/row_feed_button_comment").click() # time.sleep(3) # # 기본 키보드가 활성화 되어있는 경우 back버튼을 눌러줌 # if device(resourceId="com.samsung.android.honeyboard:id/bee_item_icon").exists(): # device.press('back') # time.sleep(1) # if not device(text="이 게시물에 대한 댓글 기능이 제한되었습니다.").exists(): # print("커멘트 작성 가능 exists") # device(resourceId="com.instagram.android:id/layout_comment_thread_edittext").click() # # 실제 사람이 작성하는 것처럼 문장 사이의 타이핑 딜레이가 들어감 # comments = ["♡", "❤️", "❤️❤️", "♥"] # comment = random.choice(comments) # for word in comment: # device.send_keys(word) # time.sleep(random.uniform(0.03, 0.08)) # print("댓글 작성 완료") # time.sleep(3) # if device( # resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").exists(): # device( # resourceId="com.instagram.android:id/layout_comment_thread_post_button_click_area").click() # elif device(resourceId="com.instagram.android:id/layout_comment_thread_post_button").exists(): # device(resourceId="com.instagram.android:id/layout_comment_thread_post_button").click() # time.sleep(1) # if check_bot_detection(device): # print("[봇 탐지] - 댓글 달기 시도 실패") # raise Exception("[봇 탐지] - 댓글 달기 시도 실패") # print("게시 버튼 꾸욱.") # time.sleep(2) # device.press('back') # time.sleep(2) # device.press('back') # else: # device.press('back') # time.sleep(3) # 방문 1회 추가 ! with open('./visited_account.txt', "a") as f: f.write(f"{account_id}\n") # 3. 팔로우 신청 - 단, 이미 팔로잉 상태면 Pass # 사진 사이즈가 너무 크면, 위로 스와이프 해줘야함 device.swipe_ext("down", scale=0.8) time.sleep(3) account_ids = [] # 이미 팔로우를 신청한 계정 리스트 with open('accounts.txt', "r") as f: while True: line = f.readline() if not line: break account_id = line.rstrip() account_ids.append(account_id) if not device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").exists(): device.press('back') time.sleep(1) target_account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() # 딱 1번만 팔로우 하겠다. if not target_account_id in account_ids: # 팔로우할 유저의 계정을 기록 with open('accounts.txt', "a") as f: account_id = device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").get_text() f.write(f"{account_id}\n") device(resourceId="com.instagram.android:id/row_feed_photo_profile_name").click() time.sleep(3) if device(description="맞팔로우 하기", text="맞팔로우").exists(): device(description="맞팔로우 하기", text="맞팔로우").click() elif device(text="팔로우", className="android.widget.Button"): device(text="팔로우", className="android.widget.Button").click() else: # 이미 맞 팔로우가 되어 있으므로 실행시키지 않아도 됨 pass time.sleep(1) if check_bot_detection(device): print("[봇 탐지] - 팔로우, 맞팔로우 신청 시도 실패") raise Exception("[봇 탐지] - 팔로우, 맞팔로우 신청 시도 실패") time.sleep(2) device.press("back") time.sleep(2) device.press("back") time.sleep(3) else: print("이미 팔로우된 계정입니다") cnt += 1 random_time = random.randrange(60, 90) print(random_time, '초만큼 대기하겠습니다') time.sleep(random_time) '좋아요, 팔로우, 댓글 작성까지 완료된 게시글' with open('visited.txt', 'a') as f: f.write(f"{link}\n") except: pass 1 번째 링크 방문 https://www.instagram.com/p/C2DUpJJBWI1/ 1 번째 링크 방문 https://www.instagram.com/p/C3SMeJSyIRC/ 1 번째 링크 방문 https://www.instagram.com/p/C3fDCYiM4gt/ 1 번째 링크 방문 https://www.instagram.com/p/C2hjVjmxPEg/ 왜그런가요?

  • python
  • selenium
김희수 댓글 2 좋아요 0 조회수 442

DAY11 영상에 오타있네요

미해결

기초 알고리즘 코딩테스트 40일 완성 (by 하루코딩)

최댓값 문제 2566번인데 2556번(별 찍기 - 14)로 숫자가 잘못되어있습니다. 수정 부탁드립니다.

  • python
  • java
  • 코딩-테스트
kairs294702 댓글 2 좋아요 0 조회수 292

useQuery랑 queryClient.getQueryData랑 차이점이 있을까요??

해결됨

Next + React Query로 SNS 서비스 만들기

기본적으로 캐싱된 데이터가 있으면, 그 데이터를 가지고 오는 것으로 알고 있는데, const { data} = useQuery({ queryKey: ['posts', 'recommends'], queryFn: getPostRecommends}); const data = queryClient.getQueryData(['posts', 'recommends']); 두 가지 차이점이 있는지 궁금합니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
oct.wanga 댓글 2 좋아요 -1 조회수 1871

텔레그램 센드 메세지 API 4,096바이트 넘을시 전송 불가

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

안녕하세요 유튜브도 보고, 강의도 결제해서 보고 있는 이광희라고 합니다. 강의 정말 감사드립니다. 강의대로 코드 짰더니 봇에 전송도 잘 되는데 문제는 메세지가 길어져서 (업무특성상 뉴스 검색량이 많음) 4,096바이트를 넘어가니 전송이 아얘 되지를 않네요. 일반적인 텔레그램 1:1채팅이나 단체방 채팅에서는 장문을 입력하면 자동으로 나눠져서 전송되는데 API는 4,096바이트가 넘어가니 아얘 전송이 되질 않네요. 1) 이걸 코딩에서 해결해서 전송해야 한다면 어떤 방법이 있을지 2) 아니면 텔레그램 API상 다른 방법이 있는지요 궁금합니다

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
Kwanghee Lee 댓글 3 좋아요 0 조회수 804

폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요.

미해결

[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발

폰에 atx라는 자동차 모양 아이콘의 앱이 설치되었어요. 얘가 전화 허용이라는 권한을 요청하기도 했고 폰 상단 알림창에 계속 uiautomator 이라는 이름과 ip주소가 써진 알람을 계속 보내요 . 알람을 지우고 몇 분 뒤에 보면 또 알람창에 떠 있고. 이 앱을 폰에 계속 설치되어 있는 상태로 있어야 하는지 궁금합니다. 앱 들어가보면 weditor처럼 중국어(?)로 써져 있어서 불안해서요.

  • python
  • selenium
마루 댓글 2 좋아요 0 조회수 387

xpath 질의

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

강사님 매번 강의로 도움많이받고있습니다 감사합니다. 개인적으로 일전에 구글을 예를 들어 다양한 키워드에 따라 생성 텝메뉴들이 달라져서 고민을 많이하던때가있었는데 'View탭 클릭하여 페이지넘어가기'강의와 같이 xpath 지정하였을때 '//*[text()="VIEW"]' 입력하면 되는것일까요? 음 현재 네이버가 뷰 서비스를 폐지했는데 만약 블로그를 클릭한다면 '//*[text()="블로그"]' 를 입력하면 클릭이되나요?안되서여ㅜㅜ혹시 도움이될만한 고견주시면 감사드리겠습니다.

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
동휘김 댓글 1 좋아요 0 조회수 251

pip명령이 vscode 명령프롬프트에서만 않되네요

미해결

[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편

그냥 명령프롬프트 띄우면 잘되는데 vscode의 터미널 명령프롬프트에서만 안되네요 vs내에 인터프리트 경로까지 잡아줬는데도 안되요 'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라고 뜹니다 왜일까요?

  • python
  • selenium
  • openpyxl
열공 댓글 2 좋아요 0 조회수 4626

react-intersection-observer 무한스크롤페이지 중복호출문제

미해결

Next + React Query로 SNS 서비스 만들기

안녕하세요 제로초님 강의 잘 보고 있습니다. 다름아니라 무한스크롤 부분 구현중(개인 프로젝트에 해당 부분만 먼저 적용중이라 jsonplaceholder API로 호출하고 있습니다) fetchNextPage가 2번씩호출이 되어서 delay도 조정해보았는데 계속 2번씩호출이 되서 로직에 혹시 문제가 있는지 봐주실수 있을지부탁드립니다. 0. 콘솔에 확인한 결과 처음 화면에 ref가 렌더되고 그 이후 data fetching이 완료되어 isFetcing이 false가 되었는데, data를 map으로 div로 뿌리는 렌더링 과정에 시간이 소모되어 inView는 true && isFetching도 false가 되어서 div가 화면에 나타나고 ref div를 가리기 전에 data fetching을 한번씩 더 하고 있는 상황입니다. 감사합니다

  • react
  • next.js
  • react-query
  • next-auth
  • msw
나무아르볼 댓글 3 좋아요 0 조회수 1369

uc를사용할때 유저 에이전트 변경이 불가능합니다.

미해결

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

undetected chromedriver 를 사용할때 UA_Data = make_user_agent(UA, True) self.driver.execute_cdp_cmd("Network.setUserAgentOverride", UA_Data) 를 이용하여도 userAgentData의 변경이 되지 않습니다. 버전의 문제일까요?

  • 웹-크롤링
  • selenium
  • cdp
dykim710 댓글 2 좋아요 0 조회수 539

팔로워 리스트 추출완료 count 관련 문의드립니다.

미해결

[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발

main.py 에 count 10을 했는데 계속 진행되고 있습니다. keyword_list = ["식당인테리어","식당"] for keyword in keyword_list: #해시태그 띄어쓰기 사용 불가, 필터링 기능 keyword = keyword.replace(" ","") count = 10 insta_web.insta_web_work(driver,keyword,count) insta_mobile.insta_mobile_work(device,30) print("[작업 완료] - 자동화 프로그램 동작이 완료되었습니다.") 그리고 파일이 저장이 되지 않습니다. 뭐가 문제일까요? 테스트용으로 count 10을 했는데 말입니다. 저장되지 않는 것 같습니다. 포스팅 링크 추출 완료 팔로워 리스트 추출 완료 70 - 1 팔로워 리스트 추출 완료 69 - 2 팔로워 리스트 추출 완료 56 -3 팔로워 리스트 추출 완료 59 -4 팔로워 리스트 추출 완료 52 -5 [에러] 팔로워 버튼 클릭 에러 팔로워 리스트 추출 완료 0 팔로워 리스트 추출 완료 72 -6 팔로워 리스트 추출 완료 60 -7 팔로워 리스트 추출 완료 64 -8 팔로워 리스트 추출 완료 54 -9 팔로워 리스트 추출 완료 30 -10 팔로워 리스트 추출 완료 71 -11

  • python
  • selenium
김희수 댓글 2 좋아요 0 조회수 454

휴대폰 로그인 패턴

미해결

[자동화 완전 정복] 인스타그램 휴대폰, 웹 자동화 프로그램 개발

안녕하세요. 강의 잘듣고 있습니다. uiautomator2에서 핸드폰 초기 lock화면의 패턴을 입력하는 방법은 지원하지 않나요. 아니면 다른 식의 방법이 있는것인가요 확인한번 부탁드립니다.

  • python
  • selenium
이승섭 댓글 2 좋아요 0 조회수 312

강의 코드는 어디서 볼 수 있나요?

미해결

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

안녕하세요. 자꾸 질문드려서 죄송합니다. 혹시 강의 진행에 사용된 코드 깃허브 주소같은거나 첨부파일은 없나요? 맨 마지막 파트에 있는건 추가된 강의에 대한 코드 자료들만 있어서요..

  • 웹-크롤링
  • selenium
  • cdp
류승택 댓글 2 좋아요 0 조회수 487

accounts/url 질의

미해결

장고 설계철학으로 시작하는 파이썬 장고 입문

화면과같이 include 부분 강좌와 다르게 저절로 세팅이 되고 서버 실행하면 계속 오류가나는데 어떻게해야하나요ㅜㅜ

  • python
  • django
동휘김 댓글 2 좋아요 0 조회수 260

인기 태그

인프런 TOP Writers

주간 인기글