inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

implement iterator 주석처리 해도 myArray는 배열 아닌가요?

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 순회 2 -향상된 for문 1;18초에서 implememt를 주석 처리 하고 향상된 for문을 돌렸을 때 배열이거나 iterable이여야한다고 에러가 떴습니다 .근데 MyAraayMain에서 이미 myarray 는 new int [] {1.2.3.4}로 배열로 선언한거 아닌가요?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
방찬희 댓글 1 좋아요 0 조회수 166

프로젝트 실행 시, ClassNotFoundException: lombok.Setter 에러 발생

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 엔티티 클래스 작성 후 프로젝트 실행 시 아래와 같은 에러 메세지가 출력됩니다. lombok 설정은 아래와 같이 설정된 것을 확인했고, 엔티티 클래스 작성 전에 테스트에서 잘 실행되었습니다. 세팅 관련 설정도 아래와 같이 확인했습니다. @Getter, @Setter도 잘 인식하는데, lombok 클래스를 발견할 수 없다는 에러가 계속 발생하는데, 뭐가 문제일까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
서현진 댓글 7 좋아요 0 조회수 237

7.2 강의 앤써블 설치하는데 앤써블이 뭐고 왜 사용하는건가요?

해결됨

쉽게 시작하는 쿠버네티스(v1.35)

질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요] 3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요] ( https://www.inflearn.com/blogs/1719 ) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up 으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. ( https://www.inflearn.com/questions/992407/comment/281901 ) [질문 하기] 7.2 강의 앤써블 설치하는데 앤써블이 뭐고 왜 사용하는건가요?

  • docker
  • kubernetes
김인성 댓글 1 좋아요 0 조회수 342

포인터 강의와 더불어서 24년2회 기출문제 swap 낚시문제 질문있어요

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

29분 포인트 강의를 보다보니 24년2회 swap 낚시문제가 떠올라서 질문드립니다. void swap(){ int temp; temp =a; a = b; b = temp; } int main(){ int a = 11; int b = 19; swap(); 기출2회 일부 추출인데요.. 해당 스왑부분을 보면 포인터변수를 준 것 외엔 차이가 없어 보입니다. 위 기출의 경우엔 왜 스왑이 될 수 없는지 부연설명이 있으면 이해가 빠를 것 같아요! (스왑 함수에서 temp값에 a넣어주고 a에 b를 대입하고.. 포인터변수 외엔 차이를 못느끼겠습니다.)

  • python
  • java
  • c
  • 정보처리기사
주서 댓글 1 좋아요 0 조회수 279

syslog 의미?용도?

해결됨

DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)

안녕하세요. syslog 관련해서 질문드립니다. Container Logging System 사용 ② 섹션에서 syslog-nm 컨테이너(서버)에 logback 설정에 appender name="SYSLOG" 는 백엔드의 logback 을 이용해 다른 서버에서 로그를 관리하는 의미이고, 이전 섹션에서 컨테이너 실행시 --log-driver=syslog 는 로그를 컨테이너 로그뿐만 아니라 전반적인 로그를 통합해서 본다는 의미로써 syslog 명칭만 동일하게 부여했을뿐 목적이 다른게 맞는거죠? 저는 syslog 라는거 자체가 컨테이너 로그 뿐만 아니라 광범위하게 통합해서 관리한다.라고 이해했었는데 해당 강의에서는 단순히 syslog 명칭만 같고 다른 의미로 쓰인거 같아 약간 혼동이 있네요.

  • docker
  • 가상화
  • ci/cd
hungryo 댓글 1 좋아요 0 조회수 232

q를 입력하면 예외가 발생하는데 그 이유를 모르겠습니다.

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

안녕하세요. 항상 강의 잘 듣고 있습니다 🙂 public static void main(String[] args) throws InterruptedException { Printer printer = new Printer(); Thread printerThread = new Thread(printer, "printer"); printerThread.start(); Scanner sc = new Scanner(System.in); while (true) { log("프린터할 문서를 입력하세요. 종료 (q): "); String str = sc.nextLine(); if (str.equals("q")) { printerThread.interrupt(); break; } printer.addJob(str); } } static class Printer implements Runnable { Queue<String> jobQueue = new ConcurrentLinkedQueue<>(); @Override public void run() { log("outer 상태 : " + Thread.currentThread().isInterrupted()); while(!Thread.interrupted()) { try { if (jobQueue.isEmpty()) { continue; } String job = jobQueue.poll(); log("출력 시작: " + job + ", 대기 문서: " + jobQueue); log("inner 상태 : " + Thread.currentThread().isInterrupted()); Thread.sleep(3000); log("출력 완료"); } catch (InterruptedException e) { e.printStackTrace(); log("인터럽트!"); System.out.println(e.getMessage()); break; } } log("프린터 종료"); } public void addJob(String str) { jobQueue.offer(str); } } 저는 q를 입력하면 인터럽트 상태가 false로 바뀌게 되고, 프린터 종료 로그가 남을 거라고 생각했습니다. 실행하고 바로 q를 입력하면 제가 예상한 대로 동작하지만, 값을 입력 후 q를 입력하면 Thread.sleep(3000); 이 부분에서 InterruptedException 예외가 발생했습니다. 저는 이 부분에서 의문점이 들었습니다. while(!Thread.interrupted() 1. 인터럽트 상태가 바뀌었을 텐데 왜 예외가 발생하지? 2. 상태가 안 바뀌었나? 라는 생각을 하고 로그를 확인해봤는데 07:21:21.366 [ printer] outer 상태 : false 07:21:21.366 [ main] 프린터할 문서를 입력하세요. 종료 (q): 123 07:21:22.790 [ main] 프린터할 문서를 입력하세요. 종료 (q): 07:21:22.796 [ printer] 출력 시작: 123, 대기 문서: [] 07:21:22.796 [ printer] inner 상태 : false q java.lang.InterruptedException: sleep interrupted at java.base/java.lang.Thread.sleepNanos0(Native Method) at java.base/java.lang.Thread.sleepNanos(Thread.java:491) at java.base/java.lang.Thread.sleep(Thread.java:522) at thread.control.printer.MyPrinterV3$Printer.run(MyPrinterV3.java:46) at java.base/java.lang.Thread.run(Thread.java:1570) 07:21:22.980 [ printer] 인터럽트! sleep interrupted 07:21:22.980 [ printer] 프린터 종료 q를 입력하면 바로 예외가 발생해서 상태가 바뀌었는지는 잘 모르겠습니다. 만약 상태가 안 변했다고 해도 결국 sleep 부분에서 예외가 발생할 텐데, 로그가 안 찍힌 이유도 모르겠습니다. 그래서 여러 번 실행해본 결과 값 입력하고 3초 후 q를 입력하면 예외가 발생하지 않는다는 걸 알게 되었습니다. 잠자고 있는 스레드를 깨워서 문제가 발생하는 것 같은데 제 지식으로는 여기까지인 것 같습니다. 질문 1. while(!Thread.interrupted()) 이 부분에서 인터럽트 상태가 false로 변경되었을 것 같은데 예외가 발생한 이유를 모르겠습니다. 제가 다시 생각해보니 프린터 스레드는 sleep() 때문에 3초 기다리고 있는 상태에서 깨우니 sleep() 부분에서 예외가 발생하고 로그도 안 찍혔을 것 같다는 생각이 들었습니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
이종수 댓글 1 좋아요 0 조회수 323

프론트에서 credentials: include로 설정한경우 cors 문제

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

안녕하세요, 프론트(리액트)에서 프론트에서 credentials: include로 설정한경우 cors 문제가 발생하고있습니다. 이런 에러가 발생하고있는데요, 프론트측에서 해줘야하는 설정과 서버에서 해줘야하는 설정은 맞게해준것 같습니다. 먼저 프론트에서 해줘야하는 쿠키설정은 const httpLink = createHttpLink({ uri: 'http://localhost:3001/graphql', credentials: 'include', }); 이렇게 해줬습니다. 그리고 서버쪽에서는 onst app = await NestFactory.create(AppModule, { cors: true }); app.enableCors({ origin: 'http://localhost:3000', credentials: true, exposedHeaders: ['Authorization'], // * 사용할 헤더 추가. }); 이렇게 해주었는데요.. 이렇게해주고나서 로그인하면 맨위의 사진처럼 에러가납니다.. 버전은"@apollo/server": "^4.10.4", "@nestjs/apollo": "^12.2.0", 이렇게되어있는데.. https://www.inflearn.com/community/questions/896182/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-credentials-include%EB%A1%9C-%EC%84%A4%EC%A0%95%ED%95%9C%EA%B2%BD%EC%9A%B0-cors-%EB%AC%B8%EC%A0%9C 이분이 해결하신거를 참고해봤는데, 저분이 app.module설정을 통해 해결하셨지만, 저는 버전이달라서그런가 거기에 cors설정을하면 에러가나더라구요.. 혹시 어떻게 하면 이 이슈를 헤쳐나갈수있을까요?..

  • javascript
  • node.js
  • docker
  • rest-api
  • nestjs
반가우면반갑다고해 댓글 2 좋아요 0 조회수 290

선생님 accesstoekn재발급 질문있습니다.

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

@UseGuards(GqlAuthGuard('refresh')) @Mutation(() => String) restoreAccessToken( @Context() context: IContext, // ): string { const user = context.req.user; return this.authService.restoreAccessToken({ user }); } 대충 이렇게 헤더에담긴 리프레시토큰을 그래프큐엘 가드에서 인가후 accessToken재발급이 이루어지고 있는데.. 실무에서 그래프큐엘을 사용할 경우 저렇게 그래프큐엘 가드를 사용해서 헤더에 담긴 리프레시토큰을 인가하여 accesstoken이 재발급되게 하는 코드를 사용하는지 아니면 선생님이 저희의 실습을위해 작성하신 코드인것인지 궁금합니다. jwt와 리프레시토큰 부분은 Rest API식으로 하는게 나을까요?

  • javascript
  • node.js
  • docker
  • rest-api
  • nestjs
반가우면반갑다고해 댓글 2 좋아요 0 조회수 143

개인 포폴작업중인데 백엔드 인가를 어떤식으로 구현해야할까요..

미해결

Next + React Query로 SNS 서비스 만들기

제로초님의 next-auth 작업하시는걸 보고 프론트에서 next-auth로 로그인하는것을 구현을 하긴 했는데 로그인(인가)을 하는 주체가 프론트다 보니 기존에 배웠을때는 nest 또는 node에서 passport를 이용해서 작업을 했엇는데 이제는 passport로 인가 하는 작업이 필요가 없어진건지 궁금합니니다. 필요가 없다라고 하면 백엔드서버에서는 이사람이 로그인을 했는지 안했는지를 알아야 할텐데 그거는 어떻게 구현을 해야할지가 막막해서 질문드립니다 ㅠㅠ

  • react
  • next.js
  • react-query
  • next-auth
  • msw
GI P 댓글 1 좋아요 0 조회수 217

Dockerfile과 커밋방식에 대해 질문 있습니다.

해결됨

개발자를 위한 쉬운 도커

"COPY 빌드컨텍스트경로 레이어경로" 여기서 레이어 경로는 어떻게 구성되어 있는지 알 수 있나요? 강의 내용중에 "커밋 방식을 사용하면 기존 레이어에 새로운 레이어를 한 장 더 추가할 수 있다." 라고 했는데 추가된 새로운 레이어는 읽기 전용 레이어 인가요?

  • docker
  • 가상화
  • ci/cd
  • docker-compose
  • github-actions
  • docker-volume
  • docker-image
  • container
capstonefittrip 댓글 2 좋아요 1 조회수 246

26강 update method 에러 발생합니다

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

선생님이 해주신것과 똑같이 코드를 작성했는데 도서관리에서 사용자 이름을 수정하려고 하니 updateUser에서 optional 관련 에러가 발생합니다. Hibernate: select user0_.id as id1_0_0_, user0_.age as age2_0_0_, user0_.name as name3_0_0_ from user user0_ where user0_.id=? 2024-08-14 18:42:17.084 ERROR 37216 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException] with root cause java.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow(Optional.java:403) ~[na:na] at com.group.libraryapp.service.user.UserServiceV2.updateUser(UserServiceV2.java:34) ~[main/:na] at com.group.libraryapp.controller.user.UserController.updateUser(UserController.java:32) ~[main/:na] db도 한번 삭제 후 다시 실행했는데 같은 에러가 발생하네요.. 이유와 해결방법이 궁금합니다..!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
조하영 댓글 3 좋아요 0 조회수 216

copy-on-write 전략에 대해 추가 질문 있습니다.

해결됨

개발자를 위한 쉬운 도커

안녕하세요 전에 copy-on-write 전략에 대해 질문을 했는데 추가 질문이 있어 질문글을 작성합니다. https://www.inflearn.com/community/questions/1307477/copy-on-write-%EC%A0%84%EB%9E%B5%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 위 질문 글에서 2번 부분에 대해 추가 질문이 있습니다. 읽기/쓰기 레이어에서 index.html 파일을 여러번 수정하는 경우에 대해서 궁금한 부분이 있습니다. 완전 처음에는 얘기 해주신대로 읽기/쓰기는 텅 비어 있는 상태라 읽기 레이어의 index.html 파일을 그대로 복사해 와서 바뀐 부분만 있으면 수정한 후 사용합니다. 여기서 읽기/쓰기 index.html 파일이 한번 더 수정이 되면 읽기 레이어의 index.html 파일을 복사해 와서 기존에 있는 읽기/쓰기 레이어에서의 index.html 파일에서 바뀐 부분만 복사해온 index.html 파일에서 변경한 후 사용하는건가요? 정리하면 읽기/쓰기 index.html 파일을 여러번 수정해도 복사해서 가져오는 부분은 항상 읽기 index.html 파일이고 기존 읽기/쓰기 index.html 파일에서 바뀐 부분을 읽기 레이어에서 가져온 index.html 파일에 넣어서 만드는 건지 궁금합니다.

  • docker
  • 가상화
  • ci/cd
  • docker-compose
  • github-actions
  • docker-volume
  • docker-image
  • container
capstonefittrip 댓글 2 좋아요 1 조회수 181

인스턴스 타겟그룹 등록 언헬시

미해결

AWS로 쉽고 빠르지만 아주 견고한 서버 환경을 구축하는 방법

인스턴스 만들때 라우팅 테이블 어떻게 설정 되어 있나요 nat랑 연결되어있나요?

  • aws
  • docker
  • msa
  • container
  • ecs
  • fargate
댓글 2 좋아요 0 조회수 206

구현 클래스마다 테이블 전략과 @MappedSuperCalss 차이점

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 구현 클래스마다 테이블 전략과 @MappedSuperCalss가 내부적으로 어떠한 차이점이 있는 지 궁금합니다. 둘이 비슷한 것 같은데 전자는 사용하면 안 되고, 후자는 사용해도 되는 이유가 궁금합니다! (전자의 경우 강의에 충분히 나와있지만 후자는 사용하라고 하셨으니 그게 헷갈려서 질문 드립니다)

  • java
  • jpa
blue 댓글 1 좋아요 0 조회수 147

강의 섹션2 이후부터 강의화면 안보이는 이슈있습니다.

미해결

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]

안녕하세요. 해당 강의 섹션2 이후부터 강의화면이 검은색으로 보여지며 강의화면이 안보이는 이슈가 있습니다. 빠른 확인 부탁드립니다.

  • 네트워크
  • linux
  • docker
채광은 댓글 1 좋아요 0 조회수 208

fetch join 관련 질문드립니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

to one 관계는 여러개를 사용해도 상관없고 to many 관계는 한개만 사용해야 된다고 하셨는데 질문이 생겨서 글을 써봅니당 테이블 A가 있다고 할때, A테이블이 B,C,D 테이블과는 to one 관계이고 E 테이블과는 to many 관계인 경우에 A 테이블에서 B,C,D,E 테이블을 전부 fetch join해도 문제가 없는건가요? ( B,C,D,E 테이블은 A에만 연관관계가 있고 B,C,D,E 끼리의 관계는 존재하지 않습니다.) 여러개의 테이블을 join하는 경우 to many관계가 한개 , 나머지 테이블은 to one관계이면 모두 fetch join해도 되는건지 알고싶습니다.

  • java
  • spring
  • spring-boot
  • jpa
lllilililll 댓글 1 좋아요 0 조회수 112

클라우드 서비스 구축 - AWS 회원가입 및 리눅스 서버 구축 강의화면 안보이는 이슈

미해결

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]

안녕하세요. 현재 whale, chrome에서 클라우드 서비스 구축 - AWS 회원가입 및 리눅스 서버 구축 강의화면 안보이는 이슈 가 있습니다. 확인 부탁드립니다.

  • 네트워크
  • linux
  • docker
채광은 댓글 1 좋아요 0 조회수 192

도애체 어디에서 오류가 난건지 모르겠습니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

다음과 같이 코드를 했는데 24강까지 애플리케이션에서 잘 삭제되고, 잘 저장되었는데 25강이후 코드는 실행되는데 '나이'가 입력을 해도 00세로 나오고, 목록에서 삭제하려고하면 '서버내부 오류입니다'라고 뜹니다. 아래 질문에서 쉬운거는 편집된게 있다고 하는데 배우는단계에 있는 사람으로써는 그렇게 편집되면 많이 당황스럽네요...ㅜㅜㅜㅜㅜ 어디서 틀렸나요?ㅜㅜ UserResponse package com.group.libraryapp.dto.user.response; import com.group.libraryapp.domain.user.User; public class UserResponse { private long id; private String name; private Integer age; public UserResponse(long id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public UserResponse(User user) { this.id = user.getId(); this.name = user.getName(); } public UserResponse(long id, User user) { this.id = id; this.name = user.getName(); this.age = user.getAge(); } public long getId() { return id; } public String getName() { return name; } public Integer getAge() { return age; } } User package com.group.libraryapp.domain.user; import javax.persistence.*; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id = null; @Column(nullable = false, length = 20, name = "name") private String name; private Integer age; protected User() { } public User(String name, Integer age) { if (name == null || name.isBlank()) { throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.",name)); } this.name = name; this.age = age; } public String getName() { return name; } public Integer getAge() { return age; } //User class public Long getId() { return id; } public void updateName(String name) { this.name = name; } } UserRepository package com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); } UserController package com.group.libraryapp.controller.user; import com.group.libraryapp.dto.user.request.UserCreateRequest; import com.group.libraryapp.dto.user.request.UserUpdateRequest; import com.group.libraryapp.dto.user.response.UserResponse; import com.group.libraryapp.service.user.UserServiceV2; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController public class UserController { private final UserServiceV2 userServiceV2; public UserController(UserServiceV2 UserServiceV2) { this.userServiceV2 = UserServiceV2; } @PostMapping("/user") public void saveUser(@RequestBody UserCreateRequest request) { userServiceV2.saveUser(request); } @GetMapping("/user") public List<UserResponse> getUsers() { return userServiceV2.getUsers(); } @PutMapping("/user") public void updateUser (@RequestBody UserUpdateRequest request) { userServiceV2.updateUser(request); } @DeleteMapping("/user") public void deldteUser (@RequestParam String name) { userServiceV2.deleteUser(name); } } UserServiceV2 package com.group.libraryapp.service.user; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.domain.user.UserRepository; import com.group.libraryapp.dto.user.request.UserCreateRequest; import com.group.libraryapp.dto.user.request.UserUpdateRequest; import com.group.libraryapp.dto.user.response.UserResponse; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class UserServiceV2 { private final UserRepository userRepository; public UserServiceV2(UserRepository userRepository) { this.userRepository = userRepository; } public void saveUser(UserCreateRequest request) { User u = userRepository.save(new User(request.getName(), request.getAge())); //System.out.println(u.getId()); } public List<UserResponse> getUsers() { return userRepository.findAll().stream() .map(UserResponse::new) .collect(Collectors.toList()); } public void updateUser(UserUpdateRequest request) { User user = userRepository.findById(request.getId()) .orElseThrow(IllegalArgumentException::new); user.updateName((request.getName())); userRepository.save(user); } public void deleteUser(String name) { User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); } } UserCreateRequest package com.group.libraryapp.dto.user.request; public class UserCreateRequest { private String name; private Integer age; public String getName() { return name; } public Integer getAge() { return age; } }

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
우잉 댓글 2 좋아요 0 조회수 295

벌크 연산에 대해 질문 있습니다.

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

더티 체킹으로 발생한 update 문과 벌크 연산으로 발생한 update의 흐름이 궁금합니다. 기존에 setName() 이런식으로 엔티티의 속성을 수정하면 커밋시 플러시가 발생해서 최종적으로 더티체킹이 발생해 JPA가 알아서 update 쿼리를 날리고 벌크 연산 같은 경우에는 더티 체킹과 아무 상관없이 바로 update 쿼리를 날린다. 라고 이해를 했는데 맞게 이해한건지 궁금합니다. 벌크 연산 같은 경우에는 바로 update 쿼리를 D에 보내는 방식이므로 영속성 컨텍스트에 있는 값에는 아무 영향을 끼치지 않나요? 복수의 데이터를 변경하거나 삭제할때 벌크 연산을 사용하면 좋아보이는데요 복수의 복수 데이터는 어떻게 처리하는지 궁금합니다. 예를들어 게시글에 댓글이 여러개 달리는 구조고 게시글 하나 삭제 시 게시글에 달린 댓글들도 삭제되는 상황이라고 가정 하겠습니다. 이때 하나의 게시글을 삭제하면 벌크 연산을 사용하여 쉽게 댓글을 삭제하면 되지만 여러개의 게시글을 삭제할때는 어떻게 처리하면 좋을지 궁금합니다.

  • java
  • jpa
감바스 댓글 1 좋아요 0 조회수 150

인기 태그

인프런 TOP Writers

주간 인기글