inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

authenticationEntryPoint 질문입니다.

미해결

스프링 시큐리티 OAuth2

강의 10분22초 강의자료 그림에서 인증이 실패하면 DaoAuthenticationProvider가 BasicAuthenticationEntryPoint를 호출한다고 돼있는데, AuthenticationEntryPoint는 이 과정에서의 실패가 아니라 해당 필터를 지나서 AuthorizationFilter에서 인증이 안된 사용자가 권한으로 인해 예외가 발생했을 경우 호출되는거 아닌가요? UsernameAuthenticationFilter에선 이런식이였던거 같은데 제가 잘못 이해한걸까요? DaoAuthenticationProvider에서 인증이 실패하면 BasicAuthenticationEntryPoint가 아니라 해당 필터에 등록된 FailureHandler가 호출되야할거 같은데 설명 부탁드립니다!

  • java
  • spring
  • spring-boot
  • oauth
에욱 댓글 1 좋아요 0 조회수 166

c언어 기출문제의 변형

해결됨

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

다른 분 질문에 올려주신 답글 해설을 보고도 이해가 안되어 다시 질문 남깁니다 강의 21:30을 보자면 print 3번은 ptr=arr인데 앞에서 바꿔진 print2에서 30으로 변경된 것을 사용하는게 아닌가요? 아니라면 print1에서 변경되었던 21에서 자신은 변경없이 다음 arr[1]을 지시하는 것으로 이해해도 되나요? 그런데 또 이상한게요 print 5번은 print4번이 31을 사용하는 것두 아니고 print2에서 바꿔놓은 30을 사용하는 것두 아니고 정말 정리가 안됩니다

  • python
  • java
  • c
  • 정보처리기사
SUDAM 댓글 3 좋아요 0 조회수 267

비동기 함수로 불러온 데이터를 화면에 렌더링

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

강의 내용을 바탕으로 프로젝트를 하나 만들다 안되는 부분이 있어 질문드립니다. 제가 axios를 이용해서 데이터를 받는 함수를 만들었는데요 const [posts, setPosts] = useState(); const getAllPosts = async () => { try{ const {data} = await axios.get("/api/posts"); console.log("axios - getAllPosts: ", data); setPosts(data); } catch(error){ console.log("getAllPosts 에러: ",error); } } getAllPosts(); 이런 코드를 작성했을때 렌더링할때 axios를 이용해서 받은 데이터를 posts란 state에 저장하고 이를 리스트 형태로 렌더링하려고 하는데 저기서 그냥 getAllPosts(); 를 해버리면 콘솔창에 무한하게 posts 값이 찍히고 화면에는 렌더링이 되지 않더라고요 ㅠ 콘솔창에는 그래도 데이터가 찍히긴 하는데 말이죠..ㅠ getAllPosts메서드는 비동기 함수니깐 컴포넌트들이 렌더링되기 전에 실행되고 컴포넌트들이 렌더링되는거 아닌가요? 그럼 저 메서드를 호출하면 잘 렌더링이 되야하는거 아닌가요??ㅠㅠ 왜 저렇게 콘솔창에는 무한하게 데이터값이 찍히고 컴포넌트에는 왜 렌더링이 되지 않는건가요??

  • javascript
  • react
  • node.js
황지호 댓글 2 좋아요 0 조회수 148

유저 인벤토리 Pt.2

해결됨

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

InventoryItemDataList에 유저가 보유한 아이템 목록이 저장하고 해당 리스트 객체를 PlayerPrefs로 저장할 때 JSON을 쓰는 이유는 PlayerPrefs에서 int, float, string만 저장할 수 있기 때문에로 이해했는데 맞나요? 그리고 굳이 JSON 이여 할 이유가 있나요? 또 PlayerPrefs에 유저가 접근이 가능하다고 하는데 그러면 악의적으로 변형이 가능하지 않나요? 이 경우는 어떻게 대비하나요?

  • C#
  • unity
  • 객체지향
moonfgg 댓글 3 좋아요 2 조회수 233

로그가 안찍혀요 ㅠㅠ

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용 OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 2024-10-03T23:40:00.663+09:00 INFO 9488 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-10-03T23:40:00.665+09:00 INFO 9488 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-10-03T23:40:00.670+09:00 INFO 9488 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. > Task :test BUILD SUCCESSFUL in 4s 4 actionable tasks: 1 executed, 3 up-to-date 오후 11:40:00: Execution finished ':test --tests "jpabook.jpashop.MemberRepositoryTest.testMember"'. 테스트는 통과하는데 저렇게 뜨면서 로그가 안찍히네요 ㅠㅠ 설정도 줄맞춰서 다 해봤는데 도저히 안돼서 .. 뭐가 문제일까요 ㅠ

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
Teo 댓글 2 좋아요 0 조회수 587

Getcomponent 호출 빈도에 관하여 질문이 있습니다.

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

저번에 조언해주신것을 통해서 다른 에셋들과 오픈소스들을 뜯어가면서 저만의 프레임워크를 설계중입니다. 그런데 다른 객체의 스텟을 가져와서 영향을 주려면 Getcomponent종류를 사용 할 수밖에 없는 것 같아 보이고 강의에서도 Getcomponent스킬의 대상을 지정할때 사용되는것을 보고 질문을 드립니다. Getcomponent가 프레임 단위로 실행되는 수준만 아니면 되는건가요? 그러면 혹시 다른 게임에서의 예시로 버그, 해킹 툴의 요소로 공격속도를 비정상적으로 올라간상태로 공격시 프레임드랍이 걸리는 이유가 이때 Getcomponent같은게 실행이 많이 되어서 그런걸까요? ex)다크소울이었는지 엘든링이었는지 기억이 나질 않지만 버그로 인해 프레임단위로 공격하고 렉을 유발시켰던걸로 기억합니다. public void SearchTargets() { var result = TargetSearcher.SearchTargets(Owner, Owner.gameObject); Targets = result.targets.Select(x => x.GetComponent<Entity>()).ToArray(); TargetPositions = result.positions; }

  • unity
  • modules
고우진 댓글 1 좋아요 0 조회수 122

회원 리포지토리와 회원 서비스

미해결

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

[질문 내용] 회원 리포지토리는 인터페이스와, 메모리 구현체로 이루어져 있습니다. 그런데 회원 서비스는 회원 리포지토리와는 반대로 클래스로만 이루어져 있는데 왜 회원 리포지토리는 회원서비스처럼 클래스로 만들지 않고 인터페이스와 메모리구현체 클래스로 나뉘었는지 궁금합니다.

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

StringTokenizer에 대한 개념은 영상에 없을까요

미해결

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

알고리즘 문제풀고있는데 이 개념은 영상에서 본적이없는거가타서요...

  • java
  • 객체지향
임다정 댓글 1 좋아요 0 조회수 115

[군인입니다] 클라우드 환경 gitpod에서 진행하고 있는데, 실행 시 Unable to locate persister 에러가 발생합니다.

미해결

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

<질문요약> Gitpod 환경에서 실습을 진행 중인데, 데이터베이스에 연결은 되지만, 엔티티가 Persist 되질 않습니다. [필자 개발환경] 군대 사지방에서 GitPod 클라우드 개발환경에서, VS Code IDEA 기반 Java 프로젝트를 생성해 JPA 기본편 강의를 듣고 있습니다. Gitpod 프로젝트 셋팅 값 - Java 17 버전 - Gradle java 프로젝트 [이슈사항] build.gradle 파일 plugins { id 'java' id 'org.springframework.boot' version '3.3.4' id 'io.spring.dependency-management' version '1.1.6' } group = 'com.inflearn' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.hibernate:hibernate-core' // JPA 하이버네이트 implementation 'javax.xml.bind:jaxb-api' implementation 'com.h2database:h2' runtimeOnly 'com.h2database:h2' // H2 DB 드라이버 같은 역할 testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } persistence.xml 파일 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="jakarta.persistence.jdbc.user" value="sa"/> <property name="jakarta.persistence.jdbc.password" value=""/> <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:~/jpa-basic"/> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.JtaPlatform" /> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence> > 위와 같이 build 파일과 resources/META-INF 폴더에 persistence.xml 파일까지 셋팅을 해주었습니다. JpaMain 클래스 / Member 클래스 구현한 후, JpaMain 클래스 실행 시 EntityManager 로 H2 Database에 Connection은 되지만, 아래와 같은 에러코드로 Persist 가 되지 않습니다. 여건 상 클라우드 환경에서 개발할 수 없기에, 이를 수행할 수 있는 방법을 알려주시면 감사드립니다.

  • java
  • jpa
우기 댓글 2 좋아요 0 조회수 207

useEffect 사이클

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

function App () { const [ count , setCount ] = useState ( 0 ); const [ input , setInput ] = useState ( "" ); const isMount = useRef ( false ); // 1. 마운트 : 탄생 useEffect (() => { console . log ( "mount" ); }, []); // 2. 업데이트 : 변화, 리렌더링 useEffect (() => { if ( ! isMount . current ) { isMount . current = true ; return ; } console . log ( "update" ); }); // 3. 언마운트 죽음 const onClickButton = ( value ) => { setCount ( count + value ); // console.log(count + value); }; return ( ... ); } 위 코드를 작성하고 새로고침을 하면 위 처럼 콘솔에 모든 mount, unmount, update가 뜹니다....코드상 update도 안떠야하는데 왜 뜨는걸까요?

  • javascript
  • react
  • node.js
opop0421 댓글 2 좋아요 0 조회수 138

문제풀이 해설 질문입니다.

미해결

자바 코딩테스트 - it 대기업 유제

문제에서 아래의 구문이 있는데. 영희는 산딸기가 없이는 기사를 지나쳐 갈 수 없다. 영희 입장에서 bfs를 먼저 돌리면 board[nx][ny] != 3도 조건에 포함시켜야 되는거 아닌가요??

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

애플리케이션 예외 사용에 대한 질문

미해결

토비의 스프링 6 - 이해와 원리

토비 스프링 3.1 책과 강의를 병행하면서 궁금한 점이 있어서 질문 남깁니다. 책 [4.1.4 예외처리 전략 - 애플리케이션 예외] 에서는 '외부의 예외상황이 원인이 아니라 애플리케이션 자체의 로직에 의해 의도적으로 발생시키는 예외도 있다' 라고 하는데요. 예를들어 잔고 부족과 같은 상황에서 예외상황에 대한 리턴값을 코드화 하는것 보다는 InsufficientBalanceException 과 같은 체크 예외를 던지는것도 좋은 방법(코드가 이뻐짐) 으로 소개가 됩니다. 그러나 강의에서 예외는 '정상적인 값을 리턴으로 수단으로 사용' 하는 것은 지양하고 '예외적인 상황에서만 사용' 해야 한다고 해주셔서 조금 헷갈리네요. 제가 이해를 잘못했을 수도 있는데요. 같은 상황이 맞다면 어떤게 더 맞는 방향인지 궁금합니다.

  • java
  • spring
차도인 댓글 1 좋아요 0 조회수 223

유니티3d 기초 하고 있는데. 따라하기가 전혀 안됩니다.

미해결

따라하면서 배우는 고박사의 유니티 기초

영상에서 나오는 학습자료 넣는것은 공유된 것과 다르내요. 제가 받은것과 영상과 달라 수업자체를 따라가기 어렵습니다. 뿐만 아니라, 대부분 영상들이 과정도 설명도 없이 넘어가는게 많습니다!

  • unity
대치동UP 댓글 1 좋아요 0 조회수 267

01-03 검색지원에 대해

해결됨

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

스크립트 문자 그대로 form 썼는데 서버에 새로고침해도 영상과 달리 검색어가 안내려옵니당 그리고 저도 진석님처럼 코드가 색깔별로 나오게끔 하고싶은데 그건 어떻게 하신건가요..? 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • react
  • python
  • django
  • web-api
  • htmx
haru2175 댓글 2 좋아요 0 조회수 103

currentFireRate 질문

미해결

[유니티 3D] 실전! 생존게임 만들기 - Advanced

총 구현 16:45까지 currentFireRate 설명을 들었는데 왜 0이 되어야 발사가 가능한지 이유를 잘 모르겠습니다

  • unity
강민기 댓글 0 좋아요 0 조회수 116

페이징관련해서 질문 있습니다

미해결

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

페이징관련해서 오라클에서 원래 엄청 힘들게 쿼리를 짜는 걸 쉽게 바뀌어 이제 setFist , setMax 값만 신경쓰면 된다고 하셧는데 그럼 궁금한 점이 만약에 게시판 같은거 만들 때 페이징 처리를 어떻게 하는지 궁금합니다 그거 관련된 내용이 로드맵에 있나요?

  • java
  • jpa
cowldnd123 댓글 2 좋아요 0 조회수 87

next auth error

미해결

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

// auth.ts import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ pages: { signIn: "/i/flow/login", newUser: "/i/flow/signup", }, providers: [ CredentialsProvider({ credentials: { username: { label: "Username", type: "text", placeholder: "jsmith" }, password: { label: "Password", type: "password" }, }, async authorize(credentials) { const authResponse = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.username, password: credentials.password, }), } ); if (!authResponse.ok) { return null; } const user = await authResponse.json(); return { email: user.id, name: user.nickname, image: user.image, ...user, }; }, }), ], }); // route.ts export { GET, POST } from "@/auth"; 각종 커뮤니티 글을 보긴했지만,, 해당 에러는 보이지 않아서 문의 남깁니다. 서버쪽 에러는 [auth][error] CallbackRouteError: Read more at https://errors.authjs.dev#callbackrouteerror [auth][cause]: TypeError: fetch failed at Object.fetch (node:internal/deps/undici/undici:11372:11) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Object.authorize (webpack-internal:///(rsc)/./src/auth.ts:31:38) at async Module.callback (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/actions/callback/index.js:241:39) at async AuthInternal (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/index.js:66:24) at async Auth (webpack-internal:///(rsc)/./node_modules/@auth/core/index.js:127:34) at async /Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:55759 at async eO.execute (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:46527) at async eO.handle (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:57093) at async doRender (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:1345:42) at async cacheEntry.responseCache.get.routeKind (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:1555:40) at async DevServer.renderToResponseWithComponentsImpl (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:1475:28) at async DevServer.renderPageComponent (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:1901:24) at async DevServer.renderToResponseImpl (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:1939:32) at async DevServer.pipeImpl (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:914:25) at async NextNodeServer.handleCatchallRenderRequest (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/next-server.js:272:17) at async DevServer.handleRequestImpl (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/base-server.js:810:17) at async /Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/dev/next-dev-server.js:339:20 at async Span.traceAsyncFn (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/trace/trace.js:154:20) at async DevServer.handleRequest (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/dev/next-dev-server.js:336:24) at async invokeRender (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/lib/router-server.js:173:21) at async handleRequest (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/lib/router-server.js:350:24) at async requestHandlerImpl (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/lib/router-server.js:374:13) at async Server.requestListener (/Users/kimyoungwoong/Desktop/next-x/node_modules/next/dist/server/lib/start-server.js:141:13) [auth][details]: { "code": "ECONNREFUSED", "provider": "credentials" } 이렇게 발생하고 있습니다. 신 버전인 만큼 .env AUTH_SECRET=woong 작성 해놨고 .env local 같은 경우는 NEXT_PUBLIC_API_MOCKING = enabled NEXT_PUBLIC_BASE_URL = http://localhost:9090 작성해놨습니다. 잘 해결이 안되서 글 남깁니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
hollis9797 댓글 3 좋아요 0 조회수 413

추상클래스,인터페이스

해결됨

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

3:26 예제 1출력결과는 어떻게 되나요? 예제들 출력결과까지 알려주셨으면 해요

  • python
  • java
  • c
  • 정보처리기사
SUDAM 댓글 2 좋아요 0 조회수 190

사용자 편의성을 위해 쿼리스트링 사용 시 SSR

해결됨

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

안녕하세요. NextJS 14 App Router로 개발중인 프로젝트가 있습니다. 사용자 편의성을 위해 페이지네이션 관련 상태값이나 사용자가 검색한 값을 쿼리스트링에 저장하는 훅을 만들어서 훅 내부에서 상태값을 받아 URLSearchParams로 쿼리스트링을 세팅해서 router push를 하거나 usePathname이나 useSearchParmas를 사용해서 쿼리스트링 값을 읽어서 상태값으로 업데이트하고 데이터 페칭을 하고 있습니다. 메인 메뉴들 전반적으로 이 훅을 사용중이여서 페이지 컴포넌트에 'use client'를 입력해줘야 하는 상황인데, 그러면 제가 사용자 편의성을 위해 쿼리스트링에 값을 저장하는 방식 때문에 SSR을 사용할 수 없는 상황인지 궁금합니다. 그리고 이런 편의성을 제공하면서 SSR을 하려면 다른 방법이 있을까요?

  • react
  • typescript
  • next.js
이응치읓 댓글 1 좋아요 0 조회수 180

오타 제보입니다.

해결됨

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

섹션 13 - 스레드 풀과 Executor 프레임워크1 강의 소스코드의 ExecutorBasicMain.java package thread.executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import static thread.executor.ExecutorUtils.*; import static util.MyLogger.log; import static util.ThreadUtils.sleep; public class ExecutorBasicMain { public static void main(String[] args) { ExecutorService es = new ThreadPoolExecutor(2, 2, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); log("== 초기 상태 =="); printState(es); es.execute(new RunnableTask("taskA")); es.execute(new RunnableTask("taskB")); es.execute(new RunnableTask("taskC")); es.execute(new RunnableTask("taskD")); log("== 작업 수행 중 =="); printState(es); sleep(3000); log("== 작업 수행 완료 =="); printState(es); es.close(); log("== showdown 완료 =="); printState(es); } } 다른곳들은 다 고쳐져있는 거 같은데, 이 클래스에만 showdown으로 아직 변경이 안되어있습니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
doxxx93 댓글 2 좋아요 0 조회수 206

인기 태그

인프런 TOP Writers

주간 인기글