첫 번째 사진에서 이렇게: 위 예시에서, i 가 0일 때, j가 0, 1, 2 …. 9씩 올라가는 이유는 처음에는 (let i = 0, let j = 0)을 출력한 다음, (즉 시작식 for (let i = 0; i < 10; i++;)) 이 실행된다음 조건식 for(let j = 0, j < 10; j++;). 실행된다. 그다음에 그 조건식을 만족하지 못하였을때 (j > 9), 시작식을 실행한다, 이때 j가 다시 0으로 초기화 된다, 그 다음에게 i가 0일떄 하고 같은 프로세스를 두 조건이 (i > 9 && j > 9) 맞지 않을 때 까지 반복합니다. 설명을 적었는데 맞는 설명입니까? 두 번째 사진에서 이렇게: continue문을 사용하면 컨티뉴 문이 적인 코드는 사용하지 않고 다음 코드로 넘어간다. (그래서 i == 0, i == 2, i == 4, j == 0, j == 2, j == 4, k == 0, k == 2, k == 4)는 출력되지 않고 넘어갑니다. 똑같이 제일 밑에 있는 코드부터 for문을 실행합니다. 그레서, 1 1 1다음으로 1 1 3이 출력되고, 그 다음에 1 1 5이 출력되지만 조건에 맞지 않음으로 인해서 j가 조건문을 실행하기 됩니다 (그리고 k가 다시 초기화 되서 1이 됩니다.) 그래서 1 3 1이 나옵니다, 그 다음에는 다시 k가 들어있는 조건문을 실행합니다 (1 3 3). 그 다음에는 j, k둘다 조건식 조건에 맟지 않기 때문에 i가 있는 for문을 실행합니다, 그 와중에서 j 하고 k는 다시 초기화 되서 3 1 1이 나옵니다. 이 때 다시 조건문 k를 실행하고 조건이 맞지 안면 조건문 j를 실행하고 j가 맟지 않으면 i를 실행합니다. 기리고 모든 조건식이 맞지 않을 때가찌 이 과정들을 반복합니다. 설명은 적었는데 맞는 설명입니까? 너무 길이 글어서 죄송합니다
안녕하세요. 실습환경에 사용되는 이미지로 인해 저도 불편을 겪고 있고, 다른 수강자분들도 불편을 겪는 것 같습니다. DinD 방식이었다가 지금은 DooD 로 이미지가 제공되고 있습니다. 도커 강좌가 아닙니다만 실습환경을 만들려고하니 도커 명령어들을 익혀야하고, 현업에서도 도커를 사용하지 않을 수 없으므로 도커에 대해 좀 더 익숙해 질 수 있는 시간이 될 수도 있겠다는 생각입니다. 다만, 강사님께서 문제가 발생되는 상황에 대해 도커 명령어를 기존과 다른 명령어를 제공해주시는데, 그 명령에 대한 충분한 설명이 없습니다. 그 부분을 찾아서 이해하는 게 수강자의 몫이기도 한 것은 알겠지만, 강사님께서 사용하신 그 명령어가 어떤 기능을 하는 지, 어떤 경우에 사용하는 것인지 설명이 되면 좋겠습니다. #1 docker run --privileged -itd --name ansible-server -p 20022:22 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/ansible:latest /usr/sbin/init #2 docker run -itd --name ansible-server -p 20022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/ansible:latest /usr/sbin/init 예를들면, #1, #2 두 명령어 모두 강의에서 제공받은 명령어인데, 수강자인 저도 따라서 입력을 하기만 하듯이 하고 있습니다. --privileged --tmpfs /sys/fs/cgroup 볼륨을 공유한 것 /var/run/docker.sock 볼륨공유한것(host docker socket 공유 DooD 설정용) 등의 옵션들에 대해서 설명을 해주는 챕처가 부록으로라도 있으면 좋겠습니다. 추가로, ansible:latest , docker:latest 만 제공되는데(현재는 DooD 이미지로 보입니다), DindD 로 구성되었던 이전 이미지도 태그를 추가하여 올려주셔서 받을 수 있게 해주시면 좋겠습니다. 그리고, 수강생들이 base 리눅스 이미지로 DinD 환경을 만들수 있도록 가이드도 한 번 해주시면 좋겠습니다. a) 리눅스base이미지에 ssh 설치 + 도커설치 b) 리눅스base이미지에 ssh설치 + ansible 설치 감사합니다.
강의 전반에 걸쳐서 궁금한 부분입니다. 강의에서 교수님께서는 사용자 정의함수로 get_choice(), get_first_char( ), get_integer( ), count( ) 함수를 정의하셨습니다. 그런데 main함수에서는 오직 get_choice( ), count( )함수만 호출되어 사용되었습니다. ※return값이 있든 없든 상관없이 호출하거나, 호출하지 않았습니다. 사용자 정의함수는 무조건 main함수에 호출되어서 사용되어야한다고 알고 있었습니다. 왜냐하면 프로그램의 첫 시작은 OS이고, OS가 프로그램을 가동할 때 main함수부터 접근한다고 배웠습니다. 혹시 제가 잘못 알고 있는 걸까요? 어떻게 사용자 정의함수는 main함수에서 호출되지 않아도 사용할 수 있는건지 잘 모르겠습니다.
강의를 잘 따라 가면서 공부를 하고 있는데 강좌에 나와있는대로 class-validator 을 npm -i class-validator 을 설치 후 nest를 실행하니 nest 에서 Cannot find module 'class-validator/types/decorator/decorators' 라는 에러를 나타냅니다. 혹시 몰라서 API 공식문서 에 있는 npm i class-validator class-transformer 을 다시 설치를 해보아도 같은 에러를 나타내는데 이럴 경우 어디서 확인을 해보아야 할까요? 혹시 몰라서 package.json 을 살펴 보았습니다만 dependencies 내에 설치가 되어있는것으로 나왔습니다.
Member서비스 통합테스트 에서 회원가입 런 시켰는데, em.persist 메소드에서 오류가 생깁니다. id가 null Now allowed 한다고 뜨는데, 강사님이랑 똑같은 쿼리임에도 불구하고 그러네요.. 뭘까요 javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.internal.ExceptionConverterImpl.convert( ExceptionConverterImpl.java:154 ) at org.hibernate.internal.ExceptionConverterImpl.convert( ExceptionConverterImpl.java:181 ) at org.hibernate.internal.ExceptionConverterImpl.convert( ExceptionConverterImpl.java:188 ) at org.hibernate.internal.SessionImpl.firePersist( SessionImpl.java:766 ) at org.hibernate.internal.SessionImpl.persist( SessionImpl.java:746 ) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke( SharedEntityManagerCreator.java:311 ) at com.sun.proxy.$Proxy88.persist(Unknown Source) at hello.hellospring.repository.JpaMemberRepository.save ( JpaMemberRepository.java:19 ) at hello.hellospring.service.MemberService.join( MemberService.java:24 ) at hello.hellospring.service.MemberService$$FastClassBySpringCGLIB$$530c61b7.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke( MethodProxy.java:218 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint( CglibAopProxy.java:783 ) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:163 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:753 ) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation( TransactionInterceptor.java:123 ) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction( TransactionAspectSupport.java:388 ) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke( TransactionInterceptor.java:119 ) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:186 ) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed( CglibAopProxy.java:753 ) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept( CglibAopProxy.java:698 ) at hello.hellospring.service.MemberService$$EnhancerBySpringCGLIB$$9583fd7c.join(<generated>) at hello.hellospring.service.MemberServiceIntegrationTest.회원가입( MemberServiceIntegrationTest.java:30 ) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod( ReflectionUtils.java:725 ) at org.junit.jupiter.engine.execution.MethodInvocation.proceed( MethodInvocation.java:60 ) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed( InvocationInterceptorChain.java:131 ) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept( TimeoutExtension.java:149 ) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod( TimeoutExtension.java:140 ) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod( TimeoutExtension.java:84 ) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0( ExecutableInvoker.java:115 ) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0( ExecutableInvoker.java:105 ) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed( InvocationInterceptorChain.java:106 ) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed( InvocationInterceptorChain.java:64 ) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke( InvocationInterceptorChain.java:45 ) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke( InvocationInterceptorChain.java:37 ) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke( ExecutableInvoker.java:104 ) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke( ExecutableInvoker.java:98 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7( TestMethodTestDescriptor.java:214 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod( TestMethodTestDescriptor.java:210 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:135 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute( TestMethodTestDescriptor.java:66 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:151 ) 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:1541 ) 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:1541 ) 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.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert( SQLExceptionTypeDelegate.java:59 ) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert( StandardSQLExceptionConverter.java:37 ) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert( SqlExceptionHelper.java:113 ) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert( SqlExceptionHelper.java:99 ) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate( ResultSetReturnImpl.java:200 ) at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract( GetGeneratedKeysDelegate.java:58 ) at org.hibernate.id .insert.AbstractReturningDelegate.performInsert( AbstractReturningDelegate.java:43 ) at org.hibernate.persister.entity.AbstractEntityPersister.insert( AbstractEntityPersister.java:3279 ) at org.hibernate.persister.entity.AbstractEntityPersister.insert( AbstractEntityPersister.java:3885 ) at org.hibernate.action.internal.EntityIdentityInsertAction.execute( EntityIdentityInsertAction.java:84 ) at org.hibernate.engine.spi.ActionQueue.execute( ActionQueue.java:645 ) at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction( ActionQueue.java:282 ) at org.hibernate.engine.spi.ActionQueue.addInsertAction( ActionQueue.java:263 ) at org.hibernate.engine.spi.ActionQueue.addAction( ActionQueue.java:317 ) at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction( AbstractSaveEventListener.java:330 ) at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate( AbstractSaveEventListener.java:287 ) at org.hibernate.event.internal.AbstractSaveEventListener.performSave( AbstractSaveEventListener.java:193 ) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId( AbstractSaveEventListener.java:123 ) at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient( DefaultPersistEventListener.java:185 ) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:128 ) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist( DefaultPersistEventListener.java:55 ) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener( EventListenerGroupImpl.java:107 ) at org.hibernate.internal.SessionImpl.firePersist( SessionImpl.java:760 ) ... 91 more Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "ID"; SQL statement: insert into member (id, name) values (null, ?) [23502-214] at org.h2.message.DbException.getJdbcSQLException( DbException.java:508 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:477 ) at org.h2.message.DbException.get( DbException.java:223 ) at org.h2.message.DbException.get( DbException.java:199 ) at org.h2.table.Column.validateConvertUpdateSequence( Column.java:365 ) at org.h2.table.Table.convertInsertRow( Table.java:926 ) at org.h2.command.dml.Insert.insertRows( Insert.java:167 ) at org.h2.command.dml.Insert.update( Insert.java:135 ) at org.h2.command.CommandContainer.executeUpdateWithGeneratedKeys( CommandContainer.java:242 ) at org.h2.command.CommandContainer.update( CommandContainer.java:163 ) at org.h2.command.Command.executeUpdate( Command.java:252 ) at org.h2.server.TcpServerThread.process( TcpServerThread.java:408 ) at org.h2.server.TcpServerThread.run ( TcpServerThread.java:191 ) at java.base/java.lang.Thread.run( Thread.java:834 ) at org.h2.message.DbException.getJdbcSQLException( DbException.java:459 ) at org.h2.engine.SessionRemote.done( SessionRemote.java:611 ) at org.h2.command.CommandRemote.executeUpdate( CommandRemote.java:237 ) at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal( JdbcPreparedStatement.java:191 ) at org.h2.jdbc.JdbcPreparedStatement.executeUpdate( JdbcPreparedStatement.java:152 ) at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate( ProxyPreparedStatement.java:61 ) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate( HikariProxyPreparedStatement.java ) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate( ResultSetReturnImpl.java:197 ) ... 109 more
강의 잘보고 있습니다 강사님 리액트 네이티브 보다는 리액트 질문인데 const [detail, setDetail] = useState<boolean>(false); const toggleDetail = useCallback(() => { setDetail(!detail); }, [detail]); 해당 부분에서 의존배열을 빈배열로 하면 토글이 안되는이유가 useCallback 에 빈배열을 넣었을때 toggleDetail 함수가 기억하는 detail은 false 라서 계속 눌러도 토글 기능을 하지못하는 것이고 의존배열에 detail 에 넣어줘야 정상작동을 하는데 제가 생각한게 맞는건가요?
강의에서 교수님께서 작성한 코드를 보여주시며 exit(1);에 대해 설명해주셨습니다. 그런데 exit( ) 함수는 처음 보는 함수였기에 잘 이해가 되질 않아 질문드립니다. 헤더파일 <stdlib.h>를 include하여 사용하는 것까지는 알고있습니다. 다만 정확히 어떤 역할을 하길래, 교수님께서 "프로그래밍이 완성된 후에는 이런 일이 발생하면 안된다. 디버깅이나 개발과정 중에 exit(1)로 인해 종종 문제가 발생할 수 있다. 프로그래밍을 해나갈 때 '여기는 정말 실행되면 안되는 코드다' 하는 것들을 exit(1)로 표기해두면 디버깅에 시간을 많이 아낄 수 있다"라고 하셨었는데... 정확히 어떤 말씀이신지 잘 이해가 되질 않습니다. exit( )함수는 어떤 역할을 하나요? 그리고, 안에 들어간 숫자는 false 0, true의 1을 의미하는 것인가요? 이것들이 들어갔을 때 각각 어떤 동작을 하는지 실제 코드에 입력해봐도.. 잘 모르겠습니다. exit( )함수에 대해 추가적인 설명 부탁드립니다.
CSRF verification failed. Request aborted. More information is available with DEBUG=True. 도커컨테이너로 업로드 후 장고 admin Login 하면 csrf가 뜨는데 배포전 로컬 서버에서는 잘돼었는데 왜 에러가 뜨는지 궁굼합니다 그리고 애저 버전이 달라서 그런지 컨테이너 셋팅창을 찾을수 없어서 app server 삭제하고 다시 도커 업로드를 했습니다. 이 기능이 어느 페이지로 변경됐는지 알고싶습니다
안녕하세요 항상 강의 잘 보고 있는 학생입니다! 강의를 보면 자바 표준을 쓰면 다른 컨테이너에서도 사용 할 수 있다고 하는데 그렇다면 컨테이너들은 컨테이너만의 표준이 있는건가요? 어떻게 자바 표준에서는 스프링에 의존적이지 않으면서 스프링 컨테이너의 빈들을 사용할 수 있는지 잘 이해가 되지 않습니다.