묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
javax, jakarta
[질문 내용]애노테이션 @PostConstruct, @PreDestroy 강의에서 1:07쯤에 김영한 강사님께서 두 @PostConstruct, @PreDestroy 애노테이션을 import하는 과정에서 강사님 화면에서는 import javax.annotation 으로 시작하는 반면에, 제 입장에서는 import jakarta.annotation 로 시작하는데 두 개의 차이점이 무엇인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar 관련 버전 문제입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 현재 자바 버전은 다음과 같고나오는 오류 입니다.환경변수는 다음과 같습니다. 어떻게 해결을 하면 될까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV3_2Test에서 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.영한님과 똑같이 했는데 왜 오류가 날까요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV2Test.java 에서 findById 메서드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 분명 MemberServiceV2에서 매개변수로 Connection con을 추가 해주어서, Test시에도 findById에서 con을 같이 추가해줘야 할 것 같은데, 영한님께서는 아무것도 안던지고 바로 테스트를 해서 정상 작동이 되었네요. 아마도 V1에 con부분은 없어서 정상작동 된거같은데, con을 넣어주어야 맞는거 아닌가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Update 쿼리문이 로깅을 해도 보이지 않는 이유
JPA 사용시 테스트 환경이 아닌, 일반 환경에서 update 쿼리문이 보이지 않는 이유가 궁금합니다.제가 생각하는 update 쿼리문이 적용되는 과정은transaction이 커밋이 되고, 더티 체킹을 통해서 기존 스냅샷과 비교해 달라진 값을 기준으로 쿼리문을 작성하고 flush()를 통해서 쿼리문을 DB에 날린다음에 flush()한 쿼리문에 대한 commit()을 통해 db에 최종적으로 저장되는 과정으로 이해하고 있는데, 결국 DB에 쿼리를 날리기때문에 로그를 확인했을때, 확인할 수 있어야 하는거 아닌지에 대해 궁금합니다. insert와 select 쿼리문은 로그가 올바르게 찍히는데 그에 반해 update 쿼리는 로그가 보이지 않습니다.
-
미해결스프링 핵심 원리 - 기본편
contextLoads()
[질문 내용]설정에서 Gradle로 변경 시 실행했을 때 나오는 도큐먼트============================CONDITIONS EVALUATION REPORT============================Positive matches:----------------- AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition) AopAutoConfiguration.ClassProxyingConfiguration matched: - @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition) - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition) ApplicationAvailabilityAutoConfiguration#applicationAvailability matched: - @ConditionalOnMissingBean (types: org.springframework.boot.availability.ApplicationAvailability; SearchStrategy: all) did not find any beans (OnBeanCondition) GenericCacheConfiguration matched: - Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition) LifecycleAutoConfiguration#defaultLifecycleProcessor matched: - @ConditionalOnMissingBean (names: lifecycleProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition) NoOpCacheConfiguration matched: - Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition) PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched: - @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition) SimpleCacheConfiguration matched: - Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition) SqlInitializationAutoConfiguration matched: - @ConditionalOnProperty (spring.sql.init.enabled) matched (OnPropertyCondition) - NoneNestedConditions 0 matched 1 did not; NestedCondition on SqlInitializationAutoConfiguration.SqlInitializationModeCondition.ModeIsNever @ConditionalOnProperty (spring.sql.init.mode=never) did not find property 'mode' (SqlInitializationAutoConfiguration.SqlInitializationModeCondition) SslAutoConfiguration#sslBundleRegistry matched: - @ConditionalOnMissingBean (types: org.springframework.boot.ssl.SslBundleRegistry,org.springframework.boot.ssl.SslBundles; SearchStrategy: all) did not find any beans (OnBeanCondition) TaskExecutionAutoConfiguration matched: - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor' (OnClassCondition) TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilder matched: - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) TaskExecutorConfigurations.TaskExecutorConfiguration matched: - @ConditionalOnMissingBean (types: java.util.concurrent.Executor; SearchStrategy: all) did not find any beans (OnBeanCondition) TaskExecutorConfigurations.TaskExecutorConfiguration#applicationTaskExecutor matched: - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) TaskExecutorConfigurations.ThreadPoolTaskExecutorBuilderConfiguration#threadPoolTaskExecutorBuilder matched: - @ConditionalOnMissingBean (types: org.springframework.boot.task.ThreadPoolTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) TaskSchedulingAutoConfiguration matched: - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition) TaskSchedulingConfigurations.SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilder matched: - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) TaskSchedulingConfigurations.ThreadPoolTaskSchedulerBuilderConfiguration#threadPoolTaskSchedulerBuilder matched: - @ConditionalOnMissingBean (types: org.springframework.boot.task.ThreadPoolTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)Negative matches:----------------- ActiveMQAutoConfiguration: Did not match: - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition) AopAutoConfiguration.AspectJAutoProxyingConfiguration: Did not match: - @ConditionalOnClass did not find required class 'org.aspectj.weaver.Advice' (OnClassCondition) ArtemisAutoConfiguration: ....Exclusions:----------- NoneUnconditional classes:---------------------- org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration설정에서 Intellij IDEA로 변경 시 나오는 도큐먼트java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@68ab0936 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@602c4656, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@a8a8b75, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@155d1021, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@deb3b60, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@54acff7d, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@b2fce02d], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]우선 초반부터 설정부분에서 Intellij IDEA로 지정하면서 강의를 진행하였습니다. 그러나 중간쯤 테스트 하위클래스에 CoreApplicationTest contextLoads()가 계속 오류가 나길래 인프런에 질문 목록들을 참고하면서 알아본 결과 스프링 부트 3.X 이상부터는 호환성 문제로 설정에서 Gradle에 들어가서 Intellij IDEA에서 Gradle로 바꾸면 테스트를 모두 실행했을 때 오류가 뜨진 않게 되는데요. 그래도 콘솔에서는 아주아주 긴 설명문이 나옵니다. 물론 실행 속도도 현저히 느리게 되었구요. 결론은 꼭 Gradle로 바꾸는 방법 말고 Intellij IDEA로 계속 하면서 다른 해결방법이 없나 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
JpaRepository에 대한 질문
[질문 내용]JpaRepository 코드를 타고 들어가보니, 코드는 다음과 같았습니다.@NoRepositoryBean public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {분명 JpaRepository는 interface로 선언이 되어있는데, JpaRepository를 상속받은 제가 커스텀한 Repository는 구현을 따로 하지 않고 JpaRepository 인터페이스에 정의된 메서드들을 사용할 수 있는 건가요? 추상 클래스면 이해를 하겠지만 인터페이스에서 어떻게 사용이 가능한지 이해가 잘 되지 않습니다.
-
미해결스프링 핵심 원리 - 기본편
Singleton Test 실패
안녕하세요,싱글톤 테스트를 진행했는데, @Configuration을 정상적으로 AppConifg에 등록을하였음에도 불구하고@Configuration이 없을 때처럼 호출이됩니다.bean =class hello.core.AppConfig$$SpringCGLIB$$0 configurationDeep으로 호출 했을시에도 정상적으로 CGLIB로 되어있는것으로 보이는데 이유가 있을까요?bean =class hello.core.AppConfig$$SpringCGLIB$$0
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
Async Config 테스트컨트롤러의 코드의 동작이 안되는거 같습니다.
안녕하세요. 과제전형을 준비중인데 강의듣고 많은걸 깨우쳤습니다. 잘 배우고 있는 중입니다.그런데 올려주신 코드(TestController.java)를 실행했을 때 로컬 주소로 NotFound가 나더라구요. 코틀린코드로 변경하면서 공부중인데 제 코드가 문제라 생각하다가 원본 코드를 한번 돌려봤는데 같은 현상이 일어나서 혹시 더 설정해 줘야 할게 있을지 여쭤봅니다.restClient를 의심했다가 public api 가 동작하는 것을 보고 역시 라이브러리 문제는 아닌거 같더라구여.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문...
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 좋은 강의 열심히 강의 수강중에 질문있어 남깁니다.HTTP 요청데이터는 세가지 방식으로 데이터를 전달 할 수 있다고 배웠습니다.해당 강의에서는 HTML Form방식으로 상품 게시판을 진행한것 같은데, HTTP messagebody방식으로 게시판을 만들어 볼 수 있을까요? 있다면 관련 강의가 있는지 궁금합니다. 없다면 HTTP messagebody방식은 어떻게 공부해야하는지 간단하게라도 알려주시면 감사하겠습니다. 어리석은 질문일 수도 있겠지만 답변 부탁드리겠습니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
커넥션을 사용한다는 것
안녕하세요.강의 자료중에, " MemberRepository는 JPA를 통해 회원을 저장하는데, 이때 JPA는 트랜잭션이 시작된 con1을 사용해서 회원을 저장한다 " 라고 되어있는데요.이 부분에 대해 영한님께서 "em.persist()를 호출할때 내부적으로 JPA는 트랜잭션이 시작된 con1을 사용한다" 고 하셨는데,em.persist()를 호출할때, 실제 데이터베이스에 커밋은 아직 하지 않지만 con1을 사용해서 회원을 데이터베이스에 저장하는것인가요?"LogRepository도 트랜잭션C와 관련된 con2를 사용한다" 라고 강의자료에 나와있는 부분도, 위 내용과 동일한걸까요?con1과, con2를 사용한다는 개념이 어떤것을 의미하는지 궁금해서 질문드립니다.감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
CSR 자바스크립트
"자바스크립트 링크"가 <script> 태그에 있는 경로를 말하는 거고 클라이언트가 그 js 파일을 서버에 요청하는게 "자바스크립트 요청"이 되는건가요?서버가 그 파일을 전달하면 클라이언트가 필요한 데이터를 다시 요청한 후에 파일을 완성해서 렌더링하는 과정이 맞는지 궁금해요
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
구조 개선하기
@EnableWebSecurity @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception{ http .addFilterAt(authorizationFilter(introspector), AuthorizationFilter.class) .formLogin(Customizer.withDefaults()) .csrf(AbstractHttpConfigurer::disable); return http.build(); } @Bean public AuthorizationFilter authorizationFilter(HandlerMappingIntrospector introspector){ List<RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>>> mappings = new ArrayList<>(); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry1 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/user"), AuthorityAuthorizationManager.hasAuthority("ROLE_USER")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry2 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/db"), AuthorityAuthorizationManager.hasAuthority("ROLE_DB")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry3 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/admin"), AuthorityAuthorizationManager.hasAuthority("ROLE_ADMIN")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry4 = new RequestMatcherEntry<>( AnyRequestMatcher.INSTANCE, // default strategy = AuthenticatedAuthorizationStrategy new AuthenticatedAuthorizationManager<>()); mappings.add(requestMatcherEntry1); mappings.add(requestMatcherEntry2); mappings.add(requestMatcherEntry3); mappings.add(requestMatcherEntry4); RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager.builder() .mappings(maps -> maps.addAll(mappings)).build(); return new AuthorizationFilter(manager); } @Bean public UserDetailsService userDetailsService(){ UserDetails user = User.withUsername("user").password("{noop}1111").roles("USER").build(); UserDetails db = User.withUsername("db").password("{noop}1111").authorities("ROLE_DB").build(); UserDetails admin = User.withUsername("admin").password("{noop}1111").roles("ADMIN","SECURE").build(); return new InMemoryUserDetailsManager(user, db, admin); } }필터에 직접 RequestMatcherDelegatingAuthorizationManager를 넣는 방식으로 개선해 봤습니다 처음에는 RequestMatcherDelegatingAuthorizationManager -> RequestMatcherDelegatingAuthorizationManager 구조로 바꾸려고 했는데 access()에는 AuthorizationManager<RequestAuthorizationContext>만 가능해서 AuthorizationManager<HttpServletRequest>인 RequestMatcherDelegatingAuthorizationManager를 바로 못 넣더라구요 그래서 필터를 생성하고 필터 생성자로 RequestMatcherDelegatingAuthorizationManager를 넣는 방식을 사용했습니다
-
미해결비전공자를 위한 Spring MVC 뽀개기 기초
질문있습니다
선생님안녕하세요 질문있습니다dispatcherServlet 만들기하고난뒤web.xml파일이 자동으로 생성된다고 하셨는데web.xml파일이 아무런 변화도 없는데 이경우 어떻게 해야하나요?강의하신데로 빠짐없이 하나하나 등록하고 입력했는데web.xml파일이 자동으로 생성이 안됩니다. 답변부탁드립니다 감사합니다!
-
미해결스프링 프레임워크 입문자를 위한 따라하기
404에러나면서 웹페이지 접근되지 않는다면 아래처럼 해보는 것을 해보세요
404에러나면서 웹페이지 접근되지 않는다면아래처럼 해보는 것을 해보세요 https://velog.io/@jyysyl6/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-%EC%98%A4%EB%A5%98-the-project-cannot-be-built-until-build-path-errors-are-resolved 저는 저렇게 해서 해결됬습니다.링크가 깨졌을 것을 방지해서 아래처럼 하는 것입니다. (1)해당 프로젝트 우클릭해서 [Properties] 들어가기(2)왼쪽 메뉴 중에서 Java Build Path에 들어가서 상단 메뉴 중 [Libraries]를 클릭한다(3)(unbound)로 뜨는 기존에 들어가있던 JRE는 삭제해주고 [Add Library]를 눌러서 JRE를 새로 추가해주면 된다(4)이중에서 [JRE System Library] 선택하고 [Next] 눌러서 넘어가기(5)그러면 추가는 것도 있고 다운받는 것도 있는데나는 워크스페이스에 설정해놨던 JRE가 보이길래 이걸로 선택해줬다체크박스 선택하고 [Finish]로 창닫기(6)제대로 추가됐는지 확인해주고 [Apply] -> [Apply and Close] 해줌
-
미해결스프링 핵심 원리 - 고급편
오타? 및 내용 질문
안녕하세요 선생님 강의 듣다가 질문이 생겨서 글 작성해봅니다 제가 알기로 스프링 2.6 ? 이상에서 순환 참조가 자동으로 비활성 되어서 private final ObjectProvider<CallServiceV2> callServiceProvider; 을 사용해도 lazy 조회가 되지 않는것으로 알고 있습니다 그래서 application.yml 파일에서 이 설정을 true 로 바꿔주거나 test 시 @TestPropertySource(properties = "spring.main.allow-circular-references=true") 이 어노테이션을 추가하려 순환 참조를 활성화 시킨 후에 테스트 해봐야지만 정상 작동 되는걸로 알고 있는데 제가 알고 있는 내용이 다른지 궁금합니다
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
커넥션을 사용한다는 개념
안녕하세요. 강의 자료중에, " MemberRepository는 JPA를 통해 회원을 저장하는데, 이때 JPA는 트랜잭션이 시작된 con1을 사용해서 회원을 저장한다 " 라고 되어있는데요.이 부분에 대해 영한님께서 "em.persist()를 호출할때 내부적으로 JPA는 트랜잭션이 시작된 con1을 사용한다" 고 하셨는데, em.persist()를 호출할때, 실제 데이터베이스에 커밋은 아직 하지 않지만 con1을 사용해서 회원을 데이터베이스에 저장하는것인가요? "LogRepository도 트랜잭션C와 관련된 con2를 사용한다" 라고 강의자료에 나와있는 부분도, 위 내용과 동일한걸까요?con1과, con2를 사용한다는 개념이 어떤것을 의미하는지 궁금해서 질문드립니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프론트단 질문 검증 오류뜰시 태그를 추가하는데 alert창을 띄우는 방식으로 한다면 어떻게 달라지는지?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]프론트단 질문 검증 오류뜰시 태그를 추가하는데 alert창을 띄우는 방식으로 한다면 어떻게 달라지는지? 예를들면 검증해서 문제가 있으면 bindingresult에 담고 템플릿에 넘겨주는데 지금방식은 문제가 잇으면 input태그밑에 오류를 표시해주는데 alert창으로 표시를 하고 싶다면 프론트에서 코드가 어떻게 달라지는지 알고싶네요.자바스크립트코드에 오류가 있을시에 alert창에 ${에러문구} 이런식으로 넣어주면 되는건가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
섹션 9 계층적 권한 메소드 Deprecated
테스트 중 사용된 메소드가 곧 Deprecated 된다고 나오는데 혹시 다른 메소드 설정 방법 알려주실 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional이고, Rollback 설정을 변경하지 않았음에도 Insert문이 실행되는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 다름이 아니라 테스트 코드를 작성하여 결과를 확인하고 있었는데 교수님의 설명과 달리 Insert문이 계속해서 출력되고 있는 것이 의문이라 여쭤봅니다. 저는 rollback을 false로 하거나 em.flush를 따로 호출해주지 않았음에도 Insert문이 출력되는 이유가 궁금합니다.참고로 저는 H2가 아니라 mysql 로컬 디비를 연결하여 개발 중인데 이 것이 사유가 되는걸까요? spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/testdb username: root password: /// jpa: hibernate: ddl-auto: update properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect format_sql: true logging: level: org.hibernate.SQL: DEBUG org.hibernate.type.descriptor.sql.BasicBinder: TRACE package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; @RunWith(SpringRunner.class) @SpringBootTest @Transactional public class MemberServiceTest { //테스트니까 이런식으로 해도 됨. @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //~~걸 실행하면 ~~한 결과가 나와야 함, 검증해라 (given when then) //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(savedId)); } @Test(expected = IllegalStateException.class) public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("kim1"); Member member2 = new Member(); member2.setName("kim1"); //when memberService.join(member1); memberService.join(member2); // try{ // memberService.join(member2); //예외가 발생 // }catch (IllegalStateException e){ // return; // } //then fail("예외가 발생하야 한다"); } }