Bean validation핸들링이 보통 어떤 설계가 일반적인지 알고싶어서 질문드립니다 폼post 송신시, Bean validation으로 에러감지 후 입력화면html로 리턴할텐데요 이때, 브라우저 url은 post송신용이 남아있어서 유저가 브라우저 주소창 엔터로 Get으로 송신이 되어 서버에선 postmapping만 지원한다고 시스템에러가 나는데 일반적으로 이런건 유저가 개발자 의도와는 다르게 이용한 케이스겠지만 흔히 있을 수 있는 일 같거든요. 이런거 방지하기 위해서는 get도 받을 수 있게 따로 구현을 하나요? 아니면 실무에서는 어떤 방법이 있을까요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 1. ItemController에서 downloadImage함수에서 @ResponseBody를 사용하였는데, 사용하지않게 되면, 예외가 발생합니다. 왜그런가요? ItemController에서 downloadAttach에서는 ResponseEntity<Resource>를 사용하셨는데, 이게 @ResponseBody와 같은거라고 하셨는데,( 다만, header에 추가할 부분이 있어서 ResponseEntity를 사용하셨다고 하는데) 어떤 부분이 같은 건가요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 17 :13 에서 MemberServiceIntegrationTest 의 회원가입을 실행했을 때 김영한님은 insert into member(id,name) values (null,?) 라고 뜨시는데 저는 insert into member (name, id) values (?,default) 라고 뜹니다 member 과 values 둘 다 순서가 바뀐 것 같은데 어디를 봐야 고칠 수 있을까요..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이런 오류가 3_3 부터 생기는데 해결이안됩니다! It appears as if your JDK does not supply a working agent attachment mechanism. Java : 21 JVM vendor name : Oracle Corporation JVM vendor version : 21.0.3+7-LTS-152 JVM name : Java HotSpot(TM) 64-Bit Server VM JVM version : 21.0.3+7-LTS-152 JVM info : mixed mode, sharing OS name : Windows 11 OS version : 10.0 at app//org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:260) at app//org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ... 18 more Caused by: java.lang.IllegalArgumentException at java.instrument/sun.instrument.InstrumentationImpl.appendToClassLoaderSearch0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.appendToBootstrapClassLoaderSearch(InstrumentationImpl.java:280) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:177) ... 19 more
안녕하세요. 강의를 듣던중에 궁금한점이 있어서 질문드립니다. 이번강의에서도 그렇고, 앞서 다른 강의에서도 " 복구할수 없는 예외는 예외를 공통으로 처리하는 부분까지 전달되고, 예외를 공통으로 처리하는곳에서 처리한다 " 고 하셨는데, 지금까지 강의에서도 이 부분에서 대해서는 자세한 설명이 없으셔서 넘어가긴했는데 예외를 공통으로 처리하는곳 이 구체적으로 어떤부분을 말하는것일까요? 지금까지는 이 부분에 대해서는 학습한적이 없는걸로 생각되는데 제가 놓친부분이 있는것인지 아니면 추후 강의에서 설명을 해주시는 부분인지 질문드립니다..!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 뭐가 문제인지 모르겠습니다 ㅠㅠ isEqualto도 빨간색으로 뜨면서 작동이 안되고요 ㅠㅠ package hello.hello_spring.service; import hello.hello_spring.domain.Member; import hello.hello_spring.repository.MemoryMemberRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService = new MemberService(); MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository(); @AfterEach public void afterEach() { memoryMemberRepository.cleatStore(); } @Test void 회원가입() { //given Member member = new Member(); member.setName("hello"); //when long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); //ctrl + alt + v assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when Long saveId = memberService.join(member1); //then IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage().isEqualTo("이미 존재하는 회원입니다.")); /* try { memberService.join(member2); fail(); } catch (IllegalStateException e) { assertThat(e.getMessage().equals("이미 존재하는 회원입니다.")); } */ } @Test void findMembers() { } @Test void findOne() { } } Unexpected exception type thrown, expected: <java.lang.IllegalStateException> but was: <java.lang.RuntimeException> Expected :class java.lang.IllegalStateException Actual :class java.lang.RuntimeException <Click to see difference> org.opentest4j.AssertionFailedError: Unexpected exception type thrown, expected: <java.lang.IllegalStateException> but was: <java.lang.RuntimeException> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:67) at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:35) at org.junit.jupiter.api.Assertions.assertThrows(Assertions.java:3115) at hello.hello_spring.service.MemberServiceTest.중복_회원_예외(MemberServiceTest.java:53) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:28) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:24) at hello.hello_spring.service.MemberService.join(MemberService.java:16) at hello.hello_spring.service.MemberServiceTest.lambda$중복_회원_예외$0(MemberServiceTest.java:54) at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:53) ... 6 more Caused by: java.lang.IllegalAccessException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:26) ... 11 more java.lang.IllegalAccessException: 이미 존재하는 회원입니다. java.lang.RuntimeException: java.lang.IllegalAccessException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:28) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:24) at hello.hello_spring.service.MemberService.join(MemberService.java:16) at hello.hello_spring.service.MemberServiceTest.lambda$중복_회원_예외$0(MemberServiceTest.java:54) at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:53) at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:35) at org.junit.jupiter.api.Assertions.assertThrows(Assertions.java:3115) at hello.hello_spring.service.MemberServiceTest.중복_회원_예외(MemberServiceTest.java:53) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.lang.IllegalAccessException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:26) ... 11 more
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. controllerV4에서 edit메서드를 고치는 도중에 itemRepository.update()에서 cmd+p 를 통해 파라미터 정보를 확인해보니 Item이 @NotNull 이라고 나옵니다 하지만 ItemRepository에서 update 메서드를 확인해보니 파라미터에 @NotNull 조건이 없는데 어떻게 NotNull 이라고 나오는걸까요??
java 17을 다운받고 인텔리제이를 실행했는데요 group이나 version (보라색 글씨)가 활성화?가 안돼요 그리고 java 11과 java 14를 깔았던게 있는데 이것때문에 cmd 에서 java -version 이라고 쳤을 때 14가 계속 뜨는 바람에 11과 14를 모두 지우고 17만 남겨뒀거든요 그런데 인텔리제이에서 제가 같이 듣고있는 자바코드들이 다 오류가 뜹니다. CoreApplication.java 도 실행이 아예 되질 않습니다.
mysqladmin: connect to server at 'localhost' failed error: 'Authentication plugin 'auth_gssapi_client' cannot be loaded: ' 동영상과 다르게 저렇게 에러가 나는데 어떻게 하면 좋을까요
안녕하세요. 강의를 통해 공부하고 운영을 경험해볼 프로젝트를 진행중에 궁금점이 생겨 질문 드립니다. 저희 서비스는 프론트와 서버가 HTTPS 로 통신하고, 프론트를 검증하기 위한 헤더, 유저를 검증하기 위한 토큰을 사용하여 구현하고 있습니다. 예를 들어, 유저1이 유저가 속한 카톡방1에서 유저가 생성한 채팅을 삭제하는 요청을 보냈을 때(/DELETE room/1/chatting/1), 현재 서버에서는 유저가 카톡방에 속하는지, 해당 채팅이 해당 채팅 방에 속하는지, 채팅의 작성자가 유저인지 db에서 검증하는 과정을 거칩니다. 궁금한 부분은 서버에 요청을 보낸 클라이언트가 저희 서비스임을 검증하고, 외부에서 패킷을 볼 수 없도록 HTTPS를 사용함에도 내부적으로 이런 검증 과정을 거쳐야 하는 것이 맞을까요?
대원칙인 모든 논리 트랜잭션이 커밋되어야 모두가 커밋되는거고 하나라도 롤백되면 모두가 롤백된다는 개념에서 내부 트랜잭션이 롤백되면 그 시점에 모두 롤백시키면 되지 않나요? 굳이 내부 트랜잭션 롤백 후 물리 트랜잭션에 rollback_only마크를 달아 결국 모두가 롤백되도록 하는 이유가 궁금합니다. 또 궁금한 점은 만약 개발자가 실수로 외부 트랜잭션을 먼저 롤백해버린다면 -> 제가 실험해보니 외부 트랜잭션 롤백시 물리 트랜잭션이 즉각 롤백이 되더라구요. 아마 isNewTransaction이 트루인 경우니 최종 결정권자의 형태로 바로 롤백을 시키는 것 같은데 그러고 나서 내부 트랜잭션 롤백을 시도하니까 여전히 롤백 마크를 남기는 로그가 뜨더라구요. 이 점에 대해서 설명 부탁드립니다:)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 왜 이런 오류가 발생하는 걸까요? gradlew.bat build로 해도 똑같고 gradle home도 잘 지정되어 있습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 아래 코드는 스프링 핵심 원리 기본 편에서 작성했던 코드입니다. public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); . . . @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy FixDiscountPolicy() { return new FixDiscountPolicy(); } } } 여기선 @Configuration를 써도 문제가 없었는데 이번 강의에선 @TestConfiguration을 작성해야만 오류가 안 생기는 이유가 뭔지, 어떤 차이 때문인지 잘 이해가 안 갑니다. 검색해 봐도 잘 와닿지가 않는데 이번 강의의 코드에선 왜 @Configuration을 하면 테스트가 제대로 수행되지 않는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 환경은 윈도우 환경입니다. C:\Users\user\Desktop\study\hello-spring>gradlew.bat 이후 build successful in 8s 까지 확인하고 cd build로 이동하여 dir /ad를 하면 C 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: E456-7A80 C:\Users\user\Desktop\study\hello-spring\build 디렉터리 2024-09-02 오전 08:56 <DIR> . 2024-09-02 오전 07:56 <DIR> .. 2024-09-02 오전 07:56 <DIR> classes 2024-09-02 오전 07:56 <DIR> generated 2024-09-02 오전 08:56 <DIR> libs 2024-09-02 오전 08:56 <DIR> reports 2024-09-02 오전 07:56 <DIR> resources 2024-09-02 오전 08:56 <DIR> test-results 2024-09-02 오전 08:56 <DIR> tmp 0개 파일 0 바이트 9개 디렉터리 265,771,782,144 바이트 남음 이렇게 뜹니다. 이러한 이유로 뒤 진행이 되지 않고 있습니다. 제가 놓친 부분이나 추가로 확인해야 하는 상황이 있을까요
ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
SQL Server 2022 설치 시 오류가 발생합니다 -------------------------------------------------- 처음 설치했을 때 오류가 발생해서... 레지스트리도 지워보고... 구글링을 통해 삭제 후 재설치를 진행하려고 했으나 위와 같은 문제가 발생하고 있습니다..... 어떻게 해야합니까....ㅠㅠㅠㅠ 강사님 도와주십시오 . 애러 메세지는 너무 길어서 ... 어떻게 보내드려야 할지 모르겠습니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네! 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네! 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네! [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! mvc2 9chapter (API 예외 처리) API 예외 처리 - API 예외 처리 - HandlerExceptionResolver 시작 에서의 의문점 입니다. 해당 부분에서는 IllegalArgumentException이 컨트롤러단에서 발생할 경우 Resolver를 이용해 정상흐름으로 만든 뒤 sendError를 호출하고 있는데요 @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST); return new ModelAndView(); } } catch (IOException e) { log.error("resolver ex", e); } return null; } } 그에 따른 api 호출 결과는 다음과 같습니다. { "timestamp": "2024-08-31T18:06:36.410+00:00", "status": 400, "error": "Bad Request", "exception": "java.lang.IllegalArgumentException", "message": "잘못된 입력 값", "path": "/api/members/bad" } resolver는 컨트롤러 단에서 예외가 발생했을 때 그 예외를 해결하고 새로운 결과를 만드는 것 이라고 학습하였습니다. 'IllegralArgumentException 예외를 해결' 하고 'sendError(400)'으로 새로운 결과를 만들어 내었다고 생각하였는데 json 결과에서 status가 400으로 바뀌긴 하였지만, IllegralArumentException에 대한 exception과 message가 나와있는 것을 확인해 볼 수 있었습니다. resolver에서 '예외를 해결' 하였으니 exception 필드과 message 필드는 없어야 한다고 생각하는데 어떤 메커니즘에 의해 저 json 결과가 나왔는지가 궁금합니다. 좋은 강의 만들어 주셔서 항상 감사드립니다.