[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
jwt refresh 토큰은 access 토큰이 만료되었을때 재발급을 위한 토큰이라고 알고있는데요 보통 refresh 는 시간을 길게주고 access 토큰은 짧게 줘서 관리하는것으로 알고있습니다. 근데 강의를 다듣고 정리하는데 refresh에 대해 궁금증이 생겼습니다. 강의에서는 따로 DB에 저장안한거 같은데 DB에 저장하지않고 관리하는거라면 refresh도 만료시간이 있을텐데 이걸 어떻게 관리하는것인지요? http only cookie로 클라이언트에 건내줘서 클라이언트가 만료될때마다 서버쪽으로 던지는것인지 아니면 DB에 저장해서 관리하는것인지 궁금합니다. 어떤것이 정답이라고 할수 없겠지만 보통 실무에서는 어떻게 관리할까요
안녕하세요. 그런데 섹션3 의 'Querydsl 검색처리' 영상을 다 보고 TDD 테스트를 돌리는데 계속 아래와 같은 에러가 납니다.. 몇일동안 찾아봤는데도 아예 해결이 되지 않아서 여기에 질문드리게 됐네요.. ㅠㅠ 혹시 몰라 콘솔탭에 있는거 전부 다 복사해 왔습니다. 강의를 파트별로 정리하면서 공부하고 있어서 앞에 Ex01 이런식으로 이름이 붙어 있습니다. 왜 안되는지 도저히 모르겠어요.. (게시글이 10000자 이상 안써진다고 해서 댓글에 다음 메세지들 쓰겠습니다.) (혹시 몰라서 대댓글로 코드들도 남깁니다.) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.3.6) 2024-12-02T05:13:22.977+09:00 INFO 7780 --- [ restartedMain] c.zerock.apiserver.ApiserverApplication : Starting ApiserverApplication using Java 17.0.13 with PID 7780 (C:\Users\hykim\Desktop\apiserver\build\classes\java\main started by hykim in C:\Users\hykim\Desktop\apiserver) 2024-12-02T05:13:22.993+09:00 INFO 7780 --- [ restartedMain] c.zerock.apiserver.ApiserverApplication : No active profile set, falling back to 1 default profile: "default" 2024-12-02T05:13:23.010+09:00 INFO 7780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2024-12-02T05:13:23.010+09:00 INFO 7780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2024-12-02T05:13:23.322+09:00 INFO 7780 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2024-12-02T05:13:23.353+09:00 INFO 7780 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 1 JPA repository interface. 2024-12-02T05:13:23.632+09:00 INFO 7780 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-12-02T05:13:23.638+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-12-02T05:13:23.638+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.33] 2024-12-02T05:13:23.665+09:00 INFO 7780 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-12-02T05:13:23.665+09:00 INFO 7780 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 655 ms 2024-12-02T05:13:23.733+09:00 INFO 7780 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2024-12-02T05:13:23.761+09:00 INFO 7780 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final 2024-12-02T05:13:23.777+09:00 INFO 7780 --- [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2024-12-02T05:13:23.936+09:00 INFO 7780 --- [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2024-12-02T05:13:23.951+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-12-02T05:13:23.989+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.mariadb.jdbc.Connection@6303bda2 2024-12-02T05:13:23.990+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2024-12-02T05:13:24.411+09:00 INFO 7780 --- [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2024-12-02T05:13:24.438+09:00 INFO 7780 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-12-02T05:13:24.535+09:00 WARN 7780 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ex04_10_TodoServiceImpl' defined in file [C:\Users\hykim\Desktop\apiserver\build\classes\java\main\com\zerock\apiserver\service\Ex04_10_TodoServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'ex04_13_TodoRepository' defined in com.zerock.apiserver.repository.Ex04_13_TodoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto); Reason: Paging query needs to have a Pageable parameter; Offending method: public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto) 2024-12-02T05:13:24.535+09:00 INFO 7780 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-12-02T05:13:24.537+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-12-02T05:13:24.538+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-12-02T05:13:24.539+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2024-12-02T05:13:24.545+09:00 INFO 7780 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-12-02T05:13:24.556+09:00 ERROR 7780 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ex04_10_TodoServiceImpl' defined in file [C:\Users\hykim\Desktop\apiserver\build\classes\java\main\com\zerock\apiserver\service\Ex04_10_TodoServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'ex04_13_TodoRepository' defined in com.zerock.apiserver.repository.Ex04_13_TodoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto); Reason: Paging query needs to have a Pageable parameter; Offending method: public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.15.jar:6.1.15] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.15.jar:6.1.15] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.6.jar:3.3.6]
안녕하세요 이정환 강사님! 강의 너무 잘 듣고 있습니다. 다름이 아니라 section04로 넘어가면서 서버 데이터 패칭 시 하기와 같은 에러가 발생하는데요 hook.js:608 A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used: - A server/client branch if (typeof window !== 'undefined') . - Variable input such as Date.now() or Math.random() which changes each time it's called. - Date formatting in a user's locale which doesn't match the server. - External changing data without sending a snapshot of it along with the HTML. - Invalid HTML tag nesting. It can also happen if the client has a browser extension installed which messes with the HTML before React loaded. https://react.dev/link/hydration-mismatch ... <HotReload assetPrefix=""> <ReactDevOverlay state={{nextId:1, ...}} dispatcher={{...}}> <DevRootNotFoundBoundary> <NotFoundBoundary notFound={<NotAllowedRootNotFoundError>}> <NotFoundErrorBoundary pathname="/" notFound={<NotAllowedRootNotFoundError>} notFoundStyles={undefined} ...> <RedirectBoundary> <RedirectErrorBoundary router={{...}}> <Head> <link> <RootLayout> <html lang="en"> <body - cz-shortcut-listen="true" > ... 서버에러인거 같아서 서버 터미널을 보니 [Nest] 89115 - 2024. 12. 01. 오후 10:22:40 ERROR [ExceptionsHandler] Invalid this.prisma.book.findMany() invocation in /Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:35 24 } 25 26 async findAllBooks() { → 27 return await this.prisma.book .findMany( Error querying the database: FATAL: Tenant or user not found PrismaClientInitializationError: Invalid this.prisma.book.findMany() invocation in /Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:35 24 } 25 26 async findAllBooks() { → 27 return await this.prisma.book .findMany( Error querying the database: FATAL: Tenant or user not found at In.handleRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:7154) at In.handleAndLogRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:6188) at In.request (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:5896) at l (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:127:11167) at BookService.findAllBooks (/Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:12) at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-execution-context.js:46:28 at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-proxy.js:9:17 [Nest] 89115 - 2024. 12. 01. 오후 10:22:40 ERROR [ExceptionsHandler] Invalid prisma.$queryRawUnsafe() invocation: Error querying the database: FATAL: Tenant or user not found PrismaClientInitializationError: Invalid prisma.$queryRawUnsafe() invocation: Error querying the database: FATAL: Tenant or user not found at In.handleRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:7154) at In.handleAndLogRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:6188) at In.request (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:5896) at l (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:127:11167) at BookService.findRandomBooks (/Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:51:12) at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-execution-context.js:46:28 at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-proxy.js:9:17 [Nest] 89115 - 2024. 12. 01. 오후 10:24:17 ERROR [ExceptionsHandler] Invalid this.prisma.book.findMany() invocation in /Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:35 24 } 25 26 async findAllBooks() { → 27 return await this.prisma.book .findMany( Error querying the database: FATAL: Tenant or user not found PrismaClientInitializationError: Invalid this.prisma.book.findMany() invocation in /Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:35 24 } 25 26 async findAllBooks() { → 27 return await this.prisma.book .findMany( Error querying the database: FATAL: Tenant or user not found at In.handleRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:7154) at In.handleAndLogRequestError (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:6188) at In.request (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:122:5896) at l (/Users/jonghyun/Documents/onebite-books-server-main/node_modules/@prisma/client/runtime/library.js:127:11167) at BookService.findAllBooks (/Users/jonghyun/Documents/onebite-books-server-main/src/book/book.service.ts:27:12) at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-execution-context.js:46:28 at /Users/jonghyun/Documents/onebite-books-server-main/node_modules/@nestjs/core/router/router-proxy.js:9:17 [Nest] 89115 - 2024. 12. 01. 오후 10:24:17 ERROR [ExceptionsHandler] Invalid prisma.$queryRawUnsafe() invocation: 이와같은 에러가 발생하는데요 supabase에도 문제가 없고 혹시 .env파일에서의 url에 오타가 있는지 봤지만 DATABASE_URL="postgresql://postgres.hnetjcwhrrrlawdduljl:J8duYElvPI3aY69n@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres" 아레와 같이 문제는 없었는데 어떤 점이 문제인지 4시간째 찾지 못해서 질문드립니다 ㅠ
안녕하세요. 테스트 코드에 관심이 있는 중에 찰떡인 강의 덕분에 집중해서 강의를 정독하고있습니다. mocking 시에 여러 라이브러리들이 존재할텐데, nock 을 선택하신 이유가 궁금합니다. 추가로 다들 비슷하겠지만 라이브러리를 선택하실때 고민하시는 부분들이 어떤 부분들이 있는지 궁금해요. (저는 주로 github 스타,업데이트 및 지원, 사용성, 지금 코드와 적합한가? 정도 보긴합니다..)
여기도 하나 질문 드릴게 있는데 conversation.ts파일이 'use server'로인해 서버에서 실행되는 함수가 되는데 그럼에도 revalidatePath함수에 절대경로 ('localhost:3000/')이 아닌 루트경로를 넣어도 왜 상관이 없는건지 궁금합니다 ㅠㅠ
클라이언트 컴포넌트안의 자식컴포넌트들은 자동으로 클라이언트 컴포넌트로 바뀌는데 사용할 자식 컴포넌트를 children으로 처리하면 클라이언트 컴포넌트로 바뀌지 않고 서버컴포넌트로 남기때문에 문제가 발생하지 않는건가요? 그렇다면 그게 가능한 메커니즘은 무엇인지 궁금합니다 ㅠㅠ
🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이 계층 구조 화면에서 TodoStateContext.Provider 컴포넌트와 TodoDispatchContext.Provider는 동등한 위치에 있는 것인가요? 아니면 화살표대로 TodoStateContext.Provider 컴포넌트의 자식 컴포넌트가 TodoDispatchContext.Provider 컴포넌트 인건가요?
질문은 자세하게 적어주실 수록 좋습니다. 어느 부분을 수강중이신지 -> bmi 계산기 프로그램 완성하기 내가 어떻게 했는데, 어떤 결과가 나오기를 기대했는데, 다른 결과가 나왔는지 -> 노션의 코드들을 다 복사해서 붙여넣기 했는데 homepage 영역이 안나옵니다 작성하신 코드 및 오류 스크린샷 을 함께 첨부해주시면 좋아요!
Vue CLI v5.0.8 ✨ Creating project in /Users/yeji/Desktop/2-17__/myfirestvuewapp. ⚙ Installing CLI plugins. This might take a while... npm error code EACCES npm error syscall open npm error path /Users/yeji/.npm/_cacache/tmp/e7f990df npm error errno EACCES npm error npm error Your cache folder contains root-owned files, due to a bug in npm error previous versions of npm which has since been addressed. npm error npm error To permanently fix this problem, please run: npm error sudo chown -R 501:20 "/Users/yeji/.npm" npm error Log files were not written due to an error writing to the directory: /Users/yeji/.npm/_logs npm error You can rerun the command with --loglevel=verbose to see the logs in your terminal ERROR Error: command failed: npm install --loglevel error --legacy-peer-deps Error: command failed: npm install --loglevel error --legacy-peer-deps at ChildProcess.<anonymous> (/usr/local/lib/node_modules/@vue/cli/lib/util/executeCommand.js:138:16) at ChildProcess.emit (node:events:518:28) at maybeClose (node:internal/child_process:1104:16) at ChildProcess._handle.onexit (node:internal/child_process:304:5) yeji@gim-yejiui-MacBookPro 2-17__ % sudo npm i -g @vue/cli;2A
안녕하세요 좋은 강의 감사드립니다. 아래에서 for 반복문 내에서 var 키워드를 사용했을 때의 경우에는 var 키워드는 함수 스코프를 가지므로 setTimeout 의 콜백 함수가 실행되는 시점에 i 변수의 값은 이미 3인 상태이므로 3 3 3이 출력되는 것은 이해를 했습니다. 그런데 let 키워드로 선언한 변수는 블록 스코프를 가지는데 언뜻 이해하기로는 for 블록 내부에 i 변수가 선언되었다고 생각하면 var 키워드와 마찬가지로 setTimeout 의 콜백 함수가 호출되는 시점에 i 변수는 3이어야 하는게 아닐까라는 생각이 듭니다. 근데 0 1 2 가 출력되는 것을 보면 혹시 for 반복이 한번 실행될 때마다 i 변수가 생성되어서 서로 다른 블록 스코프를 가지는 것인지 아니면 제가 이해하지 못한 다른 내용이 있는 것인지 궁금합니다! 그리고 마지막으로 블록 스코프란 { } 이렇게 중괄호 내에 선언되는 경우를 말하는 것 같은데 for 문의 let i 변수의 경우에는 정확히 말하면 블록 내부에 선언되어 있지는 않은데 이 경우에도 블록 스코프라고 봐야 하는 건가요?? 감사합니다! function timer() { for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i); } , 1000); } } function timer() { for (let i = 0; i < 3; i++) { setTimeout(function () { console.log(i); } , 1000); } }
안녕하세요. 포모도로 앱만드는 첫번째 부터 막히네요 ㅠㅠ 일단 insert버튼이 생기지 않는데 뭐가 문제인걸까요? 이런식으로만 뜨네요 계속해봐도 ㅠㅠ PS C:\Users\your_\OneDrive\바탕 화면\다시> npx create-react-app . --template typescript && npm install -D tailwindcss postcss autoprefixer && npx tailwindcss init -pPS C:\Users\your_\OneDrive\바탕 화면\다시> npx create-react-app . --template typescript && npm install -D tailwindcss postcss autoprefixer && npx tailwindcss init -p 위치 줄:1 문자:46 + npx create-react-app . --template typescript && npm install -D tailwi .. . + ~~ '&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다. 위치 줄:1 문자:97 + ... escript && npm install -D tailwindcss postcss autoprefixer && npx ta i ... + ~~ '&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다. 위치 줄:1 문자:205 + ... ive\바탕 화면\다시> npx create-react-app . --template typescript && npm ins ... + ~~ '&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다. 위치 줄:1 문자:256 + ... escript && npm install -D tailwindcss postcss autoprefixer && npx ta i ... + ~~ '&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRec ordException + FullyQualifiedErrorId : InvalidEndOfLine PS C:\Users\your_\OneDrive\바탕 화면\다시> 어떤 프로그램을 어디서 어떻게 깔아야 하는지부터, 어떻게 설정을 하는지 물론 정리를 해주셨지만 순서도 모르겠고 적용하는것도 어려운 거 같아요. 처음 강의부터 아예 같이 시작을 하고 설명을 들었으면, 오류가 안났을거같은데 수업관련 파일은 또 따로 봐서 공부를 해야하고, 알아서 다 설치하고 공부한다음에 강의를 들어야해서그런지 잘 이해가 안가는거같아요..ㅠㅠ 오류가 난게 제가 뭐 프로그램을 잘못설치해서그런건지, 아니면 설정을 뭔가 잘못해서 그런건지 잘모르겠네요 답변주시면 감사하겠습니다..
실무에 바로 적용하는 프런트엔드 테스트 - 2부. 테스트 심화: 시각적 회귀・E2E 테스트
안녕하세요 선생님 강의 잘 듣고 있습니다. 이번 강의에서 질문이 있습니다! 1. 커스텀 쿼리도 Retry-ability 지원되고 커스텀 쿼리 안에 커맨드도 Retry-ability가 지원되면 n의 m제곱 번의 재시도가 발생하는 것일까요? 2. 커스텀 커맨드와 커스텀 쿼리 중에 뭘 사용할 것인지는 Retry-ability 지원 유무와 체이닝을 기준으로 선택하면 될까요? 예시코드를 봤을 때 getCardButton 와 getProductCardByIndex 둘 다 DOM 요소를 조회해서 subject를 리턴하여 체이닝을 통해 후속 작업을 하는 것처럼 보이는데 왜 getProductCardByIndex 는 커스텀 커맨드로 작성하는지 잘 모르겠습니다..
질문을 온전히 이해할 수 있도록, 모든 맥락을 전달해주세요. 질문은 질문자가 번거로워야 보다 좋은 답변을 얻으실 수 있습니다. 시행착오를 알려주시면 곧바로 원하는 문제에 집중할 수 있습니다. 오류 메시지는 일부만 알려주시기보다 전체 오류 메시지를 캡처해서 주시면, 오류 파악에 도움이 됩니다. 당신의 파이썬/장고 페이스메이커가 되겠습니다. ;-) 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. postgresql 을 다른 서버에 연결하여 사용중인데요. runserver 시에는 정상 작동하나 강사님이 올려주신 pytest를 똑같이 설정하고 실행하면, schema가 없어서 table을 생성할 수 없다는 오류가 발생합니다. MigrationSchemaMissing("Unable to create the django_migrations table 일단은 settings.py를 sqlite3로 변경하여 정상 작동은 시켰는데요 어떻게 수정할 수 있을까요? 또한 올려주신 소스코드에서 import factory from accounts.models import User class UserFactory(factory.django.DjangoModelFactory): class Meta: model = User django_get_or_create = ("username",) username = factory.Sequence(lambda n: f"user{n}") email = factory.LazyAttribute(lambda user: f"{user.username}@example.com") # UserFactory 인스턴스 생성 시에, 암호 입력을 지원하기 위함 # raw_password 필드가 아니라 password 필드로 지정하면, 암호화없이 입력값 그대로 저장됩니다. raw_password = factory.Faker("password") @classmethod def _create(cls, model_class, *args, **kwargs): # raw_password 필드값을 암호화하여 password 필드에 저장합니다. # User 모델에는 raw_password 이름의 필드가 없으므로 kwargs 사전에서 제거해줘야만 합니다. raw_password = kwargs.pop("raw_password", None) if raw_password: kwargs["password"] = make_password(raw_password) return super()._create(model_class, *args, **kwargs) make_password 부분이 import 되어 있지 않습니다. git에서는 수정되어 있는 모양인데 참고 부탁드립니다.
const onClickDelete = () => { if (window.confirm("일기를 정말 삭제할까요? 다시 복구되지 않아요!")) { onDelete(params.id); nav("/", { replace: true }); } }; useDiary.jsx 커스텀 훅 작업하고 나서, 삭제하기 하면 '존재하지 않는 일기입니다' alert이 발생합니다. data가 변화가 되어서 그런거 같은데.. 어떻게 해결하면 좋을까요? 삭제 후, 리렌더링 되면서 nav("/") 되기 전에, const curDiaryItem = useDiary(params.id); 커스텀훅에서 체크가 되는거 같은데, 뭘 확인을 해봐야할까요?ㅎ const useDiary = (id) => { const nav = useNavigate(); const data = useContext(DiaryStateContext); const [curDiaryItem, setCurDiaryItem] = useState(); useEffect(() => { const currentDiaryItem = data.find( (item) => String(item.id) === String(id) ); if (!currentDiaryItem) { window.alert("존재하지 않는 일기입니다."); nav("/", { replace: true }); } setCurDiaryItem(currentDiaryItem); }, [id, data]); return curDiaryItem; }; 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
강의에서 설명하지 않으신 내용인데요 가능한지 궁금하여 여쭈어봅니다. Conda-forge 내에 postgresql package가 있습니다. ( Postgresql | Anaconda.org ) 물론 서비스 시에는 database 서버를 따로 두는게 좋다는건 수업 때 설명으로 이해하였습니다. 그러나 실 서비스 시 postgresql를 사용할 것이라면 개발 시에 sqlite 대신 위 package를 사용하는게 만약 더 적합할까요? 배포 과정 설명 시에 로드 밸런서가 작업을 서버에 할당해준다고 설명해 주셨는데, 보아하니 각 작업을 싱글 쓰레드로 할당하는 것 처럼 보였습니다. 장고의 경우 View 단에 multithread로 작업할 내용이 있다면, 어떻게 처리해야 하나요?