묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
new FileWriter() 랑 new File() 차이점이 뭔가요?
앞에 파일 다루기 강의에서는 파일 생성할때new File() 로 파일을 만들었는데이번 강의에서는 new FileWriter() 로 파일을 만드는 이유가 뭘까요?
-
미해결스프링 시큐리티
스프링부트 버전 문의 드립니다.
현재 스프링부트 2.7.10 사용하고 있는데 강의 소스와 많이 틀려서 고생하고 있네요 ㅜ버전을 다운그레이드 해서 공부할려고 하는데 그게 좋을까요? 실무에서 아직 2.7.10 이하 버전을 많이 사용한다면 버전을 낮추고 싶네요..강사님 의견은 어떠신가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
delete 쿼리 수
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. cascade = CascadeType.REMOVE, orphanRemoval = true 둘 다N + 1로 삭제 쿼리가 나가는거 같은데 크게 문제될 일 없나요?? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트할때 이해한게 맞는지, 또 이 문장이 왜 들어가있는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]1-1)MemberServiceIntegrationTest 파일에서@Autowired MemberService "memberService"@Autowired MemberRepository "memberRepository"임의로 제가 "" 를 표시했는데,위 내용의 의미가 앱이 실행될때 @configuration 에서 @Bean 된 MemberService,MemberRepository 메서드를 찾아서 호출한다음 반환값을 제가 임의로 ""표시한 memberService, memberRepository 로 넣어주는걸로 이해했는데 맞는지 궁금합니다!1-2)test파일에서 @Autowired MemberService memberService 이 문장이 실행되면 스프링 빈에서 땡겨온 (db에 연결된)멤버 서비스 객체를 이용할 수 있다고 이해했는데요, @Autowired MemberRepository memberRepository 이 문장은 왜 들어가있는지 이해가 안갑니다. 필요한 문장인가요?? 2). 테스트라는게 저는 처음에 다른 특별한 무언가로 처음부터 규격이 정해져 있고 뭐 그런건줄 알았는데, 그냥 test 폴더에 test 객체를 생성해서 돌리는거같다고 생각되서요. 어렵게 생각 안해도 되겠죠?? 3) 강의 듣다보니 Jdbc 쪽은 이해가 잘 안되는데 가볍게 받아드리고 JPA 부터 신경써도 되겠죠?다소 긴 질문 죄송합니다 ㅠㅠ
-
미해결실전! Querydsl
generated 파일
Q 가 생성이 안되네요 제 gradle 소스 코드입니다.plugins { id 'java' id 'org.springframework.boot' version '2.7.9' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' // queryDSL 설정 implementation "com.querydsl:querydsl-jpa" implementation "com.querydsl:querydsl-core" implementation "com.querydsl:querydsl-collections" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정 annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } // Querydsl 설정부 def generated = 'src/main/generated' // querydsl QClass 파일 생성 위치를 지정 tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } // java source set 에 querydsl QClass 위치 추가 sourceSets { main.java.srcDirs += [ generated ] } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file(generated) }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig에서 자동 주입을 할 수 없습니다. 'EntityManager' 타입의 bean을 찾을 수 없습니다. 의 문제
위와 같은 오류가 있습니다. 이 상태에서 통합테스트 회원가입()을 실행하면이렇게 실패합니다. 해결 방법을 잘 모르겠어서 질문드립니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
쓰레드 클래스 질문이요
앞에 Thread강의에서는 객체생성하고 start() 함수만 써서 실행했는데이번 강의는 cleanRunnable.start() 안쓰고Thread 객체를 추가로 사용하셨는데 이 쓰레드 객체가 왜 쓰였는지 궁금합니다
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Quiz 4에서 강사님이 작성하신 if문과 달리 case문으로 작성해보았는데 피드백 부탁드립니다.
package chap_04; public class _Quiz_04 { public static void main(String[] args) { int car = 3; int fee = 0; // 시간당 4000원이므로 초기값을 0으로 저장하자 int max = 30000; // 케이스가 명확하므로 switch문을 작성하는게 맞는데, 시간을 어떻게 반복? switch (car) { case 1: // 일반 차량의 경우 for (int i = 1; i <= 5; i++) { fee += 4000; // 팩토리얼 계산을 때려버림.... } System.out.println("주차 요금은 " + fee + " 원입니다."); break; case 2: for (int i = 1; i <= 5; i++) { fee += 4000; } fee /= 2; // 최종 요금에서 50% 할인 System.out.println("주차 요금은 " + fee + " 원입니다."); break; case 3: for (int i = 1; i <= 10; i++) { fee += 4000; if(fee > max) // fee가 최대 요금을 넘어가면 fee = max; // 최대 요금을 fee로 고정 } fee /= 2; // 최종 요금에서 50% 할인 System.out.println("주차 요금은 " + fee + " 원입니다."); } } } // 일반 차량일 경우 // 경차일 경우 // 장애인 차량일 경우저같은 경우, 케이스가 일반 차량, 경차, 장애인 차량으로 명확해서 case문으로 작성하였고, 시간당 4000원이라고 하여서 fee = 0 으로 먼저 초기화한 다음, 시간을 for문으로 돌려서 계산을 하였는데요. 이렇게 switch-case문 안에 for문을 작성해도 괜찮나요??
-
미해결실전! 스프링 데이터 JPA
Unknown entity 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]선생님 안녕하세요 현재 스프링 데이터 JPA와 DB 설정, 동작확인 15:43 부분 강의 수강중입니다.코딩은 다음과 같이 진행 하였는데요 Unknown entity 오류가 나오고 있습니다 ㅠㅠ 어떻게 처리하면 될까요 ? ㅠnknown entity: com.sun.proxy.$Proxy100; nested exception is java.lang.IllegalArgumentException: Unknown entity: com.sun.proxy.$Proxy100org.springframework.dao.InvalidDataAccessApiUsageException: Unknown entity: com.sun.proxy.$Proxy100; nested exception is java.lang.IllegalArgumentException: Unknown entity: com.sun.proxy.$Proxy100
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hellospring 처음 시작 실행 오류
No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.4 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6.1' but: java 버전 8을 깔아서 그런 건지 잘 모르겠지만 실행이 안 되네요 ㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 중에 등장한 구글 확장프로그램 이름 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]View 환경설정 강의에서 3분 45초에 공식 문서를 볼 때 오른쪽 위에 등장하는 구글 확장 프로그램 이름이 어떻게 되나요?
-
해결됨
Querydsl을 멀티쓰레드 환경에서 사용할 때 발생하는 문제에 대해
안녕하세요. Querydsl강의를 수강하고 혼자 개발을 진행하다가 다음과 같은 문제가 발생해서 질문을 남기게 되었습니다. 제 상황은 A엔티티와 B엔티티를 가지고 있고, 둘은 OneToOne관계로 B가 연관관계의 주인인 상황입니다. Repository에는 A와 B의 데이터를 호출하는 Querydsl코드가 각각 존재하며, 이를 Service Layer에서 그대로 Return값으로 받고 있습니다.이들을 멀티쓰레드 환경에서 호출했을 때 B데이터를 호출하는 코드에 Connection leak이 존재한다는 에러가 발생하는 상황입니다. (.yml파일에서 hikari의 leak-detection-threshold을 설정한 상황입니다.)Domain@NoArgsConstructor @AllArgsConstructor @Entity public class A { @Id private Long id; @OneToOne(mappedBy = "a") private B b; private int var1; }@NoArgsConstructor @AllArgsConstructor @Entity public class B { @Id private Long id; @OneToOne @JoinColumn(name = "b_id") private A a; private int var1; }Repositorypublic interface Repository extends JpaRepository<A,Long>, RepositoryCustom { }public interface RepositoryCustom { Dto queryOne(); Dto queryTwo(); Dto queryThree(); }public class RepositoryCustomImpl implements RepositoryCustom { private final JPAQueryFactory queryFactory; public RepositoryCustomImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override public Dto queryOne() { return queryFactory .select(Projections.constructor(Dto.class, a.id, a.var1 )) .from(a) .fetchFirst(); } @Override public Dto queryTwo(){ return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } @Override public Dto queryThree(){ System.out.println("a.getClass() = " + a.getClass()); System.out.println("b.getClass() = " + b.getClass()); return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } }queryThree는 queryTwo와 Querydsl코드는 동일합니다. 다만 쿼리를 실행하기 전에 Qtype의 a와 b를 순서대로 한번 호출했다는 부분이 queryTwo와 다릅니다.DTOpublic class Dto { private Long id; private int var1; } Service@org.springframework.stereotype.Service @RequiredArgsConstructor public class Service { private final Repository repo; @Transactional public Dto logicOne(){ return repo.queryOne(); } @Transactional public Dto logicTwo(){ return repo.queryTwo(); } @Transactional public Dto logicThree(){ return repo.queryThree(); } }테스트코드@SpringBootTest @Slf4j public class SimpleTest { @Autowired Service service; @Test void connection_leak_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicTwo(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test void leak_not_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test @Transactional void connection_leak_detected_otherCase(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } private void sleep(int millis){ try{ Thread.sleep(millis); } catch (InterruptedException e){ e.printStackTrace(); } } }connection_leak_detected를 테스트하면 Connection leak이 발생했다는 에러가 발생합니다.leak_not_detected를 테스트하면 Connection leak 로그가 출력되지 않습니다.leak_not_detected와 동일한 테스트코드에 Transactional을 선언한 connection_leak_detected_otherCase은 Connection leak 로그가 출력됩니다.어떤 이유로 이러한 Connection leak이 발생하는지, 그리고 어떻게하면 이러한 문제를 해결할 수 있는지 궁금합니다..!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 출력시간 개수
6분20초 경 강사님께서는 START가 3개 나오는데 전 1개만 나옵니다. 상관없는걸까요??
-
미해결실전! Querydsl
querydsl에서 oneToMany 관계인데 Many쪽 검색이 필요할 때 어떻게 해야하나요?
예를 들어 Order와 OrderItem이 있는데 Order의 검색을 동적쿼리로 검색해야해서 querydsl을 사용하고 있는 상황입니다. 그 중 검색조건이 OrderItem의 이름으로 검색해서 Order의 목록을 가져와야하는데 Order와 OrderItem을 조인하고 where절에 OrderItem의 이름으로 조회하는 방법 말고는 없을까요? 그럴 경우 distinct를 쓰거나 따로 중복 제거 로직을 넣어야해서ㅜ 혹시 다른 방법이 있나 문의드립니다.이런 경우에는 양방향 연관관계를 맺어주고 해결해도 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 회원정보 저장 오류
회원가입과 돌아오는 페이지는 정상으로 작동은 하나 h2에 저장 되지도 않고 강의 내용처럼 insert 문이 나오지 않습니다https://drive.google.com/file/d/1Mnh-hxiK1AQlaSlFOuuQrzRgAT0lEI9t/view?usp=sharing
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findByName() 테스트 시 NoSuchElementException 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요 강의 잘 보고 있습니다 ㅎㅎ다름이 아니라 저는 getter와 setter를 따로 작성하지 않고 Lombok을 이용해서 getter, builder 어노테이션으로 getter와 setter를 생성했는데요save() 테스트는 정상적으로 통과하지만findByNmae() 테스트 시에는 아래와 같은 오류가 발생합니다. 그리고 아래 처럼 get() 메서드에 노란 점선이 표시되며 옆에 이상한 문구가 뜨는데 lombok을 사용해서 발생한 오류일까요 ??스프링 부트 버전은 강의와 똑같이 2.3.1 버전을 사용중이며각 클래스별 코드는 아래와 같습니다.Memberpackage com.example.hellospring.domain; import lombok.Builder; import lombok.Getter; @Getter public class Member { private Long id; private String name; @Builder public Member(Long id, String name) { this.id = id; this.name = name; } } MemberRespositorypackage com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { // 회원 저장 Member save(Member member); // id로 회원 찾기 Optional<Member> findById(Long id); // Optional 타입은 값이 Null일 때 null 반환 // name으로 이름 찾기 Optional<Member> findByName(String name); // 전체 찾기 List<Member> findAll(); } MemoryMemberRepositorypackage com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { Member.builder() .id(++sequence) .build(); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
/hello 404에러
경로도 바탕화면에 두었다가 영어로 된 파일로 옮겼다가고 해보고, 이것저것 건드려 봤는데 404에러가 사라지지 않습니다. https://drive.google.com/file/d/1Ll-596n9jFVOQtlAAJpPz4_CsVO-dmuO/view?usp=sharing
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 데이터처리
13분 8초 질문입니다!데이터를 가져올 때, Album과 Item에 있는 것을 join해서 가져와야 된다고 하셨는데Album 이 Item을 상속 받은건데 Item까지 접촉해서 데이터를 가져와야 하는 이유가 뭘까요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
통합테스트로 회원가입 실행 시 에러
16:45분경에 통합테스트로 회원가입을 실행하는데 에러가 발생합니다. 해결방법이 있을까요?
-
미해결스프링 시큐리티
루트에서 로그인 성공후 에러 메시지가 보입니다.
7) 로그아웃 및 인증에 따른 화면 보안 처리 강의 입니다. http://localhost:8080URL 이 위와 같은 상태에서 로그인 페이지로 이동해서 로그인을 하면 아래와 같은 메시지가 나타납니다.http://localhost:8080/mypage 경로 상태에서 로그인 페이지로 이동해서 로그인하면 정상적으로 오류 메시지 없이 잘 되는데 서브 경로가 없는 상태에서 로그인을 하니까 문제가 있어요세션에는 등록이 되고 로그인처리는 되었는데 마지막화면에서 오류메시지만 떠요.답변 부탁드릴게요 로그인 이후 URL : http://localhost:8080/error{"timestamp":"2023-03-10T01:58:06.693+00:00","status":999,"error":"None","message":"No message available"}