1.오타 JobScope와 StepScop가 선언된 빈은 애플리케이션 구동 시점에는 우선 프록시 객체로만 존재한다. 그 후 Job이나 Step이 실행된 후에 프록시 객체에 접근을 시도하면 그 때 실제 빈이 생성된다. StepScop <-오타 2.건의(내가틀렸을수도있음 그러면 수정해주셈) 그리고 JobParameters가 잡 실행 내부에서 불변이라는 내용이 필요할거같음 배치쓰던사람들은 당연한거라 생각할수있는데(잡파라미터랑 잡이름으로 유니크체크한댔나 그런거도 있으니까) 배치 첨쓰는사람은 왜 잡파라미터가 있는데 ExecutionContext를 사용하지 라는 생각을 할수있을거같음 3.궁금증 컴파일 시점에 없는 값을 어떻게 참조할 것인가? 여기서 잡의 스텝생성시점에서 di받는 잡파라미터 자리에 null을 넣는식으로 처리하는 방법이 있다고했는데,만약 코틀린의 경우엔 명시적으로 잡파라미터를 ?를 붙여서 nullable로 선언하고 로직에서 NullSafe 박는식으로밖에 해결할수없고 저게 맘에안들면 빈주입해야함? 저런 null전달같은 꼼수딴거없음? 강의가 자바기반이라고 적혀있어서 물어봐도되나싶긴한데 예전에 저것땜에 고생했었는데 다른방법을 못찾아서 물어봄
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] // @Transactional public void update(Long id, String name, String city, String street, String zipcode) { Address address = new Address(city, street, zipcode); Member member = memberRepository.findOne(id); member.setName(name); member.setAddress(address); } 위와 같이 update 메서드의 @Transactional 을 주석 처리하고 해봤습니다. 제 예상이라면 응답값이 새로워진 값이 아니라 기존의 값이 응답값으로 내려와야 할 것 같았습니다. @PutMapping("/v2/members/{id}") public UpdateMemberResponse updateMemberV2( @PathVariable Long id, @RequestBody @Validated UpdateMemberRequest request ) { memberService.update( id, request.name, request.city, request.street, request.zipcode ); Member findMember = memberService.findOne(id); return new UpdateMemberResponse(findMember.getId(), findMember.getName()); } 왜냐하면 결론적으로 엔티티 자체는 수정되었지만 DB에 쿼리가 날라가지 않았고 위 컨트롤러 코드에서 find 메서드는 엄연히 다른 트랜잭션에서 진행되니(애초에 업데이트는 트랜잭션이 없었지만) 다른 영속성 컨텍스트가 존재할 것이며, 1차 캐시또한 비워져있을 테니(애초에 업데이트는 영속성 객체를 가지고 있지 않았기에 1차캐시에 없음) 즉, 컨트롤러에서 find한 Member 객체는 새로 DB에서 가져온 객체 == 기존 객체 일테니 응답 값이 기존 값과 같아야할텐데 아래와 같이 달라진 값을 응답으로 내려주고 있었습니다. 왜 그런걸까요? 가입 응답 { "name": "hello", "city": "city", "street": "street", "zipcode": "12345" } 수정 응답 { "name": "hello@", "city": "city@", "street": "street@", "zipcode": "12345@" }
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의에서 강사님께서 11에서 17로 바꾸라는 모든 설정 확실하게 수정 완료했고 gradle 코드 수정하여 실행하니 A problem occurred configuring root project 'library-app'. > java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file C:\Users\seong\.gradle\caches\jars-9\3baa90cc2341a9ffd1656b87b2a3526e\spring-core-6.2.11.jar. 아래와 같은 jar 파일 오류가 떴습니다. 구글링과 GPT를 써보니 캐시 파일 버전 충돌 오류라고 하여 캐시 파일을 삭제 하려고 해도 디렉터리가 비어있지 않다는 오류가 뜨며 삭제되지 않고, 또 .\gradlew wrapper 버전이 현재 7.5인데 스프링 부트 3.5.6은 최소 8.x를 사용한다고 하여 이것 또한 업그레이드 하려고 하였으나 PS C:\Project\Study-SpringBoot\library-app> .\gradlew wrapper --gradle-version 8.3 --distribution-type all Starting a Gradle Daemon, 5 stopped Daemons could not be reused, use --status for details FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'library-app'. > java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed t o create Jar file C:\Users\seong\.gradle\caches\jars-9\3baa90cc2341a9ffd1656b87b2a3526e\spring-core-6.2.11.jar. 동일한 이런 jar 파일 오류가 떴습니다. 이 오류를 어떻게 해결해야 할까요 .... 도와주세요 ㅜㅜ
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 단순 궁금증입니다. 도메인 설계에서 여러 OrderItem을 만들 수 있도록 설계했으면서 정작 Service에선 한 개의 ItemId, count를 받게 하신건 의도하신건가요? 의도하신거였네요. 뒷 내용을 확인하지 않고 질문을 달았었네요..
쿠폰 100개를 발급해야하고 이 개수는 100을 넘어가면 안됨 -> java synchronized락의 경우 쿠폰 발급을 담당하는 서버가 여러개라면 db에 쿠폰 저장(개수 업데이트) 요청이 동시에 올수 있으므로 race condition 발생 -> redis의 경우 여러 서버가 쿠폰 발급 요청을 보내도 싱글 스레드이므로 쿠폰 발급 수를 정확히 100개로 맞출 수 있음. 하지만 예제의 경우 threadpool을 사용하여 각 스레드별로 쿠폰 발급이 가능하면 바로 db에 쿠폰 저장하는 로직이라서 db 부하가 심함 -> kafka를 도입하여 스레드들이 쿠폰 발급 메세지만 카프카로 보내고 카프카 컨슈머가 이 메세지를 처리하여 db에 쿠폰을 저장함. 컨슈머 그룹에 속한 컨슈머는 현재 하나이므로 메세지 1개씩을 처리함 따라서 db에 부하가 심하지 않음.
[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
안녕하세요. UserDaoService에 있는 id가1,2,3인 사람들과 JPA관련된 data.sql에 있는 id가 90001~90003인 사람들은 따로 관리가 되는 건가요?? JPA를 이용하면 사용자들을 DB에 넣어서 관리하는 것이지만 초기에 저희가 아래처럼 추가한 사람들은 관리가 어떻게 되는 것인지 궁금하여 질문드립니다. static { users.add(new User(1,"Kenneth", new Date(), "test1", "111111-1111111")); users.add(new User(2,"Alice", new Date(), "test2", "222222-2222222")); users.add(new User(3,"Elena", new Date(), "test3", "333333-3333333")); }
1. 강의 내용과 관련된 질문인가요?예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, dto에 대해서 질문드리고 싶어 남깁니다. order 테이블에는 연관관계 필드가 있는데 orderDto에서는 연관관계 필드를 제외한 데이터들이 필드로 들어가있습니다. 보통 Dto를 작성할 때는 엔티티 연관관계 필드들은 양방향 편의 메서드같은것으로 수정하고 dto에서는 int, String같은 기본 필드들만 받는것이 일반적일까요 ? 스프링부트 1 버전에서 가급적 단방향 연관관계로 설계하라 하셨는데, 단방향으로 설계하게 되면 연관관계 편의 메서드를 작성하지 않을텐데 이때는 dto필드에 엔티티까지 작성하는지 궁금합니다. 좋은 강의 제공해주셔서 감사드립니다 !
킬구형 안녕! 지금 실무에서 Spring Batch를 사용해서 배치 기능 구현하고 있는데 궁금한 점이 있어. 강의의 예제 코드들을 보다보면 Job에 필요한 항목들을 따로 클래스 파일로 빼서 구현하지 않고 JobConfig 클래스 내에서 이너 클래스로 구현하던데 특별한 이유가 있을까!? @Slf4j public static class BrainwashProcessor implements ItemProcessor<InFearLearnStudents, BrainwashedVictim> { 강의가 너무 재밌어서 점심시간에도 공부 중이야 ㅎㅎ
안녕하세요 토비님 배운 내용을 바탕으로 기존 프로젝트 구조를 변경하는 연습하고 있습니다. 기존 프로젝트가 멀티 모듈로 되어있어 멀티모듈 구조는 그대로 가져가고 싶은데 분리한다면 어떻게 나누어야 할까요? 모듈을 두개로 나누어 api와 core로 구성했는데 adapter, application, domain를 api 모듈에 adapter core 모듈에 application, domain 이렇게 구성하였는데 이렇게 구분해도 괜찮은지 잘 모르겠습니다
안녕하세요. 강의 너무 잘 듣고 제 프로젝트에 필요한 부분들로 리팩토링 하면서 MSA를 처음 공부하려 했습니다! 먼저 제 프로젝트는 거의 똑같은 구조로 게시글이 있습니다. 2가지의 질문이 있습니다. (1) 정보를 취합하기 위해 동기로 API호출을 한다는 것은 장애 전파가 된다고 이해하고 있습니다. 그렇다면 저희 예시에서도 Article-read에서 조회수는 api호출을 통해 받기로 했습니다. 그렇다면 어느정도의 장애 전파는 허용한다고 받아들여집니다. 실제 서비스에서도 여러 정보를 취합해서 줘야하는 경우가 많을텐데 API를 통해 정보를 가져오는것이 절대 안되나요? 아니면 종종 허용하기도 하나요? (2) CQRS의 Query(질의)부분은 데이터 수정이 없어야 한다 이해했습니다. 그런데 데이터를 수정해도 되나요? 예를 들어 제가 게시글 상세 조회를 게시글 모듈에서 분리하려고 합니다. 그런데 게시글 상세 조회를 하게되면 조회수가 올라갑니다. 따라서 게시글 상세조회 발생 -> 조회수 증가 이벤트 발생 ->조회수 증가 이런 식으로 구상을 했습니다. 이러한 질의 부분 모듈에서 데이터를 수정하게 만드는 이벤트가 발생해도 괜찮을지 여쭤봅니다!!
누구보다 빠르게 배우는 Nginx + Docker + Springboot 서버 무중단 배포
노션 강의자료에서는 # 2. 앱 JAR 파일 복사 COPY *.jar app.jar 이렇게 되어 있는데 강의 영상에서는 COPY build/libs/*.jar app.jar 로 되어 있습니다. 강의 영상이 맞는거 같고, 아무 생각 없이 노션 자료로 복붙하다가 안되서, 둘을 자세히 비교해보니 빌드된 jar 파일 경로를 제대로 명시되지 않은 걸 발견했어요. 노션 파일 수정 부탁드려용