자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
package com.group.library_app.controller.calculator; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class CalculatorController { @GetMapping("/add") // GET /add public int addTwoNumbers( @RequestParam int number1, @RequestParam int number2 ) { return number1 + number2; } } Execution failed for task ': com.group .library_app.LibraryAppApplication.main()'. > Process 'command 'C:\Users\Student\.jdks\corretto-17.0.12\bin\java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 1s 3 actionable tasks: 1 executed, 2 up-to-date 제거는 0개의 사용위치라는 문구가 뜨고, ("/add")안에 지구모양의 아이콘을 클릭할 수 있는 메뉴가 안떠요! 0개의 사용 위치를 클릭하면 "프로젝트 파일에서 사용 위치를 찾을 수 없습니다"라는 메세지가 뜹니다. 이게 가장 큰 문제인것 같은데, 아까전에 답변주신 것으로는, 제가 질문을 하기 위해 참고한 사이트를 똑같이 링크를 올려주셨더군요. 해결이 안됩니다. 무엇인가 설정은 안해준걸로 아는데, 어떤것을 설정을 안해주거나 빌드.그래들안에서 디펜던시 같은 곳에 입력을 안해준것이 있거나 할건데, 어떤 것인지 모르겠어요! 강사님 동영상과 똑같이 따라했는데, 오류가 해결이 안됩니다. 직접 이 동영상의 강사님이 해결해주실 수 있나요? 빌드 및 실행과 테스트 실행을 Gradle로 설정하면 오류가 생겨요!의 답변을 참고해서 다시 질문드립니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강사님 200 OK랑 30이 나와야 하는데, 저는 오류가 떠요. 아래 오류는 강사님 코드를 다운받고 실행시킬 처음부터 발생했습니다! 500 Internal Server Error The server has encountered a situation it does not know how to handle. { "timestamp": "2024-09-20T07:29:31.340+00:00", "status": 500, "error": "Internal Server Error", "path": "/add" } 위에거는 인텔리제이 코드가 아니라 포스트맨에서 나오는 오류 코드입니다. 인텔리제이 빌드.그래들을 실행시키면 아래 오류가 뜹니다. 아래 오류는 설정에서 Build and run using과 Run tests using을 인텔리제이 IDEA로 바꿔야 해결되는데, 그러면 포스트맨에서 코드가 안나옵니다. 정답은 30, 200OK가 저는 안나와요! 아래 참고 사이트: https://dev-emmababy.tistory.com/86 https://velog.io/@blackbean99/Java-finished-with-non-zero-exit-value-1-%EC%97%90%EB%9F%AC-%ED%95%B8%EB%93%A4%EB%A7%81 Execution failed for task ': com.group .library_app.LibraryAppApplication.main()'. > Process 'command 'C:\Users\Student\.jdks\corretto-17.0.12\bin\java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 2s 3 actionable tasks: 1 executed, 2 up-to-date
Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
안녕하세요 강사님 Scheduler의 종류 강의를 수강하고 공부를 하던 와중에 newParallel 메서드에 대해서 궁금증이 생겨서 질문을 하게 됐습니다. 예제 코드에서는 newParallel 의 parallelism 변수 값을 4를 주셨는데 저는 3을 줘서 테스트를 해봤습니다. 해당 코드로 실행을 하면, 다음과 같은 로그가 나오게 됩니다. public class SchedulersNewParallelExample01 { public static void main(String[] args) { Mono<Integer> flux = Mono .just(1) .publishOn(Schedulers.newParallel("Parallel Thread", 3, true)); //쓰레드 할당 flux.subscribe(data -> { TimeUtils.sleep(5000L); Logger.onNext("subscribe 1", data); }); //쓰레드 할당 flux.subscribe(data -> { TimeUtils.sleep(4000L); Logger.onNext("subscribe 2", data); }); //쓰레드 할당 flux.subscribe(data -> { TimeUtils.sleep(3000L); Logger.onNext("subscribe 3", data); }); //쓰레드 할당 flux.subscribe(data -> { TimeUtils.sleep(2000L); Logger.onNext("subscribe 4", data); }); TimeUtils.sleep(8000L); } } 16:18:03.554 [Parallel Thread-3] INFO com.example.springwebflux.util.Logger -- # subscribe 3 onNext(): 1 16:18:04.548 [Parallel Thread-2] INFO com.example.springwebflux.util.Logger -- # subscribe 2 onNext(): 1 16:18:05.560 [Parallel Thread-1] INFO com.example.springwebflux.util.Logger -- # subscribe 1 onNext(): 1 16:18:07.561 [Parallel Thread-1] INFO com.example.springwebflux.util.Logger -- # subscribe 4 onNext(): 1 제가 여기서 여쭤보고 싶은 사항은 다음과 같습니다. Round-Robin 방식을 통해서 각 쓰레드에 작업을 분배하고 더 많은 작업이 들어오면 각 쓰레드의 큐에 작업을 적재하는 것처럼 보이는데요. 작업들을 효율적으로 처리하기 위해서는 먼저 작업이 끝난 Parallel Thread-3에서 남아있는 작업을 가져가서 처리를 하면 좋을 것 같은데 [워크 스틸링(Work Stealing) 같은 처리] Spring WebFlux에서는 해당 기능은 지원하지 않는 것인지 궁금합니다. 감사합니다
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
빌드.그래들에서 디펜던시에 값을 붙여넣었어요! plugins { id 'java' id 'org.springframework.boot' version '3.3.3' id 'io.spring.dependency-management' version '1.1.6' } group = 'com.group' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' implementation 'org.springframework.boot:spring-boot-starter-web' } tasks.named('test') { useJUnitPlatform() } 하지만 어노테이션에 임포트 클래스라는 메뉴가 안떠요! 아무런 변화가 없습니다! https://needneo.tistory.com/272 위 링크처럼 임포트 클래스 메뉴가 떠야하는데, 새로고침을 어떻게 하라는 건가요? 한글메뉴라서 버튼이름이 다를 수 있어요! 파일에서 IDE고치기도 해보고 실행도 해보고 디버그도 해봤어요! 전혀 변화가 없습니다. 구체적으로 해결방법을 가르켜주세요!
강의를 보고 제 사이드 프로젝트에 그대로 적용해 보았습니다. 리뷰와 리뷰댓글 테이블이 있으면 동시에 1번 리뷰에 대한 리뷰댓글을 100개 썼을때, 리뷰테이블의 리뷰댓글카운트 컬럼에 업데이트를 시키는데, 두 방식 다 성공했습니다. 처리시간 평균 비관적 락 : 1초 레디스 락 : 1.5초 환경은 리뷰테이블에는 데이터 2건, 리뷰댓글테이블에는 10만건 있었습니다. 시도해본것 레디스 락의 락 유지시간, 재시도 시간을 줄여봄 Q1. 그렇다면 어떤 환경에서는 레디스 락이 빠를까요? Q2. 레디스 락이 분산 시스템 환경에서 유리하다는데 그것에 대해서도 설명 부탁드립니다. Q3. 곧 MSA 프로젝트를 하는데 각 마이크로 서비스마다 DB가 있을테고 각 서비스에 DB에 접근할때 비관적 락을 걸어도 문제없을거 같은데 이때에 레디스 락을 쓰는 것에 대한 장점이 있을까요??
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 3:20에서 Order라는 클래스를 만들어주는데 클래스안에는 calculatePrice 클래스메서드를 만들어주는데, Order의 경우는 Interface로 만들지 않는 이유는 역할과 구현이 각각 무조건 하나이기때문에 만든걸까요? 아니면 다른이유가 있을까요? 예를들어 interface Order { .... 클래스 변수 및 생성자 int calculatePrice() } 뭐 이런식으로 역할 인터페이스를 만들고 클래스를 만들면서 구현체를 만들지않는 이유가 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 여기에 질문 내용을 남겨주세요 . 해결하기 위해서 인터넷에 쳐서 해봤으나 gradle 관련된 연결된 게 전혀 뜨지 않아서 여쭤봅니다
AuthenticationManager 사용 방법 HttpSecurity 사용에서 @Bean 사용으로 CustomFilter를 빈으로 생성하면 안되는 이유가 AutenticationManager가 빈이 아니기 때문에 주입받지 못한다고 하셨는데 securityFilterChain(HttpSecurity http) 메서드에서 AuthenticationManagerBuilder를 통해 build() or getObject()사용으로 AuthenticationManager를 가져오고 .addFilterBefore(customFilter(autenticationManager)) 여기서 넘겨주면 파라미터로 AuthenticationManagerf를 받는게 아닌가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 제목에 적은 2개의 클래스는 이번 프로젝트에서는 사용하지않는거 맞나요 ?
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] db의 필드 이름은 item_name 이렇게 지정하고, 객체에서는 itemName이런 형식으로 camelCase 스타일로 지정하는 이유는 그냥 오랜 관례일까요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 빌드를 하면 다음과 같이 뜨는데요 무시하고 lib 가서 jar 실행하면 실행 되긴 합니다. 이건 어떤 문제인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @Slf4j @Configuration @Import({AppV1Config.class, AppV2Config.class}) public class BeanPostProcessorConfig { @Bean public PackageLogTracePostProcessor logTracePostProcessor(LogTrace logTrace) { return new PackageLogTracePostProcessor("hello.proxy.app", getAdvisor(logTrace)); } private Advisor getAdvisor(LogTrace logTrace) { //pointcut NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut(); pointcut.setMappedNames("request*", "order*", "save*"); //advice LogTraceAdvice advice = new LogTraceAdvice(logTrace); return new DefaultPointcutAdvisor(pointcut, advice); } 위와 같이 코드를 작성하셨을 때, @Import 코드가 잘 이해가 안됩니다 "AppV1Config와 AppV2Config는 수동으로 스프링 빈으로 등록해야 동작한다" 근데 AppV1Config와AppV2Config 코드를 보면 아래와 같습니다. 근데 @Configuration이 붙은 클래스는 컴포넌트 스캔의 대상이 되고, 필드에 있는 @Bean이 붙은 메소드의 반환 값은 빈으로 자동 등록된다라고 이해를 하고있었습니다. 근데, 강사님께서 말씀하신 "@Import로 수동으로 빈으로 등록한다"라는 부분이 잘 이해가 안됩니다. 설명 부탁드립니다 ! @Configuration public class AppV1Config { @Bean public OrderControllerV1 orderControllerV1() { return new OrderControllerV1Impl(orderServiceV1()); } @Bean public OrderServiceV1 orderServiceV1() { return new OrderServiceV1Impl(orderRepositoryV1()); } @Bean public OrderRepositoryV1 orderRepositoryV1() { return new OrderRepositoryV1Impl(); } @Configuration public class AppV2Config { @Bean public OrderControllerV2 orderControllerV2() { return new OrderControllerV2(orderServiceV2()); } @Bean public OrderServiceV2 orderServiceV2() { return new OrderServiceV2(orderRepositoryV2()); } @Bean public OrderRepositoryV2 orderRepositoryV2() { return new OrderRepositoryV2(); } 여기에 질문 내용을 남겨주세요.
h2 데이터베이스 연결이 자꾸 안된다고 뜹니다... Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)