css
미해결
따라하며 배우는 리액트 A-Z[19버전 반영]
안녕하세요 강사님!! 항상 궁금했던점인데 css는 외워야하는건가요?
- typescript
- redux
- tdd
- react
- Next.js
174만명의 커뮤니티!! 함께 토론해봐요.
미해결
따라하며 배우는 리액트 A-Z[19버전 반영]
안녕하세요 강사님!! 항상 궁금했던점인데 css는 외워야하는건가요?
미해결
Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
npm run serve 시, Module not found: Error: Can't resolve '@vue/composition-api' in~~ 오류가 뜹니다. 어떻게 해결하면 될 지 알려주실 수 있을까요..
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
그럼 @RequestMapping(”..”)의 컨트롤러는 스프링 MVC중에서 4의 과정에서 호출이 되는 것인가요? RequestMappingHandlerAdapter 클래스에서 handle()이라는 메서드는 없었는데, 제가 잘못 이해한 것인가요?
미해결
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
public int getNumber(int num, int sumResult, int[] arr) { int answer = 0; int sum = 0; int pi = 0; int i = 0; while(pi < num) { sum += arr[pi]; if(sum > sumResult) { pi = i++; sum = 0; } else if (sum == sumResult) { answer++; } pi++; } return answer; } 채점은 정답으로 나왔는데,, 혹시 다른 예외상황이 있을까요...?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
FrontController - v1에서 회원목록 조회가 안됩니다
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: #show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug 제가 application.yml에 작성한 코드입니다. 현재 아래와 같은 에러가 나고 있습니다. could not prepare statement; SQL [call next value for hibernate_sequence]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [call next value for hibernate_sequence]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException( HibernateJpaDialect.java:259 ) at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible( HibernateJpaDialect.java:233 ) at app//org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible( AbstractEntityManagerFactoryBean.java:551 ) at app//org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible( ChainedPersistenceExceptionTranslator.java:61 ) at app//org.springframework.dao.support.DataAccessUtils.translateIfNecessary( DataAccessUtils.java:242 ) at app//org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke( PersistenceExceptionTranslationInterceptor.java:152 ) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:186 ) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:763 ) at app//org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept( CglibAopProxy.java:708 ) at app//jpabook.jpashop.MemberRepository$$EnhancerBySpringCGLIB$$473a0eb7.save(<generated>) at app//jpabook.jpashop.MemberRepositoryTest.testMember( MemberRepositoryTest.java:24 ) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@11.0.15/java.lang.reflect.Method.invoke( Method.java:566 ) at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod( ReflectionUtils.java:725 ) at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed( MethodInvocation.java:60 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed( InvocationInterceptorChain.java:131 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept( TimeoutExtension.java:149 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod( TimeoutExtension.java:140 ) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod( TimeoutExtension.java:84 ) at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0( ExecutableInvoker.java:115 ) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0( ExecutableInvoker.java:105 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed( InvocationInterceptorChain.java:106 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed( InvocationInterceptorChain.java:64 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke( InvocationInterceptorChain.java:45 ) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke( InvocationInterceptorChain.java:37 ) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke( ExecutableInvoker.java:104 ) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke( ExecutableInvoker.java:98 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7( TestMethodTestDescriptor.java:214 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod( TestMethodTestDescriptor.java:210 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:135 ) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:66 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:151 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base@11.0.15/java.util.ArrayList.forEach( ArrayList.java:1541 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base@11.0.15/java.util.ArrayList.forEach( ArrayList.java:1541 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at app//org.junit.platform.engine.support.hierarchical.Node.around( Node.java:137 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit( SameThreadHierarchicalTestExecutorService.java:35 ) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute( HierarchicalTestExecutor.java:57 ) at app//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 org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses( JUnitPlatformTestClassProcessor.java:99 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000( JUnitPlatformTestClassProcessor.java:79 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop( JUnitPlatformTestClassProcessor.java:75 ) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop( SuiteTestClassProcessor.java:61 ) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@11.0.15/java.lang.reflect.Method.invoke( Method.java:566 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:36 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:24 ) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch( ContextClassLoaderDispatch.java:33 ) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke( ProxyDispatchAdapter.java:94 ) at com.sun.proxy.$Proxy2.stop(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run( TestWorker.java:193 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName( TestWorker.java:129 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:100 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:60 ) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute( ActionExecutionWorker.java:56 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:133 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:71 ) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run( GradleWorkerMain.java:69 ) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main( GradleWorkerMain.java:74 ) Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement at app//org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert( SQLExceptionTypeDelegate.java:63 ) at app//org.hibernate.exception.internal.StandardSQLExceptionConverter.convert( StandardSQLExceptionConverter.java:37 ) at app//org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert( SqlExceptionHelper.java:113 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:186 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement( StatementPreparerImpl.java:75 ) at app//org.hibernate.id.enhanced.SequenceStructure$1.getNextValue( SequenceStructure.java:105 ) at app//org.hibernate.id.enhanced.NoopOptimizer.generate( NoopOptimizer.java:40 ) at app//org.hibernate.id.enhanced.SequenceStyleGenerator.generate( SequenceStyleGenerator.java:534 ) at app//org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId( AbstractSaveEventListener.java:115 ) at app//org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient( DefaultPersistEventListener.java:185 ) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:128 ) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:55 ) at app//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener( EventListenerGroupImpl.java:107 ) at app//org.hibernate.internal.SessionImpl.firePersist( SessionImpl.java:756 ) at app//org.hibernate.internal.SessionImpl.persist( SessionImpl.java:742 ) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base@11.0.15/java.lang.reflect.Method.invoke( Method.java:566 ) at app//org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke( SharedEntityManagerCreator.java:311 ) at app//com.sun.proxy.$Proxy96.persist(Unknown Source) at app//jpabook.jpashop.MemberRepository.save( MemberRepository.java:16 ) at app//jpabook.jpashop.MemberRepository$$FastClassBySpringCGLIB$$a3e1a60b.invoke(<generated>) at app//org.springframework.cglib.proxy.MethodProxy.invoke( MethodProxy.java:218 ) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint( CglibAopProxy.java:793 ) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:163 ) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:763 ) at app//org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke( PersistenceExceptionTranslationInterceptor.java:137 ) ... 90 more Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement: call next value for hibernate_sequence [90036-200] at org.h2.message.DbException.getJdbcSQLException( DbException.java:576 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:429 ) at org.h2.message.DbException.get( DbException.java:205 ) at org.h2.message.DbException.get( DbException.java:181 ) at org.h2.command.Parser.readSequence( Parser.java:7678 ) at org.h2.command.Parser.readTermWithIdentifier( Parser.java:4593 ) at org.h2.command.Parser.readTerm( Parser.java:4311 ) at org.h2.command.Parser.readFactor( Parser.java:3343 ) at org.h2.command.Parser.readSum( Parser.java:3330 ) at org.h2.command.Parser.readConcat( Parser.java:3305 ) at org.h2.command.Parser.readCondition( Parser.java:3108 ) at org.h2.command.Parser.readExpression( Parser.java:3059 ) at org.h2.command.Parser.parseCall( Parser.java:6480 ) at org.h2.command.Parser.parsePrepared( Parser.java:905 ) at org.h2.command.Parser.parse( Parser.java:843 ) at org.h2.command.Parser.parse( Parser.java:815 ) at org.h2.command.Parser.prepareCommand( Parser.java:738 ) at org.h2.engine.Session.prepareLocal( Session.java:657 ) at org.h2.server.TcpServerThread.process( TcpServerThread.java:278 ) at org.h2.server.TcpServerThread.run ( TcpServerThread.java:183 ) at java.base/java.lang.Thread.run( Thread.java:829 ) at app//org.h2.message.DbException.getJdbcSQLException( DbException.java:632 ) at app//org.h2.engine.SessionRemote.readException( SessionRemote.java:637 ) at app//org.h2.engine.SessionRemote.done( SessionRemote.java:606 ) at app//org.h2.command.CommandRemote.prepare( CommandRemote.java:78 ) at app//org.h2.command.CommandRemote.<init>( CommandRemote.java:50 ) at app//org.h2.engine.SessionRemote.prepareCommand( SessionRemote.java:480 ) at app//org.h2.jdbc.JdbcConnection.prepareCommand( JdbcConnection.java:1116 ) at app//org.h2.jdbc.JdbcPreparedStatement.<init>( JdbcPreparedStatement.java:92 ) at app//org.h2.jdbc.JdbcConnection.prepareStatement( JdbcConnection.java:288 ) at app//com.zaxxer.hikari.pool.ProxyConnection.prepareStatement( ProxyConnection.java:337 ) at app//com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement( HikariProxyConnection.java ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare( StatementPreparerImpl.java:90 ) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:176 ) ... 114 more MemberRepositoryTest > testMember() FAILED org.springframework.dao.InvalidDataAccessResourceUsageException at MemberRepositoryTest.java:24 Caused by: org.hibernate.exception.SQLGrammarException at MemberRepositoryTest.java:24 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException at MemberRepositoryTest.java:24 2022-08-31 23:43:24.667 INFO 10712 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2022-08-31 23:43:24.671 INFO 10712 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2022-08-31 23:43:24.699 INFO 10712 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 1 test completed, 1 failed > Task :test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/Users/XNOTE/Desktop/TIL/Spring/jpashop/build/reports/tests/test/index.html * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 12s 4 actionable tasks: 2 executed, 2 up-to-date
미해결
[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
int r = 3이라고 하고 원의 넓이를 구하면 28.2743만 출력이 되어 나오는데, float형은 소숫점 6자리까지 출력이 가능하지 않나요? C언어와 C++에서 출력되는 자료형이 다른건가요??
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요, 상품수정 post controller의 코드를 보다가 궁금한 점이 생겨 질문드립니다. @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form) { itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity()); return "redirect:/items"; } 해당 메소드의 parameter인 BookForm 앞에 왜 ModelAttribute 가 붙었는지 궁금합니다. return "redirect:/items"로 url요청을 할 때 Model을 전달하기 위함인가요? 그런데 [GET]/items 메소드는 form에 대한 data를 필요로 하지 않는 것 같습니다. @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "items/itemList"; }
미해결
[리뉴얼] React로 NodeBird SNS 만들기
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 wrapper action에 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 AppLayout 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
미해결
초보를 위한 도커 안내서
윈도우 10 pro 환경에서 Windows PowerShell로 따라해보고 있는 학생입니다. 강의 보면서 공부 중인데 Ctrl+C로 컨테이너 종료시키는 명령어부터 telnet localhost 1234 명령어도 듣질 않습니다ㅠ 강의를 들으려면 맥북이 필요한건가요ㅠ
미해결
[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
안녕하세요 원영님. 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문은 어떻게 비교를 해야되나요? 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.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편 - 백엔드 웹 개발 핵심 기술
수업듣고 잘 따라하고 있는데 잘 되던것이 갑자기 클래스 낫 파운드 익셉션이 납니다.. 왜그런지 모르겠어요 ㅠ /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/WebServlet 2022-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 failed 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/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 omitted Caused 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 관련 질문입니다. 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, 프론트엔드)
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편 - 백엔드 웹 개발 활용 기술
안녕하세요! 영한님! 항상 강의 잘 보고 있습니다. 사실은 영한님 팬이기도 해요. 아무튼 제가 며칠 계속 고민하던 부분이 있어요. 제 목표는 컬렉션 타입과 상관 없이 컬렉션 안에 선언되어 있는 객체의 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; } }