172만명의 커뮤니티!! 함께 토론해봐요.
미해결
React Native with Expo: 제로초에게 제대로 배우기
만들어보고 있는 앱을 실 기기에 설치해서 테스트 해볼 일이 있어 apk 파일을 추출하려 합니다. 백엔드 url이 http 라 app.json android 내에 useClearTextTraffic true 도 추가해주었습니다. "usesCleartextTraffic": true eas.json 내 build 에 release 를 추가하였고, "release": { "android": { "buildType": "apk" } } eas build --platform android --profile release 명령어를 통해 빌드 했습니다. 생성된 apk 를 실 기기에 설치 후 실행 했을 때 api 호출을 통해 데이터를 받아와서 뿌려주는 부분에 데이터가 하나도 나오고 있지 않습니다. 설치 된 development build 를 에뮬레이터에서 실행해보아도 마찬가지로 데이터가 하나도 나오지 않고, catch 부분에서 에러도 콘솔에 찍히지 않고 있습니다.ㅠㅠ npm run android 실행 후 s > a 입력해서 expo go 환경에서 확인해봤을 땐 데이터도 잘 받아와지는데 혹시 어느 부분을 확인해봐야할까요? npm ls react ├─┬ @expo/vector-icons@14.1.0 │ └── react@19.0.0 deduped ├─┬ @react-native-community/datetimepicker@8.4.1 │ └── react@19.0.0 deduped ├─┬ @react-native-kakao/core@2.4.0 │ └── react@19.0.0 deduped ├─┬ @react-native-kakao/user@2.4.0 │ └── react@19.0.0 deduped ├─┬ @react-navigation/bottom-tabs@7.4.6 │ └── react@19.0.0 deduped ├─┬ @react-navigation/drawer@7.5.7 │ ├─┬ react-native-drawer-layout@4.1.12 │ │ └── react@19.0.0 deduped │ ├── react@19.0.0 deduped │ └─┬ use-latest-callback@0.2.4 │ └── react@19.0.0 deduped ├─┬ @react-navigation/elements@2.6.3 │ ├── react@19.0.0 deduped │ └─┬ use-sync-external-store@1.5.0 │ └── react@19.0.0 deduped ├─┬ @react-navigation/native@7.1.17 │ ├─┬ @react-navigation/core@7.12.4 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ expo-blur@14.1.5 │ └── react@19.0.0 deduped ├─┬ expo-font@13.3.2 │ └── react@19.0.0 deduped ├─┬ expo-image@2.4.0 │ └── react@19.0.0 deduped ├─┬ expo-linear-gradient@14.1.5 │ └── react@19.0.0 deduped ├─┬ expo-linking@7.1.7 │ └── react@19.0.0 deduped ├─┬ expo-router@5.1.4 │ ├─┬ @radix-ui/react-slot@1.2.0 │ │ ├─┬ @radix-ui/react-compose-refs@1.1.2 │ │ │ └── react@19.0.0 deduped │ │ └── react@19.0.0 deduped │ ├─┬ @react-navigation/native-stack@7.3.25 │ │ └── react@19.0.0 deduped │ └─┬ react-native-is-edge-to-edge@1.2.1 │ └── react@19.0.0 deduped ├─┬ expo-status-bar@2.2.3 │ ├─┬ react-native-edge-to-edge@1.6.0 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ expo@53.0.20 │ ├─┬ expo-asset@11.1.7 │ │ └── react@19.0.0 deduped │ ├─┬ expo-keep-awake@14.1.4 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ react-dom@19.0.0 │ └── react@19.0.0 deduped ├─┬ react-native-gesture-handler@2.24.0 │ └── react@19.0.0 deduped ├─┬ react-native-gifted-charts@1.4.63 │ ├─┬ gifted-charts-core@0.1.65 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ react-native-reanimated@3.17.5 │ ├─┬ react-native-is-edge-to-edge@1.1.7 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ react-native-safe-area-context@5.4.0 │ └── react@19.0.0 deduped ├─┬ react-native-screens@4.11.1 │ ├─┬ react-freeze@1.0.4 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped ├─┬ react-native-svg@15.11.2 │ └── react@19.0.0 deduped ├─┬ react-native-web@0.20.0 │ └── react@19.0.0 deduped ├─┬ react-native-webview@13.13.5 │ └── react@19.0.0 deduped ├─┬ react-native@0.79.5 │ ├─┬ @react-native/virtualized-lists@0.79.5 │ │ └── react@19.0.0 deduped │ └── react@19.0.0 deduped └── react@19.0.0 npm ls react-native ├─┬ @expo/vector-icons@14.1.0 │ └── react-native@0.79.5 deduped ├─┬ @react-native-async-storage/async-storage@2.1.2 │ └── react-native@0.79.5 deduped ├─┬ @react-native-community/datetimepicker@8.4.1 │ └── react-native@0.79.5 deduped ├─┬ @react-native-kakao/core@2.4.0 │ └── react-native@0.79.5 deduped ├─┬ @react-native-kakao/user@2.4.0 │ └── react-native@0.79.5 deduped ├─┬ @react-navigation/bottom-tabs@7.4.6 │ └── react-native@0.79.5 deduped ├─┬ @react-navigation/drawer@7.5.7 │ ├─┬ react-native-drawer-layout@4.1.12 │ │ └── react-native@0.79.5 deduped │ └── react-native@0.79.5 deduped ├─┬ @react-navigation/elements@2.6.3 │ └── react-native@0.79.5 deduped ├─┬ @react-navigation/native@7.1.17 │ └── react-native@0.79.5 deduped ├─┬ expo-apple-authentication@7.2.4 │ └── react-native@0.79.5 deduped ├─┬ expo-blur@14.1.5 │ └── react-native@0.79.5 deduped ├─┬ expo-constants@17.1.7 │ └── react-native@0.79.5 deduped ├─┬ expo-image@2.4.0 │ └── react-native@0.79.5 deduped ├─┬ expo-linear-gradient@14.1.5 │ └── react-native@0.79.5 deduped ├─┬ expo-linking@7.1.7 │ └── react-native@0.79.5 deduped ├─┬ expo-router@5.1.4 │ ├─┬ @expo/metro-runtime@5.0.4 │ │ └── react-native@0.79.5 deduped │ ├─┬ @react-navigation/native-stack@7.3.25 │ │ └── react-native@0.79.5 deduped │ └─┬ react-native-is-edge-to-edge@1.2.1 │ └── react-native@0.79.5 deduped ├─┬ expo-status-bar@2.2.3 │ ├─┬ react-native-edge-to-edge@1.6.0 │ │ └── react-native@0.79.5 deduped │ └── react-native@0.79.5 deduped ├─┬ expo-symbols@0.4.5 │ └── react-native@0.79.5 deduped ├─┬ expo-system-ui@5.0.10 │ └── react-native@0.79.5 deduped ├─┬ expo-web-browser@14.2.0 │ └── react-native@0.79.5 deduped ├─┬ expo@53.0.20 │ ├─┬ expo-asset@11.1.7 │ │ └── react-native@0.79.5 deduped │ ├─┬ expo-file-system@18.1.11 │ │ └── react-native@0.79.5 deduped │ └── react-native@0.79.5 deduped ├─┬ react-native-gesture-handler@2.24.0 │ └── react-native@0.79.5 deduped ├─┬ react-native-gifted-charts@1.4.63 │ ├─┬ gifted-charts-core@0.1.65 │ │ └── react-native@0.79.5 deduped │ └── react-native@0.79.5 deduped ├─┬ react-native-reanimated@3.17.5 │ ├─┬ react-native-is-edge-to-edge@1.1.7 │ │ └── react-native@0.79.5 deduped │ └── react-native@0.79.5 deduped ├─┬ react-native-safe-area-context@5.4.0 │ └── react-native@0.79.5 deduped ├─┬ react-native-screens@4.11.1 │ └── react-native@0.79.5 deduped ├─┬ react-native-svg@15.11.2 │ └── react-native@0.79.5 deduped ├─┬ react-native-webview@13.13.5 │ └── react-native@0.79.5 deduped └─┬ react-native@0.79.5 └─┬ @react-native/virtualized-lists@0.79.5 └── react-native@0.79.5 deduped npm ls expo ├─┬ @react-native-community/datetimepicker@8.4.1 │ └── expo@53.0.20 deduped ├─┬ @react-native-kakao/core@2.4.0 │ └── expo@53.0.20 deduped ├─┬ expo-apple-authentication@7.2.4 │ └── expo@53.0.20 deduped ├─┬ expo-blur@14.1.5 │ └── expo@53.0.20 deduped ├─┬ expo-build-properties@0.14.8 │ └── expo@53.0.20 deduped ├─┬ expo-constants@17.1.7 │ └── expo@53.0.20 deduped ├─┬ expo-dev-client@5.2.4 │ ├─┬ expo-dev-launcher@5.1.16 │ │ └── expo@53.0.20 deduped │ ├─┬ expo-dev-menu-interface@1.10.0 │ │ └── expo@53.0.20 deduped │ ├─┬ expo-dev-menu@6.1.14 │ │ └── expo@53.0.20 deduped │ ├─┬ expo-manifests@0.16.6 │ │ └── expo@53.0.20 deduped │ ├─┬ expo-updates-interface@1.1.0 │ │ └── expo@53.0.20 deduped │ └── expo@53.0.20 deduped ├─┬ expo-font@13.3.2 │ └── expo@53.0.20 deduped ├─┬ expo-haptics@14.1.4 │ └── expo@53.0.20 deduped ├─┬ expo-image@2.4.0 │ └── expo@53.0.20 deduped ├─┬ expo-linear-gradient@14.1.5 │ └── expo@53.0.20 deduped ├─┬ expo-router@5.1.4 │ └── expo@53.0.20 deduped ├─┬ expo-splash-screen@0.30.10 │ └── expo@53.0.20 deduped ├─┬ expo-symbols@0.4.5 │ └── expo@53.0.20 deduped ├─┬ expo-system-ui@5.0.10 │ └── expo@53.0.20 deduped ├─┬ expo-web-browser@14.2.0 │ └── expo@53.0.20 deduped └─┬ expo@53.0.20 ├─┬ expo-asset@11.1.7 │ └── expo@53.0.20 deduped ├─┬ expo-file-system@18.1.11 │ └── expo@53.0.20 deduped └─┬ expo-keep-awake@14.1.4 └── expo@53.0.20 deduped
react react-native 하이브리드-앱 typescript expo
simjeongwoo
2025-08-12T08:56:49.484Z
댓글 2
좋아요 0
조회수 121
미해결
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Member activate 호출 시 MemberDetail의 activate 또한 호출 하게 되는데요. 이때 MemberDetail의 activate 로직에서 this.deactivatedAt = null 을 통해 비활성 일시는 초기화 해주어야 활성 -> 비활성 -> 활성 -> 비활성 시 deactivatedAt이 null임으로 문제가 없을 것 같은데 어떻게 생각하시나요?
java spring spring-boot jpa 리팩터링 ddd
하규영
2025-08-12T08:36:26.148Z
댓글 3
좋아요 0
조회수 135
해결됨
한 입 크기로 잘라먹는 Next.js
중첩된 라우팅에서 다른 레이아웃 혹은 레이아웃을 사용하고싶지 않을 때 어떻게 제어할 수 있는지 궁금합니다. 현재 소스를 보면 (with-searchbar) search book ... 와 같은 형태로 되어있는 것을 알 수 있는데요 만약에 search가 1 depth 라고 했을 때, search 페이지 아래에 예를 들어 detail-search 라는 주소를 가진 페이지가 있다고 가정할 때 (with-serachbar) serach detail-search 파일 구조 및 중첩된 라우터 구조가 위와 같이 되잖아요? 이 때 detail-search는 with-searchbar 대신 가령 with-detail-serachbar 라던가, 아예 with-searchbar 레이아웃을 사용하고 싶지 않을 수 있잖아요? 이럴 때 어떻게 해야하는지 궁금합니다 😀
김동훈
2025-08-12T06:50:13.922Z
댓글 1
좋아요 0
조회수 68
미해결
나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
@Service @RequiredArgsConstructor public class ImageService { private final OpenAiImageModel openAiImageModel; public ImageResponse getImageGen(ImageRequestDTO request) { ImageResponse imageResponse = openAiImageModel .call(new ImagePrompt(request.getMessage(), OpenAiImageOptions.builder() .model(request.getModel()) .quality("hd") .N(request.getN()) .height(1024) .width(1024) .build() )); return imageResponse; } } 선생님 강의와 같이 해당 코드를 작성했는데 이미지 생성에 실패했다는 오류가 뜹니다. spring 공식 문서에서는 .quality("hd")가 없어 동일하게 제거하고 재부팅해도 이미지 생성에 실패하네요 ㅠ 혹시 원인을 알 수 있을까요?
java spring spring-boot 인공지능(ai) spring-ai
maxx
2025-08-12T06:20:05.054Z
댓글 1
좋아요 0
조회수 119
미해결
실전! Querydsl
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 앞선 로직으로 1차 캐시에 (이름: entity, 값: 10), ...이 저장되어 있다고 가정합니다. (스냅샷) 벌크 연산을 수행하여 모든 DB 로우 값을 5씩 곱합니다. 연산을 마치면, 1차 캐시에는 (entity, 10), ... DB에는 (entity, 50), ...과 같은 값이 저장되어 있을 것입니다. 제가 알기로, flush()는 스냅샷과 비교하여 1차 캐시의 변경 사항을 DB에 반영합니다. (실행하여도 1차 캐시에는 변함이 없습니다) 그렇다면 만약 벌크 연산 후 flush, clear를 연달아 실행하면 1차 캐시의 값이 벌크 연산을 덮어씌워 값이 오염되는 것 아닌가요? 따라서 flush -> 벌크 연산 -> clear가 맞는 호출 순서가 아닐까 궁금합니다.
JongYun Won
2025-08-12T04:46:34.474Z
댓글 1
좋아요 0
조회수 102
미해결
실무 중심! FE 입문자를 위한 React
강의에서 나온대로 다 따라 갔는데 아무것도 안됩니다. 콘솔창에서는 const [surveyData, setSurvey] = useRecoilState(surveyState).questions; 에서 Uncaught TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator)) 라는 에러 뜹니다
안건하
2025-08-12T01:03:50.302Z
댓글 1
좋아요 0
조회수 152
해결됨
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegisterTest를 진행할 때 @SpringBootTest를 사용해서 테스트를 진행했는데요 서비스 테스트에는 @ExtendWith(MockitoExtension.class)를 사용하는 경우를 많이 봤습니다 헥사고날 아키텍처에서는 애플리케이션과 도메인이 중심이 되기 때문에 서비스에서 @SpringBootTest를 사용한걸까요?
java spring spring-boot jpa 리팩터링 ddd
3831568
2025-08-12T01:00:32.499Z
댓글 1
좋아요 0
조회수 90
해결됨
[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
안녕하세요~ 강의에서 사용하는 api 2개 다 접속이 안되네요 1번은 외부 서버라 안될수 있는데, 2번은 서버가 죽은 건가요? koreanjson.com http://main-example.codebootcamp.co.kr/graphql
react react-native 하이브리드-앱 graphql next.js
김주원
2025-08-11T16:57:39.776Z
댓글 2
좋아요 0
조회수 142
미해결
[Java 실무 프로젝트 입문편] 객체지향 사고력 훈련 - 미니 프로젝트 3종 실습
깃허브 주소 오류
java intellij-idea dip-principle domains validations
epee2000
2025-08-11T16:23:19.015Z
댓글 3
좋아요 0
조회수 124
해결됨
Slack 클론 코딩[실시간 채팅 with React]
settings/ts 폴더 front로 바꿔서 진행할 경우 셋팅 강의 하나도 들을 필요없이 바로 섹션2부터 진행해도 되는건가요?
react 웹팩 typescript socket.io babel 클론코딩
서호
2025-08-11T15:50:56.111Z
댓글 1
좋아요 0
조회수 121
미해결
한 입 크기로 잘라먹는 Next.js
안녕하세요! 좋은 Next.js 강의 덕분에 열심히 배워나가고 있는 학생입니다. 😀 다름이 아니라 revalidateTag를 사용했을 때, 첫 번째 인수로 전달한 태그 값을 가지는 데이터 캐시가 재검증된다고 이해했는데요! 제가 revalidateTag의 인수와 data fetch에 사용되는 옵션의 태그 값을 다르게 세팅해봤는데도 갱신이 되어서요. 제가 잘못 이해한 걸까요..?? 이 부분이 이상해서 질문 남깁니다. 아래는 제가 작성한 코드입니다! createReviewAction export async function createReviewAction(formData: FormData) { const bookId = formData.get('bookId')?.toString(); const content = formData.get('content')?.toString(); const author = formData.get('author')?.toString(); if (!bookId || !content || !author) { return; } // JSON.stringify 객체를 문자열 형태로 직렬화 해서 보내줘야 함 try { const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/review`, { method: 'POST', body: JSON.stringify({ bookId, content, author }), }, ); revalidateTag(`revew-${bookId}`); // 일부로 오타 냄 } catch (error) { console.error(error); return; } } ReviewList 컴포넌트 async function ReviewList({ bookId }: { bookId: string }) { const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/review/book/${bookId}`, { next: { tags: [`review-${bookId}`] } }, ); if (!response.ok) { throw new Error(`Review fetch faild: ${response.statusText}`); } const reviews: ReviewData[] = await response.json(); return ( <section> {reviews.map((review) => ( <ReviewItem key={`review-item-${review.id}`} {...review} /> ))} </section> ); }
fud3725
2025-08-11T13:00:26.474Z
댓글 3
좋아요 0
조회수 104
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] -> 강의 메뉴얼에 자세히 나와있다고 타 수강생분 25년도 07월 28일 문의글에 답변 남겨주셨는데, 강의 메뉴얼이 어디있을까요..??
2025-08-11T11:45:30.697Z
댓글 1
좋아요 0
조회수 425
미해결
김영한의 실전 자바 - 기본편
[질문 내용] 안녕하세요! 기본편과 심화 3편에서 객체 지향 프로그래밍에 대한 정의가 다른 거 같은데 어떻게 이해하면 좋을지 여쭤봅니다. 기본편 3번쨰 pdf 19페이지에는 객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다. 즉, "무엇을" 중심으로 프로그래밍 한다. 이렇게 정의되어 있는데 고급 3편 13 함수형 프로그래밍 파트에서는 객체지향이 어떻게에 속한다고 되어있고, 무엇을은 함수형 프로그래밍과 관련되어있다고 설명되어있습니다. 저 또한 메서드나 필드 들을 하나의 객체로 모으고 객체들이 어떻게 상호작용할지가 더 맞다고 생각하는데 기본편의 정의가 무엇을 이라고 써져 있는게 어떤 의미인지 궁금합니다.
거북이
2025-08-11T10:37:58.565Z
댓글 1
좋아요 0
조회수 111
미해결
김영한의 실전 자바 - 중급 2편
//문제2: 개 타입 반환에서 dogHospital.set(dog); 한번 더 세팅 해주는데 안 해줘도 컴파일 문제없이 돌아가던데 왜 한번 더 세팅 해준거에요?
김영훈
2025-08-11T10:19:42.659Z
댓글 2
좋아요 0
조회수 89
해결됨
스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
OutBoxEvent.class의 필드에 그대로 OutBox를 받으시던데 생성이유와 OutBox와 OutBoxEvent의 차이점이 궁금합니다
java mysql spring-boot kafka redis
최어진
2025-08-11T10:14:46.852Z
댓글 2
좋아요 0
조회수 69
해결됨
[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
안녕하세요 강의를 구매 후 듣다가 일이 생겨서 오랜만에 다시 공부하려고 하는데 커리큘럼을 다시 보니 처음에 html, css 강의 순서대로 나오다가 js가 나오고 또 섹션04부분에서 다시 css가 나오고 또 js가 나오더라구요 그래서 이 부분이 헷갈리는데 그냥 처음부터 순서대로 강의를 들으면 될까요?
react react-native 하이브리드-앱 graphql next.js
부드러운 족제비
2025-08-11T03:19:06.012Z
댓글 2
좋아요 0
조회수 125
미해결
따라하며 배우는 리액트 네이티브 기초
안녕하세요 react-navie 강의중 18강 보고 있는데요 svg 잘 설치 되어있고, 이미지도 잘 넣었는데 저는 이미지 스타일 편집하는게 안보이고 svg 파일 클릭을 하면 svg 파일 모양만 보이고 있어서 svg 테스트시 화면에 이미지 너무 크게 보입니다. 툴에서 어떻게 설정하면 svg 스타일이 보일까요?
kimdk1406
2025-08-10T22:51:16.130Z
댓글 1
좋아요 0
조회수 90
미해결
나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
선생님 강의 잘 듣고 있습니다. 강의를 보면서 예제 코드를 작성하고 있는데 선생님께서 영상을 찍어주셨을 때의 코드와 현재 버전의 코드가 차이가 많이 있는거 같습니다. 첫 강의 자료 중에 코드가 바뀐 부분만 현재 버전의 코드로 수정하여 올려주시면 감사하겠습니다 ㅠㅠ
java spring spring-boot 인공지능(ai) spring-ai
maxx
2025-08-10T18:59:11.846Z
댓글 2
좋아요 0
조회수 139
미해결
나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
public String chatMessage(String message) { return chatClient.prompt() .user(message) .call() .chatResponse() .getResult() .getOutput() .getText(); } 선생님 현재 스프링 ai 1.0.1버전을 사용중입니다. 그러면 getText()가 아닌 getContent()를 사용해서 프롬프트를 생성해야되는거 아닌가요?! 왜 getConetent()를 사용할 수 없는걸까요?!
java spring spring-boot 인공지능(ai) spring-ai
maxx
2025-08-10T13:59:51.912Z
댓글 2
좋아요 0
조회수 110
해결됨
React & FastAPI로 만드는 투표 커뮤니티 플랫폼: 결제 시스템으로 수익화까지!
Notion에 있는 코드말고, Github Repository는 따로 없나요?
react mysql docker rest-api FastAPI
정재웅
2025-08-10T12:39:16.439Z
댓글 1
좋아요 0
조회수 114