inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

현업에서 데이터베이스 스키마 자동 생성 기능을 운영 장비에서 사용하지 않는 이유

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 데이터베이스 스키마 자동 생성 부분 강의 관련해서 궁금한 점이 생겨 질문 드립니다. 강의에서 생성된 DDL은 개발 장비에서만 사용해야 하며, 운영 장비에서는 사용하면 안 된다. 라고 말씀해주셨습니다. 그리고, 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬 은 후 사용 이라고 강의 자료에 나와 있는데요. 그렇다면, 실제 현업에서는 운영 서버에 새로운 테이블을 create 하거나, 기존 테이블을 update(칼럼 추가 혹은 변경 등...) 하는 경우에 어떻게 하는지 궁금합니다. 강의 내용 + 서칭에 따르면, 로컬에서 DB 스키마 자동 생성 -> 검증 및 정제 -> 최종 스키마를 DB 툴을 이용해서 추출 -> 최종 스키마인 "create table ~~"을 테스트 DB에 적용(이 때, JPA 를 통해서가 아닌, 스키마 자체를 적용해야 함) -> QA 진행 , 검증 및 정제 -> 최종 스키마를 DB 툴을 이용해서 추출 -> 최종 스키마인 "create table ~~"을 테스트 DB에 적용(이 때, JPA 를 통해서가 아닌, 스키마 자체를 적용해야 함)을 운영 장비에 적용 하는 방식으로 진행하는 걸까요? (물론, 여건에 따라, 테스트 서버도 JPA DB 스키마 자동 생성 기능으로 처리할 수도 있을 듯 합니다.) create 뿐만 아니라, update 또한 운영서버에 적용하면 안되며, update 또한 테스트서버에 적용하는 것은 지양한다고 하셨습니다. 운영 서버의 소스코드가 (JPA DB 자동 스키마 생성기능을 통해) 테스트 서버, 운영 서버의 DB create, update 권한을 가진다는 것 자체에 대해 우려하시는 건가요? 아니면, DB 관련하여 컨트롤하는 기능 중, JPA 에서 설정하지 못하는 것이 있어서 그런건가요? 말씀해주신 결과적인 사건들을 통해 위험하다 는 것은 알겠는데, 그 구체적인 이유를 설명하라고 한다면, 아직 정확하게 말 할 수 없을 듯 하여, 질문 남깁니다. 긴 글 읽어주셔서 감사합니다.

  • jpa
  • JPA
  • spring
  • java
Seo Hyun Park 댓글 1 좋아요 1 조회수 1096

배포 후 로그인 인증이 안됩니다..

미해결

따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 강의대로 배포중인 상태입니다. 회원가입도 잘 되어서 로그인도 되는데 로그아웃이란 커뮤니티 생성 시 401 (Unauthorized)에러가 뜹니다.. 로컬에서는 아무런 문제 없이 잘 작동하고 있습니다. 아무리 찾아봐도 어떤 문제가 있는지를 모르겠습니다 ㅠㅠ

  • nodejs
  • node.js
  • postgresql
  • react
  • typescript
  • 클론코딩
  • docker
  • next.js
  • Next.js
  • 클론코딩
김규혁 댓글 1 좋아요 0 조회수 349

searchbar 포트폴리오 리뷰 질문

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

searchbar 포트폴리오 리뷰에서 props로 searchbar 컴포넌트에 refechBoardsComment넘겨서 searchbar 컴포넌트에서 refechBoardsComment이용하여 페이지네이션을 수정없이 lastpage를변경할 수 있는데 const { data: dataBoardsCount, refetch: refechBoardsCount } = useQuery<Pick<IQuery, "fetchBoardsCount">,IQueryFetchBoardsCountArgs>(FETCH_BOARDSCOUNT,{variables:{search:keyword}}); 이렇게 FETCH_BOARDSCOUNT에 variables 값의 search를 keyword(검색어)로 주어도 똑같이 작동하는데 이 방법이 refechBoardsComment props로 넘겨줄 필요없어 간단한거 같은데 refechBoardsComment이용한 것과 같은거 맞나요? 아님 refechBoardsComment를 이용한 것과 차이가 있는 건가요?

  • node.js
  • seo
  • nodejs
  • react
  • next.js
  • graphql
  • Next.js
Main 댓글 1 좋아요 0 조회수 403

테스트코드에서 엔티티 set과 builder패턴 사용

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 안녕하세요 테스트코드 작성중 궁금한게 생겨 질문드립니다. @Setter 어노테이션을 자주 사용하게 되면 어디서 변경될지 모르기때문에 사용을 하지말라고 알고 있는데 김영한 강사님께서는 테스트 코드 작성시 set을 사용하셔서요 테스트코드에서만 setter를 사용한다면 문제가 없을까요? 이에 관련하여 구글링을 해보았는데 테스트코드 한정으로 setter를 사용한다고 하는 분들도 있네요 저 같은경우는 테스트코드에서도 @Builder 어노테이션을 통해서 set을 대체하고 있는데요 아무래도 좀 귀찮은면이 있어서... 엔티티에 @Setter를 선언하고 테스트 코드에만 사용하는것이 더 좋을지 그래도 @Setter의 위험성을 생각해서 사용하지말고, @Builder를 사용하는것이 더 좋을지 질문드립니다. 감사합니다.

  • java
  • 웹앱
  • 웹앱
  • JPA
  • jpa
  • spring
  • spring-boot
chl.cken 댓글 1 좋아요 0 조회수 772

각각 sort해서 계산하는 것과 계산한 뒤 모아서 sort하는 것

해결됨

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 3-2 공통 원소 구하기(two pointers algorithm) 문제입니다. public List<Integer> solution(int n, int[] arr1, int m, int[] arr2) { List<Integer> answer = new ArrayList<>(); Set<Integer> set = new HashSet<>(); for(int i= 0 ; i<n; i++) { set.add(arr1[i]) } for(int i= 0 ; i<m; i++) { if(!set.add(arr2[i])) answer.add(arr2[i]); } answer.sort((o1, o2) -> {if(o1 < o2) return -1; else if(o1 == o2) return 0; else return 1;}); return answer; } 위는 제가 수업 전에 작성한 코드입니다. 1. HashSet으로 중복된 것을 거르고 List로 넣은 후에 2. List를 오름차순으로 정렬 순으로 코드를 작성했는데 마지막 테스트 케이스에 시간초과가 발생했습니다. [ 질문 ] sort때문에 시간 초과가 나는 것 같은데, 강사님 방법처럼 갖고있는 모든 원소를 sort하는 것보다 중복된 원소만 모아둔 뒤 sort하는 것이 덜 부담될 것이라 생각했는데 왜 시간초과가 나는 것인가요? 여기서 시간초과가 날 것이라는 것을 사전에 미리 알 수 있는 방법이 무엇일까요?

  • 코딩-테스트
  • java
  • 코테 준비 같이 해요!
  • 공통원소구하기
khjung1654 댓글 1 좋아요 0 조회수 431

극초보 코린이 인텔리제이 빌드 직후 질문

미해결

인텔리제이 사용중인 코린이 입니다. 혼자 게시판 만들기 위해서 프로젝트를 생성하였는데 이렇게 왼쪽에 보시는것과 같이 빨간색이 뜨는데 왜뜨는지 해결방법이 무엇인지 도와주세요..ㅜㅜ

  • 스프링부트
  • springboot
  • spring
  • java
TAKE MUSIC 댓글 0 좋아요 0 조회수 357

section 04 퀴즈 질문입니다 ㅠ

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

삭제하기 버튼을 눌럿을때 이런 에러가 뜨는데 이유를 모르겠습니다 ㅜㅠ

  • Next.js
  • node.js
  • graphql
  • react
  • next.js
  • seo
  • nodejs
호겸 댓글 1 좋아요 0 조회수 316

백엔드 뉴비입니다. 뷰도 만들고 싶은데 SSR말고 CSR 하는게 좋을까요?

해결됨

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

백엔드 뉴비입니다. 뷰도 만들고 싶은데 SSR말고 CSR 하는게 좋을까요? 혼자 프로젝트 연습중인데요! 타임리프보다는 Vue.js같은 걸 하는게 나중에 협업할때 좋을 것 같아서요. 이왕 공부하는거 타임리프보다 Vue.js 공부할까요? 정말 고민이에요..

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

flutter doctor 실행 했을 때 안드로이드스튜디오 - java 관련 경고가 나타납니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

flutter doctor 실행 했을 때 안드로이드스튜디오 - java 관련 경고가 나타납니다. 에러가 아닌 경고라서 진행에 문제가 없을 것으로 생각이 됩니다만 해결하고 싶어서 구글에 검색을 해봐도 해결 방법을 모르겠습니다.

  • flutter
  • 클론코딩
  • Flutter
  • 클론코딩
  • m1세팅
  • 안드로이드스튜디오
  • java
김재민 댓글 1 좋아요 0 조회수 584

graphql 관련 질문이 있습니다.

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

안녕하세요 수업 내용 중, graphql 실습 관련하여 궁금한 것이 있습니다. 실습 과정에서 createProduct API에 파라미터 값을 저장해서 보내려 하는 과정에서 mutation을 구성할 때 createProductInput 이라는 부분은 REST API의 다중 JSON 방식으로 보내는 것으로 해석하면 될까요? 그런데 해당 데이터를 fetchProduct 로 조회 시 다중 JSON과 같은 그림이 아닌, 그냥 같은 한 덩어리로 넘어오는데 왜 저장할 때는 다중 JSON과 같은 방식으로 넣고 조회 시에는 그냥 뭉쳐져서 조회 되는지 차이가 궁금합니다. (그럼 굳이 CREATE 시 다중 JSON과 같은 방식으로 넣는 이유가 궁금합니다) 그리고 중간에 createProductInput 을 사용하는 이유에 대해서 오해를 방지하기 위함이라고 말씀해주셨는데 키 값도 있는데 왜 오해를 불러 일으킨다는 것인지 잘 이해를 못했습니다. 질문 요약 첫 사진의 createProductInput 부분이 REST API의 다중 JSON 같은 방식이라고 보면 될까요? createProduct 로 값을 넣을 때는 이중 JSON과 같은 방식으로 파라미터를 넣고 API를 넘겨줬는데 데이터를 조회하면 그냥 1차원 JSON으로 넘어오는데 그럼 왜 굳이 createProduct 에서 이중 JSON 방식으로 구성해서 넣는 것인지 궁금합니다. createProduct 에서 createProductInput 로 한 번 더 감싸는 자세한 이유 (수업 중간에 number라는 키 값으로 보이는 것도 있는데 오해를 불러 일으킬 수도 있다는 말씀에서 왜 오해인지 자세히 이해를 못함) 입니다. 감사합니다.

  • Next.js
  • node.js
  • seo
  • nodejs
  • next.js
  • graphql
  • react
FRONTEER 댓글 1 좋아요 0 조회수 500

맥용, prettier 단축키

해결됨

따라하며 배우는 리액트 A-Z[19버전 반영]

안녕하세요 vscode에서 Prettier 설치를 했는데 shift + option + f 단축키가 먹히질 않네요ㅠ 왜 그런 건지 알 수 있을까요..?

  • redux
  • react
  • tdd
  • typescript
  • next.js
  • Next.js
이은혜 댓글 1 좋아요 0 조회수 535

JPA 강의를 듣고 프로젝트를 만들 수 있나요?

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 아니요 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. 이번에 백엔드 단기간 취업 목적으로 JPA 활용 1, 2 를 들어서 포트폴리오에 첨가할 프로젝트를 만들 계획이 있습니다. 부수적인 CS, 언어, 데이터베이스 등등의 지식이 뒷받침된다는 전제하에 만들 수 있나요? MVC 강의가 있던데 이것을 듣지 않는다면 불가능하거나 혹은 지장이 많나요?

  • spring-boot
  • 웹앱
  • JPA
  • spring-boot
  • java
  • jpa
  • 웹앱
  • spring
ngh 댓글 1 좋아요 1 조회수 1056

TypeORM 에러 및 middleware 설치 이후 cors 에러 문의드립니다.

미해결

따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)

안녕하세요, 강사님! 강의 듣던 도중 해결하지 못한 에러가 있어 조언해주실 수 있으신지 문의드립니다. 1 TypeORM에서 다음과 같은 에러가 뜹니다. Server running at http://localhost:4000 QueryFailedError: tables can have at most 1600 columns at PostgresQueryRunner.query (생략) { query: 'ALTER TABLE "posts" ADD "title" character varying NOT NULL', parameters: undefined, driverError: error: tables can have at most 1600 columns at Parser.parseErrorMessage (생략) { length: 100, severity: 'ERROR', code: '54011', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'tablecmds.c', line: '6819', routine: 'ATExecAddColumn' }, length: 100, severity: 'ERROR', code: '54011', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'tablecmds.c', line: '6819', routine: 'ATExecAddColumn' } <== 이 부분이 계속 반복됩니다 (반복적으로 테이블이 생성되는 듯) stackoverflow 를 찾아보니 oneToMany relation이 문제가 된다는 글을 봤는데... 제가 백앤드쪽 지식이 전무하다보니, oneToMany 데코레이터로 설정된 Entity를 어떻게 수정해야하는건지 잘 모르겠고, 강사님 코드와 동일하게 작성한 것 같은데 뭐가 문젠지 잘 모르겠습니다. 특히나 아래 코드 중, { length: 100, severity: 'ERROR', .... } 이 부분이 반복적으로 로그에 찍히는데 어떻게 해결해야할지 잘 모르겠습니다. 이 글 을 보니, nomarlization을 진행하라는데 이게 맞는 솔루션인가요? 백앤드 해보고 싶어서 아는 것 없이 무작정 따라하는 중인데, 지식이 부족해서 제대로 된 해결방법이 뭔지 알 수가 없네요.. 2 middleware 설치 전까지는 회원가입 기능이 잘 되었었는데, middleware 설치 이후로는, 로컬호스트 3000에서 cors 에러가 뜹니다. (아래 이미지 첨부) 로그인, 회원가입 기능 어떤것도 되지 않는 상태이고, token도 생성되지 않습니다. 일단 계속해서 강의를 듣고 있는데 에러 해결이 안되어 더이상 진도를 나갈 수가 없어서 문의남깁니다 ㅠㅠ Access to XMLHttpRequest at 'http://localhost:4000/api/auth/me' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. { "message": "Network Error", "name": "AxiosError", "stack": "AxiosError: Network Error\n at XMLHttpRequest.handleError (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:168:14)", "config": { "transitional": { "silentJSONParsing": true, "forcedJSONParsing": true, "clarifyTimeoutError": false }, "adapter": [ "xhr", "http" ], "transformRequest": [ null ], "transformResponse": [ null ], "timeout": 0, "xsrfCookieName": "XSRF-TOKEN", "xsrfHeaderName": "X-XSRF-TOKEN", "maxContentLength": -1, "maxBodyLength": -1, "env": {}, "headers": { "Accept": "application/json, text/plain, /" }, "baseURL": "http://localhost:4000/api", "withCredentials": true, "method": "get", "url": "/auth/me" }, "code": "ERR_NETWORK", "status": null } 나름대로 검색도 해보고, node_modules 싹 날리고 재설치해봤으나.. ㅠㅠ 답변 기다리겠습니다 감사합니다

  • node.js
  • Next.js
  • 클론코딩
  • postgresql
  • react
  • 클론코딩
  • nodejs
  • next.js
  • docker
  • typescript
sharonhana12 댓글 2 좋아요 0 조회수 824

stockservice 함수의 saveandflush 질문이 있습니다

해결됨

재고시스템으로 알아보는 동시성이슈 해결방법

stockservice 클래스의 decrease의 saveandflush를 synchronized를 위해 사용한 것은 이해가 갔습니다. 근데 jpa를 사용할 때 값을 update할 때 더티체킹에 의해서 update가 확인이 되어 repository를 통해 save를 하지 않아도 되는걸로 알고 있는데 실무에선 save나 saveandflush를 사용하지 않고 decrease 메서드만 사용해도 될까요?

  • java
  • spring
  • 동시성
  • 동시성
정발산 댓글 1 좋아요 1 조회수 642

api/v1/simple-orders로 api호출을 하면 자꾸 InvalidDefinitionException이 발생합니다.

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요 강의 잘 보고 있습니다. 다름이 아니라 강의를 보면서 따라서 하고 있는 도중에 api/v1/simple-orders로 접근을 하면 invalidDefinitionException이 발생합니다. 혹시 오타가 있나해서 몇번이고 다시 확인하고 orderRepository클래스도 붙여넣고 initDB클래스도 붙여넣었는데도 안되네요... 찾아보니까 jackson 라이브러리가 객체를 JSON타입으로 바꾸면서 생기는 오류라고 하는데 도움을 받을 수 있을까요? 아래는 압축한 파일일 있는 링크입니다. https://drive.google.com/file/d/1FGTNqcXxTkw2l-UeVN50kW6v12b4oGQj/view?usp=sharing

  • java
  • spring-boot
  • JPA
  • jpa
  • spring
이상민 댓글 1 좋아요 0 조회수 1240

서비스와 리포지토리의 차이

미해결

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

MemberService의 메소드를 보면 findMembers와 findOne같은 경우 Repository의 메소드를 (이름만 바꿔주는 식으로?) 한번 더 호출해주는 역할만 하고 join만 중복 회원 검증이라는 추가 적인 일을 하고 있는데요 이렇다면 굳이 Service단을 만들어서 코드를 입력해야하는 이유가 무엇인가요? findMembers가 필요하다면 그냥 findAll을 사용하면 되고, findOne이 필요하다면 findById를 사용하면 되지 않나요? 차라리 save 메소드에 중복회원을 검증하는 로직을 추가하는게 더 효율적이지 않나요?

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

제너레이터 함수 안 yield 구문 실행에대해 질문드립니다..

미해결

[리뉴얼] React로 NodeBird SNS 만들기

function* test() { yield 1; yield 2; } =============== const gen = test() =============== gen.next () { "value": 1, "done": false } 보통 제너레이터 함수를 설명할때, 개발자 도구에서 이런식으로 설명을 많이 하는것같은데... 설명만 보면 yield 구문실행을 위해선, next() 라는 함수를 사용해야된다는건 알겠습니다.. 근데 실제코드에서는 next() 함수를 실행하지않는데, 어떻게 yield 구문들이 실행되는지 이해가 안됩니다..

  • react
  • node.js
  • express
  • redux
  • next.js
  • nodejs
  • Next.js
핵빈스 댓글 1 좋아요 0 조회수 253

static 선언 이유

미해결

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

static을 붙여서 생성하면 클래스 변수기 때문에 인스턴스를 생성하지 않고 바로 사용할 수 있을 때 붙인다고 알고 있는데 sequence와 store에 static을 붙인 이유가 무엇일까요?

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

Wsl mysql 질문

미해결

[리뉴얼] React로 NodeBird SNS 만들기

오늘 하루 mysql 설정하는거때문에 다 날려먹으면서 혼자서 해보고있는데 우여곡절 끝에 WSL에 mysql까지 실행 성공시켜서 그안에 react-nodebird database가 있는건 확인했는데 윈도우에 깐 mysql-workbench랑 연동을 못하고있는데 크게 상관 없을까요 제로초쌤..?

  • Next.js
  • node.js
  • redux
  • nodejs
  • react
  • next.js
  • express
CJW 댓글 1 좋아요 0 조회수 522

실습 오류

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.hellospring.service.MemberService.join(hello.hellospring.domain.Member)" because "this.memberService" is null 테스트케이스에서 실행했는데 오류가 뜹니다 this.memberService 가 null이라 오류인건 알았는데 왜 그런건가요? 강의코드 복붙해도 그러네요

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

인기 태그

인프런 TOP Writers

주간 인기글