묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
p6spy 사용시 log 두번 출력
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]p6Spy를 사용하는 중 로그가 두번 찍히는 경우가 생겼습니다.현재 mariaDB를 사용중이며,jpa: properties: hibernate: show-sql: 'false' format_sql: 'true'설정은 이렇게 해줬습니다. 혹시 왜 두번찍히는 건지 알 수 있을까?gradle에 p6spy 추가해주었습니다.implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
-
미해결Practical Testing: 실용적인 테스트 가이드
안녕하세요 강사님 컨트롤러 테스트 질문입니다!
좋은 강의를 찍어주셔서 너무 감사합니다.덕분에 테스트에 접근하는 방법을 터득할 수 있었습니다!컨트롤러 테스트는 Validation 역할이 핵심이라고 이해했는데,@Valid 어노테이션을 부착한 DTO 검증만 강의를 통해 배웠습니다. 궁금한게 있습니다.시큐리티를 적용했을 때 저는 컨트롤러 메서드 매개변수에 Authentication을 이용해서 SecurityContext 값을 사용하는데,이러한 SecurityContext도 검증을 해야 되는지,PathVariable에 대한 검증도 필요한가요?Param값 검증도 필요한지 궁금합니다.페이징했을 때 페이징 결과도 검증을 해야 될까요?Validation 영역이 아니라고 판단되어지는데, 강사님의 의견이 궁금합니다! 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 select 문이 나가는 이유.
@Test public void 회원가입(){ Member member = new Member(); member.setName("memberA"); Long savedMemberId = memberService.join(member); Member findMember = memberService.findOne(savedMemberId); assertThat(member).isEqualTo(findMember); }근데제가 em.find() 동작이 먼저 영속성 컨텍스트에서 찾아보고 있으면 그걸 return.없으면 DB에 쿼리 날려서 가져온 다음에 return.(쓰기지연은 잠깐 생각 안하고)로 알고 있는데, 그렇다면 코드상멤버 생성하고,join해서 쿼리가 쌓이고,그 다음 findOne해서 가져오는데, 저게 결국은 em.find() 잖아요. 그러면 이미 영속성 컨텍스트에 id가 같은 게 있기 때문에 그걸 반환하잖아요. 그래야 할 것 같은데 select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.name=?이렇게 로그로 나가요.그래서 아, isEqualTo니까 혹시 막 이름같은 거 참조해서 가져오는 건가? 했는데isSameAs 해봐도 똑같아요.왜 하필 name으로 조회하는지도 모르겠어요.em.find()쪽이 실행된 것은 분명해요.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
named lock vs 비관적 락
좋은 강의 너무 감사합니다.강의를 보며 궁금한 점이 생겨서 질문 드립니다. named lock을 통해 동시성 문제를 해결하는 예시를 보았을 때, 비관적 락과 무엇이 다른 것인지 큰 차이를 느끼지 못했습니다.named lock이 비관적 락에 비해 가지는 장단점에 비해 찾아보니, timeout 설정이 좀 더 간편하다는 내용 말고는 유의미한 차이를 찾지 못했습니다.(그러나 비관적 락 + queryhint 를 사용하면 비관적 락 사용 시에도 딱히 어려움 없이 timeout을 설정할 수 있었습니다.) 혹시 named lock이 비관적 락에 비해 지니는 장단점과, 어떤 경우에 비관적 락 대신 Named lock을 통해 분산락을 구현하시는지 궁금하여 질문드립니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
querydsl을 사용할 때 java의 Q클래스와 kotlin의 Q클래스 함께사용 가능한가요??
기존에 진행 중이던 프로젝트에서 신규로 개발할 기능들은 kotlin으로 개발하려합니다. 강사님 강의에서 나온 프로젝트의 build.gradle 파일을 참고해서 설정을 하니 java의 Q클래스와 kotlin의 Q클래스가 둘다 생겨버려서 중복이라는 에러가 발생하더군요.... 혹시 java,kotlin 2개를 동시에 Q클래스를 사용할 수 있는 방법은 없을까요??아니면 java의 Q클래스만 생성해서 kotlin에서 java에서 생성한 Q클래스를 사용하면 될까요??그런데 이 방법으로 시도해보려니 설정이 꼬여서 그런지 자꾸 Q클래스는 생성읻되었는데 경로를 못찾는다고 에러가 발생하더라고요ㅠㅠ 좋은 방법있으면 알려주시면 감사하겠습니다. plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' id 'org.jetbrains.kotlin.jvm' version '1.6.21' id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21' id 'org.jetbrains.kotlin.plugin.spring' version '1.6.21' id 'org.jetbrains.kotlin.kapt' version '1.6.21' } group = 'com.maturi' version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' configurations { compileOnly { extendsFrom annotationProcessor } developmentOnly runtimeClasspath { extendsFrom developmentOnly } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' developmentOnly("org.springframework.boot:spring-boot-devtools") compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.0' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.modelmapper:modelmapper:2.4.2' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'com.querydsl:querydsl-jpa' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' implementation group: 'com.google.firebase', name: 'firebase-admin', version: '8.1.0' implementation 'org.springframework.social:spring-social-facebook:2.0.3.RELEASE' implementation 'org.apache.httpcomponents:httpclient:4.5.2' implementation 'com.googlecode.json-simple:json-simple:1.1.1' kapt("com.querydsl:querydsl-apt:5.0.0:jpa") kapt("org.springframework.boot:spring-boot-configuration-processor") } test { exclude { '/**/*' } useJUnitPlatform() } compileKotlin { kotlinOptions { jvmTarget = "8" } } compileTestKotlin { kotlinOptions { jvmTarget = "8" } } def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } clean { delete file('src/main/generated') }
-
해결됨[초급] 맛보자! 코틀린과 스프링으로 API 호출하기
build.gradle.kts 오류가 발생해요
쭉 수업대로 작업해보고 학교 프로젝트 수업에 적용 시켜보려고 다시 켰는데build.gradle.kts파일이 오류로 나오고 코드를 열면 상단에 코드 분석을 사용할 수 없습니다(스크립트 구성이 로드되지 않음.)이라는 오류가 나옵니다 스크립트 구성 로드를 누르거나 코끼리모양을 누르거나 gradle을 다시 빌드하면 정상인듯한데 문제는 다른 팀원들도 동일한 오류에 저처럼 해결이 안돼서 혹시 문제를 해결할 방법이 있을까 싶어 여쭤봅니다
-
미해결스프링 핵심 원리 - 고급편
LogTrace의 Bean을 메인 클래스에서 생성한 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? [질문 내용]LogTrace의 @Bean 어노테이션으로 빈 생성할 때 메인 클래스에서 생성한 이유가 따로 있으신가요??Config 클래스에서 하지 않고 따로 메인 클래스에서 하신 이유가 있으신가 해서요@Bean 어노테이션은 다른 클래스에서도 사용이 가능한지도 궁금합니다
-
미해결스프링 부트 - 핵심 원리와 활용
포트 강제 종료
서블릿 초기화를 실행하면 아래와 같은 오류가 발생해 8005포트를 종료 후 다시 실행해도 똑같은 오류가 발생합니다. 혹시 몰라 8080포트도 강제종료하려고 강의에서 알려주신대로 명령어를 입력하면 위와 같이 떠서 10028을 종료해준 뒤에 다시 실행해도 같은 오류가 발생합니다. 이 문제는 어떻게 해결할 수 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방관계 편의 메소드 이름
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]set~~~ 말고 다른 이름이 좋지 않나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
SpringPhysicalNamingStrategy 바뀐건가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]찾아도 안나오는데 CamelCaseToUnderscoresNamingStrategy 이걸로 바뀐 것 같네요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ReturnValueHandler와 Http 메세지 컨버터 관련해 질문있어요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]ReturnValueHandler는 ModelAndView 객체를 생성 후 반환값이 다양해도 반환값에 따라 알맞게 뷰 이름을 ModelAndView객체에 넣어주는 녀석인가요그리고 ReturnValueHandler가 작동할 때 ModelAndView객체를 만든 후 응답 메세지 바디에 Accept 헤더와 맞는 형식으로 내용을 넣으려고 메세지 컨버터가 작동하는 건가요
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
isEqualTo 관련 Java 동등성/동일성 판단
[질문 템플릿]1. 예 2. 예 3. 예[질문 내용]Java에서 동일성(identity)와 동등성(equality) 개념에 관련하여 강사님께서 언급하신 내용에 대해 올바르게 이해하고 있는지 질문하려고 합니다. == 의 경우 두 객체가 같은지(주소값이 동일한지) 즉, 동일한지를 판단하기 위해 사용하고,equals() 의 경우 두 객체가 같은 정보를 가지는지 즉, 동등한지를 판단하기 위해 사용합니다. // findMember Member findMember = repository.findById(member.getMemberId()); // findById 메서드 일부 발췌 Member member = new Member(); member.setMemberId(rs.getString("member_id")); member.setMoney(rs.getInt("money")); return member; // member Member member = new Member("memberV0", 10_000); findMember와 member의 경우 애초에 같은 인스턴스가 아니기 때문에 동일성 판단 시 false인 것은 당연합니다.-> 서로 다른 곳에서 new 연산자를 통해 인스턴스를 생성했으므로, 주소값이 같을 수가 없음. 동등성 판단을 위해 isEqualTo 메서드를 이용하여 판단하는데, 원래대로라면 equals() 메서드를 overriding 하여 판단해야하지만 @Data(엄밀히 말하면 @EqualsAndHashCode) 가 equals()메서드를 overriding하기 때문에 동등성 판단이 제대로 이루어져서 true 로 제대로 판단하는 것으로 이해했습니다.-> equals()메서드를 overriding 해야하는 이유는 Object 클래스의 equals()메서드를 까보면public boolean equals(Object obj) { return (this == obj); }이렇게 동일성 판단을 하는 것으로 구현되어 있기 때문에 동등성 판단을 하도록 overriding 해야 합니다. 제가 알고 있는 지식을 통해서인스턴스 간 equals()와 ==의 결과값이 다른 것을 보여주신 이유에 대해 정리한 건데, 틀리거나 빠진 내용이 있을까 싶어서 질문글 작성하게 되었습니다. 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
@ComponentScan의 순서와 @오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Appconfig파일과 AutoAppConfig 파일 2개가 있을때CoreApplication을 실행하면main 메서드가 실행됨: SpringApplication.run(CoreApplication.class, args);가 호출되어 스프링 애플리케이션이 시작됩니다.@SpringBootApplication에서 @ComponentScan이 실행됨: @SpringBootApplication에는 내부적으로 @ComponentScan이 포함되어 있습니다. 이 때, 기본 패키지를 기준으로 @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스들을 스캔하고 빈으로 등록합니다.AutoAppConfig에는 @ComponentScan+ filter가 있으므로 AppConfig 보다 AutoAppConfig의 설정 정보를 먼저 적용함AutoAppConfig의 @ComponentScan에는 excludeFilters가 있어서 AppConfig의 @Configuration과 @Bean들은 등록되지 않음이렇게 이해를 하였는데첫번째로 이순서가 맞는것인지 궁금하고,두번째는 테스트 환경에서 package hello.core; //import 생략 @SpringBootTest class CoreApplicationTests { @Test public void contextLoads() { } } 이 테스트에서 오류가 발생하였는데오류내용 : Parameter 0 of constructor in hello.core.Order.OrderServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [hello\core\member\MemoryMemberRepository.class - MemberRepository: defined by method 'MemberRepository' in class path resource [hello/core/AppConfig.class 오류내용은 Type에 따른 빈이 2개가 있다는것이었습니다.memberRepository, memoryMemberRepository같은 식으로제가 AppConfig파일에서 @Bean처리를 한 memberRepository와AutoAppConfig파일에서 @Component처리를한 구현체 memoryMemberRepository 또한 빈으로 등록이 되어있었습니다.그래서 AppConfig의 @Bean을 모두 주석처리 해주었더니 오류는 없어졌습니다.만약 제가 말씀드린 순서가 맞다면 filter처리된 Appconfig파일의 @configuration의 @bean들은 등록되지 않아야하는데 왜 filter처리가 안된것인지 궁금합니다. 아래는 import부분은 생략한autoappconfig와 appconfig파일입니다.기본패키지도 같게하여서 따로 문제는 없는것같지만일단 올려보았습니다.autoappconfigpackage hello.core; @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } appconfig (빈 주석처리 이후 오류 없어짐)package hello.core; @Configuration public class AppConfig { //@Bean public MemberService memberService(){ return new MemberServiceImpl(MemberRepository()); } //@Bean public MemberRepository MemberRepository() { return new MemoryMemberRepository(); } //@Bean public OrderService orderService() { return new OrderServiceImpl(MemberRepository(), DiscountPolicy()); } //@Bean public DiscountPolicy DiscountPolicy() { return new RateDiscountPolicy(); } }
-
미해결스프링 핵심 원리 - 기본편
findAllBean() , java.lang.NullPointerException 오류가 납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: )질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.core.discount.DiscountPolicy.discount(hello.core.member.Member, int)" because "discountPolicy" is null 이렇게 오류가 뜨는데 이유를 모르겠습니다..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[정보] 카테고리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]저도 뭐 저런 거 할 때 그냥 1depth 카테고리 테이블, 2depth 카테고리 테이블 이렇게 있는 거 아니야? 이렇게 생각했는데,요런 식으로 그러니까,아마도 내 depth, 부모 id, 그 정도로 해서 가져오는 듯 싶네요.대충 내 depth, 부모_id, 카테고리네임 이 정도로 해서한 카테고리 테이블에 다 때려넣는 식 인거 같아요. 그러니까 예를 들어 id를 통해 카테고리를 가져오게 되면,거기에 부모_id, 또 나의 자식들은 내 id를 가지고 있을 테니parent도 가져올 수 있고, child 들도 그냥 cc.parent_id = c.category_id 해서 가져올 수 있는..
-
미해결Practical Testing: 실용적인 테스트 가이드
Request Dto에서 생성자 관련...
강의에서 RequestDto를 Builder 패턴으로 생성자를 만들어주셨는데 그렇게 생성하신 이유가 있을까요?? 코드에서 확인해보면 이 생성자를 사용하지 않는걸로 확인이 되는데 .. 제가 추측하기로는 그 이후에 확장성을 위해서?,,, 라고 추측을 해봤는데 다른 이유가 있을까요????
-
미해결토비의 스프링 부트 - 이해와 원리
imports확장자 인식이 안됩니다. ㅜㅜ
이거 저만 그럴까요..? ㅜㅜ 하위 디렉토리도 맞습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
이번 예제에서 Integer말고 int로 엔티티의 필드가 작성된 이유가 있을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Integer가 객체라 null이나 그런 것에서 비교적 안전하다고 배웠었던거 같은데.. int로 한 이유가 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
mvc members jstl
방법을 찾아봐서 다 해보고 jstl도 다 바꿔봐도 인식이안되는것같습니다 코드에는 문제가없는데 뭐가 문제일까요 ㅠㅠ
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
7강 수강 중 똑같이 따라했는데 경고가 떠요
어떻게하면 위 경고문구를 없앨 수 있는 지 궁금합니다.인텔리제이 2023버전을 쓰는 것도 문제가 될까요?