inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

파라미터 ...

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Order에 생성 메서드를 구현할때 파라미터에 ... 넣는 의미를 모르겠습니다. 어느 경우에 사용하나요? public static Order createOrder (Member member , Delivery delivery , OrderItem... orderItems) { }

  • JPA
  • 웹앱
  • java
  • spring-boot
  • spring
루돌프친구 댓글 1 좋아요 1 조회수 360

Mysql 인메모리DB 설정, 로그 쿼리남기기

미해결

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

안녕하세요, 저는 처음부터 H2데이터베이스가 아닌 MySQL을 연결해서 사용하고 있습니다. 테스트 코드 작성 후 여러 이점으로 메모리디비 연결 하는 방법을 알려주셨는데, Mysql의 경우도 할 수 있나요? 현재 dependencies에 implementation 'mysql:mysql-connector-java' 추가된 상태입니다. 추가적으로 로그에 쿼리남기는 것도 보고싶어서, dependencies에 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' 만을 추가한 상태입니다. 로그에 남는것 같기는 한데 선생님처럼 예쁘게 보이는 것이아닌 줄글처럼 나오는데요, 혹시 추가하거나 봐야할 게 있을까요? application.properties에는 이렇게 설정했습니다, # JPA Settings spring.jpa.hibernate.ddl-auto = create spring.jpa.properties.hibernate.format_sql = true spring.jpa.properties.hibernate.show_sql = true

  • spring-boot
  • java
  • 웹앱
  • spring
  • JPA
루돌프친구 댓글 1 좋아요 0 조회수 2317

제가 제대로 이해한 게 맞을까요?

해결됨

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

안녕하세요 강사님! 처음에 쭉 따라하기만 하면서 무작정 쫓아가다보니 이해를 전혀 못 하고 있어서, 강의를 처음부터 다시 들으면서 구조부터 제대로 이해하려고 공부하고 있습니다. 다름이 아니라 Quest가 여러 개의 Task를 가질 수 있어 Task의 배열을 가지는 것까진 이해하는데, 굳이 Task의 배열을 가지는 TaskGroup을 만들고 이 TaskGroup까지 배열로 만든 이유가 뭘까요? 강사님께서 특정 Task를 완료해야 다음 Task가 나타나는 퀘스트도 있다고 하셨는데, 특정 TaskGroup이 완료된다면 이를 트리거로 비활성화 상태인 다른 TaskGroup이 Active 되면서 해당 내용을 구현한다고 생각한 게 맞을까요? TaskGroup 내에서는 Task 간에 순서를 지정하는 코드가 따로 없길래 Quest에 있는 TaskGroup들이 이러한 역할을 한다고 생각했는데, 이해한 내용이 맞는지 궁금하여 여쭤봅니다.

  • unity
베레벨 댓글 1 좋아요 0 조회수 297

화면에 콘솔이 두개씩 찍히는 상황

미해결

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

화면에 새로고침 할때마다 콘솔 찍은 부분들이 2개씩 항상 찍히던데.. 뭔 이유인지를 모르겠네요..

  • react
  • javascript
  • nodejs
이성찬 댓글 1 좋아요 1 조회수 581

프록시 초기화

미해결

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 강의 코드를 실행해보다가 궁금한점이 생겨서 질문드립니다. 예전에 MemberTest 클래스에서 아래 코드를 실행했을때는 member.getTeam() 에서 team에 대한 select 쿼리가 나가면서 프록시 초기화가 발생했습니다. @Test public void testEntity() throws Exception { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); //초기화 em.flush(); em.clear(); //확인 List<Member> members = em.createQuery("select m from Member m", Member.class) .getResultList(); for (Member member : members) { System.out.println("member = " + member); System.out.println("-> member.team = " + member.getTeam()); } } 하지만 MemberRepositoryTest 클래스에서 아래의 코드의 경우 member.getTeam() 으로 하면 team에 대한 select 쿼리가 나가지 않고 프록시 초기화가 발생하지 않습니다. 이 두가지 테스트의 차이가 무엇이길래 처음 테스트는 getTeam()으로 프록시 초기화가 되고 두번째 테스트는 getTeam()만으론 안되고 getTeam().getName() 까지 해야 프록시 초기화가 될까요? @Test public void findMemberLazy() throws Exception { //given //member1 -> teamA //member2 -> teamB Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); memberRepository.save(new Member("member1", 10, teamA)); memberRepository.save(new Member("member2", 20, teamB)); em.flush(); em.clear(); //when List<Member> members = memberRepository.findAll(); //then for (Member member : members) { member.getTeam(); System.out.println("Team = " + member.getTeam().getClass()); } }

  • java
  • spring
  • spring-boot
  • JPA
pj5016 댓글 1 좋아요 0 조회수 346

강의 재생 오류

미해결

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

The media could not be loaded, either because the server or network failed or because the format is not supported. 이런 에러가 나오는데 어떻게 해야하나요? 앞부분 이미 들었는데 이러네요.

  • react
  • javascript
  • nodejs
hahaha 댓글 3 좋아요 1 조회수 955

지그재그 타일생성 질문있습니다.

미해결

[유니티6] 따라하면서 배우는 하이퍼캐주얼게임 시리즈 01

플레이어가 지나가고 타일을 떨구는 부분에서 StartCoroutine으로 호출하는 부분이 동작을 안하는것 같아서 질문드려요. 코드는 똑같이 따라 쓴것 같은데 어떤 부분을 확인 해야 할까요? 타일 설정이나 플레이어 태그도 추가 한 상태입니다 ㅜㅜ private void OnCollisionExit ( Collision collision ) { Debug . Log ( collision . transform . tag . Equals ( "Player" )); if ( collision . transform . tag . Equals ( "Player" ) ) { StartCoroutine ( "FallDownAndRespawnTile" ); } } private IEnumerable FallDownAndRespawnTile () { yield return new WaitForSeconds ( 0.1f ); rigidbody . isKinematic = false ; yield return new WaitForSeconds ( falldownTime ); rigidbody . isKinematic = true ; if ( tileSpawner != null ){ tileSpawner . SpawnTile ( this . transform ); } else { gameObject . SetActive ( false ); } }

  • unity
  • C#
댓글 1 좋아요 1 조회수 424

Spring 재시작시 상품 데이터가 사라지는데, hibernate ddl-auto 설정 때문인가요?

해결됨

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] Spring이 런타임에서는 상품을 잘 저장하고, 불러오는 것도 정상적입니다. 그런데 스프링을 Re-Run 하게 되면, 상품이 전부 사라지네요. ddl-auto: create를 update로 바꿨더니 데이터가 안 사라지네요. 이거 말고 다른 이유는 없는 건가요?

  • spring-boot
  • JPA
  • java
  • spring
  • 웹앱
Roy 댓글 1 좋아요 1 조회수 364

IDENTITY 전략 영속성 텍스트 상태

해결됨

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

안녕하십니까 기본 키 매핑 강의 23:37분에 IDENTITY 시퀀스 전략을 사용할 때, em.persist(member)를 할 때 키를 모르기 때문에 바로 Insert 문을 날린다고 하셨는데 그럼 이때 트랜잭션 커밋 한것 처럼 영속성 컨텍스트 상태에 있는 모든 상태가 적용되나요? 아니면 em.persist(member)만 적용되나요?

  • JPA
  • java
배효셩 댓글 1 좋아요 1 조회수 246

10분 즈음에 더미데이터 filter 안 되시는 분

미해결

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

diaryList[0].filter 이렇게 하시면 콘솔창에서 필터가 되어 있는 모습을 볼 수 있습니다. 한 30분동안 왜 필터가 안 되는지 forEach로 찍어봤는데 배열 하나 안에 객체가 여러개 있는거기 때문에 저렇게 해야하는거 같긴 한데, 또 강사님은 그냥 하셔도 출력이 되시네요. 무튼 저는 위의 방식으로 해결했습니다.

  • react
  • nodejs
  • javascript
Anfield 댓글 2 좋아요 1 조회수 496

Sort관련 질문있습니다!.

미해결

실전! Querydsl

안녕하세요 ! 스스로 이해를 잘못하고있는거 같아서 이전 강의들 포함 다시 돌려보아도 이해가 되질 않아 질문드립니다. pageable을 클라이언트가 order조건까지 요청하였을때 그 pageable의 sort()를 querydsl의 orderby로 변환하는 과정에서 OrderSpecifier를 사용한다고 이해하였습니다. 근데 적어주신 내용에 "루트 엔티티 범위를 넘어가는 동적 정렬 기능이 필요하면 스프링 데이터 페이징이 제공하는 Sort 사용하기 보다는 파라미터를 받아서 직접 처리하는 것을 권장한다." 라는 의미가 예를들어 Member의 team의 name으로 sort를 하는데 클라이언트가 teamNameOrder=True 같은 값을 요청하고 그요청 파라미터를 기준으로 동적으로 querydsl쿼리 order를 처리하라는 말씀이신가요? 머리가 안좋아서 헷갈리네요 ㅜ_ㅜ

  • java
  • JPA
이북자 댓글 1 좋아요 1 조회수 422

Task 스크립트의 InitialSuccessValue에 대해서

해결됨

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

Task 스크립트의 InitialSuccessValue에서 플레이어 레벨이나 스탯을 예로 설명해주셨는데, 만약 예를 들어주신대로 Task를 구성한다고 하면 InitialSuccessValue를 어떻게 구성해서 플레이어의 정보를 넘겨야할까요? 스스로 답이안나와서 질문해봅니다 ㅠㅠ

  • unity
Bina 댓글 1 좋아요 0 조회수 204

BooleanBuilder, BooleanExpression 차이

미해결

실전! Querydsl

영한님 안녕하세요 작년 7월부터 스프링 공부했는데 어느새 여기까지 왔네요,, 좋은 강의 덕분에 재밌게 잘 공부하고 있습니다 . BooleanBuilder와 BooleanExpression 차이를 알고 싶어서 다이어그램을 보았습니다. Expression을 상속하고 있는 클래스더라구요 그래서 "도대체 무슨 차이지"라고 생각이 들어 찾아보았습니다. 동욱님 블로그 를 참고하고나서 제 생각엔 BooleanBuilder는 where 조건에 BooleanBuilder 객체 자체를 넣으니 코드를 이해하는데 가독성이 떨어진다고 생각했습니다.(조건들이 하나의 BooleanBuilder에 있기 때문) . BooleanExpression을 사용하면 여러 조건들을 각각 BooleanExpression을 반환하는 메서드를 만들어 가독성 좋게 조건들을 나열할 수 있고, 조합을 할 수 있다라고 생각했습니다. . 하지만 옛날에 영한님이 Q&A에 대한 답 을 보았을 때, BooleanBuilder로도 충분하게 가독성 좋은 코드를 만들 수 있더라구요 . 그래서 제 생각엔 두 가지의 차이점이 보였습니다 . 1. BooleanExpression은 null일 경우 그냥 null만 반환해도 되지만, BooleanBuilder는 항상 BooleanBuilder라는 객체를 생성하여 반환해야하기 때문에 리소스 측면에서 낭비이다? 2. BooleanExpression은 ","을 이용해서 where조건에 여러 BooleanExpression의 조건들을 나열할 수 있지만, BooleanBuilder는 where에 나열할 수 없다? 정도라고 생각이 드는데, 아직까지 뭐가 확실하게 다른거지라는 생각이 들어 질문드립니다! 감사합니다

  • java
  • JPA
gusdn85554 댓글 1 좋아요 1 조회수 2260

팩토리 메서드 관련해서 질문이 있습니다!

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요!! 강의를 보면서 팩토리 메서드에 대해 궁금증이 몇가지 생겼는데 구글링을 해봐도 잘 나오지 않아서 질문 올립니다🥲 1. 팩토리 메서드를 사용하는 기준이 있을까요? 생성자를 통해 객체를 생성하지 않고, 팩토리 메서드를 사용하는 경우 이름을 가질 수 있다, 하위 타입 객체를 반환할 수 있다 등등의 장점이 있고, 이에 반해 몇몇 단점도 있는것 같은데 단순히 팩토리 메서드 내부에서 생성자만 호출하는 경우에도 실무에서는 팩토리 메서드를 웬만하면 다 사용하는 편인가요?? 생성자 대신 팩토리 메서드를 사용하여 객체를 생성하는 상황이나 기준이 있는지 궁금합니다! 2. 팩토리 메서드를 사용하는 경우 프로젝트에서 네이밍 규칙을 어떻게 가져가는 것이 좋을까요? 강의를 듣고 복습하면서 Order와 같이 연관 관계들이 얽혀있는 팩토리 메서드는 createOrder와 같은 좀 더 의미있는 이름을 사용하고, 그냥 단순히 객체만 생성하는 경우에는 of를 사용해서 실습을 해보았습니다! 실무에서 프로젝트를 진행하면 위와 같이 어떠한 룰을 만들어서 사용하시는지, 아니면 하나의 이름으로 통일해서 가져가시는지 궁금합니다 ㅎㅎ 감사합니다 😀

  • spring
  • java
  • spring-boot
  • JPA
  • 웹앱
springbom 댓글 1 좋아요 0 조회수 328

HOC auth.js에 관한 오류 발생 시 참고 사항

미해결

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

강사님 강의 내용과 똑같은 코드를 작성했으나 오류가 계속 생성됬는데 어찌저찌 풀어서 참고하실 분들을 위해 남깁니다 제가 오류가 발생한 상황(hoc/auth.js) [강사님과 같은 코드를 작성 후 서버/클라이언트 실행 시 빈 화면이 나옴] (오류 내용 : unctions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it.) - 해결책 : AuthenticationCheck 리턴 시 함수로 리턴하는 것이 아닌 JSX 컴포넌트로 리턴하라고 합니다 (참고 : https://www.inflearn.com/questions/357383) - 실제로 auth.js의 마지막 부분인 을 return AuthenticationCheck -> return < AuthenticationCheck />로 변경 시 정상적으로 작동함을 확인할 수 있었습니다. [hoc/auth.js 코드] import React, { useEffect } from "react"; import { useDispatch } from "react-redux"; import { auth } from "../_action/user_action"; import { useNavigate } from "react-router-dom"; export default function (SpecificComponent, option, adminRoute = null) { //option : null = anyone, true = login user only, false = logout user only function AuthenticationCheck(props) { const dispatch = useDispatch(); const navigate = useNavigate(); useEffect(() => { dispatch(auth()).then((response) => { console.log("auth? ", response); if (!response.payload.isAuth) { // login yet if (option) { navigate("/login"); } } else { // login if (adminRoute && !response.payload.isAdmin) { navigate("/"); } else { if (option === false) { navigate("/"); } } } }); }, []); return ( <SpecificComponent /> // component return이 없으면 React 실행이 안됨. ); } return <AuthenticationCheck />; }

  • hoc
  • nodejs
  • react
류지혜 댓글 2 좋아요 6 조회수 832

배운 내용을 토대로 swr을 이용하여 프로젝트를 하고 있는데요!

해결됨

Slack 클론 코딩[실시간 채팅 with React]

const {data, error, revalidate}=useSWR(주소, fetcher) -> 주소: fetcher 함수 실행을 요청할 주소 fetcher: 어떤 기능을 수행할 지 정의해 둔 함수 요청이 성공되면, revalidate 함수가 실행된 뒤, data로 응답을 받아와서 응용할 수 있다. 이렇게 이해했는 데 맞을까요? 그리고, fetcher는 하나가 아니라 여러가지를 만들어도 괜찮을까요? get을 할 수 있는 fetcher, post를 할 수 있는 fetcher 등 나눠서 사용할 수 있을까요? 그리고 프로젝트를 함께 진행하고 있는 친구가 회원가입을 하기 위해 post를 해줬고, 성공 시 response로 관련 데이터를 보내주는데 /api/user에 굳이 userData를 넣어서 또 get으로 받아볼 수 있도록 해야 하냐고 물어보던데 당연히 필요한 거 아닌가..? 라는 생각이 들지만 명확한 근거를 모르겠어서 질문드립니다.

  • 웹팩
  • react
  • babel
  • typescript
  • Socket.io
  • 클론코딩
ssez 댓글 1 좋아요 0 조회수 219

퀘스트 시스템 섹션 관련 질문드립니다

해결됨

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

강의 잘듣고있습니다. 듣다가 궁금한게 생겨서 질문드립니다. 퀘스트 시스템 섹션에서 중간중간 확인작업(제대로 동작하는지) 없이 논스톱으로 작성해서 섹션 마지막쯤에 확인작업을 하는데, 보통 현업 개발자가 이런 퀘스트 시스템을 개발한다고 하면 마지막에 확인작업을 해도 될만큼 구조가 바로 잡히는건가요?

  • unity
Bina 댓글 1 좋아요 0 조회수 268

람다식과 익명 클래스

해결됨

더 자바, Java 8

댓글로 추가 질문 드렸었는데 확인이 어려우신 것 같아 새로운 질문으로 적습니다! (원글 : https://www.inflearn.com/questions/520706 ) 그럼 아래와 같은 코드의 경우 익명 클래스를 생성하는 것이 아닌건가요? (아래의 코드가 람다식을 통해 '해당 타입의 객체'를 생성하는 것임은 이해했습니다!) RunSomething runSomething = () -> System.out.println("익명 클래스");

  • java
현상혁 댓글 1 좋아요 0 조회수 346

SecurityConfig의 rememberMe 질문입니다.

미해결

스프링 시큐리티

의존성 주입을 받음에도 불구하고 Remember me on this computer. 체크박스를 클릭하고 로그인시 아래와 같은 에러가 발생합니다. SecurityConfig의 코드는 아래와 같습니다. @Autowired도 해봤지만 결과가 같고, 체크박스 표시를 하지 않으면 로그인이 됩니다. 뭐가 문제인지 잘 모르겠습니다 ㅠㅠ package spring.security ; import lombok. RequiredArgsConstructor ; import org.springframework.beans.factory.annotation. Autowired ; import org.springframework.context.annotation. Configuration ; import org.springframework.security.config.annotation.web.builders.HttpSecurity ; import org.springframework.security.config.annotation.web.configuration. EnableWebSecurity ; import org.springframework.security.config.annotation.web.configuration. WebSecurityConfigurerAdapter ; import org.springframework.security.core. Authentication ; import org.springframework.security.core. AuthenticationException ; import org.springframework.security.core.userdetails. UserDetailsService ; import org.springframework.security.web.authentication. AuthenticationFailureHandler ; import org.springframework.security.web.authentication. AuthenticationSuccessHandler ; import org.springframework.security.web.authentication.logout. LogoutHandler ; import org.springframework.security.web.authentication.logout. LogoutSuccessHandler ; import javax.servlet.ServletException ; import javax.servlet.http. HttpServletRequest ; import javax.servlet.http. HttpServletResponse ; import javax.servlet.http. HttpSession ; import java.io.IOException ; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig extends WebSecurityConfigurerAdapter { private final UserDetailsService userDetailsService ; @Override protected void configure ( HttpSecurity http ) throws Exception { // 인가 http . authorizeRequests () . anyRequest () . authenticated (); // 인증 // FormLogin 인증 방식 api http . formLogin () . defaultSuccessUrl ( "/" ) . failureUrl ( "/login" ) . successHandler ( new AuthenticationSuccessHandler () { @Override public void onAuthenticationSuccess ( HttpServletRequest request , HttpServletResponse response , Authentication authentication ) throws IOException , ServletException { System . out . println ( "authentication" + authentication . getName ()); response . sendRedirect ( "/" ); } } ) . failureHandler ( new AuthenticationFailureHandler () { @Override public void onAuthenticationFailure ( HttpServletRequest request , HttpServletResponse response , AuthenticationException exception ) throws IOException , ServletException { System . out . println ( "exception" + exception . getMessage ()); response . sendRedirect ( "/login" ); } } ) . and () . logout () . logoutSuccessUrl ( "/login" ) . addLogoutHandler ( new LogoutHandler () { @Override public void logout ( HttpServletRequest request , HttpServletResponse response , Authentication authentication ) { HttpSession session = request . getSession (); session . invalidate ();; } } ) . logoutSuccessHandler ( new LogoutSuccessHandler () { @Override public void onLogoutSuccess ( HttpServletRequest request , HttpServletResponse response , Authentication authentication ) throws IOException , ServletException { response . sendRedirect ( "/login" ); } } ) . and () . rememberMe () . tokenValiditySeconds ( 3600 ) // default : 14 일 . userDetailsService ( userDetailsService ()); } }

  • Spring Security
  • spring-boot
  • java
댓글 1 좋아요 0 조회수 254

인기 태그

인프런 TOP Writers

주간 인기글