묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청이 String이고 응답이 객체 형태일 때 메시지 컨버터
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.요청이 text/plain인 "hello"이고,응답이 application/json인 HelloData ({"username: "hello", "age" : 10})인 경우에는 StringHttpMessageConverter만 쓰이나요? 아니면 MappingJackson2HttpMessageConverter도 함께 쓰이나요? 영한 님의 강의에 따르면 content-type이 application/json이고, void hello(@RequestBody String data) {}일 때는 StringHttpMessageConverter가 모든 타입의 미디어 타입이 가능하므로 StringHttpMessageConverter가 쓰인다고 했는데 그렇게 생각하면 될 지 질문드립니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SaveCheck, UpdateCheck 질문
Bean Validation-groupsSaveCheckUpdateCheck위 인터페이스를 만드는 것만으로 어떻게 item model이 나눠서 구분이 되는지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MessageSourceTest의 helloMessage() 메서드 테스트 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]MessageSourceTest의 helloMessage()메서드를 테스트중 인데 계속 오류가 발생해 질문을 남기게 되었습니다.처음엔 인코딩 문제인 것 같아 인코딩과 관련된 설정은 모두 질문에 나와있는데로 바꾸었는데도 불구하고 계속 오류가 뜹니다.messages_en.properties 파일을 지우고 messages.properties 파일 하나만 남겨두고 테스트를 하면 테스트가 정상적으로 성공합니다. 하지만 messages_en.properties를 추가하는 순간이런식으로 Expecting이 "hello"로 바뀌고 오류가 뜨는 것 같습니다. 해결방법을 가르쳐주시면 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
logout 과 관련한 질문이 있습니다.
@PostMapping("/logout") public String logout(HttpServletResponse response) { expireCookie(response, "memberId"); return "redirect:/"; } private void expireCookie(HttpServletResponse response, String cookieName) { Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie); }logout 메서드를 공부하면서 의문이 생겼습니다.코드를 보니까 memberId 이름을 가진 쿠키를 하나 생성해서 setMaxAge = 0으로 설정한 후에 addCookie를 하는데 이렇게 되면 memberId 이름을 가진 쿠키가 2개가 되는 것 아닌가요? (기존에 로그인 할 때 memberId 생성 + 로그아웃할 때 memberId 생성)이 memberId가 대체된다고 생각했을 때에도 여러 회원이 로그인을 하게 되면 memberId = x, memberId = y, ... 이렇게 다양하게 존재할 것 같은데 저렇게 같은 이름으로 memberId의 setMaxAge = 0 처리를 해버리면 모든 회원의 memberId의 setMaxage가 0이 되지 않을까 싶어서 의문이네요ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
빌더패턴 사용시 연관관계ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
안녕하세요 ㅠㅠ 빌더패턴 사용시 이런식으로 구성하려고하는데요. 이렇게해서 INSERT를 하면 NULL로 받습니다. 그래서이렇게 putOrder메소드를 만들어서 빌더패턴안에 포문으로 돌려서 해결했는데 이런식으로 하는게 맞는지(?) 되는지(?) 궁금합니다. 또한https://www.inflearn.com/questions/419013/%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%ED%8E%B8%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%83%9D%EC%84%B1-%EB%A9%94%EC%86%8C%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A0%A4%EC%9A%94 여기서 질문한 것 역시 봤었는데,왜 저는 저렇게 안되는 걸까요?? @@무슨 차이가 있는 걸까요???
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
LettuceLockStockFacadeTest를 다시 실행하면 왜 실패가 날까요?
test가 정상으로 처리되어 redisson을 추가하여 test하였습니다.RedissonLockStockFacadeTest는 이상이 없는데LettuceLockStockFacadeTest를 재시도 한 결과 실패가 됩니다.원인을 찾아보려고 다 다시 만들어봤지만 동일한 이슈가 발생하여습니다. 무엇이 문제일까요?redisson의 종속성을 삭제하고 돌리면 이상이 없음을 확인하였습니다. LettuceLockStockFacade 컴포넌트 와RedissonLockStockFacade 컴포넌트는 함께 사용할 수 는 없나요?또한 그 이유가 무엇인가요?
-
미해결스프링 핵심 원리 - 기본편
외부라이브러리 호출
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 설정정보로 등록하면 외부라이브러리에도 초기화, 종료메서드를 적용할 수 있다는 것은 이해가 되었는데요. 그 외에는 외부라이브러리에 적용할수 없다는 말이 무슨 의미인지 잘 모르겠습니다. 질문을 여럿 찾아봤는데 질문이 조금 달라서..해결이 안됬네요DB커넥션 예를 들면, 초기화, 종료 메서드를 단순히 애노테이션(@PostConstruct, @PreDestroy)이 등록된 메서드안에서 호출하면, 그 안에서 호출된 여러 라이브러리 메서드처럼 결국엔, 굳이 설정정보사용안하고도 사용할수 있다(적용할수 있다)고 볼수 있는거 아닌가라고 생각이 듭니다.제가 지금 잘못 이해한거 같긴한데, 어디 부분을 잘못 이해해서 이런 생각을 하는건지 잘 모르겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 오류
다음과 같은 오류로 구글링 한 결과구글링에서 위 두가지 방법을 알려줘서 했더니 그래도 오류가 나서 문의드립니다..ㅜㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 생성 단계, build.gradle 오픈시 오류
build.gradle를 오픈하자마자 다음과 같은 오류가 뜹니다ㅜㅜ 자바는 11버전 설치했고 강의 제일 처음, build.gradle부터 오픈하자마자 저런 오류가 났고 아무것도 안건들었습니다. <오류코드>- 일부만 가져왔습니다.A problem occurred configuring root project 'hello-spring'.> Could not resolve all files for configuration ':classpath'.> Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.1.Required by:project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.0.1> No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6' but:- Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally:- Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11- Other compatible attribute:- Doesn't say anything about org.gradle.plugin.api-version (required '7.6')- Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a component, and its dependencies declared externally:- Incompatible because this component declares documentation and the consumer needed a library- Other compatible attributes:- Doesn't say anything about its target Java version (required compatibility with Java 11)- Doesn't say anything about its elements (required them packaged as a jar)- Doesn't say anything about org.gradle.plugin.api-version (required '7.6')- Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally:- Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11- Other compatible attribute:- Doesn't say anything about org.gradle.plugin.api-version (required '7.6')- Variant 'mavenOptionalRuntimeElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a runtime of a library, packaged as a jar, and its dependencies declared externally:- Incompatible because this component declares a component compatible with Java 17 and the consumer needed a component compatible with Java 11- Other compatible attribute:- Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
-
미해결스프링 핵심 원리 - 기본편
싱글톤 패턴 단점이 이해가 안 갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링을 사용하시기 전에 순수 자바 코드로 싱글톤 생성하신 다음에 싱글톤 패턴이 가질 수 있는 단점에 대해 설명해주셨습니다.싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. private 생성자로 자식 클래스를 만들기 어렵다.이 중 1번,3번은 스프링에서 개선됨이 확실하게 보이는데 2번은 크게 달라진 점을 모르겠습니다.자바로만 싱글톤 만들었을 때 활용(SingletonService가 MemberService를 상속받았다고 가정했을 때)public class AppConfig { public MemberService memberService(){ return SingletonService.getInstance(); } }public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); // 활용 } }이렇게 만들면 의존관계상 클라이언트가 구체 클래스에 의존하지 않는 것 아닌가요?물론 다른 단점들이 다 고쳐지니 스프링을 안 쓸 이유가 없지만 DIP, OCP 개선을 중요하게 언급하신 것 같아서 넘어가기 찝찝하네요. 자바로 만들 때 DIP가 위반되는 이유가 뭔가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 실행 안됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]org.h2.jdbc.JdbcSQLNonTransientException: IO Exception: "java.net.UnknownHostException: ?��채린: ?��?���? ?��?��?���? ?� h2.bat파일을 실행하면 cmd창에 위와 같이 뜨면서 localhost:8082에 접속하면위의 사진 같은 에러가 납니다.인프런의 모든 질문을 읽어봐도 저처럼 UnknownHostException 오류가 난 사람은 없어서 질문합니다!(환경변수 설정부터 재부팅, 재설치, 모든 행동을 다 해보았습니다..)
-
해결됨실전! 스프링 데이터 JPA
Auditing 질문 드립니다
안녕하세요! 생성 시간, 수정 시간을 JPA Auditing으로 관리하는 것과 db에서 default, on update 조건으로 관리하는 것이 어떤 차이가 있는지 궁금합니다..!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
StringToIpConverter 가 2번 호출되는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용][소스코드] @PostMapping("/converter/edit") public String converterEdit(@ModelAttribute Form form, Model model) { IpPort ipPort = form.getIpPort(); model.addAttribute("ipPort", ipPort); log.info("post request end"); return "converter-view"; } @Data @Slf4j static class Form { private IpPort ipPort; public Form(IpPort ipPort) { log.info("form create"); this.ipPort = ipPort; } } [화면]"제출" 버튼을 눌러 POST 요청을 보내면 StringToIPConverter가 2번 호출됩니다. [로그][질문]첫번째는 @ModelAttribute Form 객체를 만들때 호출하는 것으로 보이는데, 두번째는 언제 호출되는건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BindingResult에서 bindingFailure의 의미
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. BindingResult에서 bindingFailure의 의미가 잘 이해되지 않아 질문드립니다.강의 자료에 아래와 같이 적혀있는데요. 이 부분이 이해가 되지 않습니다.“bindingFailure 는 타입 오류 같은 바인딩이 실패했는지 여부를 적어주면 된다. 여기서는 바인딩이 실패한 것은 아니기 때문에 false 를 사용한다. “ 수업에서 진행한 예시에서 가격에 숫자가 아닌 문자(qqqq)를 적은 경우, 타입이 맞지 않아 바인딩 실패가 발생하는 것이라고 생각했습니다. 타입이 달라 바인딩 실패가 될지는 사용자가 값을 입력하기 전까지는 모르는 것이라고 생각되는데, false를 적는 이유가 궁금합니다.감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
MemberApp 실행시 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.현재 m1 맥북을 사용하며 강의를 따라가고 있는데 MemberApp 클래스에서 실행시 결과가new member 와 find Member 의 = 다음으로 저렇게 나옵니다.강의에서의 실행결과가 똑같이 나오게 하려면 어떻게 해야 할까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
REST API 컨트롤러에서도 BindingResult를 사용하나요?
강의 내용을 보면, BindingResult 는 @ModelAttribute 를 사용할 때만 사용하는 것으로 보여집니다.질문: 그렇다고 한다면, RestController의 경우는 BindingReulst 를 별도로 사용할 필요가 없을까요❓(REST API 에서는 주로 @RequestBody를 이용하여 JSON 포맷으로 데이터를 주고받는 것으로 알고있어서요!)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findById 코드를 작성할 때 리턴으로 꼭 result.stream().findAny()로 해야하나요?
return result.stream().findAny(); 말고 return result.get(0); 은 안되나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpServletResponse의 sendError, setStatus 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]아래 코드는 강의를 들으며 작성한MyHandlerExceptionResolver 입니다.@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, ex.getMessage()); //response.setStatus(HttpServletResponse.SC_BAD_REQUEST); return new ModelAndView(); } } catch (IOException e) { log.error("resolver ex", e); } return null; } }컨트롤러에서 IlleagalArgumentException 이 발생했을 때, MyHandlerExceptionResolver가 실행이됩니다. 지금까지 response.sendError()가 단순히 상태코드를 변경하는 메서드인줄 알았고, 실행 결과 아래 화면을 기대했습니다.하지만, 아래와 같이 json 형태의 데이터를 응답결과로 돌아았는데요. 단순히 상태코드를 변경하는 'response.setStatus()와는 다른 뭔가가 있구나' 라는 생각을 하게 됐습니다. response.sendError() 는 response body 에 데이터를 출력하는 일을 추가로 하는건가요?
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
컨트롤러에서 enum 파라미터 받을 때 궁금점
data class BookRequest( val name: String, val type: BookType,) 웹에서 폼에 책이름, 타입을 컴퓨터로 선택해서 요청을 보내면컨트롤러에서 BookRequest에 enum 타입인 type에 자동으로 값이 받아지는건가요?별도로 converter를 구현안해줘도 되는것인지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정 5:50
updateItemFrom.html<form th:object="${form}" method="post">th:action 프로퍼티가 없습니다.수정버튼을 누르셨잔아요.items/1/edit 로요청이 가는데 rest url 을 명시해준적도 없잔아요.items/1/edit 가는 요청이라는 것을어떻게 인식하는거죠?