inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

Spring Security 의 ProviderManager (AuthenticationManager) 도 옵저버 패턴을 사용하고 있다고 볼 수 있을까요?

미해결

코딩으로 학습하는 GoF의 디자인 패턴

안녕하세요 강사님! 우선 양질의 강의 잘 듣고 있다는 말씀 드리고 싶습니다. Spring Security 에서 AuthenticationProvider 를 찾아서 인증을 위임하는 역할을 수행하는 ProviderManger 도 옵저버 패턴을 사용하고있다고 볼 수 있을까요? ProviderManager (AuthenticationManager) 에서 AuthenticationProvider 들을 가져온후 이들을 순회하며 인증위임을 시키는 코드입니다 단순히 supports() 를 통해 인증을 위임시킬 AuthenticationProvider 들을 골라내는 것뿐, 이것도 옵저버 패턴이 적용된 예인지 알고 싶습니다.

  • java
  • 디자인-패턴
PrivilegeEscalate 댓글 2 좋아요 0 조회수 421

인피니트 스크롤링 적용시 LOAD_POST_REQUEST 두번 찍히는 문제

미해결

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

안녕하세요 선생님 상황) 인피니트 스크롤링 적용시 LOAD_POST_REQUEST 두번 찍히는 상황인데 이거의 원인과 해결방법을 어떻게 찾을 수 있을까요? loadPostsLoading과 throttle을 적용했는데도 2번씩 실행되는 상황입니다. redux) 작성한 코드) 10,000 자이하만 적을 수 있어서 LOAD_POSTS_REQUEST 관련 코드만 올립니다..!! pages/index.js import React, { useEffect } from 'react'; import {useDispatch, useSelector} from 'react-redux'; import AppLayout from '../components/AppLayout'; import PostCard from '../components/PostCard'; import PostForm from '../components/PostForm'; import {LOAD_POSTS_REQUEST} from '../reducers/post'; const Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user); const { mainPosts, hasMorePosts, loadPostsLoading } = useSelector((state) => state.post); useEffect(() => { dispatch({ type: LOAD_POSTS_REQUEST, }); }, []); useEffect(() => { function onScroll() { if(window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight-300) { if(hasMorePosts && !loadPostsLoading) { dispatch({ type: LOAD_POSTS_REQUEST, }); } } } window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); }; }, [hasMorePosts, loadPostsLoading]); return ( <AppLayout> {me && <PostForm />} {mainPosts.map((post) => <PostCard key={post.id} post={post} />)} </AppLayout> ); }; export default Home; reducers/post.js import shortId from 'shortid'; import {produce} from 'immer'; import faker from 'faker'; export const initialState = { mainPosts:[], imagePaths: [], //게시물 저장 경로 hasMorePosts: true, loadPostsLoading: false, //게시글 로드 완료시 true loadPostsDone: false, loadPostsError: null, } export const generateDummyPost = (number) => Array(number).fill().map(() => ({ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName() }, content: faker.lorem.paragraph(), Images: [{ src: 'https://cdn.pixabay.com/photo/2017/07/25/01/22/cat-2536662_1280.jpg' //faker.image.imageUrl(640, 480, true), lorempixel.com 고장나서 임시로 }], Comments: [{ User: { id:shortId.generate(), nickname:faker.name.findName(), }, content:faker.lorem.sentence(), }], })); export const LOAD_POSTS_REQUEST = 'LOAD_POSTS_REQUEST'; export const LOAD_POSTS_SUCCESS = 'LOAD_POSTS_SUCCESS'; export const LOAD_POSTS_FAILURE = 'LOAD_POSTS_FAILURE'; const dummyPost = (data) => ({ id: data.id, content: data.content, User: { id:1, nickname:'해지니', }, Images: [], Comments: [], }); const dummyComment = (data) => ({ id: shortId.generate(), content: data, User: { id: 1, nickname: '제로초' }, }); const reducer = (state = initialState, action) => produce(state, (draft) => { switch(action.type){ case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.mainPosts = action.data.concat(draft.mainPosts); draft.hasMorePosts = draft.mainPosts.length < 50; break; case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break; default: break; } }); export default reducer; sagas/post.js import { all, fork, takeLatest, put, delay, throttle } from 'redux-saga/effects'; import axios from 'axios'; import shortId from 'shortid'; import { LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, LOAD_POSTS_FAILURE, generateDummyPost, } from '../reducers/post'; function loadPostsAPI(data){ return axios.get('/api/post', data); } function* loadPosts(action) { try{ // const result = yield call(loadPostsAPI, action.data); yield delay(1000); yield put({ type: LOAD_POSTS_SUCCESS, data:generateDummyPost(10) }); } catch(err) { yield put({ type: LOAD_POSTS_FAILURE, data: err.response.data }); } } function* watchLoadPosts(){ yield throttle(5000, LOAD_POSTS_REQUEST, loadPosts); } export default function* postSaga() { yield all([ fork(watchLoadPosts) ]); } 사용중인 OS) macOS (Apple M1 Pro)

  • react
  • redux
  • node.js
  • express
  • next.js
박해진 댓글 2 좋아요 0 조회수 367

fetch 사용이유

해결됨

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

안녕하세요 강의중에는 fetch를 사용하는데 기존에 프로젝트를 진행할때, baseUrl 설정이나 기본 헤더 설정, 인터셉터 및 json 직렬화 등 의 불편함으로 axios를 사용하였었는데 next에서 캐싱관련해서 fetch를 확장해서 제공해주기때문에 axios를 사용하지않고 fetch로 사용하는걸까요?

  • react
  • next.js
  • react-query
  • next-auth
  • msw
밍끼 댓글 2 좋아요 0 조회수 919

인터셉트 라우팅 적용 후 page.tsx 파일명을 변경 했을 때, 404 에러 발생

해결됨

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

안녕하세요. 제로초 강사님. 수업 그대로 따라가고 있었는데 궁금한 점이 생겨서 질문 드립니다. 영상과 동일하게 따라하고 있었고, 질문이 있는 파일 경로는 다음과 같습니다. src\app\(beforeLogin)\@modal\(.)i\flow\login\page.tsx 이 때, 파일명을 page.tsx --> qwer.tsx로 변경하면 404 에러를 띄웁니다. 혹시나 해서, src\app\(beforeLogin)\i\flow\login\page.tsx 의 파일 또한 qwer.tsx로 바뀐 뒤 해당 경로로 들어가려고 하면 똑같이 404 에러를 띄웁니다. src\app\(beforeLogin)\page.tsx 파일의 import Image from "next/image"; import styles from '@/app/page.module.css' import Link from "next/link"; import zlogo from '../../../public/zlogo.png' export default function Home() { return ( <> <div className={styles.left}> <Image src={zlogo} alt="logo"/> </div> <div className={styles.right}> <h1> 지금 일어나고 있는 일 </h1> <h2> 지금 가입하세요 </h2> <Link href="/i/flow/signup" className={styles.signup}> 계정 만들기</Link> <h3> 이미 트위터에 가입하셨나요? </h3> <Link href="/i/flow/login" className={styles.login}> 로그인 </Link> </div> </> ); } 에서 <Link href="/i/flow/login" className={styles.login}> 로그인 </Link> 컴포넌트를 클릭시 제가 원하는 해당 경로의 특정파일명과 매핑할 수 있는 방법이 있나요?? 아니면 하나의 폴더에는 하나의 page.tsx만 존재해야하고, 그 파일 명은 page.tsx가 되야하는 규칙인건가요??

  • react
  • next.js
  • react-query
  • next-auth
  • msw
flos9537 댓글 2 좋아요 0 조회수 574

useSelectedLayoutSegment 의 사용법

해결됨

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

useSelectedLayoutSegment 를 DetailPage 안의 infoData 라는 컴포넌트에서 사용하려하였고, 클라이언트 컴포넌트입니다. useSelectedLayoutSegment은 layout.tsx 에서 infoData 를 부를때만 사용할수있는건가요? layout.tsx 에서 infoData 를 불러오면 segment를 잘 가져오고 DetailPage 라는 곳에서 infoData를 사용하면 segment 가 null로만 반환되고있습니다. Layout의 children으로 DetailPage가 들어가고 DetailPage의 children으로 infoData가 들어가는데 layout.tsx 에서 직접 컴포넌트를 불러올때만 값을 받아오고 layout의 자식의 자식으로 사용될때에는 왜 값을 가져오지 못하는건지 이해가 안되서 질문드립니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
밍끼 댓글 1 좋아요 0 조회수 484

Q파일 생성 위치 질문

해결됨

실전! Querydsl

안녕하세요 현재 프로젝트 세팅 및 테스트를 진행 중입니다. spring boot가 3이상으로 제한된 상황속에서 진행중이며, 강의 내용을 따라하고 있습니다! build.gradle은 https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.vfy9wirpglmx 를 복/붙 하였습니다. plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 질문은 크게 3가지입니다. build/other/compileQuerydsl은 표기가 안되는데 다른 답변을 보니 springboot3으로 올라가며 compileQuerydsl은 표기가 안된다고 하신 것 같은데 맞을까요? 정확한 Q파일의 생성 위치가 궁굼합니다.! 강의상에서는 src/main에 둬도 괜찮지만, 버전관리 시스템(git)에는 추가 되지 않는게 좋다고 하셨던 것 같은데 맞나요? build에만 Q파일이 생성되는게 좋나요? 올려주신 google doc의 build.gradle로 진행하면, Q파일이 build/annotationProcessor아래 생성됩다... 뭐가 문제일까요? docs에 올려주신 build.gradle에서 build clean을 진행할 때 'src/main/generated'의 폴더를 삭제하는 이유가 무엇일까요? (현재 저는 Q파일을 build/ 아래 관리하고있는데, src/main/generate 아래 Q파일을 생성하시는 분들에만 해당 되는 내용인가요?) 답변해주시면 감사하겠습니다!

  • java
  • jpa
김주영 댓글 2 좋아요 1 조회수 877

엔티티 변경 후 일대다

해결됨

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

@JoinColumn(name = "MEMBER_ID) List<AddressEntity> addressHistory = .. 다대일이 아닌 일대다로 매핑한 이유가 있을까요? 앞에서 다쪽에 @JoinColumn하는 것을 추천하셨는데 일쪽에 연관관계 주인을 잡은 이유가 궁금합니다.

  • java
  • jpa
모깅 댓글 2 좋아요 0 조회수 349

생각한대로 실행이 되지 않습니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 제 프로젝트 압축파일입니다. https://drive.google.com/file/d/1CsFmsNczcupxGIQTMM_-uA7EQFzu3KRq/view?usp=sharing JpaMain에서 Movie movie = new Movie(); movie.setDirector("aaa"); movie.setActor("asdf"); movie.setName("바람과 함께 사라지다"); movie.setPrice(10000); em.persist(movie); em.flush(); em.clear(); 에 의해 movie가 insert되어야하는데 실제로 데이터베이스의 MOVIE테이블을 조회해보면 아무것도 없습니다. 그리고 아래와 같은 에러로그가 뜨는데 어떻게 해야할지 모르겠어서 질문드립니다! https://drive.google.com/file/d/1YCpr2ZBFSC84lw3wvn5wks22DVx1GHAM/view?usp=sharing

  • java
  • jpa
966kmj 댓글 3 좋아요 0 조회수 453

얇은 복사 value.pages 질문

미해결

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

강의 17분 50초 정도에 말씀하신 얇은 복사중에서 왜 이런식으로 복사해야하는지 이해가 잘 되지 않습니다. const shallow = { ...value }; value.pages = { ...value.pages }; value.pages[pageIndex] = [...value.pages[pageIndex]]; 제가 강의를 보기전 테스트할때는 해당 코드로 작성하였는데 해당 코드는 정상적으로 작동하지 않았습니다 const shallow = { ...value }; shallow.pages = { ...value.pages }; shallow.pages[pageIndex] = [...value.pages[pageIndex]]; 혹시 왜 첫번째 코드블록처럼 코드를 작성해야하는지 간단하게 설명해주시면 감사하겠습니다

  • react
  • next.js
  • react-query
  • next-auth
  • msw
mun9927 댓글 2 좋아요 0 조회수 482

useSWR, react-query 중 어떤것을 사용해야하는지 선택하는 기준점에 대해서 알고싶습니다.

미해결

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

예를들어, 이런 소셜 네트워크 서비스같은 경우에는 useSWR보다, react-query가 다양한 기능을 제공해주어, 적합하다고 생각이 되어집니다. 1 . 단순 데이터만 갖고오는 사이트가 아니라면, 대부분 react-query가 더 좋다고 생각하는데, useSWR은 어떤 서비스에서 주로 채택하면 좋은지에 대해 알고싶습니다. react-query와 useSWR을 혼용해서 사용했을때 더 좋아지는 경우가 있을까요? 어떠한 서비스를 만들때, useSWR, react-query를 선택해야한다면, 어떤 기준으로 판별하는 것이 좋은지에 대해서도 알고 싶습니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
김용민 댓글 2 좋아요 0 조회수 541

단축키 질문

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

안녕하세요. 라인 여러 줄 복사할 때 범위 지정 후 ctrl d 하는 거는 이해했는데 라인 맨 앞으로 이동 후 범위 지정할 때는 어떻게 쓰나요? 이전 영상에서 설명해 주셨는데 따로 필기 안 하고 지나가서 찾아보려니까 못 찾겠네요ㅜㅜ 윈도우 기준 home 키 써서 라인 맨 앞으로 간 다음에 ctrl w 하신 건가요? 영상 보니 라인 전체 복사가 한 번에 이루어지는 것 같아 궁금해서 질문 남겨 봅니다. 미리 답변 감사합니다!

  • java
  • 객체지향
김나현 댓글 2 좋아요 0 조회수 452

CredentialsSignin 에러

미해결

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

CredentialsSignin 에러가 발생합니다. 아래의 CredentialsSignin 질문과 같이 redis 재시작, 백엔드 서버 재시작, next, node_modules 삭제 후 다시 npm install 후 확인해도 계속 같은 에러가 나옵니다. next [auth][error] CredentialsSignin: Read more at https://errors.authjs.dev#credentialssignin at Module.callback (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/actions/callback/index.js:256:30) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async AuthInternal (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/index.js:65:24) at async Auth (webpack-internal:///(rsc)/./node_modules/@auth/core/index.js:123:29) at async /Users/mac/Documents/next14/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63251 백엔드 [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [WebSocketsController] EventsGateway subscribed to the "test" message +22ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [WebSocketsController] EventsGateway subscribed to the "sendMessage" message +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [WebSocketsController] EventsGateway subscribed to the "login" message +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] AppController {/}: +2ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] ApiController {/api}: +1ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/login, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/logIn, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/logout, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/logOut, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/user, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/decode, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] HashtagsController {/api/hashtags}: +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags, GET} route +1ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags/trends, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags/:id, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags/:id, PATCH} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/hashtags/:id, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] UsersController {/api/users}: +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/followRecommends, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id/posts, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id, PATCH} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id, DELETE} route +1ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id/follow, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id/follow, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id/rooms, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/users/:id/rooms/:roomId, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] PostsController {/api/posts}: +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/recommends, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/followings, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/heart, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/heart, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/reposts, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/reposts, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/comments, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/comments, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/posts/:id/photos/:imageId, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RoutesResolver] MessagesController {/api/messages}: +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/messages, POST} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/messages, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/messages/:id, GET} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/messages/:id, PATCH} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [RouterExplorer] Mapped {/api/messages/:id, DELETE} route +0ms [Nest] 6106 - 01/01/2024, 3:07:18 PM LOG [NestApplication] Nest application successfully started +2ms redis connected test 12345 test 123125 test sadfasf test zcxv

  • react
  • next.js
  • react-query
  • next-auth
  • msw
밍끼 댓글 1 좋아요 1 조회수 1805

[질문아님] VScode에도 내가만든 파일명 찾기 기능이 있습니다.

미해결

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

command + p (or ctrl+p) 누르면 나오는 서치창에 내가 만든 파일명을 입력하면 해당 파일을 찾을 수 있습니다. 어느 소통창구로 알려드려야 할지 몰라서 여기다 적어요

  • react
  • next.js
  • react-query
  • next-auth
  • msw
라푼젤 댓글 1 좋아요 2 조회수 539

children 오류??

미해결

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

(afterLogin)의 layout.tsx에서 35번째 주석부분 children이요 여기 children에 각 폴더 page.tsx, layout.tsx이 들어가는건가요?? 여기 35번 줄 children 주석풀고 실행해보면 이런 오류 뜨는데 왜 이런지 알 수 있을까요??

  • react
  • next.js
  • react-query
  • next-auth
  • msw
br 댓글 2 좋아요 0 조회수 556

dvw를 사용하는 경우와 vw를 사용하는 경우의 차이

미해결

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

안녕하세요 제로초님! 강의 즐겁게 듣고 있습니다. 깃허브의 코드를 보면 main.module.css 에서 container를 잡을 때 width와 heigth로 dvw, dvh단위를 사용하시고 다른 부분( login.module.css 와 signup.module.css )에서는 vw를 사용하시고 있어서요. dvw를 사용하시는 경우와 vw를 사용하시는 경우의 차이가 궁금합니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
Rudolf 댓글 1 좋아요 0 조회수 567

H2 DB 테이블 생성이 안됩니다.

미해결

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

안녕하세요 H2 DB 테이블 생성이 안되는데, 스프링부트를 실행하면 에러도 안납니다. H2 연결되어 있습니다. 처음에 jpashop.mv .db 도 잘 생성되었습니다. 스프링부트를 실행하면 어떤 에러도 없지만, DB테이블이 만들어 지는 문구가 하나도 없습니다 H2 콘솔창도 DB 테이블 한개도 없이 아주 깨끗합니다. 어떻게 해결할 수 있을까요?? . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.1.7) 2023-12-31T15:17:34.731+09:00 INFO 13760 --- [ restartedMain] jpabook.jpashop.JpashopApplication : Starting JpashopApplication using Java 21.0.1 with PID 13760 (C:\Users\dqk86\Downloads\jpashop\out\production\classes started by dqk86 in C:\Users\dqk86\Downloads\jpashop) 2023-12-31T15:17:34.734+09:00 INFO 13760 --- [ restartedMain] jpabook.jpashop.JpashopApplication : No active profile set, falling back to 1 default profile: "default" 2023-12-31T15:17:34.825+09:00 INFO 13760 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2023-12-31T15:17:34.825+09:00 INFO 13760 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2023-12-31T15:17:35.417+09:00 INFO 13760 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-12-31T15:17:35.437+09:00 INFO 13760 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 12 ms. Found 0 JPA repository interfaces. 2023-12-31T15:17:36.132+09:00 INFO 13760 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-12-31T15:17:36.147+09:00 INFO 13760 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-12-31T15:17:36.148+09:00 INFO 13760 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.17] 2023-12-31T15:17:36.213+09:00 INFO 13760 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-12-31T15:17:36.214+09:00 INFO 13760 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1387 ms 2023-12-31T15:17:36.254+09:00 INFO 13760 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-12-31T15:17:36.443+09:00 INFO 13760 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:8b0a757c-2d15-4737-adab-1dbaee374f3e user=SA 2023-12-31T15:17:36.445+09:00 INFO 13760 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-12-31T15:17:36.455+09:00 INFO 13760 --- [ restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:8b0a757c-2d15-4737-adab-1dbaee374f3e' 2023-12-31T15:17:36.698+09:00 INFO 13760 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-12-31T15:17:36.806+09:00 INFO 13760 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.2.17.Final 2023-12-31T15:17:36.809+09:00 INFO 13760 --- [ restartedMain] org.hibernate.cfg.Environment : HHH000406: Using bytecode reflection optimizer 2023-12-31T15:17:37.052+09:00 INFO 13760 --- [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2023-12-31T15:17:37.941+09:00 INFO 13760 --- [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2023-12-31T15:17:37.984+09:00 INFO 13760 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-12-31T15:17:38.027+09:00 WARN 13760 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2023-12-31T15:17:38.195+09:00 INFO 13760 --- [ restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2023-12-31T15:17:38.552+09:00 INFO 13760 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2023-12-31T15:17:38.576+09:00 INFO 13760 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2023-12-31T15:17:38.587+09:00 INFO 13760 --- [ restartedMain] jpabook.jpashop.JpashopApplication : Started JpashopApplication in 4.164 seconds (process running for 4.578)

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
혁짱 댓글 2 좋아요 0 조회수 2086

라우팅 설정 시에 page폴더를 넣지 않아도 되나요?

미해결

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

chat gpt가 "Next.js에서 라우팅을 설정할 때 pages 폴더는 매우 중요한 역할을 합니다. 이 폴더는 Next.js 프레임워크가 자동으로 URL 경로와 매핑하는 라우팅 시스템의 핵심입니다. 따라서, 기본적으로 라우팅을 위한 파일들은 pages 폴더 내에 위치해야 합니다. 그러나, 여러분이 제시한 구조처럼 src/app 디렉토리 안에 페이지 컴포넌트를 배치하는 것도 가능합니다. 이 경우, Next.js의 기본 라우팅 규칙을 따르지 않기 때문에, 명시적으로 라우팅 로직을 정의해야 합니다. 예를 들어, Next.js의 Custom Server 기능을 사용하여 Express.js 또는 다른 Node.js 서버 프레임워크와 함께 라우팅 로직을 직접 작성할 수 있습니다. 이렇게 하면, src/app 폴더 내의 파일 구조를 사용하여 원하는 URL 경로와 매핑할 수 있습니다. 하지만 이 방법은 Next.js의 자동 정적 최적화, 파일 기반 라우팅 등과 같은 기본 제공 기능들을 직접 관리해야 하는 추가적인 작업이 필요합니다." 라고 하는데 그럼 저희는 이번 강의에서 page폴더를 넣지 않았으니 next.js의 폴더 구조 라우팅 시스템을 활용하지 않고 직접 라우팅 로직을 작성할 것이라는 건가요?

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

position: fixed;를 top 속성 없이 사용이 가능한 이유

미해결

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

[제로초 강좌 질문 필독 사항입니다] 질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다. 도움이 되는 질문을 하는 방법을 알려드립니다. https://www.youtube.com/watch?v=PUKOWrOuC0c 0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다. 1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다. 2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다. 3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요. 4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요. 5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다. 6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 안녕하세요 로초님! 강의 잘 보고 있습니다. 다름 아니라 position:fixed;는 뷰포트를 기준으로 레이아웃을 배치하게 만드는 속성값이라서, top, left, bottom, right 중 하나 이상을 써야 레이아웃이 정상적으로 된다고 알고 있는데, (afterLogin)/layout.module.tsx의 .leftSectionFixed와 .search에서는 top같은 거 없이도 의도한 대로(sticky처럼?) 기능하는 이유가 무엇인지 궁금합니다. 옛날에 제가 다른 프로젝트 만들었을 때는 fixed랑 top을 같이 안 써서 헤맨 적이 있어서, 앞으로는 top을 꼭 같이 써야겠다고 알고 있었고, 지금 구글링 해서 fixed의 사용법을 찾아봐도 다들 top같은 걸 써야 한다고 말하고 있어서, 혹시 다른 사용법이 있는 건지 궁금해서 여쭈어봅니다. 답변 기다리겠습니다. 감사합니다:)

  • react
  • next.js
  • react-query
  • next-auth
  • msw
jhp3194 댓글 1 좋아요 0 조회수 423

주문조회 V3.1 실행 후 Query 질문

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. V3.1 실행 후 콘솔창에 뜨는 쿼리문이 다음과 같이 뜹니다. springboot version 3.2.1 이고 Hibernate5JakartaModule로 설정했습니다. application.properties 도 아래와 같이 설정했습니다. 그외 부분도 강사님 코드를 그대로 복붙해도 다음과 같이 물음표가 너무 많이 뜨는데 버전 문제인건가요?

  • java
  • spring
  • spring-boot
  • jpa
댓글 4 좋아요 0 조회수 1072

인기 태그

인프런 TOP Writers

주간 인기글