묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락 레포지토리
"Stock을 사용하면 안되고.."라는 표현을 사용하셨는데요.Stock Entity를 사용하면 안되고 어떤 Entity를 통해서 repository를 만들어야한다고 말씀하시는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 버전
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]start.spring.io에서 spring boot를 설치하고 h2 버전도 1.4.199로 설치하였습니다.그러나 아래의 사진과 같이 라이브러리 내에 h2:1.4.199가 아닌 h2:2.1.214가 설치되어 있습니다.이 부분 때문에 다음 강의에서 제대로 실행이 되지 않는 것 같습니다 .. (MEMBER 테이블 생성이 되지 않음)왜 이러는 걸까요 ..? 해결 방법도 알려주시면 감사하겠습니다 ㅜ ㅜ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MEMBER 테이블 생성이 안 됩니다.
안녕하세요. 강의를 듣고 강의자료까지 참고하며 코드를 작성하였습니다.그러나 실행창에 create와 drop이 뜨지도 않고 MEMBER 테이블 또한 생성되지 않습니다.관련 질의를 지금 6시간 넘게 다 찾아보며 (띄어쓰기, @Rollback(false) 추가 등) 해결 시도를 했지만 끝까지 되지 않아 질문 남깁니다 ..[yml 코드]감사합니다 ..
-
해결됨스프링 핵심 원리 - 기본편
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(RateDiscountPolicy.class);
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class); 이 부분에서 DiscountPolicy.class를 RateDiscountPolicy.class로 바꿔 보면 Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(RateDiscountPolicy.class); 오류가 나는데 이유가 뭔가요? RateDiscountPolicy는 DiscountPolicy의 구현체니까 DiscountPolicy 타입에 대입될 수 있으니 당연히 상관없을 줄 알았는데 오류가 나는 것 같더라고요.. 아래는 제가 IDE에서 따로 작성해 본 코드인데 RemoteControl rc = new SmartTelevision(); Map<Integer, RemoteControl> temp = new HashMap<>(); temp.put(1, rc); 여기서 SmartTelevision이 RemoteControl의 구현체인데 Map 객체에 저장이 되더라고요. 그래서 위의 스프링에서의 RateDiscountPolicy의 경우도 문제 없을 줄 알았는데.. 안 되는 이유가 뭘까요..
-
미해결스프링 시큐리티
anonymousClass를 사용하는 이유
AnonymousAuthenticationFilter 학습에서4분 9초에 36번째 라인에서 anonymousClass를 정의할 때 Class 타입으로 정의하는 이유가 무엇인가요?? Class 타입으로 정의하면 어떤 장점이 있나요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
생성 post 요청 시 Response 객체 전달 이유
Order를 생성하면서 이에 대한 서비스 반환 값으로 orderResponse를 반환하는 것을 볼 수 있었습니다.얕은 지식으로는 Create에 해당하는 내용은 201 상태코드와 URI.Created 를 사용하여 헤더에 Location을 명시해주고 "/api/v1/orders/" + id형태로 제공해주는 것이 좋은 것으로 알고 있었는데 생성 시에도 반환 값을 제공해주시는 이유가 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
특정 하위 타입으로 조회할 때 궁금한 점 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]아래 코드의 findBeanBySubType()에서RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class); 이 부분을 보면 RateDiscountPolicy 타입으로 조회한다는 뜻인데 TestConfig를 보면 rateDiscountPolicy는 리턴할 때 RateDiscountPolicy를 리턴하지만 메서드 시그니처에 있는 리턴 타입 자체는 DiscountPolicy이잖아요? RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class);를 실행한 이후 동작 과정이 궁금합니다. DiscountPolicy 타입인 빈들을 먼저 찾고 그것들이 여러 개일 때 RateDiscountPolicy를 찾는지, 아니면 바로 처음부터 RateDiscountPolicy인지 FixDiscountPolicy인지 구분할 수 있는지 궁금합니다. @Test @DisplayName("특정 하위 타입으로 조회") public void findBeanBySubType() { RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class); assertThat(bean).isInstanceOf(RateDiscountPolicy.class); } @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy FixDiscountPolicy() { return new FixDiscountPolicy(); } } }
-
미해결스프링 시큐리티 OAuth2
임시 코드 요청시 Redirect에 대해 질문 드립니다
client registration의 redirect uri는 인가 서버로부터 임시코드를 발급받고, redirect uri로 임시 코드를 리다이렉트 시키는데,강사님께서redirect uri를 http://localhost:8081/client 로 설정하였고,ClientController의 매핑주소도 위와 같은 주소로 설정하였습니다. 여기서 궁금한점이 있습니다. 임시 코드를 발급한 시점에 저 리다이렉트 주소로 콜백하게 되는데, 이 시점에 clientcontroller에 저 매핑주소가 호출되어야 할텐데왜 token 발급시에 컨트롤러가 호출되는지그리고 redirect uri가 token 발급시 콜백 주소도 해당되는건가요?? 엑세스 토큰 발급후에도 http://localhost:8081/client여기로 호출되어서 의문이 듭니다.
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
8강 에서 servlet-context.xml에 설정에서 에라
servelt-context.xml에서 <annotation-driven/>를 입력하면 그림과 같은 에라가 나오는데 어떻게 해야 하나요 ?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Book.kt 추가후 에러
태현님 안녕하세요!저도 같은 에러가 발생했는데 (질문 게시판에 같은 질문이 있는데... 링크를 얻기가 어렵네요)build.gradle 에implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2.41'을 추가하니까 해결 되었습니다..! 혹시 원인을 알 수 있을까요?현재까지 공부한 프로젝트를 보내고 싶은데... 메일로 보낼수 있을까요? 파일 첨부가 안되네용
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트 코드에서 매번 1번 유지
테스트 코드에서 매번 stock id 1번으로 조회하는데 이게 어떻게 가능한건가요?저의 경우 1번 객체가 없어서 에러를 처리합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
밑의 질문과 같이 테스트는 통과 했으나 테이블이 안생깁니다...
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 있으나 해결이 안됨3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 실전 스프링부트+jpa1 의 jpa와 db 설정, 동작확인을 듣고있는 학생입니다. 밑의 질문과 같은 이유로 질문하게 되었는데요. application.yml의 들여쓰기가 문제일까 싶어서 들여쓰기를 들였는데 그럼에도 생성이안됩니다... 어디가 문제일까요?? 그리고 그... localhost:8082를 접속할때 접속이 될때가 있고 안될때가 있는데 이유가 뭘까요?? Iterm으로 ./h2-sh로 킨 상태를 계속 유지해야 콘솔에 접근할 수 있는건가요?
-
해결됨스프링 핵심 원리 - 기본편
테스트하는 클래스에서 public을 지워도 된다고 하셨는데
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서 김영한 선생님께서 테스트할 땐 public을 지워도 된다고 하셨는데혹시 지우는 게 더 좋은 건가요? 테스트 성능이라든가.. 특정 측면에서 public을 지우는 게 더 나은 건가요? 강의에선 public을 지워도 된다고만 말씀하시고 지우는 게 낫다는 말씀은 따로 안 하시긴 했는데,클래스를 새로 만들 때 자동으로 생기는 public을 일부러 지우시길래 혹시 지우는 게 더 나은 거라서 일부러 지우시는 건지, 아니면 지워도 그만 안 지워도 그만이지만, 지워도 상관없다는 걸 보여주시고 싶어서 지우시는 건지 모르겠습니다. public을 써도 크게 상관없나요? 아니면 지우는 게 낫나요? class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() {
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 통합테스트 코드를 따라치고 있습니다. h2 db에 이름이 중복되어있을텐데 오류가 안납니다.
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 영한님 말씀대로면 이름이 같을시 오류가 떠야되는데 저는 뜨질 않고 돌아갑니다. 왜그런가요?@Transactional 주석처리하고 해도 같은결과입니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
임포트가 되지않아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HelloData 생성했는데도 import가 되지 않습니다.package hello.springmvc.basic.request; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.util.Map; @Slf4j @Controller public class RequestParamController { @RequestMapping("/request-param-v1") public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); log.info("username={}, age={}", username, age); response.getWriter().write("ok"); } /** * @RequestParam 사용 * - 파라미터 이름으로 바인딩 * @ResponseBody 추가 (RestController 와 같은 역할을 수행함) * - View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력 */ @ResponseBody @RequestMapping("/request-param-v2") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) { log.info("username={}, age={}", memberName, memberAge); return "ok"; } @ResponseBody @RequestMapping("/request-param-v3") public String requestParamV3( @RequestParam String username, @RequestParam int age) { log.info("username={}, age={}", username, age); return "ok"; } /** * @RequestParam 사용 * String, int 등의 단순 타입이면 @RequestParam 도 생략 가능 */ @ResponseBody @RequestMapping("/request-param-v4") public String requestParamV4(String username, int age) { log.info("username={}, age={}", username, age); return "ok"; } /** * Integer 은 객체이기 때문에 null 이 들어갈 수 있음 * int 는 기본형이 때문에 null이 들어올 수 없음 */ @ResponseBody @RequestMapping("/request-param-required") public String requestParamRequired( @RequestParam(required = true) String username, @RequestParam(required = false) Integer age) { log.info("username={}, age={}", username, age); return "ok"; } @ResponseBody @RequestMapping("/request-param-default") public String requestParamDefault( @RequestParam(required = true, defaultValue = "guest") String username, @RequestParam(required = false, defaultValue = "-1") int age) { log.info("username={}, age={}", username, age); return "ok"; } /** * @RequestParam Map, MultiValueMap * Map(key=value) * MultiValueMap(key=[value1, value2, ...]) ex) (key=userIds, value=[id1, id2]) */ @ResponseBody @RequestMapping("/request-param-map") public String requestParamMap(@RequestParam Map<String, Object> paramMap) { log.info("username={}, age={}", paramMap.get("username"), paramMap.get("age")); return "ok"; } @ResponseBody @RequestMapping("/model-attribute-v1") public String modelAttributeV1(@RequestParam String username, @RequestParam int age) { HelloData helloData = new HelloData(); } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 데이터베이스 설정 질문
여기에 질문 내용을 남겨주세요.1:09 에서 bin에서 ./h2.sh 했는데 denied 당했습니다.. 이거 어떻게 해결해야 할까요??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cannot find declaration to go to 오류
강의 내용 중 hello를 눌렀을때(단축키 사용 ctrl+b) cannot find declaration to go to 오류가 발생하더라고요. 구글이나 인프런 답변 내용들을 찾아서 제시해주신 해결 책으로 했을 때 해결이 안되어서 문의를 드립니다.src -> Mark Directory as -> Sources Root(해결x)file -> invalidate Caches -> Restart(해결x)혹시 무료버전을 사용하고 있어서 해결이 안되는걸까요??
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
FakeRepository 만들 때 Join 테이블하는 경우 질문드립니다.
서비스 테스트 시 Repository 상속해서 FakeRepository를 생성자 주입을 통해 진행한다는 내용에 대해서는 이해하고 실습해 보았습니다.그런데 만약 Repository 메서드 중 JPA의 on 절을 이용한 join을 사용해 데이터를 가져오는 경우 FakeRepository의 내부 구현이 궁금합니다내부에 Id와 List를 통해 해당 엔티티에 대한 정보를 저장할 수 있지만, Join을 하는 경우 외부 테이블의 정보가 필요하기 때문에 이를 Fake하고 싶을 때는 어떻게 해결할 수 있는지 알려주시면 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Test값 안녕 -> ?? 으로 인식되네요
위는 message.properties 입니다. 이는 Test 구요 안녕의 값을 Test하지만 실제는 ??로 인식이되네요어딘가에서 한글이 깨진거같은데 뭘까요
-
미해결스프링 기반 REST API 개발
섹션2 201응답받기 부분 테스트 404에러 질문입니다
위, 아래의 사진은 수업에서 진행한 EventConroller, EventControllerTests의 전문입니다.테스트하면 아래의 에러메세지가 나옵니다 수업과 같이 진행했는데 왜 발생하는지를 모르겠습니다 도와주세요Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appendedMockHttpServletRequest: HTTP Method = POST Request URI = /api/events/ Parameters = {} Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json"] Body = null Session Attrs = {}Handler: Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandlerAsync: Async started = false Async result = nullResolved Exception: Type = nullModelAndView: View name = null View = null Model = nullFlashMap: Attributes = nullMockHttpServletResponse: Status = 404 Error message = null Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"] Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = []java.lang.AssertionError: Status Expected :201Actual :404<Click to see difference> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59) at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122) at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:637) at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214) at me.gang.demorestapi.events.EventControllerTests.createEvent(EventControllerTests.java:31) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:76) at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 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:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)