묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
console에 아이디 value 비밀번호 value값을 입력해도 출력이 안되는데 어떤게 문제인지 알수 있을까요?
import React, { useCallback, useState } from 'react'; import { Form, Input, Button } from 'antd'; import Link from 'next/dist/client/link'; import styled from 'styled-components' import { useDispatch } from 'react-redux'; import { loginAction } from '../reducers'; const LoginForm = () => { const dispatch = useDispatch() const [id, setId] = useState("") const [password, setPassword] = useState("") const onChangeId = useCallback((e) => { setId(e.target.value); }, []); const onChangePw = useCallback((e) => { setPassword(e.target.value); }, []); const onSubmitForm = useCallback(() => { console.log(`id: ${id}, pw: ${password}`); dispatch(loginAction({ id, password })) }, []) return ( <Form onFinish={onSubmitForm}> <div> <label htmlFor="user-id">아이디</label> <br /> <Input type="text" name='user-id' value={id} onChange={onChangeId} /> </div> <div> <label htmlFor="user-id">비밀번호</label> <br /> <Input type="password" name='user-id' value={password} onChange={onChangePw} required /> </div> <ButtonWrapper> <Button type="primary" htmlType="submit" loading={false}>로그인</Button> <Link href="/signup"><Button>회원가입</Button></Link> </ButtonWrapper> </Form> ) } const ButtonWrapper = styled.div` margin-top: 10px; ` export default LoginForm
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
리덕스와 리듀서 콘솔에는 찍히는데 값이 변경이 안됩니다 ㅠ
//reducers/index.js export const loginAction = (data) => { console.log(data) return { type: 'LOG_IN', data, } } export const logOutAction = () => { return { type: 'LOG_OUT', } } const initialState = { user : { isLoggenIn: false, user: null, signUpData: {}, loginData: {}, }, post: { mainPost: [] } }; // ( 이전상태, 액션 ) => 다음상태 const rootReducer = (state = initialState, action) => { console.log(action.type) switch (action.type) { case 'LOG_IN': return { ...state, user: { ...state.user, isLoggedIn: true, user: action.data } } case 'LOG_OUT': return { ...state, user: { ...state.user, isLoggedIn: false, user: null, } } default: return state } } export default rootReducer//스토어 import { createWrapper } from 'next-redux-wrapper' import { legacy_createStore as createStore } from "redux"; import reducer from '../reducers/index' const configureStore = () => { const store = createStore(reducer); return store; } const wrapper = createWrapper(configureStore, { debug: process.env.NODE_ENV === 'devlopment', }); export default wrapperaction에 type으로는 콘솔이 찍히는데 isLoggedin이 안바뀌네요... 어디가 잘못됬을까요 state값이 변경이 안됩니다. ture에서 false로 바뀌어야 하는데 설명 부탁드립니다.import React, { useState } from 'react' import Link from 'next/link' import LoginForm from './LoginForm' import UserProfile from './UserProfile' import { Menu, Input, Row, Col } from 'antd' import styled from 'styled-components' import { useSelector } from 'react-redux' const SearchInput = styled(Input.Search)` vertical-align: middle; `; const AppLayout = ({ children }) => { const { isLoggenIn } = useSelector((state) => state.user) console.log(isLoggenIn) return ( <div> <Menu mode='horizontal'> <Menu.Item> <Link href="/">노드버드</Link> </Menu.Item> <Menu.Item> <Link href="/profile">프로필</Link> </Menu.Item> <Menu.Item> <SearchInput enterButton /> </Menu.Item> <Menu.Item> <Link href="/signup">회원가입</Link> </Menu.Item> </Menu> <Row gutter={8}> <Col xs={24} md={6}> {isLoggenIn ? <UserProfile /> : <LoginForm />} </Col> <Col xs={24} md={12}> {children} </Col> <Col xs={24} md={6}> <a href="http://www.naver.com" target={'_blank'} rel="noreferre noopener">향훈</a> </Col> </Row> </div> ) } export default AppLayoutimport React, { useCallback, useState } from 'react'; import { Form, Input, Button } from 'antd'; import Link from 'next/dist/client/link'; import styled from 'styled-components' import { useDispatch } from 'react-redux'; import { loginAction } from '../reducers'; const LoginForm = () => { const dispatch = useDispatch() const [id, setId] = useState("") const [password, setPassword] = useState("") const onChangeId = useCallback((e) => { setId(e.target.value); }, []); const onChangePw = useCallback((e) => { setPassword(e.target.value); }, []); const onSubmitForm = useCallback(() => { console.log(`id: ${id}, pw: ${password}`); dispatch(loginAction({ id, password })) }, []) return ( <Form onFinish={onSubmitForm}> <div> <label htmlFor="user-id">아이디</label> <br /> <Input type="text" name='user-id' value={id} onChange={onChangeId} /> </div> <div> <label htmlFor="user-id">비밀번호</label> <br /> <Input type="password" name='user-id' value={password} onChange={onChangePw} required /> </div> <ButtonWrapper> <Button type="primary" htmlType="submit" loading={false}>로그인</Button> <Link href="/signup"><Button>회원가입</Button></Link> </ButtonWrapper> </Form> ) } const ButtonWrapper = styled.div` margin-top: 10px; ` export default LoginForm
-
미해결초보를 위한 도커 안내서
윈도우로 할 때랑 맥북으로 할 때랑 차이가 있는지 궁금합니다
윈도우 10 pro 환경에서 Windows PowerShell로 따라해보고 있는 학생입니다. 강의 보면서 공부 중인데 Ctrl+C로 컨테이너 종료시키는 명령어부터 telnet localhost 1234 명령어도 듣질 않습니다ㅠ 강의를 들으려면 맥북이 필요한건가요ㅠ
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
안녕하세요 원영님. 강의 외적인 내용일 수 있지만 aws kinesis에 대해 질문드립니다.
안녕하세요 원영님. aws kinesis data stream이 serverless kafka broker인가? 에 대해서 질문드리려고 합니다. (혹시 kinesis가 kafka와는 상관없는 별도의 서비스라면 강의 내용과 완전히 벗어나는 내용이라 죄송합니다!!)현재 업무에서 aws kinesis data stream을 사용하고 있습니다. 토픽, 파티션, 레코드, 오프셋 등 데이터를 실시간으로 받아 저장 및 처리하는 형태가 kafka와 비슷해 kinesis data stream 또한 다른 서버리스 서비스들과 유사하게 서버리스 카프카 브로커라고 생각했습니다.그런데 강의를 듣다보니 kafka와 kinesis data stream은 차이가 있습니다. 예를 들면 kafka의 파티션은 줄일 수 없지만 kinesis data stream의 shard는 줄일 수 있습니다. 서버리스 kafka라면 불가능한 일입니다.이 둘은 아예 다른 서비스라고 보는게 맞을까요?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
JSTL if문 문자열 비교 질문있습니다.
JSTL if문은 어떻게 비교를 해야되나요?member.id는 세션의 아이디고 vo.id는 테이블의 아이디 입니다. ${member.id} 이거와 ${vo.id}이렇게 각각 적으면 같은 값을 가지고 오는 것을 확인 할 수있었습니다.하지만 <c:if test="${member.id eq '${vo.id}'}"> <td><a href="boardDelete.do?num=${vo.num}">삭제</a></td> </c:if>이렇게 작성시 삭제 버튼이 보이고 있지 않으며 eq를 ne로 바꿔서 작성시 모든 테이블에서 삭제버튼이 보이고 있습니다. 어떻게 작성해야 될까요..
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
matplotlib, pandas_profiling, pandas 버전을 알 수 있을까요?
강사님 안녕하세요.현재 아래 페이지와 유사한 증상입니다.'matplotlib.font_manager' has no attribute '_rebuild' - 인프런 | 질문 & 답변 (inflearn.com)처음에 pandas_profiling을 최신 버전으로 설치했는데 설명과 달리 visualization/context.py 파일이 없어서, 기존 pandas_profiling을 지우고 버전(2.8.0, 3.1.0)에 맞춰서 설치했는데 그랬더니 matplotlib.font_manager.rebuild가 실행이 안되고, matplotlib를 지우고 설치하니 pandas_profiling이 안되고 뭔가 이런식의 반복입니다. ㅠㅠ혹시 package별로 버전이 표시된 requirements.txt 있는지 알려주시면 감사드리겠습니다.감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
error
수업듣고 잘 따라하고 있는데 잘 되던것이 갑자기 클래스 낫 파운드 익셉션이 납니다..왜그런지 모르겠어요 ㅠ/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=56469:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/songhan/Desktop/스프링 MVC 1편/servlet/out/production/classes:/Users/songhan/Desktop/스프링 MVC 1편/servlet/out/production/resources:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-web/2.7.3/9e36c7517c4f872b69d0665e1dd46bd6d83c43b7/spring-boot-starter-web-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-json/2.7.3/38c88404d68926aaf6c0914199e8c5e766946de2/spring-boot-starter-json-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter/2.7.3/6b0c093af667bf645cd5f49372e2a2540ae2855f/spring-boot-starter-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-webmvc/5.3.22/519d86b7ac9b8b6bb54739eb4eb73dc13a263b28/spring-webmvc-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-web/5.3.22/fdab9b8d8df2e6a8fb90f2481c361bcf2c129567/spring-web-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.3/ad2f4c61aeb9e2a8bb5e4a3ed782cfddec52d972/jackson-datatype-jsr310-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.module/jackson-module-parameter-names/2.13.3/f71c4ecc1a403787c963f68bc619b78ce1d2687b/jackson-module-parameter-names-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.13.3/d4884595d5aab5babdb00ddbd693b8fd36b5ec3c/jackson-datatype-jdk8-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.13.3/56deb9ea2c93a7a556b3afbedd616d342963464e/jackson-databind-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-autoconfigure/2.7.3/4c96169e8d71c9c41f07a40d011dbd41898180ac/spring-boot-autoconfigure-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot/2.7.3/3a8d641077565b7eaec3b2f91d5b83a6800f5895/spring-boot-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-logging/2.7.3/a1e4a13b656182ba10b4c0c7848f91cd6f854fdf/spring-boot-starter-logging-2.7.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.3.22/661fc01832716c7eedebf995c6841b2f7117c63d/spring-core-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.30/8fde7fe2586328ac3c68db92045e1c8759125000/snakeyaml-1.30.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/5.3.22/fdd59bb4795c7a399e95ec4a5c8b91103e3189fd/spring-context-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/5.3.22/c056f9e9994b18c95deead695f9471952d1f21d1/spring-expression-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/5.3.22/2f9f00efbff8432f145ccffeb93e6a1819bac362/spring-aop-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/5.3.22/866c2022b5fef05b1702f4a07cfa5598660ce08a/spring-beans-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.13.3/7198b3aac15285a49e218e08441c5f70af00fc51/jackson-annotations-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.13.3/a27014716e4421684416e5fa83d896ddb87002da/jackson-core-2.13.3.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.11/4741689214e9d1e8408b206506cbe76d1c6a7d60/logback-classic-1.2.11.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-to-slf4j/2.17.2/17dd0fae2747d9a28c67bc9534108823d2376b46/log4j-to-slf4j-2.17.2.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.slf4j/jul-to-slf4j/1.7.36/ed46d81cef9c412a88caef405b58f93a678ff2ca/jul-to-slf4j-1.7.36.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jcl/5.3.22/811ace5e5eb379654ed96fd7844809db51af74a5/spring-jcl-5.3.22.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.2.11/a01230df5ca5c34540cdaa3ad5efb012f1f1f792/logback-core-1.2.11.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar:/Users/songhan/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.17.2/f42d6afa111b4dec5d2aea0fe2197240749a4ea6/log4j-api-2.17.2.jar hello.servlet.ServletApplication . ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.3)2022-08-31 22:35:59.819 INFO 17322 --- [ main] hello.servlet.ServletApplication : Starting ServletApplication using Java 11 on Songui-MacBookPro.local with PID 17322 (/Users/songhan/Desktop/스프링 MVC 1편/servlet/out/production/classes started by songhan in /Users/songhan/Desktop/스프링 MVC 1편/servlet)2022-08-31 22:35:59.827 INFO 17322 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to 1 default profile: "default"2022-08-31 22:36:00.753 WARN 17322 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet2022-08-31 22:36:00.767 INFO 17322 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2022-08-31 22:36:00.792 ERROR 17322 --- [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.3.jar:2.7.3] at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22] ... 13 common frames omittedCaused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] ... 20 common frames omitted종료 코드 1(으)로 완료된 프로세스
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
댓글 입력시 바로 반영되는 기능은 어떻게 추가할 수 있을까요?
여태까지 구현한 것으로는 댓글을 입력하고나서 새로고침을 해야 작성한 댓글이 띄워지는데, 혹시 submit을 하자마자 바로 해당 포스팅에 댓글이 추가되도록 하려면 어떻게 해야하는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Repository
Repository 관련 질문입니다. public Item save(Item item) { item.setId(++sequence); store.put(item.getId(), item); return item; }여기서 save(Item item)인데 따로 Item item = new Item()을 하지 않은 상태에서 저렇게 코드를 작성해도 되는 건가요?그리고 아래의 코드에서 Member.class가 무엇을 의미하나요?? public Member find(Long id) { return em.find(Member.class, id); }
-
미해결ERC20 깨부수기 (+ truffle, 프론트엔드)
expect 테스트가 정상적으로 동작하지 않습니다
const Simple2 = artifacts.require("Simple2"); const { chai, BN } = require("./setUp"); const { expect } = chai; contract.only("Test7", (accounts) => { let simpleInstance; before(async () => { simpleInstance = await Simple2.deployed(); }); it("Should have 0 ether", async () => { expect( web3.eth.getBalance(simpleInstance.address) ).to.eventually.be.bignumber.equal( new BN(web3.utils.toWei("50000", "ether")) ); }); });await을 없애고 eventually를 사용하면서 테스트값에50000 이더를 넣어도 테스트가 정상적으로 통과합니다 let balance = await web3.eth.getBalance(simpleInstance.address); expect(balance).to.be.bignumber.equal( new BN(web3.utils.toWei("50000", "ether"))eventually 이전 강의에 썼던 await을 다시 사용하면테스트에서 50000 이더가 없다고 에러가 나옵니다수정해야 할 부분이 있을까요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
로그 시뮬레이터 만드는 법
안녕하세요강의를 듣고 나중에 토이 플젝을 진행해볼 계획을 가지고 있습니다. 강사님께서 활용하신 로그 시뮬레이터는 직접 만드신걸까요?로그시뮬레이터를 만들어서 활용해보고 싶은데 어떤 식으로 만드는게 좋을지 여쭤봐도 될까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Collection Bean 검증 질문입니다
안녕하세요! 영한님! 항상 강의 잘 보고 있습니다. 사실은 영한님 팬이기도 해요.아무튼 제가 며칠 계속 고민하던 부분이 있어요.제 목표는 컬렉션 타입과 상관 없이 컬렉션 안에 선언되어 있는 객체의 Bean Validation을 수행하고 싶어요.@RequestBody @Validated List<ItemSaveForm> 를 사용하게 되면 ItemSaveForm에 대한 검증이 아닌 List에 대한 검증 처리가 되더라고요. 그렇다고 List<@Validated ItemSaveForm> 는 컴파일 에러가 납니다.물론 저 스스로 해결하고자 많은 곳을 돌아 다녀 보았고 찾아낸 방법은 Validator를 구현한 객체(CollectionValidator)를 만들어서 validate 메서드 구현 을 했습니다. 이후 ItemController에서 CollectionValidation 를 주입 받아 collectionValidator.validate(itemList, bindingResult);를 통해서 검증 처리를 하는 법을 알아냈습니다.하지만 모든 Collection 마다 주입과 collectionValidator.validate 코드를 넣는게 비효율적이라 생각해서 어노테이션으로 만들거나 인터셉터에서 처리하고 싶었습니다.인터셉터에서 처리하고 싶었지만 CollectionValidation의 validate 메서드는 Errors 객체를 인자로 받는데 HandlerMethodArgumentResolver의 resolveArgument인자에서 errors 객체를 뽑아낼 방법이 안보이네요.어노테이션으로 만들고자 한 부분은 어노테이션 안에 Errors 객체를 선한 할 수가 없어서 CollectionValidator를 불러낼 수가 없었습니다.다른 해결 책이 있을 까요? 아니면 제가 보지 못한 부분이 있었던 걸까요?혹시 결국 스프링 입문때 잠시 다루었던 AOP를 통해서만 해결할 수 있는 걸까요? 어노테이션 만들기를 검색하다보니 AOP를 결국 다뤄야 하더라고요 ㅜㅜ아래 제 코드와 함께 올리겠습니다.@Data public class PatternDto { //이 어노테이션에게 검증을 맡기고자 합니다. @Pattern(regexp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$", message ="잘못된 번호 형식입니다.") private String phoneNumber; }@RestController public class ValidationItemApiController { //private final CollectionValidator validator; @PostMapping("/list") public Object addList(@RequestBody List<PatternDto> request, BindingResult bindingResult){ //validator.validate(request, bindingResult); -> 이 부분을 어노테이션이나 인터셉터로 처리하고 싶어요. log.info("list valid"); if(bindingResult.hasErrors()){ log.error("검증 오류 발생 {}", bindingResult); return bindingResult.getAllErrors(); } log.info("성공 로직 실행"); return request; } }@Component @Slf4j public class CollectionValidator implements Validator { private SpringValidatorAdapter validator; public CollectionValidator() { this.validator = new SpringValidatorAdapter( Validation.buildDefaultValidatorFactory().getValidator() ); } @Override public boolean supports(Class<?> clazz) { return true; } @Override public void validate(Object target, Errors errors) { if(target instanceof Collection){ Collection collection = (Collection) target; for (Object o : collection) { validator.validate(o,errors); } } else validator.validate(target,errors); } }//이 검증기를 통해 List<@Valid PatternDto>와 같이 검증하고 싶었지만 //validtor.validate에게 검증을 위임하려고 할때(많은 검증 로직들이 간소화 되기 때문에) validate메서드의 두번째 인자인 errors //에 넣을 값을 찾지 못한게 문제였습니다. //ArgumentResolver를 통해 해결하고자 했지만 이때도 validate의 errors 인자를 넣을 값을 못찾았습니다. @Component @Slf4j @RequiredArgsConstructor public class CustomValidator implements ConstraintValidator<CustomValid, List<PatternDto>> { private final CollectionValidator validator; @Override public void initialize(CustomValid constraintAnnotation) { ConstraintValidator.super.initialize(constraintAnnotation); } @Override public boolean isValid(List<PatternDto> values, ConstraintValidatorContext context) { log.info("validator 로직 실행"); validator.validate(values,null); //null 대신에 어떤 값을 넣어야 할까요? 이 부분만 해결 되어도 문제가 해결 될거 같아요. return true; } }
-
미해결파이널 코딩테스트 : 프론트엔드
좋아요 기능 만드는 강의가 완전하지 않아요!
현재 강의를 듣고 있는데, 갑자기 좋아요 기능이 완성되있네요.로컬스토리지에다 추가하는 강의가 사라진 것 같아요.올려주시면 감사하겠습니다.
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
주가예측에 Autoencoder를 적용할 수 있나요??
안녕하세요. 주가예측의 LSTM모델을 기반으로 Autoencoder에 적용 가능할까요?해보진 않았는데, 강의해주신 코드에 데이터 전처리만 해서 사용해도 될것 같아서 질문드립니다.
-
미해결[개념반]배워서 바로 쓰는 SQL 쿼리
실습문제 3-4(functions) 질문
안녕하세요실습문제 3-4 들으면서 궁금한 점이 생겨 질문드립니다.질문 사항은 아래와 같은데요,1) substr 함수(첫번째 칼럼명 , 추출할 문자 시작, 추출할 문자 끝) 과 같이위와 같은 방식으로 추출되는 것으로 알고 있는데 employees의 생년월일에서 월만 추출하고자 한다면substr(birthdate, 6, 7) 과 같이 작성하는 것이 아닌가요?해당 함수로 작성할 시, 이상하게 추출이 나와 질문드립니다.2) 문제 질문말그대로 월별로 각각 몇명이면, 년도 상관없이 7월에 몇명, 9월에 몇명 이런식으로 추출되어야 할 것 같은데 강의 내의 방법이라면 연도-월별로 각각 추출되어서 질문드립니다.예를 들자면, 해당 데이터에 연도는 달라도 7월달 생일자가 2명이면, "7월 - 2명" 과 같이 카운트가 되어야하는게 아닌가 싶습니다.답변 주시면 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@orderColumn에서 update 쿼리 관련 질문이 있습니다
안녕하세요 강의를 듣던 중에 궁금한게 생겨서 남겨봅니다.@OrderColumn을 사용해서 AddressEntity 값 3개를 Member AddressHistory에 추가해보았고, 0,1,2로 값이 잘 나오는 걸 확인했습니다. 그런데 제가 0번 값을 삭제 해보았는 데, 예상했던 결과는 총 2번의 update 쿼리 후 1번의 delete 쿼리가 나가는 거였지만, 5번의 update 쿼리 후 1번의 delete 쿼리가 나갔습니다. 왜 이렇게 되는 지 이해가 안되서 올려봅니다.Hibernate: select addresshis0_.MEMBER_ID as MEMBER_I5_0_0_, addresshis0_.id as id1_0_0_, addresshis0_.POSITION as POSITION6_0_, addresshis0_.id as id1_0_1_, addresshis0_.city as city2_0_1_, addresshis0_.street as street3_0_1_, addresshis0_.zipcode as zipcode4_0_1_ from ADDRESS addresshis0_ where addresshis0_.MEMBER_ID=?Hibernate: /* delete one-to-many row jpabook.jpashop.domain.Member.addressHistory */ update ADDRESS set MEMBER_ID=null, POSITION=null where MEMBER_ID=? and id=?Hibernate: /* delete one-to-many row jpabook.jpashop.domain.Member.addressHistory */ update ADDRESS set MEMBER_ID=null, POSITION=null where MEMBER_ID=? and id=?Hibernate: /* delete one-to-many row jpabook.jpashop.domain.Member.addressHistory */ update ADDRESS set MEMBER_ID=null, POSITION=null where MEMBER_ID=? and id=?Hibernate: /* create one-to-many row jpabook.jpashop.domain.Member.addressHistory */ update ADDRESS set MEMBER_ID=?, POSITION=? where id=?Hibernate: /* create one-to-many row jpabook.jpashop.domain.Member.addressHistory */ update ADDRESS set MEMBER_ID=?, POSITION=? where id=?Hibernate: /* delete jpabook.jpashop.domain.AddressEntity */ delete from ADDRESS where id=?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 내부 호출 시 호출 안되는 점 관련해서 질문사항이 있습니다
안녕하세요. 먼저 좋은 강의 감사 드립니다@Transactional 내부 호출 시 호출 안되는 점 관련해서 강의를 듣다가 헷갈리는 점이 있어 문의 드립니다.아래와 같이 컨트롤러에서 유저를 저장하는 부분을 만들어서 호출을 했을 때userService.addUser() 메소드를 호출하는데 이 때 ,removeUser() 메소드의 삭제 로직 이후, 삭제가 끝나면 addUser()의 저장 로직을 타게 된다고 가정했을 때아래와 같이 두 군데의 서비스 메소드 위에 @Transactional 선언을 해주면 내부 호출을 해도 문제가 없을까요?아니면 처음 시작점인 addUser에만 @Transactional 을 선언해줘도 되는걸까요?아니면 제가 잘못 이해한 부분이고, 강의에서 말씀하신대로 무조건 다른 클래스를 생성해서 호출하는 방법으로 사용하면 될까요?@RequestMapping("/api/user")public class UserController{@Autowired private UserService userService;@RequestMapping(method = { RequestMethod.POST }, value = "/save")public String userSave(){userService.addUser(param);}}@Servicepublic class userService{@Autowired private UserDao userdao;@Transactionalpublic String addUser(){removeUser(); //내부메소드 호출userdao.insert(); //USER 테이블 저장로직}@Transactionalpublic void removeUser{userdao.remove(); //USER테이블 삭제로직}}
-
미해결15일간의 빅데이터 파일럿 프로젝트
Hbase 복잡 질의문 사용중 에러 발생입니다.
"2022.01.03, D04지역 모든 스마트가 운전자의 차량번호와 지역번호를 출력하기"를 하던중 정상적으로 출력이 되다가 연결이 끊어지는 현상이 발생 했습니다. 시스템 문제인것 같기도 합니다. 앞의 다른 질의들은 결과가 정상 출력이었습니다. (server02)scan 'DriverCarInfo', {COLUMNS=>['cf1:car_number','cf1:area_number'],FILTER=>"RowFilter(=,'regexstring:30102202') AND SingleColumnValueFilter('cf1','area_number',=,'regexstring:D04')"}
-
해결됨[언리얼 시스템 연구 과정] UE5 스파르타 클래스: 심화편
다운받은 애니메이션 에셋과 컨트롤릭 충돌 관련 의견
안녕하십니까, 강의 잘 봤습니다. 컨트롤릭 설정하는 거에 많은 도움이 됐습니다.다름이 아니라, 기본 로코모션을 다운받은 애님 에셋과 컨트롤릭이 겹쳐 발이 안움직이는 일이 발생하던데, 믹사모 애니메이션까지 충돌합니다.기존 thirdperson 캐릭터 컨트롤 릭을 보니, 강사님과 같은 설정으로 되어있더라고요. 그게 맞긴한데, 그래도애초에 컨트롤 릭에서 IK_foot_l 이라는 본 위치가 Fullbody IK 에 foot_l 위치로 바로 연결되는 것이 문제인 것 같습니다.처음 FootTrace 함수를 만들때부터 목적이 스피어 캐스트로부터 히트된 Z축의 값만 받으면 됐었죠. 그래서 기존 IK_foot_l 본의 Z축 값과 알파보간까지 거친 히트된 Z축 변수값을 더했습니다.제가 실험한 결과는 정상적으로 충돌 없이 되더라고요. 근데 제가 아예 이쪽 분야가 아니라서 해결되도 이게 맞는건지 모르겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java jar 에러
인텔리제이 터미널에서 했는데java jar에러가 뜨는데 왜 그런걸까요?