묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
PostCreate 기본 생성자 문제 질문
질문PostController 에서 "/posts" 요청 시 PostCreate Dto Binding 관련 질문Controller @RequestBody의 Dto는 기본생성자와 Getter or Setter 중 하나가 필요한 것으로 알고 있습니다.[참고 링크][Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 1 (tistory.com)[Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 2 (tistory.com)하지만, 강사님의 코드를 보면,PostCreate (Dto)에 기본생성자가 없음에도 테스트가 정상적으로 통과하는데 어떻게 그것이 가능한가요?제가 따로 코드를 작성하여 시도한 경우, 기본 생성자가 없어서 실패하였습니다. (아래 코드 작성) 완전히 같은 질문https://www.inflearn.com/questions/752002/comment/236088https://www.inflearn.com/questions/796162호돌맨님 답변 → 생성자가 존재하는 경우 생성자를 통해 값이 들어간다.답변에 대한 질문 → 저는 생성자가 존재하더라도 기본생성자가 없으면, 오류가 발생합니다.. 왜 그런걸까요? 강사님 코드기본 생성자가 없음에도 성공@Setter @Getter @ToString public class PostCreate { @NotBlank(message = "타이틀을 입력하세요.") private String title; @NotBlank(message = "콘텐츠를 입력해주세요.") private String content; @Builder public PostCreate(String title, String content) { this.title = title; this.content = content; } } 질문자 코드 :: 실패 케이스강사님 코드와 동일하다고 생각합니다 @Getter @Setter @ToString public class CreatePostRequest { @NotBlank(message = "타이틀을 입력하세요") private String title; @NotBlank(message = "글 내용을 입력하세요") private String content; @Builder private CreatePostRequest(String title, String content) { this.title = title; this.content = content; } } 오류 메세지org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.example.blog.dto.request.CreatePostRequest]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.example.blog.dto.request.CreatePostRequest (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]※ 컨트롤러에 진입도 못하고 오류 발생합니다.질문자 코드 :: 성공 케이스@NoArgsConstructor 하나 추가 @Getter @Setter @ToString @NoArgsConstructor public class CreatePostRequest { @NotBlank(message = "타이틀을 입력하세요") private String title; @NotBlank(message = "글 내용을 입력하세요") private String content; @Builder private CreatePostRequest(String title, String content) { this.title = title; this.content = content; } }
-
해결됨스프링 핵심 원리 - 고급편
ThreadLocal.remove()
사용자A 가 thread-A 로 thread-A 전용 보관소에 사용자A 데이터를 저장했다가 ThreadLocal.remove() 를 하게 되면 thread-A 전용 보관소에 저장된 사용자A 데이터도 사라지게 되는 것 아닌가요..??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost 에러문의드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 localhost:8080이 에러가나서 localhost:8090으로 접속하려고 Edit configurations와 application.yaml에도 포트 번호 사진과 같이 추가하였는데도 계속 에러가 나네요...ㅠ 어디가 잘못된걸까요...?
-
미해결Practical Testing: 실용적인 테스트 가이드
섹션7 - 테스트 환경의 독립성을 보장하자
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의 재미나게 잘 보고있습니다.제목에 남겨드린 강의에서 creatOrderWithNoStock의 주제와 벗어나 given절의 deductQuantity에서 예외가 발생할 수 있는 상황을 예를 들어서 설명해 주셨고, 테스트 환경에서는 가능한 생성자를 기반으로 환경을 구성하여 진행하는것이 좋다고 말씀 주셨는데 그럼 이 경우에는 Stock stock1 = Stock.create("001", 2); Stock stock2 = Stock.create("002", 1);와 같이 생성 시점에 이미 부족한 수량으로 설정 하여 테스트를 진행하여 deductQuantity를 사용하지 않고, deductQuantity의 경우 따로 단위 테스트를 통해 수량 감소를 확인하는걸로 테스트를 구성하는 식으로 가면 되는건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 설계 관련된 질문이 있습니다
[질문 내용]배운 내용을 바탕으로 혼자 프로젝트 생각해서 만들고 있는데요어떤게 궁금한지 간단히 말씀드리면멤버라는 엔티티가 있습니다.. 멤버라는 엔티티에는 오늘의 추천 할 일이 필요하고 날마다 바뀝니다. 추천할 일은 개발자 혹은 운영자가 직접 넣는 것이구요.. 이러면 member랑 추천선행이랑 연관관계가 필요가 없지 않나요??이러면 추천선행은 ERD? 같은거 설계할때 연관관계ㅒ 없이 동떨어져있는 걸로 그리면 될까요?? 혹시라도 전에 사용했던 추천선행이 안나오게 하려면 이 경우는 연관관계를 세팅하는게 좋을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
RetrunValueHandler 정리 질문입니다.
다른분 질문을 참고했습니다.(1) 메세지 바디로 응답하는 경우 (메서드 레벨에 @ResponseBody가 붙어있는 경우)RetrunValueHandler가 HttpMessengerConverter를 이용해서 반환값을 응답 메세지 바디부에 실어서 ViewResolver등을 거치지 않고 즉시 요청 송신자에 반환(2) 메세지 바디로 응답하지 않는는 경우 ReturnValueHandler는 반환 값의 타입에 따라 적절한 HttpMessengerConverter를 통해 응답 메세지를 생성(예로들어 ModelAndView를 반환한다면 Dispatcher Servlet으로 넘기고) Dispatcher Servle이ViewResolver를 사용하여 View 객체를 반환받고 render()하여 최종적으로 클라이언트에게 반환. 이렇게 정리한게 맞는지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MessageSource가 Locale 정보를 가져오는 코드 위치가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 지금 스프링 코드를 보면서 MessageSource와 LocaleResolver의 흐름을 파악하고 있었습니다.LocaleResolver가 어떻게 resolve하고 set하는지는 코드가 명확해서 파악은 되고 있습니다. 그런데, Thymeleaf에서 #{label.ex}와 같은 메세지 코드가 있을 때, MessageSource가 어디서 호출되고, Locale정보를 어떻게 가져오는지 확인이 어려운 상태입니다. 저의 추측으로는 LocaleContextHolder에서 Locale 정보를 가져오는 거 같은데 눈으로 직접 확인을 해보고 싶어서요.Spring 코드에서 이 부분이 어디서 호출되는지 알려주시면 감사하겠습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
controller, service용 dto를 분리시키는 것에 대한 질문
항상 잘 듣고 있습니다. 감사합니다. controller layer와 service layer의 dto를 서로 분리시켜서 service layer가 상위 레이어를 모르도록 한다는 것은 이해가 되었습니다.질문 드리겠습니다! dto를 분리할 때, 중복된 코드가 복잡성을 증가시킬 수도 있고 운영 시, 두 dto 간의 변환 과정의 비용이 어느 정도 성능에 영향을 미칠 수 있다고도 생각합니다.2개로 분리하는 방법은 일반적인 설계 패턴은 아니라고 생각되는데, 혹시 현업에서도 자주 사용하는 방식이신지가 궁금합니다. service에서 생성된 response 데이터에 대해서도 controller만의 response dto를 따로 생성할 필요가 있는지 궁금합니다. 클라이언트로 내려주는 응답 객체로 controller 클래스에서 ResponseEntity는 사용하지 않으시는지,주로 현업에서도 강의에서처럼 응답 객체(ApiReponse)를 커스텀해서 내려주는 방식을 선호하시는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Autowired 에러 납니다
1:57초 강의 보면Autowired를 달아주는데똑같이 해보니까이런 에러가 뜹니다
-
미해결스프링 시큐리티 OAuth2
검증 아키텍처 이해 - BearerTokenAuthenticationFilter 강의 편 질문있습니다.
강의 : 검증 아키텍처 이해 - BearerTokenAuthenticationFilter 안녕하세요 강사님, 강의 학습중 질문이 있습니다. 다음은, 시큐리티 설정 파일 일부 코드이며여기서 JwtAuthorizationRsaPublicKeyFilter 를 추가로 Bean 등록하였는데요. 일단 Bearer 에 관련된건 BearerTokenAuthenticationFilter가 수행하고doFilterInternal 메서드에서 시큐리티 컨텍스트에 저장 하는 코드를 확인했습니다. 여기서 수업시간에 생성한 JwtAuthorizationRsaPublicKeyFilter 필터입니다첫번째 질문강의 예제 한에서는 시큐리티 컨텍스트에 저장하는초점에 있어서는,JwtAuthorizationRsaPublicKeyFilter 필터가 없어도 문제 없는것 같은데 제 생각이 맞나요? 두번째 질문두 필터의 순서는 어떻게 지정되는건가요? 세번째 질문또한 JwtAuthorizationRsaPublicKeyFilter 필터에 추가적인 로직을 부여한다면,1. 직접 커스텀 필터를 특정 필터 전/후에 등록2.리프레쉬 토큰 로직3.DB 커넥션이 필요한 작업4. 토큰 유효시간 검증등과 같은 작업할때 일까요?아니면 또다른 상황이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 cmd 에서의 실행(질문 수정)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 이번에 기본적으로 필요한 자바와 db를 독학한 후 스프링을 시작하였습니다.이번 빌드를 실행할 때, 저는 자바 17버전과 스프링부트 3.0 이상 버전을 다운했기에 교안에 나와있는 '자주하는 질문'에 나와있는 [Querydsl 부트 3.x 설정] 의 gradle 버전에 맞게 코드를 옮겨붙인 후 실행하였습니다.gradle의 코드를 처음 그대로의 상태(gradle 수정 전)에서 실행할 때는 intellij 와 윈도우 모두 잘 실행되었으나,gradle 부분을 Querydsl 부트 3.x 설정로서 실행하니 intellij에선 이상이 없었지만, 윈도우 cmd에서 실행할 시 /hello 는 연결이 안되었습니다. gradle 수정으로 인한 에노테이션 연결이 달라져 라이브러리를 가져오지 못한 건가 라는 생각은 들지만, 이게 확실치 않고 어떻게 수정을 해야할지 찾아봐도 해결책을 찾지 못해 질문드립니다.(빌드를 하는데는 오류가 발생하지 않았습니다.) 1.수정 전의 gradle수정 후의 gradle - ( '자주하는 질문'에 나와있는 [Querydsl 부트 3.x 설정] )plugins { id 'java' id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } jar { enabled = false }dependencies {implementation 'org.springframework.boot:spring-boot-starter-data-jpa'implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'compileOnly 'org.projectlombok:lombok'runtimeOnly 'com.h2database:h2'annotationProcessor 'org.projectlombok:lombok'testImplementation 'org.springframework.boot:spring-boot-starter-test'//Querydsl 추가implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api"}tasks.named('test') {useJUnitPlatform()}clean {delete file('src/main/generated')}cmd에서의 실행순서1. 저장해놓은 hello-spring 디렉토리로 이동2. gradlew.bat build -x check 으로 빌드( -x check 없이 빌드 시 에러가 발생하여 구글링을 통해 찾아낸 방법입니다.)3. java -jar (빌드한 jar 파일)결과수정 전 gradle 에서는 이상이 없으나.수정 후 gradle로 실행 시, intellij에서는 이상없이 잘 작동하지만, cmd로 실행 시 localhost:8080/hello 에서 whitelable error page가 발생저의 오류원인 추측1.애노테이션이 제대로 되지 않아 라이브러리를 불러오지 못했다.2. 지정된 파일 경로가 잘못되어 에러가 발생했다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Controller 테스트할 때, Service 에 대한 로직
안녕하세요! 테스트에 대해 의아했던 부분이 많이 풀리는 강의입니다. 정말 감사드려요. 강의를 잘 듣고 있다가 궁금한게 생겨서요!controller @mockBean Service service @test void postData() { // when when(service.message()).thenRetrun() }간단하게 코드를 적어봣는데요!service에 대해 MockBean으로 주입만 해줬을 뿐, Service에 대한 로직이 없어서요!제 생각에는 Service가 return 하는 부분은 이미 서비스 계층에서 테스트가 끝났고 Controller 에 테스트를 해야하는 주점은1 ) Request 에 오는 데이터들의 검증뿐이라고 생각하는데 맞나요? Get 같은 경우에도 Service에 오는 건 그냥 빈 배열처리하셨더라구요! 감사합니다!
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
처음 테스트시에 에러가 나오는데 모르겠네요
처음 테스트 하는데 이렇게 나옵니다.왜 이럴까요? ㅠㅠ
-
미해결스프링 핵심 원리 - 고급편
args 표현식을 이용한 매개변수 전달 개념 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 포인트컷 표현식을 이용하여 매개변수를 전달하는 것을 공부했습니다. 이 개념과 본래 포인트컷의 개념이 헷갈려서 문의드립니다. @Around("allMember() && args(arg, ..)") public Object logArgs2(ProceedingJoinPoint joinPoint, Object arg) throws Throwable { log.info("[logArgs2]{}, arg={}", joinPoint.getSignature(), arg); return joinPoint.proceed(); } 포인트컷은 조인 포인트를 필터링하기 위한 개념으로 공부했습니다. 위 코드에서 args(args, ..) 부분의 args가 매개변수를 나타내는 것은 이해가 됩니다. 하지만 ArgsTest 코드에서 학습했을 때는 args() 표현식 안에 String, Object, java.io.Serializable 등등과 같은 타입을 적어줘서, 매개변수의 타입을 필터링했었거든요. 그러면 args는 어떤 타입을 필터링하는 포인트컷인가요? 무엇이든 상관없는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드 Task :test FAILED
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]gradlew.bat 는 BUILD SUCCESSFUL 이 떴는데gradlew build 는 아래와 같은 오류가 발생합니다.자바 버전은 20이고, 스프링 버전은 3 입니다. > Task :test FAILEDError: Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMainCaused by: java.lang.ClassNotFoundException: worker.org.gradle.process.internal.worker.GradleWorkerMain
-
미해결더 자바, 코드를 조작하는 다양한 방법
gradle 사용하시는 분 도움
일단 새로운 프로젝트 만들고 premain 추가해주는 것 까진 강의를 그대로 따라하시면 됩니다. manifest plugin 부터 조금 차이가 있어서 거기부터 설명하면, build gradle 에 다음과 같이 추가한다.tasks.named('jar') { manifest { attributes( 'Implementation-Title': project.name, 'Implementation-Version': project.version, 'Premain-Class' : "com.java.magicianAgent.MagicianAgent", 'Can-Redefine-Classes' : true, 'Can-Retransform-Classes' : true) } }터미널에서 다음 명령어를 통해 build 한다./gradlew clean buildbuild.libs file 안에 있는 jar file 을 확인한다. (옵션)강의에서와 마찬가지로 zip file 로 변경하면 확인가능합니다. 저같은 경우 SNAPSHOT.jar 과 SNAPSHOT-plain.jar 이렇게 2개가 생겼는데 SNAPSHOT.jar 은 제가 spring boot 로 실행서 그런지 관련 설정들이 보이고 SNAPSHOT-plain.jar 이 맞는거 같더라구요. jar file 의 절대 경로를 복사해 VM option 에 추가한다. 여기서부터는 다시 강의와 같습니다. VM option 이 안보이시면 오른쪽에 Modify options 클릭하면 add vm options 라고 보이실 겁니다. 이상한거나 궁금한거 있으시면 말씀해주세요. gradle 을 쓰시는 모든 분들도 마술을 성공시킵시다 하하
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
토이 프로젝트 github 주소 공유 부탁드려요!
따라해보려고 합니다! 토이프로젝트 소스 공유 부탁드려요!
-
미해결토비의 스프링 부트 - 이해와 원리
@Conditional 학습테스트 강의 중 오타 질문
@Test void conditional() { new ApplicationContextRunner().withUserConfiguration(Config.class) .run(context -> { assertThat(context).hasSingleBean(MyBean.class); assertThat(context).hasSingleBean(Config.class); }); new ApplicationContextRunner().withUserConfiguration(Config2.class) .run(context -> { assertThat(context).doesNotHaveBean(MyBean.class); assertThat(context).doesNotHaveBean(Config2.class); }); } 토비님이 작성해주신 코드에서 Config2 를 테스트 할때 Config2의 빈의 생성유무를 체크를 해야할 거 같은데 맞을까요?26번째줄입니다.맥락상 FalseCondition인 Config2를 ApplicationContext에 빈이 생성되어 있는지 생성 되지 않았는지에 대한 맥락에서 테스트의 목적은 생성되지 않아야 함으로 assertThat(context).doesNotHaveBean(Config2.class);이게 맞을거 같습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의 9:37 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]9:37에서 @RequestBody를 생략하는 경우 @ModelAttribute가 자동으로 입력이 되지만 setAge함수가 없기 때문에 age 설정이 되지 않는다고 설명해주셨습니다.근데 Lombok의 @Data를 설정하면 getter와 setter를 자동으로 만들어 주는 것으로 배웠는데 왜 호출이 되지 않는 건가요??
-
해결됨스프링 핵심 원리 - 기본편
Order 인터페이스
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]왜 Order는 인터페이스 먼저 만들지 않고 진행하셨나요?