inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

(맥환경) workbench 이용할 때 패스워드 입력 안해도 자동으로 활성화 가능해져요..

해결됨

[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

본문제목 그대로 워크 벤치 이용할 때, 항상 패스워드를 입력한 후 활성화 되는 것으로 알고 있었는데, 현재 패스워드 입력 안하고 그냥 클릭만 해도 활성화됩니다. 보안상으로 좋지 않은 것 같은데, 혹시 이런 경우 어떻게 변경이 가능할까요? 오랜만에 mysql을 공부하는데 몇년 전에는 항상 패스워드 입력했던 것 같은데 이번에 새로 깔아보니 패스워드 입력 안해도 실행이 되어 불안합니다. 참고로 저는 맥 환경에서 사용하고 있습니다.

  • python
  • sql
  • mysql
  • dbms/rdbms
  • 데이터-엔지니어링
화리둥절 댓글 1 좋아요 0 조회수 391

db.movies.aggregate() 질문

미해결

[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)

MongoDB Aggregateion 기본 명령 이해하기1 수업 3분쯤에 db.movies.aggregate([{$match:{year:1995}]) 문법을 그대로 따라 쳤는데, 에러같은건 전혀 나지 않고 이 화면이 나옵니다. movies콜렉션에 데이터가 아무것도 안들어있는건가요?? 뭐가 문제인건지 모르겠습니다 ㅠㅠ 이것저것 찾아보니 제가 설치한 movies 컬렉션에는 데이터가 0건인거 같은데 왜 이런건가요? 강의에서 하라는대로 그대로 따라했습니다 ㅠ 몇 번 삭제하고 다시 해봐도 똑같이 데이터가 0건인거같아요

  • python
  • mongodb
  • dbms/rdbms
  • 데이터-엔지니어링
윤성원 댓글 1 좋아요 0 조회수 170

refresh token rotation 질문

미해결

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

안녕하세요 강의를 듣고 next-auth를 활용하여 개발 중에 궁금한 점이 생겨 질문 드립니다. 프로젝트에서 일반 로그인과 소셜 로그인을 모두 사용하고 있어 next-auth의 signin callback에서 로그인일 경우 자체 서버에 요청하여 accessToken과 refreshToken을 발급 받고 jwt callback에서 엑세스 토큰의 만료 시간을 체크하여 만료 시에 재발급 요청이 되도록 구현하고 있습니다. 이렇게 구현했을 경우 간헐적으로 서버 시간과의 타이밍 이슈 때문인지 api 요청 시에 401 토큰 만료 에러가 발생하는 순간이 존재합니다. 따라서 401 상태코드일 경우에 refreshToken 토큰 재발급 요청을 하려고 하는데 refreshToken이 현재 next-auth에서 jwt 콜백에서 리턴되어 jwt토큰으로 생성되어 있습니다. 이 401일 경우 재발급 요청 처리를 클라이언트 단에서 할 경우 refreshToken이 노출되어 보안상 이슈가 있을 것으로 예상이 되는데 서버단에서 처리를 하려면 next에서 어디서 처리를 하면 좋을 지 문의드립니다. async signIn({ account, user, credentials }) { const cookieStore = cookies(); const authorizationParams = JSON.parse( cookieStore.get("authorization-params")?.value ?? "" ); const action = authorizationParams.action; user.platform = authorizationParams.platform; if (!account?.provider || !sns_type_map[account.provider]) { throw new Error("Unsupported provider"); } user.snsType = sns_type_map[account.provider]; if (action === auth_action_type.signin) { return handleSignIn(user); // getAccessToken } if (action === auth_action_type.signup) { return handleSignUp(); } return false; }, async jwt({ token, account, user }) { // Initial sign in if (account && user) { return { ...token, ...user, accessToken: user.refreshToken, expiresAt: new Date( Date.now() + (user?.expiresIn ?? 0) ).toISOString(), refreshToken: "refreshtoken", }; } // Return previous token if the access token has not expired yet if (new Date() < new Date(token.expiresAt as string)) { console.log("@@@@@@valid"); return token; } else { // Access token has expired, try to update it console.log("@@@@@@expired"); const cookieStore = cookies(); const authorizationParams = JSON.parse( cookieStore.get("authorization-params")?.value ?? "" ); const body = { .... }; const tokenData = await authApi.reissueAccessToken(body); // reissue token return { ...token, ...user, accessToken: tokenData.accessToken, expiresAt: new Date( Date.now() + (tokenData.expiresIn ?? 0) ).toISOString(), refreshToken: tokenData.refreshToken, }; } }, 미들웨어에서 401 상태 코드 처리하는 것도 알아보았으나 일반적인 방식인지 궁금합니다. 미들웨어에서 401일때 재발급 요청 시 새로운 엑세스 토큰으로 재요청이 정상적으로 되는 것은 확인했으나 다시 next-auth의 jwt토큰에 재발급된 값을 세팅해줘야 하는데 어떻게 해야할지도 궁금합니다. import { NextResponse } from 'next/server'; import { getToken } from 'next-auth/jwt'; export async function middleware(request) { const token = await getToken({ req: request, secret: process.env.AUTH_SECRET }); if (request.nextUrl.pathname.startsWith('/gateway')) { const accessToken = token?.accessToken; const headers = new Headers(request.headers); if (response.status === 401) { const refreshToken = token?.refreshToken; const refreshResponse = await fetch("/reissueToken") const refreshData = await refreshResponse.json(); if (refreshResponse.ok) { const newAccessToken = refreshData.accessToken; headers.set('Authorization', `Bearer ${newAccessToken}`); const newResponse = NextResponse.next({ request: { headers: request.headers, }, }); } // 토큰 재발급 실패 시 처리 return NextResponse.redirect('/login'); } return NextResponse.next(response); } return NextResponse.next(); }

  • react
  • next.js
  • react-query
  • next-auth
  • msw
박지수 Jisu Park 댓글 1 좋아요 0 조회수 416

1회 코드해석 문제 질문있어요

해결됨

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

25분4초 영상 질문입니다. 1번에서 int*a가 미리 선언되었기 때문에 스왑이 정상작동 하는것일까요? 2번답 nx라는건 이상하게 보자말자 감이 오던데요..! 혹시 sizeof(a)-1 를 했다면 답으로 되었을까요..? 궁금하네요 29분 12초 상속문제 입니다. 이상하게 상속문제만 보면 손댈 엄두가 안나네요.. 시작만 하면 풀리는데 그 시작이 안됩니다 ㅠㅠ... Venicle obj = new Car("Spark")에서 new Car가 클래스 이름을 지칭하기 때문에 같은 클래스 이름을 찾아보면 되는걸까요?

  • python
  • java
  • c
  • 정보처리기사
주서 댓글 1 좋아요 0 조회수 183

js 받아오는 타이밍

해결됨

한 입 크기로 잘라먹는 Next.js

link component 에 prefect 을 false 로 넘겨줄때, 직접 이동하진 않지만 마우스 hover시 js 를 받아오네요 그런데 프로그래미틱한 방법으로 /test 로 이동시에는 왜 해당 페이지로 이동하고 나서 받아오나요 ?

  • react
  • typescript
  • next.js
픽셀소프트웨어 댓글 1 좋아요 0 조회수 278

조건 반복문강의

해결됨

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

조건반복문 강의 4분 40초쯤에서 if절 에서 2의약수 또는 3의약수가 참일때, 6의 배수가 아닌것을 세어라. 로 해석되는데요. 1.일단 해당강의에서 ‘약수’로 표현한건 전부 ‘배수’인거죠? 모두 %정수로 표기되는데 약수, 배수 혼용되어서요. ll 연산자는 둘중 하나만 참이어도 전체가 참...으로 배웠는데! 왜 각각의 배수를 함께합쳐서 12개로 풀어야하는지 이해가 안갑니다. 11:51초에서도 &&연산자는 둘다 참이어야 참인데, 위와 마찬가지로 2의배수중 3의배수가 아닌것을 골라야하는대 왜 이렇게 적용되는지 이해가 안갑니다. if문이 계속 괄호안에 반복되면 순차적으로 조건문을 실행하여 참인지 보면 되는건가요? 혹시 강좌에 나오는 예제들만 모아놓은 출력물은 없을까요? 강좌에서 나오는 꼭외워야할부분, 강의 마지막에 나오는 요약문도 출력물이 없을까요? 예제문제를 다시풀어보고싶은데 강의마다 예제나오는 부분을 찾아보기가 시스템이 수월하지않아서요 .

  • python
  • java
  • c
  • 정보처리기사
ghkd1118 댓글 1 좋아요 0 조회수 125

pub/sub 연결하기 문의

해결됨

Azure Native로 나만의 GPT 만들기

안녕하세요. 프론트와 pub/sub 연결하는 부분 강의 듣다가 에러가 생겨 질문 드립니다ㅠ 이렇게 favicon.ico 에러가 뜨면서 연결이 안되는데 어떻게 해결해야 할까요....?

  • javascript
  • python
  • mongodb
  • azure
  • FastAPI
황윤주 댓글 2 좋아요 1 조회수 303

네이버 쇼핑 크롤링 1 코드 사용 시, 접속 제한됐을 때의 해결 방법이 궁금합니다.

미해결

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

import requests from bs4 import BeautifulSoup keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) 위 코드 사용 시 아래와 같은 결과가 나타납니다. keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) # req = requests.get(url, headers=headers) # print(req.request.headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) <title>네이버쇼핑</title> </head> <body> <div class="content_error"> <div class="head">쇼핑 서비스 접속이 일시적으로 제한되었습니다. </div> <div class="desc"> 네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다. </div> <ul class="reason"> <li>상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속</li> <li>짧은 시간 내에 너무 많은 요청이 이루어진 IP</li> <li>VPN을 사용하여 접속한 IP</li> <li>특정 확장 프로그램 이용 시</li> </ul> <div class="footer">위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 <a href="https://help.naver.com/service/30016/category/5278" target="_blank"> 원클릭 진단</a>을 부탁드립니다.<br/> 해당 방법을 통해서도 접속이 불가한 경우 <a href="https://help.pay.naver.com/mail/form.help?alias=shopping_stop" target="_blank">네 이버쇼핑 고객센터</a>로 문의 부탁드립니다.</div> </div> </body> </html> 이런 상황에서 대안이 있을까요?

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
댓글 1 좋아요 0 조회수 3343

rtm.start() 오류

미해결

날씨를 알려주는 나만의 SlackBot 만들기 (파이썬)

아래와 똑같은 질문입니다. 19번 라인 trm.start부분에서 계속 오류가 납니다. 아래 질문의 답변을 통해 Classic Slack App으로 생성하지 않아(현재 불가능) 발생한 것으로 파악하였습니다. 강의 업데이트 공지 상으로 6월 중으로 완료될 예정이라고 하셨는데 아직 강의가 업데이트 되지 않은 것 같아 질문 드립니다. 업데이트 된 강의는 언제 올라올 예정인가요? 오류 해결 방법을 알고 싶습니다.

  • python
  • slack
  • github-actions
  • playwright
  • httpx
dudzw623 댓글 1 좋아요 0 조회수 132

다익스트라 코드 중에 궁금한 것이 있습니다.

해결됨

코딩테스트 [ ALL IN ONE ]

def dijkstra(graph, start, final): costs = {} # 방문 여부 pq = [] # 우선순위 큐 heapq.heappush(pq, (0, start)) # 시작 노드 추가 while pq: cur_cost, cur_v = heapq.heappop(pq) if cur_v == final: return cur_cost if cur_v not in costs: # 방문여부 확인 costs[cur_v] = cur_cost # 인접 노드 탐색하면서 비용 업데이트 for next_v, cost in graph[cur_v]: # 현재노드와 연결된 인접노드와 그 비용 next_cost = cur_cost + cost heapq.heappush(pq, (next_cost, next_v)) return costs[final] 정말 사소한건데요, while pq: 내용 중 for cost, next_v in graph[cur_v]: 를 for next_v, cost in graph[cur_v]: 로 고쳐도 되는지 묻고 싶습니다. 우선순위 큐는 비용을 기준으로 하니까 (E,V)가 맞는거 같은데요. 그래프가 G=(V,E) 수식을 따르다 보니까 그래프로 초기화할 때도 ("A", 3)과 같이 노드와 비용 순서대로 하잖아요? 그래서 이러한 논리를 for문에도 적용하면 훨씬 이해하기 쉽지 않을까 개인적으로 생각이 듭니다. (아! 이건 제 개인적인 생각이니 코드를 고쳐달라고 요구를 하는 건 절대 아닙니다 😅 )

  • python
  • 코딩-테스트
  • 알고리즘
Ambition 댓글 1 좋아요 1 조회수 166

보스턴 집값 강의에서 csv 파일이 없습니다.

미해결

파이썬으로 시작하는 머신러닝+딥러닝(sklearn을 이용한 머신러닝부터 TensorFlow, Keras를 이용한 딥러닝 개발까지)

안녕하세요 훌룡한 강의 잘 수강하고 있습니다. 보스턴 집값 예측 강의에서 csv 파일이 없습니다. 말씀 주신 링크에서도 찾을 수가 없습니다ㅠㅠ jm90.hong@gmail.com 제 메일이긴 하는데 csv 파일 보내 주셔도 됩니다 감사합니다^^

  • python
  • 머신러닝
  • 딥러닝
  • keras
  • sklearn
홍정민 댓글 3 좋아요 0 조회수 287

filter, rename axis 기본값

해결됨

5분빨리 퇴근하자! 파이썬 데이터 분석, 시각화, 웹 대시보드 제작하기

filter의 경우에는 axis 기본값이 1이 설명대로 맞는거 같은데, rename 메서드 설명에도 axis 기본값이 1로 작성되어 있습니다. 하지만 실제로 수행해보니 rename의 경우에는 axis의 기본값이 0인것 같은데 제가 잘못이해한걸까요?

  • python
  • pandas
  • seaborn
  • plotly
  • matplotlib
  • data-visualization
  • streamlit
이동훈 댓글 1 좋아요 0 조회수 167

전일비 상승,하락때문에 int화를 못하고 있는데

미해결

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

5.4 영상보면 전일비는 숫자로만되어있네요 영상보면 전일비는 숫자로만되어있네요 제 코드는 아래와 같고 어떻게 상승,하락을 없애는지 모르겠습니다. import requests import bs4 import re import time total_data_list = [] # 추출하고자 하는 데이터 리스트를 모아놓을 곳 page_number = 1 pre_data_time_set = set() # 이전 페이지에서 추출한 데이터를 모아놓는 곳 cuz 중복되면 그만두게 하기 위해 while True: # 특정 조건이 만족하면 break로 루프 끝냄 # 페이지 번호를 포함한 url 생성 - {}.format을 사용해서 동적으로 사용 url2 = "https://finance.naver.com/item/sise_day.naver?code=453450&page={}".format(page_number) # 해당 url로 요청 res2 = requests.get(url=url2, headers=headers2) # 요청한 정보를 .text로 만든 뒤 파싱 soup3 = bs4.BeautifulSoup(res2.text, "lxml") tr_eli = soup3.select("table.type2 > tr[onmouseover='mouseOver(this)']") current_time_set = set() # 현재 페이지의 날짜 데이터를 저장할 set for a in tr_eli: # tr_eli라는 ResultSet에서 하나씩 추출 td_eli = a.select("td") # a.select("td") = 위에서 추출한 것에서 'td' 태그를 포함한 것을 추츨하고 ResultSet으로 반환 # a는 태그지만 td_eli는 ResultSet이다 : data_list = [] # 추출한 데이터를 담을 리스트 for i, td_real2 in enumerate(td_eli): # 추출한 ResultSet(열)들과 인덱스를 같이 순회 clean_data = re.sub(r'\s+', " ", td_real2.text.replace(",","")) # 숫자가 아닌 모든 문자를 제거 if clean_data == " ": break if i == 0: # 첫 번째 인덱스는 무조건 날짜임 current_time_set.add(clean_data) data_list.append(clean_data) if len(data_list) > 0: # data_list가 빈칸이 아닐경우에 total에다가 추가 total_data_list.append(data_list) else: # eliment를 가져오는거 자체를 그만두게 하는 것 break # 이전에 수집한 날짜와 현재 페이지의 날짜가 동일하면 루프 중단 if pre_data_time_set == current_time_set: print("끝났다", page_number) break else: pre_data_time_set = current_time_set # 현재 페이지의 날짜로 업데이트 time.sleep(3) # or random.random() * 2 page_number += 1 # 페이지 번호를 1씩 증가 # 결과 출력 for data in total_data_list: # total_data_list는 리스트 형식이라 리스트안에 리스트를 빼내는 작업하는 것 print(data) # 중복되는 내용 없애는거는 나중에 DataFrame 사용하면 편한데 로직내에서도 가능하긴 하다.

  • python
  • 웹-크롤링
김은준 댓글 1 좋아요 0 조회수 143

반복문 강의

해결됨

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

반복문강의 20:40초 for 과 while 반복문 풀이를 할때 for문은 i=5까지 반복한다하셨는데요. 어떻게 출력값이 짝수기준으로 while 출력물이 나오는지 이해가 안갑니다. i=1일때 for문으로 현재숫자:1 출력은 이해가 가구요. 그다음 while로 넘어갔는데 조건식이 false여서 다시 for문으로 돌아오는 것인가요? 왜 돌아가는지 이해가 안가서요. 그다음 2일땐 while 조건식이 True 여서 출력되고break로 빠져나오고 다시 for문으로 돌아가는건가요.

  • python
  • java
  • c
  • 정보처리기사
ghkd1118 댓글 1 좋아요 0 조회수 150

hwp = win32.gencache.EnsureDispatch 에러

해결됨

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

안녕하세요? 어제까지 작동하던 코드가 오늘 위 에러 메시지가 나면서 작동이 되지 않네요. 예외가 발생했습니다. AttributeError module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap' File " E:\Naver MYBOX\빠른동기화폴더\999_업무용주요매크로\999_한글매크로\01_일상의코딩\002_import win32com.py ", line 3, in <module> hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한글 실행 AttributeError: module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap' GPT에게 물어 보니 com 이 손상되었다고 하면서 com 캐시 재생성 하거나 캐시를 재설정 및 재실행을 하라고 하는데, 정말 그런건가요? 위 두 코드를 넣어 보았는데, 계속해서 에러메시지가 나네요 TT

  • python
  • 한컴오피스
이상하 댓글 2 좋아요 1 조회수 292

graphviz 오류

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

안녕하세요 선생님 구글에 graphviz 다운로드 후 pip install을 해야하나 모르고 pip install 먼저하고 구글 다운로드 후 다시 pip install 하니 중복되서 프롬프트에서 graphviz가 중복됬다고 실행이 안됩니다 ㅠㅠ 혹시 해결방법이 있을까요 ?

  • python
  • 머신러닝
  • 통계
kyb1053 댓글 3 좋아요 0 조회수 215

안녕하세요 질문이 있습니다.

해결됨

한 입 크기로 잘라먹는 Next.js

Static Page로 설정되는 기준은 동적함수가 아니거나 데이터 캐시에 저장해주는 경우 설정된다고 하셨는데요 만약 그렇다면 강의 자료에서도 백엔드에서 받아온 데이터가 데이터 캐시부분을 그냥 지나가는 게 아니라 'SET' 해야하는거 아닌가 궁금합니다 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢 ) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • react
  • typescript
  • next.js
앙엉 댓글 1 좋아요 2 조회수 205

일별 시세 데이터 상승/하락 \t\n해결법

미해결

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

사진과 같이 등락률에 상승 \n\t\t\ 이런 결과값이 나오는데 왜이런가요?

  • python
  • 웹-크롤링
김은준 댓글 1 좋아요 0 조회수 173

최소값의 위치

미해결

입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]

안녕하세요 저는 해당 문제를 배열 길이와 배열 요소를 input으로 입력받고 최소값의 위치를 반환하는 코드를 작성해봤는데 답이 틀리게 나오네요 반복문으로 배열 인덱스에 따른 요소값은 제대로 나오는데 무엇이 문제인가요?

  • python
  • 코딩-테스트
parksangil99 댓글 1 좋아요 0 조회수 163

선생님 죄송한대

해결됨

기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)

Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14) 강의쿠폰 더 없을까요 ㅠㅠ 너무 늦게알았네요 ㅠㅠ

  • react
  • 인터랙티브-웹
  • 클론코딩
  • next.js
  • tailwind-css
  • zustand
foxball 댓글 1 좋아요 1 조회수 173

인기 태그

인프런 TOP Writers

주간 인기글