묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
1. 라우터 연결 오류 2. req.response가 undefined
수정 전 코드에서는 다음과 같은 오류가 뜨면서 라우터 연결이 안됩니다.GET /v1/posts/my 라우터가 없습니다.(1-1) 수정 전 nodebird-api의 app.jsconst express = require("express"); const path = require("path"); const cookieParser = require("cookie-parser"); const passport = require("passport"); const morgan = require("morgan"); const session = require("express-session"); const nunjucks = require("nunjucks"); const dotenv = require("dotenv"); dotenv.config(); const v1 = require("./routes/v1"); const authRouter = require("./routes/auth"); const indexRouter = require("./routes"); const { sequelize } = require("./models"); const passportConfig = require("./passport"); const app = express(); passportConfig(); app.set("port", process.env.PORT || 8002); app.set("view engine", "html"); nunjucks.configure("views", { express: app, watch: true, }); sequelize .sync({ force: false }) .then(() => { console.log("데이터베이스 연결 성공"); }) .catch((err) => { console.error(err); }); app.use(morgan("dev")); app.use(express.static(path.join(__dirname, "public"))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, }) ); app.use(passport.initialize()); app.use(passport.session()); app.use("/v1", v1); app.use("/auth", authRouter); app.use("/", indexRouter); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status = 404; next(error); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== "production" ? err : {}; res.status(err.status || 500); res.render("error"); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "번 포트에서 대기중"); }); (2-2) 수정 후 nodebird-api의 app.jsconst express = require('express'); const path = require('path'); const cookieParser = require('cookie-parser'); const passport = require('passport'); const morgan = require('morgan'); const session = require('express-session'); const nunjucks = require('nunjucks'); const dotenv = require('dotenv'); dotenv.config(); const v1 = require('./routes/v1'); const v2 = require('./routes/v2'); const authRouter = require('./routes/auth'); const indexRouter = require('./routes'); const { sequelize } = require('./models'); const passportConfig = require('./passport'); const app = express(); passportConfig(); app.set('port', process.env.PORT || 8002); app.set('view engine', 'html'); nunjucks.configure('views', { express: app, watch: true, }); sequelize.sync({ force: false }) .then(() => { console.log('데이터베이스 연결 성공'); }) .catch((err) => { console.error(err); }); app.use(morgan('dev')); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, })); app.use(passport.initialize()); app.use(passport.session()); app.use('/v1', v1); app.use('/v2', v2); app.use('/auth', authRouter); app.use('/', indexRouter); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status = 404; next(error); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== 'production' ? err : {}; res.status(err.status || 500); res.render('error'); }); app.listen(app.get('port'), () => { console.log(app.get('port'), '번 포트에서 대기중'); }); 수정 후에는 에러 메시지가 Cannot read properties of undefined (reading 'status')로 바뀌었습니다. nodecat의 index.jsconst express = require("express"); const axios = require("axios"); const router = express.Router(); const URL = "http://localhost:8002/v1"; axios.defaults.headers.origin = "http://localhost:4000"; const request = async (req, api) => { try { if (!req.session.jwt) { const tokenResult = await axios.post(`${URL}/token`, { clientSecret: process.env.CLIENT_SECRET, }); req.session.jwt = tokenResult.data.token; return await axios.get(`${URL}${api}`, { headers: { authorization: req.session.jwt }, }); } } catch (error) { console.error(error); if (error.response.status === 419) { delete req.session.jwt; return request(req, api); } return error.response; } }; router.get("/mypost", async (req, res, next) => { try { const result = await request(req, "/posts/my"); res.json(result.data); } catch (error) { console.error(error); next(error); } }); router.get("/search/:hashtag", async (req, res, next) => { try { const result = await request( req, `/posts/hashtag/${encodeURIComponent(req.params.hashtag)}` ); res.json(result.data); } catch (error) { console.error(error); next(error); } }); module.exports = router; nodebird-api의 middleware.jsconst jwt = require("jsonwebtoken"); exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.status(403).send("로그인 필요"); } }; exports.isNotLoggedIn = (req, res, next) => { if (!req.isAuthenticated()) { next(); } else { res.redirect("/"); } }; exports.verifyToken = (req, res, next) => { try { req.decoded = jwt.verify(req.headers.authorization, process.env.JWT_SECRET); // req.headers.authorization 유효한지 검사. // jwt토큰을 검증해서 req.decoded에 payload(데이터)부분이 담긴다. return next(); } catch (error) { if (error.name === "TokenExpiredError") { // 유효기간 초과. return res.status(419).json({ code: 419, // 2xx 3xx 4xx 5xx같이 앞자리만 용도에 맞으면 이후 값은 마음대로 정해도 된다. // 문서화만 제대로 하면 됨. message: "토큰이 만료되었습니다", }); } return res.status(401).json({ // 위조한 토큰인 경우. code: 401, message: "유효하지 않은 토큰입니다", }); } }; nodebird-api의 v1.jsconst express = require("express"); const jwt = require("jsonwebtoken"); // api서버이기 때문에 nodebird에서 요청자에게로 정보를 제공할 라우터를 뚫어줘야 한다. // 요청을 처리할 수 있는 라우터. const { verifyToken } = require("./middlewares"); const { Domain, User, Post, Hashtag } = require("../models"); const router = express.Router(); router.post("/token", async (req, res) => { // 토큰을 발급해주는 라우터. const { clientSecret } = req.body; try { const domain = await Domain.findOne({ // 도메인 등록했는지 검사. where: { clientSecret }, // nodecat의 .env에 있는 CLIENT_SECRET값이 // 도메인 clientSecret 등록되어있는지 검사. include: { model: User, attribute: ["nick", "id"], }, }); if (!domain) { // 도메인 등록 안되어있으면 에러. return res.status(401).json({ code: 401, message: "등록되지 않은 도메인입니다. 먼저 도메인을 등록하세요", }); } const token = jwt.sign( // 토큰 발급해주기 .sign() // 도메인 등록 되어 있으면 토큰 발급 해주기. { id: domain.User.id, nick: domain.User.nick, // - 부가적 데이터 넣어줌. }, process.env.JWT_SECRET, // - signiture 만들어줌 위조 검사. { expiresIn: "1m", // 유효기간 1분. issuer: "nodebird", // 누가 발급해줬는가. // - 토큰 옵션 } ); return res.json({ // 토큰 발급되면 nodecat에 돌려줌. // nodecat의 index.js의 tokenResult.data.token에 저장됨. code: 200, message: "토큰이 발급되었습니다", token, }); } catch (error) { console.error(error); return res.status(500).json({ code: 500, message: "서버 에러", }); } }); router.get("/test", verifyToken, (req, res) => { // 토큰이 제대로 발급되었는지 테스트 하는 라우터. res.json(req.decoded); // req.decoded는 verifyToken에서 나옴. // 이후 req.decoded는 nodecat의 index.js의 result.data안에 들어간다. }); // nodebird의 data들을 보내주는 라우터 코딩. router.get("./posts/my", verifyToken, (req, res) => { // 자기 자신의 정보를 가져올 수 있게 해주는것. Post.findAll({ where: { userId: req.decoded.id } }) .then((posts) => { console.log(posts); // async await 방식이 아니라 post방식으로 작성됨. res.json({ code: 200, payload: posts, // 코드와 데이터를 규격에 맞춰 보내줌. }); }) .catch((error) => { // 비동기 처리를 할때는 에러가 뭔지 기록해주어야 한다. console.error(error); return res.status(500).json({ code: 500, message: "서버 에러", }); }); }); // 해시태그로 검색하는 라우터 router.get(`/posts/hashtag/:title`, verifyToken, async (req, res) => { try { const hashtag = await Hashtag.findOne({ where: { title: req.params.title }, }); if (!hashtag) { return res.status(404).json({ code: 404, message: "검색 결과가 없습니다.", }); } const posts = await hashtag.getPosts(); return res.json({ code: 200, payload: posts, }); } catch (error) { console.error(error); return res.status(500).json({ code: 500, message: "서버 에러", }); } }); module.exports = router; 질문 1. 수정 후 코드는 10.7의 코드는 붙여 넣기 한 것입니다. 수정 전에도 라우터는 연결된 것처럼 보였는데 라우터가 없다는 오류가 뜬 이유가 뭔가요? 질문 2. 수정 후에 뜨는 에러 메시지인 Cannot read properties of undefined (reading 'status')가 if (error.response.status === 419) { // 토큰 만료 시 토큰 재발급 받기 이 부분에서 발생했습니다. error.response가 undefined라는 것 까지는 알겠는데 2-1. 왜 error.response가 undefined가 된것인지.2-2. 어느 부분에서 오류가 발생해 error로 넘어간 것인지 전혀 감이 잡히지 않습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@RequestBody와 BindingResult 질문입니다
안녕하세요@RequestBody로 JSON 데이터를 매핑할 때 타입 에러가 발생하여 매핑이 실패하면 BindingResult가 있음에도 예외가 터지고 그냥 마무리 되는데요, @RequestBody로 받은 JSON 데이터는 바인딩 실패를 코드 상에서 제어할 수 있는 방법이 따로 없나요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
데이터 바인딩 이용시 <layout>
데이터 바인딩 이용시 activity_main.xml 전체를 <layout>으로 감싸주는 이유가 무엇인가요?
-
미해결실전! 스프링 데이터 JPA
MemberRepositoryTest 실행시 Exception
이전 버전의 강의에서도 IllegalStateException이 발생했는데 새 버전으로 따라해도 같은 Exception이 발생하네요ㅠㅠH2 데이터베이스는 연결해놓은 상태입니다. DB는 비어있습니다.Error Code: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8(ClassBasedTestDescriptor.java:363) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:368) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9(ClassBasedTestDescriptor.java:363) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:362) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:283) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:282) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272) at java.base/java.util.Optional.orElseGet(Optional.java:364) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:132) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) ... 71 more Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ... 86 more Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 103 more application.ymlMember.javaMemberRepository.javaMemberRepositoryTest.java
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
강의예제 질문을 하겠습니다
질문중에 찾아 보니 깃허브에서 자료를 다운받고 ch1 부터 하면 된다고 하시던데 ch1,2 안에 코드가 이미 완성되어 있던데 이러면 그냥 nodebird > prepare 폴더를 만들어서 처음부터 따라 하면 되는걸까여?아님 그냥 깃허브에 있는 자료를 다운받아서 다 지우고 따라하는게 좋을까여?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
처음으로 완성해봤습니다
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>유진건설</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <header> <div class="header-logo"> <a href="#none"><img src="images/logo-header.png" alt="header logo"></a> </div> <div class="navi"> <ul class="menu"> <li> <a href="#none">회사소개</a> <div class="sub-menu"> <a href="#none">인사말</a> <a href="#none">조직구성도</a> <a href="#none">오시는길</a> </div> </li> <li> <a href="#none">사업영역</a> <div class="sub-menu"> <a href="#none">전원주택</a> <a href="#none">도시재생</a> <a href="#none">인테리어</a> </div> </li> <li> <a href="#none">입주정보</a> <div class="sub-menu"> <a href="#none">입주단지</a> <a href="#none">입주갤린더</a> </div> </li> <li> <a href="#none">고객센터</a> <div class="sub-menu"> <a href="#none">공지사항</a> <a href="#none">건축상담</a> <a href="#none">홍보자료실</a> </div> </li> </ul> </div> <div class="sub-back"></div> </header> <div class="slide"> <div> <a href="#none"><img src="images/slide-01.jpg" alt="slide1"></a> <a href="#none"><img src="images/slide-02.jpg" alt="slide2"></a> <a href="#none"><img src="images/slide-03.jpg" alt="slide3"></a> </div> </div> <div class="items"> <div class="news"> <div class="tab-inner"> <div class="btn"> <span>공지사항</span> </div> <div class="tab1"> <a class="open-modal" href="#none"><em>운영위원장 후보자 추천을 받고 있습니다.</em><b>2020.01.09</b></a> <a href="#none"><em>홈커밍데이 진행위원회 결과를 다운로드 받으세요.</em><b>2020.01.07</b></a> <a href="#none"><em>카드결제 무이자 이벤트 한시적 10월 20일까지</em><b>2019.12.31</b></a> <a href="#none"><em>보안강화 시스템 작업 안내 공지</em><b>2019.12.20</b></a> <a href="#none"><em>부여 가을연꽃축제 10주년 콘서트 축제</em><b>2019.12.20</b></a> </div> </div> </div> <div class="gallery"> <div class="tab-inner"> <div class="btn"> <span>갤러리</span> </div> <div class="tab2"> <a href="#none"><img src="images/gallery-01.jpg" alt="gallery1"></a> <a href="#none"><img src="images/gallery-02.jpg" alt="gallery2"></a> <a href="#none"><img src="images/gallery-03.jpg" alt="gallery3"></a> </div> </div> </div> <div class="shortcut"> <a href="#none"><img src="images/shortcut.jpg" alt="shortcut"></a> </div> </div> <footer> <div class="Copyright"> <div> <a href="#none">동문경조사</a> <a href="#none">동문행사일정</a> <a href="#none">사용자매뉴얼</a> </div> <div> 상호 : (주)이스타컴퍼니 | 대표자 : 최종윤 | 개인정보관리책임자 : 이주현 부장 <br> 사업장주소 : 인천광역시 중구 개항로 6층 (주)이스타컴퍼니 </div> </div> <div class="family-site"> <select> <option value="">Family site</option> <option value="">여주군청 홈페이지</option> <option value="">한국관광공사</option> <option value="">여행자보험가입</option> </select> </div> </footer> </div> <div class="modal"> <div class="modal-content"> <h2>부여 가을연꽃축제 팸투어 모집</h2> <p> 예비 청년상인들을 위해 진행하는 부여에서 청춘의 미래를 디자인하다. 청년창업人부여 팸투어가 12월 05일 토요일 충청남도 부여에서 진행됩니다.<br> 팸투어는 전액 무료로 진행되며 참가비 없습니다.<br> 이번 팸투어에서는 부여군상권활성화재단의 청년상인 육성프로젝트를 실제로 견학하며 확인해 보실 수 있는 좋은 기회이니 창업을 희망하는 많은 청년 분들의 관심 부탁드립니다.<br> 온라인 및 전화 또는 메일 등으로 사전 참가신청하실 수 있습니다! </p> <a class="close-modal" href="#none">닫기</a> </div> </div> <script src="script/jquery-1.12.4.js"></script> <script src="script/custom.js"></script> </body> </html> @charset "UTF-8"; body { margin: 0; background-color: #ffffff; color: #333333; font-size: 15px; } a { color: #333333; text-decoration: none; } .container { /* border: 1px solid red; */ width: 1200px; margin: auto; } header { height: 100px; position: relative; z-index: 10; } header > div { /* border: 1px solid blue; */ height: 100px; } .header-logo { width: 200px; float: left; line-height: 130px; } .navi { width: 600px; float: right; margin-right: 20px; } .slide {} .slide > div { /* border: 1px solid green; */ height: 300px; } .items { overflow: hidden; } .items > div { /* border: 1px solid blue; */ height: 200px; float: left; box-sizing: border-box; } .news { width: 425px; } .gallery { width: 425px; } .shortcut { width: 350px; } footer { overflow: hidden; } footer > div { /* border: 1px solid green; */ height: 100px; float: left; box-sizing: border-box; text-align: center; } .Copyright { width: 1000px; } .Copyright div { /* border: 1px solid black; */ height: 50px; } .Copyright div:nth-child(1) { padding-top: 20px; box-sizing: border-box; } .Copyright div:nth-child(1) a:hover { text-decoration: underline; } .family-site { width: 200px; line-height: 100px; } /* navigation */ .menu { list-style: none; padding: 0; padding-top: 53px; } .menu li { float: left; width: 25%; text-align: center; box-sizing: border-box; } .menu li > a { border: 1px solid #000000; display: block; padding: 5px; transition: 0.5s; } .menu li:hover > a { background-color: #000000; color: #ffffff; } .sub-menu { border: 1px solid #000000; display: none; } .sub-menu a { display: block; padding: 5px; color: #ffffff; transition: 0.5s; } .sub-menu a:hover { background-color: #ffffff; color: #000000; } .sub-back { background-color: #000000; width: 1200px; height: 140px; position: absolute; left: 0; top: 100%; z-index: -1; display: none; } /* slide */ .slide { position: relative; width: 1200px; height: 300px; margin-bottom: 20px; } .slide > div { font-size: 0; } .slide > div a { position: absolute; left: 0; top: 0; opacity: 0; animation: slide 10s linear infinite; } .slide > div a:nth-child(1) { animation-delay: 0s; } .slide > div a:nth-child(2) { animation-delay: 3.5s; } .slide > div a:nth-child(3) { animation-delay: 7s; } @keyframes slide { 0% { opacity: 0; visibility: hidden; } 5% { opacity: 1; } 35% { opacity: 1; } 40% { opacity: 0; } 100% { opacity: 0; } } /* news & gallery & shortcut */ .tab-inner { width: 95%; margin: auto; } .btn {} .btn span { border: 1px solid #000000; display: inline-block; width: 100px; text-align: center; padding: 5px; border-radius: 5px 5px 0 0; border-bottom: none; margin-bottom: -1px; background-color: #ffffff; } .tab1, .tab2 { border: 1px solid #000000; padding: 0 15px; height: 160px; } .tab1 a { display: block; padding: 5px; border-bottom: 1px solid #000000; overflow: hidden; } .tab1 a:last-child { border-bottom: none; } .tab1 a em, .tab1 a b { display: block; float: left; font-weight: normal; font-style: normal; } .tab1 a em { width: 75%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tab1 a b { float: right; font-weight: normal; } .tab2 { text-align: center; } .tab2 img { width: 120px; padding-top: 25px; } .tab2 img:hover { opacity: 0.7; } .shortcut img { width: 96%; } /* modal */ .modal { background-color: #00000053; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 100; display: none; } .modal-content { width: 350px; background-color: #ffffff; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); padding: 20px; } .close-modal { float: right; border: 1px solid #000000; padding: 5px 15px; } /* navigation */ $('.menu li').mouseenter(function(){ $('.sub-menu, .sub-back').stop().slideDown() }) $('.menu li').mouseleave(function(){ $('.sub-menu, .sub-back').stop().slideUp() }) /* modal */ $('.open-modal').click(function(){ $('.modal').fadeIn() }) $('.close-modal').click(function(){ $('.modal').fadeOut() })이렇게 연습하면 될까요?확인 부탁합니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
네스트와 익스프레스의 차이가 뭐죠?
노드강의 있으신데 익스프레스 강의는 별도로 없고노드강의에서 익스프레스 학습을 추가 해놓으셨는데요.네스트 강의는 별도로 만드셨다 말이죠.네스트와 익스프레스의 차이가 뭔가요?익스프레스는 단순 require('express') 하고 쓰면, 익스프레스 프레임워크를 사용하는 건가요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드가 동적타입 인가요?
타입스크립트는 정적타입이잔아요.노드는 동적타입 언어인가요?순전히 궁금해서 여쭤봅니다.
-
미해결
인텔리제이 공부하는 것 어떻게 하면 좋을까요?
학원에서 이클립스로 공부를 했는데,요즘 현업에서는 인텔리제이를 쓴다고해서 집에서 환경을 인텔리제이로 바꿔서 하고 싶네요어떻게 설정해야 할지 막막하고,커뮤니티 버전으로 사용해서 기능들 사용하는데 지장없는지도 궁금합니다. ㅎㅎ
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
여러개의 써클을 만드는 방법이 없나요??
구글맵 만들기에서 써클을 하나만 만들었는데여러개의 써클 또는 마커를 만들수있는지 생각해보았는데요..아래와 같이 변수를 계속 만들어서 서클을 만들어 보았는데요, 확장해서 수천개의 서클을 만들려면 수천개의 변수를 만드는 것 말고 다른 방법이 없는건가요??static final Circle circle = Circle( circleId: CircleId('mycircle'), center: companyLatLng, fillColor: Colors.blue.withOpacity(0.3), strokeColor: Colors.red, strokeWidth: 5, radius: 20.0, ); static final Circle circletwo = Circle( circleId: CircleId('mycircle2'), center: LatLng(37.205796, 127.108446), fillColor: Colors.blue.withOpacity(0.3), strokeColor: Colors.red, strokeWidth: 5, radius: 20.0, ); _GoogleMap( initialPosition: initialPosition, circle: circle, circletwo : circletwo, ),class _GoogleMap extends StatelessWidget { final CameraPosition initialPosition; final Circle circle; final Circle circletwo; const _GoogleMap( {required this.circletwo, required this.circle, required this.initialPosition, Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Expanded( flex: 2, child: GoogleMap( mapType: MapType.normal, initialCameraPosition: initialPosition, myLocationEnabled: true, myLocationButtonEnabled: true, circles: Set.from([circle,circletwo]), ), ); } }
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
안녕하십니까 플러터 강좌 개설 예정일이 궁금합니다.
최대한 찾아봤는데 6월에 올리신 댓글에 하반기 개설 예정으로 적으셨더라고요. 혹시 언제쯤 개설 예정인지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
404에러
404 에러가 나와요이전 강의에서 작성했던페이지들은 잘 들어가지는데유독 지금 만든 jsp는 경로를 못찾는지 안되네요 안녕하세요제가 web폴더안에 servletmvc를 안뒀던 게 문제가 됐던거 같은데맞나요? 그렇다면 왜 그런지 궁금합니다. 주소로 매핑되서 들어가는데 web폴더 안이 아니여서 안된건지... 설명 부탁드립니다.
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
SQL
안녕하세요 강사님 강의 잘 듣고 있습니다.강의를 듣다가 궁금한 점이 있는데요,SQL이 오라클 내부에서 상세실행계획으로 변경된다고하셨는데, 혹시 이와 관련한 괜찮은 책이 뭐가 있는지여쭤봐도 될까요?SQL이 들어갔을때 내부 메커니즘이 궁금합니다.감사합니다.
-
미해결언리얼 엔진4 입문 (C++ 기반)
UE_LOG에 빨간색 밑줄이 쳐집니다.
디버깅 실습을 위해 똑같이 따라했지만 ㅠ UE_LOG에 빨간색 밑줄이 쳐지고 컴파일에 실패했습니다.. 어떻게 하면 문제를 해결할 수 있을지 여쭤보고 싶습니다..!
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
컴포저블 함수 구현에서 초기화 이유?
이부분 초기화 하는 이유가 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA 강의 중 SpringConfig Bean 오류
JPA 강의 중 SpringConfig에서 EntityManager 생성자를 등록하는 부분에서 오류가 납니다. 질문하기 탭에서 해당 오류와 비슷한 질문글을 찾아보았늗네 intelliJ의 버그일 수도 있다고 해서 실행을 해보니org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.5.jar:2.7.5] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.5.jar:2.7.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.5.jar:2.7.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.5.jar:2.7.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.5.jar:2.7.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.5.jar:2.7.5] at hello.hellospring.HelloSpringApplication.main(HelloSpringApplication.java:10) ~[main/:na]Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.23.jar:5.3.23] ... 16 common frames omittedCaused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.6.12.Final.jar:5.6.12.Final] ... 33 common frames omitted 위와 같은 에러가 떴습니다. 현재 파일들은 아래와 같습니다.build.gradleapplication.propertiesMemberServiceJpaMemberRepositoryMemberSpringConfig제가 수업내용중에 어떤걸 놓쳤을까요 ㅜㅜ답변 부탁드립니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
페치 조인 시 메서드 네이밍
페치 조인을 사용하는 메서드의 네이밍 컨벤션을 어떻게 가져가시는지 궁금합니다.예를 들어 Member 조회 시 Team을 페치 조인으로 가져오는 경우 메서드명을 어떻게 정하시나요?public interface MemberRepository extends JpaRepository<Member, Long> { @EntityGraph("team") Optional<Member> findByUsername(String username); }제 경우 페치 조인을 의미하는 접미사( ~Fetch() )를 붙이고 페치 조인하는 엔티티는 해당 메서드에 문서화하는 방식으로 진행 중이긴 한데, 영한님이나 서포터즈 분들은 '이 쿼리 메서드는 페치 조인을 수행한다'를 어떤 방법으로 표현하시는지 궁금합니다.
-
해결됨두고두고 써먹는 유니티 VR
Keep Selected Target Valid 질문입니다.
활성화하면 인터랙션 중인 대상이 유효해지지 않아도 인터랙션을 유지할 수 있다고 하셨는데 이게 무슨 말인지 잘 모르겠습니다.유효하지 않은 대상과 인터랙션을 할 수가 있나요?그리고 예시로 보통 텔레포테이션을 할 때 더이상 Ray Interactor가 Teleportation Anchor나 Area를 가리키지 않는 경우 인터랙션 되지 않도록 할 때 사용한다고 하셨는데 이 부분도 무슨 말인지 잘 모르겠습니다.
-
미해결언리얼 엔진4 입문 (C++ 기반)
Mesh와 MESH
안녕하세요~! 강좌에서 .h에는 Mesh라고 적고, .cpp에서는 MESH라고 적는 걸로 익혔습니다. 궁금해서 .cpp의 MESH를 MESHesgone으로 바꿔보았는데 에디터에서 해당 컴포넌트가 적용되지 않은 것으로 보였습니다. 제가 전공이 전혀 무관한 사람이라 너무 기본적인 의문을 가지는 것 같은데 왜 그런 것인지 알려주신다면 저에게 도움이 많이 될 것 같습니다. 감사합니다.
-
해결됨배달앱 클론코딩 [with React Native]
Ing component navigation type error
Ing 컴포넌트의 네비게이션 타입을 강좌에 나온대로 진행하였더니 타입에러가 발생해서 문의글 남깁니다.컴포넌트 하단부 도착 마커의 navigation.push("Complete", {}); 에서 push 관련된 타입에러가 발생하였습니다.Property 'push' does not exist on type 'NavigationProp라는 에러메세지가 발생하였는데요.우선 아래의 사진과 같이 navigation의 타입을 재선언 해주면서 해결이 되었습니다.LoggedInParamList 대신에 생성한 IngScreenPorps를 넣어봤으면 push에 대한 에러는 해결되지만 complete라는 네비게이션을 찾지 못한다는 에러가 발생하여 위와같이 해결했는데 옳바른 해결책인지 궁금해서 문의 드립니다! 그리고 추가로console.dir 을 활용하려고 하면TS2339: Property 'dir' does not exist on type 'Console'.위와 같은 에러가 발생하는데 이건 해결책이 없을까요? 혼자 찾아보려고 했으나 찾지를 못하여 문의드립니다.