묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
p6spy 적용 시 gradle 프로젝트가 빌드되지 않습니다.
java 버전17.0.9이고 springboot 버전은 3.2.10-SNAPSHOT 입니다. implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' build.gradle 파일에 로그 관련 부분 추가하니 아래와 같이 오류가 나는데 이유를 모르겠습니다.Caused by: java.lang.NoClassDefFoundError: org/apache/maven/settings/building/SettingsBuildingRequest at org.gradle.api.internal.artifacts.DependencyManagementBuildScopeServices.createMavenSettingsProvider(DependencyManagementBuildScopeServices.java:289) 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 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125) at org.gradle.internal.service.ReflectionBasedServiceMethod.invoke(ReflectionBasedServiceMethod.java:35) at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:916)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
단순 조회용 엔티티
안녕하세요! 프로젝트를 진행하는 도중 영한님 강의가 생각 나 궁금한 게 생겨 문의납깁니다. 테이블의 모든 값들을 전체 조회하며, 거의 변하지 않는 데이터를 단순 조회하는 용도로 쓸 때도 DTO를 통해 조회하는 게 좋을까요? (예시: 프로젝트 실행 시 csv파일 또는 엑셀파일을 통해 DB에 자동 저장되게 만든 도시 데이터 등을 확인하는 단순 get List, 여행•숙박 사이트에 기본으로 저장되어있는 지역 카테고리 등)
-
해결됨김영한의 실전 자바 - 중급 1편
익명 클래스 질문(만든 이유가 이것인지요?)
안녕하세요. 궁금중이 생겨서 질문을 남깁니다.전에 y2gcoder님이 저에게 답변 해준 ‘익명 클래스를 어떻게 만드는지, 왜 저렇게 되는지에 대해서는 이해했다는 조건이 필요할 것 같습니다’ 이글을 읽으면서 생각하다가 이런생각이 들었습니다.익명클래스는 인터페이스 및 상속 받은 것만 쓸수 있다고 하였고, 익명클래스는 메서드 안의 내용을 통채로 넣어 버린것을 알수 있었습니다.그러면서 들은 생각이 상속이나 임플리먼츠 를 할때 메서드 고작 하나(1개) 밖에 없으니, 새로운 클래스를 만들기 보다는, 익명클래스를 만들어서 용량도 줄이고 유동성 있게 만들어보자 라는 생각이 들더군요.영한님이 보여주신Run()이라는 메서드를 보면서 말이죠.혹시 저의 생각이 맞는지 알고 싶습니다.틀리다면 틀리다고 말씀해 주시면 감사하겠습니다.답변 부탁드립니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
close()메소드
ExecutorService에서 close()메소드가 없다고 나오는데 close() 대신 shutdown()을 사용하는 건가요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 문제 해결방안
@Transactional public void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); }현재 강의 코드인데, 락을 사용해서 해결을 할 수도 있지만, 그냥 아래와 같이 JPQL을 사용해서 해결할 수 있지 않나요?@Transactional public void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); if (stock.getQuantity - quantity < 0) { throw new RuntimeException("재고는 0개 미만이 될 수 없습니다."); } stockRepository.decrease(id, quantity); }@Modifying @Query("UPDATE Stock s SET s.quantity = s.quantity - :quantity WHERE s.id = :id") public void decrease(@Param("id") Long id, @Param("quantity") Long quantity);락을 사용하는 것보다 이렇게 하는게 비용이 더 적을 것 같은데, 이렇게 하지 않는 이유를 알 수 있을까요??
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Datasource 분리 의미
커넥션 문제가 발생할 수 있어 네임드락을 사용하는 경우 각 트랜잭션마다 Datasource를 분리해주는 것이 좋다고 하셨는데,Datasource를 분리해준다는 것은 서로 다른 DB를 사용해야 하는 것인가요?
-
미해결스프링 시큐리티 OAuth2
비대칭키 내용 중 궁금한게 있습니다.
데이터 보안 측면에서 송신자 공개키로 암호화 -> 송신자 개인키로 복호화를 한다고 적혀있는데요.수신자가 송신자의 개인키를 가지고 있다는게 보안적으로 문제가 되는게 아닌가 싶습니다. 수신자 공개키로 암호화 -> 수신자 개인키로 복호화의 오타인 것인지, 아니라면 어떻게 보안적으로 괜찮은건지 궁금합니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
파이썬에서 계행되는 조건이 무엇인가요?
이전 c나 java의 경우엔 \n ln등 표기 되는 문구가 있었습니다. 파이썬의 경우엔 print가 끝나면 자동으로 계행이 되는건지,아니면 다른 조건이 있는건지 알고싶습니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
개발환경 구축
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]벤더에서 Orcale OpenJDK 21버전이 안뜨는데 어떤걸로 설정해야되나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
혹시 현업에서도 예외 테스트 시, Assertions.assertThrows 를 많이 사용하나요?
@Test void 상품주문_재고수량초과() throws Exception { //given Member member = createMember(); Item item = createBook("시골 JPA", 10000, 10); int orderCount = 11; //when // orderService.order(member.getId(), item.getId(), orderCount); //then Assertions.assertThrows(NotEnoughStockException.class, () -> orderService.order(member.getId(), item.getId(), orderCount),"재고 수량 부족 예외가 발생해야 한다."); }Assertions.assertThrows 사용 시 파라미터 자체에 로직을 넣어줘야 해서, JUnit4 의 expected 옵션과 다르게 테스트의 when 항목을 적지 않아도 되는 상황이 발생하는 것 같아서요. 현업에서도 이 방식을 주로 사용하시나요?(+ 추가 질문)junit 과 assertj.core 라이브러리를 함께 쓰는 경우엔 이렇게 한 쪽을 지저분하게 쓸 수 밖엔 없나요? (isEqualTo와 assertThrows를 하나의 테스트 클래스에서 같이 쓰는 경우) @Test void 주문취소() throws Exception { //given Member member = createMember(); Book item = createBook("시골 JPA", 10000, 10); int orderCount = 2; Long orderId = orderService.order(member.getId(), item.getId(), orderCount); //when orderService.cancelOrder(orderId); //then Order getOrder = orderRepository.findOne(orderId); org.assertj.core.api.Assertions.assertThat(getOrder.getStatus()).isEqualTo(OrderStatus.CANCEL); org.assertj.core.api.Assertions.assertThat(item.getStockQuantity()).isEqualTo(10); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 테스트 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 다음과 같은 에러가 발생합니다 이유가 궁금합니다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
한글 커서 한 칸 앞으로 밀려서 쳐짐
인텔리제이 에디터에 영어를 칠 때는 괜찮은데 한글만 커서가 한 칸 앞으로 당겨져서 보이네요 ㅠㅠ진행하는데 큰 문제가 없긴 한데 너무 신경쓰여요😢 구글링이랑 스택오버플로우에 찾아봤는데 해결방법을 모르겠는데 혹시 같은 이슈가 있으신분 있으실까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]JDK은 21로 Gradle은 8.5로 맞췄는데요 gradlew build하면 BUILD FAILED가 뜨지만 localhost:8080은 잘작동합니다. 파일경로에는 한글포함안되어있고 gradlew clean build해도 동일한 오류가 발생합니다. 해당 오류가 왜 발생하는지 그냥 진행해도 되는지 궁금합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
로드맵에대한 질문입니다.
안녕하세요 본강의의 로드맵에관해서 질문있습니try catch에 관해서 좀 더 공부해보고싶은데현재 로드맵과 수강내용을 확인해보았는try / catch 구문에 대한 내용을 다루고있는 섹션은 없는것으로 보입니다.강의 과정에 해당부분도 어느정도 다루는지 궁굼합니다.
-
해결됨김영한의 실전 자바 - 중급 2편
Comparator질문입니다
public class SortMain2 { public static void main(String[] args) { Integer[] arr = {3,2,1}; System.out.println(Arrays.toString(arr)); System.out.println("Comparator 비교"); Arrays.sort(arr,new AscComparator()); System.out.println("AscComparator:"+Arrays.toString(arr)); } } public class AscComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { if(o1 > o2){ return 1; } else if (o1 == o2) { return 0; }else return -1; } }SortMain2함수에서 Arrays.sort(arr,new AscComparator()); 부분에서 new AscComapator()로 객체만 생성했는데 어떻게 compare함수까지 호출되서 비교를 할수있는거죠?이해가안갑니다...함수 호출을안해는데..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의영상 5분 7초 EAGER 패치 전략
비슷한 게시글을 봐도 이해가 잘 가지 않아서 재차 질문 드립니다제가 이해하는 상황이 맞는지 고견 부탁드립니다1. fetch = EAGER 쿼리가 두 번 실행이것이 프록시 강의영상에서 말씀하시는 (N+1) 문제인지 궁금합니다첫 번째 쿼리는em.flush(), em.clear() 실행되면 영속성 컨텍스트가 비워지고 이후 jpql 쿼리가 실행되면서 EAGER 패치 전략에 따라 Team도 함께 조회가 됩니다. 두 번째 쿼리는 영속성 컨텍스트가 비워졌고 EAGER 패치 전략으로 조회되어야 합니다. 실제 엔티티로 조회되어야 하는걸로 알고있습니다하지만 특정 시점에서 Team이 프록시로 로드 되었고 이후 프록시가 초기화되면서 다시 데이터베이스에서 조회하면서 발생한 쿼리로 생각이 듭니다
-
미해결토비의 스프링 6 - 이해와 원리
BeanFactory 의존관계
@Configurationpublic class ObjectFactory { @Bean public PaymentService paymentService () { return new PaymentService(exRateProvider()); } @Bean public ExRateProvider exRateProvider() { return new WebApiExRateProvider(); }} 여기서 Bean 어노테이션을 붙이면 paymentService가 호출되지 않아도 paymentService와 exRateProvider의 의존관계가 설정이 되는게 맞나요?? 만약 exRateProvider에만 Bean 어노테이션을 붙이지 않으면 어떻게 되는 건가요??
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
메서드 영역에 있는 상수풀이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 8이후로는 힙 영역에 있다고 하는데 맞나요?? 자료에는 메서드 영역에 있길래 여쭤봅니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
개념이랑 원리는 이해하고
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]실사용은 Executor(멀티스레드), Look(동시성)을 위주로 사용하는 거죠?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락 부모에(facade) 트랜잭션이 없을때
자식 service 메서드에 Propagation.REQUIRES_NEW속성은 그럼 필요 없는건가요? public class NamedLockStockFacade { private final LockRepository lockRepository; private final StockService stockService; public void decrease(Long id, Long quantity) { try { lockRepository.getLock(id.toString()); stockService.decrease(id, quantity); } finally { lockRepository.releaseLock(id.toString()); } } } ----------- @Transactional public void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); }이렇게 자식에만 트랜잭션이 걸려있으면, 커밋이 다되고 lock 풀리는거아니에요? 굳이 부모에 트랜잭션 붙이고 자식트랜잭션에서 NEW하는 이유가 있나요?