묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
JdbcTemplate update 사용시 반환값 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. 수업에 배운 내용을 바탕으로 작은 메모 어플을 만들면서 질문이 있어 질문 남깁니다.@Repository public class JdbcMemoRepository implements MemoRepository{ private final JdbcTemplate template; public JdbcMemoRepository(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } @Override public Memo memoSave(Memo memo) { String sql = "insert into memo (memo, created, dTime) values (?, ?, ?)"; template.update(sql, memo.getMemo(), LocalDateTime.now(), memo.getDTime()); return memo; }이런식으로 코드를 짜서 memoSave의 반환값을 확인해 보면 반환값이 memo와 dTime 필드에만 있고, created와 id는 null값으로 반환이 됩니다. 이유는 클라이언트쪽에서 requestBody로 건내주는 필드가 memo와 dTime뿐이고, created는 서버에서 LocalDateTime.now()로, id는 mysql에서 auto increment로 생성하고 있어서 parameter로 받는 memo를 그대로 반환하면 id와 created가 null이 되는 것 같습니다. 이 문제를 해결 하기 위해서는 memoSave로 데이터베이스에 넣어준 후 바로 그 레코드 값을 데이터베이스에서 꺼내서 반환을 해야 할 것 같은데 방법을 모르겠어서 질문드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 상수와 그리고 홈로그인에서 질문이 있습니다.
쿠키를 이용한 방법, 직접만든 세션을 이용하는 방법, 서블릿 세션을 이용하는 방법 모두에서 사용자별로 고유의 세선id를 생성하였지만 그 생성된 값들을 찾기 위한 키는 상수로 정의하여 사용하셨습니다.// 쿠키만 이용하였을 떄 Cookie idCookie = new Cookie(“memberId”, loginMember.getId()+””);// 직접 만든 세션 Cookie MySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);// 서블릿 세션 Session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember)이렇게 하면 서버측에서는 같은 키로 서로 다른 값들을 저장하게 되는것 같은데 어떻게 구별해서 사용자 객체를 찾아내는 건가요?다른분들도 질문을 많이 하신것 같은데 찾아보아도 이해가 좀 어려워서 질문 드립니다. 그리고 홈컨트롤러에서 homeLogin의 모든 버전에서 쿠키, 세션을 이용해 찾았는데 회원데이터가 없으면 return “home”;을 하는데 회원이 로그인을 하여야 쿠키, 세션을 만들어주기 때문에 값이 존재하지 않을 수 없을것 같은데 해당 사항을 고려하신 이유가 있는건가요?쿠키, 세션을 이용해 값을 찾는순간부터
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
JSESSIONID 쿠키
JSESSIONID 쿠키가 로그아웃 이후에도 브라우저 남아잇던데 맞나요?직접 세션 만들기 파트였나 쿠키 파트였나, 여기서는 setMaxAge(0) 이런거로 바로 만료시켰던 것 같아서요.어차피 이 JSESSIONID 세션은 서버에서 없앴으니까 쿠키는 브라우저에 남아있어도 의미가 없는 거죠?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JpashopApplication이 실행되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-06-07T16:07:39.618+09:00 ERROR 30312 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Collection 'jpabook.jpashop.domain.item.Item.categories' is 'mappedBy' a property named 'items' which does not exist in the target entity 'jpabook.jpashop.domain.Category' at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.0.jar:3.3.0] at jpabook.jpashop.JpashopApplication.main(JpashopApplication.java:16) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.0.jar:3.3.0]Caused by: org.hibernate.AnnotationException: Collection 'jpabook.jpashop.domain.item.Item.categories' is 'mappedBy' a property named 'items' which does not exist in the target entity 'jpabook.jpashop.domain.Category' at org.hibernate.boot.model.internal.CollectionBinder.isReversePropertyInJoin(CollectionBinder.java:1639) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.internal.CollectionBinder.noAssociationTable(CollectionBinder.java:1653) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.internal.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:1614) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.internal.CollectionBinder$1.secondPass(CollectionBinder.java:1605) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.internal.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:45) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1811) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1770) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:334) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-6.1.8.jar:6.1.8] ... 20 common frames omittedProcess finished with exit code 0 다음과 같은 에러가 발생하는데 어떻게 해결해야 할지 여쭙고자 합니다.
-
해결됨실전! 스프링 데이터 JPA
class projection 중 오류발
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용][질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Class projection 중 class MemberClassProjections( private final String memberName; public MemberClassProjections(String memberName) { this.memberName = memberName; } public String getMemberName() { return memberName; })class로 projection을 하면Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository' defined in jpaShop.shop.domain.member.repository.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List jpaShop.shop.domain.member.repository.MemberRepository.findMemberClassProjectionByMemberName(java.lang.String); Reason: Failed to create query for method public abstract java.util.List jpaShop.shop.domain.member.repository.MemberRepository.findMemberClassProjectionByMemberName(java.lang.String); Source must not be null or empty메서드 생성 오류가 표출되는데public record MemberClassProjections(String memberName) {}record로 만들면 오류없이 잘 실행이 됩니다.이유가 뭘까요..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
API에 Bean Validation 적용 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. API에 Bean Validation을 적용하는 단계에서 질문이 있습니다.검증 오류 요청 단계에서 오류가 발생한 경우 json이 정상적인 DTO를 json으로 만드는 것이 아닌 bindingResult에서 데이터를 꺼내 새로운 error라는 객체에 담아 json으로 보내는 형식으로 로직을 만들었습니다.이때 클라이언트측에서는 정상적인 상황에서는 item이라는 정상 객체가 json으로 반환되고 오류상황에는 error라고 하는 객체가 json으로 반환이 되게 되는데 두 경우 모두 response.status는 200으로 나오더라구요. 클라이언트 쪽에서 이 두 케이스를 분류하여 로직을 처리해야하는데 어떻게 구분하도록 해야하는지 모르겠어서 질문드립니다.오류 검증에서 오류가 나타났을때 서버에서 status를 400으로 보내도록 만들면 될까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
자바 버전 변경 후 서버 기동시 에러
https://drive.google.com/file/d/1DFSAROydq__CgrODCk-yzlCH8RCCpR_A/view?usp=sharing콘솔창에 한글깨짐 현상이 일어나https://www.inflearn.com/questions/1161232위의 글의 답변대로 설정했습니다.그 후 자바 버전을 Eclipse Terium version 17.0.9 에서corretto-17 Amazon Corretto version 17로 변경했습니다.그래도 해결되지 않아 제어판에서 국가또는지역-시스템 로캘변경에 들어가 utf-8 설정 후 윈도우 재부 팅 후ServletApplication 파일의 서버를 재기동하니 아래 사진과 같은 오류가 뜹니다.상단에 프로젝트 압축파일 첨부하였습니다.답변 부탁드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문있습니다
컨트롤러에서 데이터를 받을때Map<String, Object> param으로 받으려면에노테이션 @RequestParam으로 받은게 맞을까요? @RequestBody로 받으면 안되는거죠?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
없는 리소스 요청
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 궁금한 점이 생겨서 남겨봅니다.서블릿 예외 처리 - 필터 강의 기준으로없는 리소스 ex) localhost:8080/dsdswdsdsdsd요청을 해도 templates에 넣어둔404.html view가 보이는 이유는 WebServerCustomizer에서 customize()ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404");맞을까요?flowwas -> 필터(try) -> 서블릿(디스패처 서블릿) -> 디스패처 서블릿에서 handler mapping 과정 해당 url에 맞는 컨트롤러(핸들러)가 없으니까 ->어뎁터 호출 x -> 디스패처 서블릿이 내부에서 sendError(404)예상 (response status code 404 지정)이유 - ErrorPageController log에 (ERROR_EXCEPTION_TYPE: null)-> 필터(finally) -> was -> 필터(try) -> 서블릿 -> 컨트롤러 -> view -> 필터(finally) -> was[질문 정리]1)404.html view가 보이는 이유: WebServerCustomizer2) flow3)디스패처 서블릿 handlerMapping 예외 처리중에 내부에서 sendError(404)?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
not found 에러
@Controller @RequestMapping("/message/items") @RequiredArgsConstructor public class MessageItemController { private final ItemRepository itemRepository; @GetMapping public String items(Model model) { System.out.println("MessageItemController.items"); List<Item> items = itemRepository.findAll(); model.addAttribute("items", items); return "message/items"; } @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "message/item"; } ... } http://localhost:8080/message/items get 요청을 보내면 not found에러가 발생하는데 이유를 찾을수가 없네요. resources static 경로에 있는 index.html은 잘 찾아옵니다.http://localhost:8080 을 입력하면 브라우저에 페이지가 잘 나와요.templates 경로도 올바르게 되어있는 것 같은데 이유를 모르겠습니다 2024-06-07T00:51:34.677+09:00 DEBUG 20684 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/message/items", parameters={} 2024-06-07T00:51:34.724+09:00 DEBUG 20684 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : Resource not found 2024-06-07T00:51:34.735+09:00 DEBUG 20684 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource message/items.] 2024-06-07T00:51:34.736+09:00 DEBUG 20684 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUNDdebug 로그가 위와 같이 나옵니다.thymeleaf 의존성을 추가는 했는데 templates 경로에서 찾지 않는 것 같아서요. 맞나요?의존성 추가는 되어있습니다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' }
-
미해결Practical Testing: 실용적인 테스트 가이드
컨트롤러 테스트 시 POST시 Mockito.when() 처리에서 질문드립니다.
안녕하세요 제가 좀 더 응용해서 post 요청 시에 Mockito.when()과 접목시킨 테스트를 진행해봣는데 이 과정에서 질문이 있어 질문 드립니다. 예시 코드는 다음과 같습니다.void signUpTest() throws Exception { //given var memberResponse = new MemberResponse(MEMBER_ID, MEMBER_EMAIL); var signUpRequest = new SignUpRequest(MEMBER_EMAIL, "password"); //when when(memberFacadeService.signUp(signUpRequest)) .thenReturn(memberResponse); //then mockMvc.perform( post("/api/v1/members/signUp") .content(OBJECT_MAPPER.writeValueAsString(signUpRequest)) .contentType(MediaType.APPLICATION_JSON) ) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(MEMBER_ID)) .andExpect(jsonPath("$.email").value(MEMBER_EMAIL)); }이 코드 시에 문제가 발생합니다. 문제는 java.lang.AssertionError: No value at JSON path "$.id"이거입니다. 근데, 이 코드를 아래와 같이 바꾸면 에러가 발생하지 않습니다.void signUpTest() throws Exception { //given var memberResponse = new MemberResponse(MEMBER_ID, MEMBER_EMAIL); var signUpRequest = new SignUpRequest(MEMBER_EMAIL, "password"); //when when(memberFacadeService.signUp(any(SignUpRequest.class))) .thenReturn(memberResponse); //then mockMvc.perform( post("/api/v1/members/signUp") .content(objectMapper.writeValueAsString(signUpRequest)) .contentType(MediaType.APPLICATION_JSON) ) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(MEMBER_ID)) .andExpect(jsonPath("$.email").value(MEMBER_EMAIL)); }위와 아래의 차이는 requestBody에 들어가는 SignUpRequest 클래스를 mockBean처리 된 memberFacadeService의 when 처리 시에 해당 클래스를 any()로 처리하나 안처리하나의 차이입니다. 제가 예상하기에는 mockMvc에서 .content(objectMapper.writeValueAsString(signUpRequest)) 로 이렇게 처리했기 때문에 해당 로직에 들어가는 memberFacadeService 클래스의 signUp 매개변수로 들어가는 SignUpRequest가 제가 위에서 선언한 signUpRequest와 다르기 때문에 발생하는 문제라고 생각합니다. 이 이해가 맞는지에 대한 질문과 post요청에서는 다 이렇게 any()처리를 해야되는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 실행했을 때 오류가 발생합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]8강 14분 대까지 작성한 코드이고 @Transactional 어노테이션까지 추가시켜주고 testMember 메서드를 돌렸는데 에러가 뜹니다.java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1693ff90 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [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@50b472aa, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4facf68f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4f209819, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@2f7298b, org.springframework.boot.test.context.SpringBootTestAnnotation@76b6a66f], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]에러 메시지 일부입니다. Chat GPT한테 물어봐도 잘 모르겠어서 여기에다 질문 남기겠습니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
실전강의 Rest방식 vs formLogin 방식에따른 Rest Fillter 적용여부
안녕하세요 강사님,실정강의 중에 궁금한 사항이 있어 질문드립니다. FromLogin방식에서는 CustomFilter를 따로 생성하지 않고Ajax 비동기 로그인 방식에서만 CustumFilter를 생성하여 http.addFilter 로 필터를 추가하신 내용을 수강중입니다. 궁금산사항은 FormLogin 방식에서는 왜 필터를 추가를 안하고 비동기 통신 로그인 일때만 필터를 추가하는지 그 이유가 궁금하여 질문드립니다.
-
미해결실전! 스프링 데이터 JPA
테스트가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의와 같이 소스코드를 작성하고 테스트를 진행 하였는데테스트는 성공하지만 강의와 콘솔로그가 다릅니다무엇이 문제일까요ㅠㅠ?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
setter 안 쓰고 연관관계 편의 메서드 생성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]무분별한 setter 사용은 엔티티가 왜 변경되는지 추적하기가 힘들어지므로 가급적 setter은 생성하지 말고 엔티티에 대한 값 변경을 하려면 편의 메서드를 통해 변경하도록 김영한 선생님께서 권고하셨습니다.하지만 연관관계 편의 메서드의 로직을 구성할 때 setter가 사용됐는데 setter을 사용하지 않고 연관관계를 설정하는 방법이 궁금합니다 !
-
해결됨Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
테스트 메서드 마다 Environment variables 설정이 불편...
강의시나리오 대로 진행하다보니 살짝 불편한 부분이 있어서..(어쩜 중간에 코멘트가 있었는데 놓친것일 수도..)서비스 설정 중 메일발송 설정 정보를 실행속성으로 구성하는데테스트도 동일하게 구성하다보니(test-application.properties )Intellij >Edit Configurations > JUnit 실행인스턴스 별 Environment variables 를 설정해줘야 실행이 되는듯 합니다. 테스트 메서드를 만들때마다 실행인스턴스를 설정해야하는게 불편해서 그냥 메일발송 설정을 test-application.properties 에 하드코딩하고 진행해봅니다.(혹시.. 다른 더 스마트한 방법이 있을까? Intellij ? spring?) [확인1]'테스트 추가하기: h2를 이용한 repository 테스트' 강의 1:16초를 보면 git에서 받은 application.properties 파일과 강의의 소스가 다른것 으로 보입니다. Environment variables 에서 설정한 속성이 없어서 해당 강의에서는 불편함 없이 진행된 것 으로 이해했습니다. [확인2] 그런데'토이 프로젝트 살펴보기' 강의 7:42 에 확인되는 설정정보는 git 소스와 동일하것으로 확인됩니다. 강의를 훑어볼때는 그냥 넘어갔는데, 따라하며 보니 눈에 밟히는게 좀 있네요. 제가 놓친부분이라면 양해 바라며, 시나리오 상 연결부분이 필요한 내용이면 코멘트 부탁드립니다. 저와 같이 길잃은 양들을 살펴주소서~[git 설정파일]
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@SpringBootTest 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 테스트 작성시에 어떤 테스트는 클래스 위에 @SpringBootTest 를 넣으시고 어떤 테스트는 안 넣으시던데 어떨때 넣고 어떨때 안 넣는건지 궁금합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
RedissonLock에서 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 강의 열심히 듣고 있습니다. Redisson 관련 실습을 진행하고 있는데, 시간을 변경해도 계속 test results가 fail이 뜨고 있습니다. 관련 원인을 모르겠습니다. github에서 코드를 복붙해봐도 똑같아서 문의드립니다. 어떤게 오류인지도 잘 모르겠어서 질문드립니다 감사합니다.org.opentest4j.AssertionFailedError: expected: <0> but was: <100> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:639) at com.example.stock.facade.RedissonLockStockFacadeTest.동시에_100개의요청(RedissonLockStockFacadeTest.java:58) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티가 복잡할때, 테스트만을 위한 간단한 생성자를 만들어도 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]토이프로젝트 진행중 궁금한점이 생겼습니다.핵심 엔티티에 정적 팩토리 메서드로 생성방법을 만들었는데,여러가지 연관관계와 필드값들이 많이 포함되어 있습니다. 리포지토리를 테스트하려고 하니,엔티티 생성에 너무 많은 코드들이 사용되어서,테스트만을 위한 필수 필드값만 포함된 생성자나 메서드를만드는 것이 올바른 방법인지 궁금증이 생겼습니다.
-
해결됨견고한 결제 시스템 구축
Ledger 및 Wallet 서비스에서 Kafka Consumer PaymentEventMessageHandler 에 typecast 문제가 발생됩니다.
@Bean public Consumer<Message<PaymentEventMessage>> consume() { return message -> { PaymentEventMessage payload = message.getPayload(); LedgerEventMessage ledgerEventMessage = doubleLedgerEntryRecordUseCase.recordDoubleLedgerEntry(message.getPayload()); streamBridge.send("ledger", ledgerEventMessage); }; } 해당 로직은 Ledger 서비스의 Kafka 메시지 Consumer 역할을 맡고 있는 'consume' 메소드 입니다. 정상적으로 결제 confirm 완료가 되면 Kafka 에 메시지를 정상적으로 등록 된 것을 확인 하였는데요.이 후 consumer 에서 메시지를 잘 가지고 오지만 byte[] 타입이라 PaymentEventMessage 로 타입캐스트 하는데 문제가 발생되네요.. Kafka 설정에서 Deserialize 설정만 해주면 되는 느낌인데... 구글링 해봐도... 잘 안되어서 이렇게 질문 드립니다! 에러 문구 class [B cannot be cast to class com.example.ledgerservice.ledger.domain.PaymentEventMessage ([B is in module java.base of loader 'bootstrap'; com.example.ledgerservice.ledger.domain.PaymentEventMessage is in unnamed module of loader 'app')