묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegisterRequest 에 대해서
토비님, 항상 좋은 강의 감사드립니다. 강의 내용을 학습하던 중 궁금한 점이 생겨서 질문드립니다!강의 코드에서 MemberRegisterRequest가 domain 패키지 안에 직접 정의되어 있고, 이 동일한 객체를 adapter 계층의 컨트롤러에서 @RequestBody로 직접 받는 것을 확인했습니다.제가 접해온 일반적인 계층형 아키텍처에서는, 웹 계층을 위한 DTO를 별도로 두고 서비스 계층에서 이를 도메인 객체로 변환하여 도메인 계층이 웹 DTO에 의존하지 않도록 분리하는 방식을 주로 사용했습니다.그래서 강의에서 보여주신 설계 방식에 대해 궁금한 점이 두 가지 있습니다.이처럼 요청(Request) 자체를 도메인의 일부로 보고 domain 패키지에 포함시키는 설계가 갖는 이점은 무엇인지 궁금합니다.이러한 설계가 계층 간의 결합도를 높일 수 있다는 우려에 대해서는 어떻게 생각하시는지, 그리고 어떤 상황에서 이러한 실용적인 접근이 더 효과적이라고 판단하시는지, 토비님의 설계 철학이나 기준에 대해 여쭙고 싶습니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
벌크연산 주의 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]벌크연산 시 주의에서 벌크연산을 먼저 실행하고 영속성 컨텍스트를 초기화 한다고 하셨는데 다른 엔티티의 영속상태가 영속성 컨텍스트에 저장되어있는경우가 있을 수도 있어서 영속성컨텍스트를 먼저 flush하고 나서 벌크연산을 수행하는게 맞다고 생각하는데 혹시 잘못생각하고 있는건가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
find()에 대한 질문.
이번 강의에서 find를 사용했을때 출력결과를 보고 궁금한 점이 있어 질문 드립니다.강의 2:00부터 코드에서 find()를 사용하는데요.이 find()를 사용할때 쿼리 출력 시점에 대해서 궁금합니다.먼저 persist() 라던지 setXXX() 라던지 값을 저장하거나 변경할 때는 쓰기 지연 SQL 저장소 라는 곳에 해당 쿼리가 저장되고 commit(정확히는 flush)을 하면 쿼리가 DB에 날아가는데 출력되는 것이 딱 이 시점인 것으로 이해하고 있습니다.예시로 아래와 같은 코드에서Member member = new Member(); member.setId(1L); member.setName("HelloA"); System.out.println("======BEFORE======"); em.persist(member); System.out.println("======AFTER======"); tx.commit();결과는 쿼리가 출력되는 순간은 persist() 가 호출되는 때가 아닌 commit(flush)가 호출된 때입니다. 따라서 콘솔에 쿼리는 before 와 after 이후에 출력 됩니다. 그리고 이제 find 코드와 결과입니다Member findMember = em.find(Member.class, 1L); System.out.println("============"); tx.commit();이때 쿼리가 출력 된 것을 보면 commit 시점이 아니라 ========== 이전, 그러니까 find()가 호출 된 시점이라는 것을 볼 수 있는데요. find는 persist() 와 setXXX 인 저장 및 업데이트처럼 쓰기가 아닌 읽기이기 때문에 find() 시점에 DB에서 바로 조회하는 쿼리를 사용하기 때문에 그런 것인가요?이 말은 find()는 쓰기 지연 SQL 저장소도 사용 안하는거겠죠?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 엔티티의 기준
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 수강 중 질문이 생겨 여쭤봅니다.강의에서는 사용자에게 입력받은 BookForm form의 데이터를 새로운 객체인 Book book = new Book();에 할당하고 있습니다. (5분 54초) 강의 중 '임의로 만든 엔티티이지만 식별자 pk를 가지고 있기에 준영속 엔티티이다' 라고 말씀하셨는데, 준영속 엔티티의 기준이 궁금합니다.이미 DB에 persist된 객체의 참조가 아닌 식별자 값만 공유하더라도 준영속 엔티티가 되는 것일까요 ? Book book = (Book) itemService.findOne(form.getId()); 이렇게 DB에서 참조를 직접 조회하지 않고 단순히 id값만 DB에서 가져와서 할당해도 준영속 엔티티의 기준이 되는지 궁금해서 여쭤봅니다 !
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링 3 버전 이상 rollbackFor 변경된듯요
rollbackOn으로 변경된거같네요 스펙이
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
플러쉬와 커밋 차이점
플러쉬와 커밋 차이점이 궁금한데..플러쉬는 그냥 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 날려서 DB에 단순 반영한 것이고커밋은 이 반영된 내용을 '확정' 시키는 것이 맞나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
test 파일을 어디서 확인 할 수 있을까요?
jpa 최선버전 설정하기 pdf 파일을 따라하고 있는데요, h2 데이터베이스 설정하고 있는데 홈폴더라는 것은 어느것을 말하는건가요? test.mv.db파일이 숨김 해제 처리해도 안보여서요..
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
[게시글 목록 페이지]수업에서 강의 내용대로 진행이 안되네요.
안녕하세요. 깃북 소스대로는 문제가 안 나오는데, [게시글 목록 페이지]수업 내용대로 코딩하면, useEffect( () => { getPostList() }, []);라는 소스가 있음에도useEffect가 정의 안 되었다고 에러가 나오네요. 이거 무슨 버전 문제인가, 라이브러리 문제인지는 모르겠는데... 해결 방법 여쭈어 보아도 될까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
컬렉션 패치조인 페이징
안녕하세요. 컬렉션 페치조인 페이징을 하게되면,조인을 하고나서 페이징 처리가 되서2개의 ROW에서 각 TEAM에 하나의 회원씩만 있게 된 채로 리턴된다고 강의에서 하셨는데, 이 부분이 잘 이해가 되질 않습니다.어차피 리턴되는 데이터는 TEAM이라서 각각의 TEAM이 페이징 처리되서 리턴되는게 아닌가요..?왜 페이징 처리를 하게되면,2개의 ROW에서 각 TEAM에 하나의 회원씩만 있게 된 채로 리턴되는지 이해가 잘 되지않습니다...
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
강의내용 중 질문드립니다.
질문 : ec2에서 post man으로 요청을하면 log가 찍히질 않습니다. 강의와 마찬가지로 yml파일 구성을 아래와 같이 했습니다. services: springboot-twitter: container_name: springboot-twitter image: kki129443133/springboot-twitter-linux:latest ports: - "8080:8080" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-twitter.c1cgyccww7yi.ap-northeast-2.rds.amazonaws.com:3306/twitterdb - SPRING_DATASOURCE_USERNAME=dev - SPRING_DATASOURCE_PASSWORD=dev123 시도사항1. header 값에 아래 값을 추가해준것인데 효과 없었습니다.Key: Content-TypeValue: application/json2. 번쨰는 아래값을 yml에 추가 해주었는데 - SPRING_JPA_SHOW_SQL=true - SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT_SQL=true - LOGGING_LEVEL_ORG_HIBERNATE_SQL=DEBUG - LOGGING_LEVEL_ORG_HIBERNATE_TYPE_DESCRIPTOR_SQL_BASICBINDER=TRACE - LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG - LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB_SERVLET_DispatcherServlet=DEBUG 이후 아래와 같이 반응을 하긴하는데 어떤 문제로 인해서 강의와 같이 로그가 안찍히는 지 모르겠습니다.2025-07-14T14:20:32.262Z DEBUG 8 --- [nio-8080-exec-8] o.s.web.servlet.DispatcherServlet : Completed 200 OK 2025-07-14T14:20:33.145Z DEBUG 8 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : GET "/api/posts", parameters={} 2025-07-14T14:20:33.145Z DEBUG 8 --- [nio-8080-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.apiece.springboot_twitter.PostController#getAllPosts() 2025-07-14T14:20:33.146Z DEBUG 8 --- [nio-8080-exec-9] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json] 2025-07-14T14:20:33.147Z DEBUG 8 --- [nio-8080-exec-9] m.m.a.RequestResponseBodyMethodProcessor : Writing [[com.apiece.springboot_twitter.Post@1de33c5b, com.apiece.springboot_twitter.Post@e7411e2, com.apiece (truncated)...] 2025-07-14T14:20:33.149Z DEBUG 8 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : Completed 200 OK
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 질문.
두가지 질문 있습니다. 1) 16분 30초부터 설명하는 내부 트랜잭션 응답 흐름에서 궁금한점이 있습니다.이번 강의에서 내부 트랜잭션이 참여하게 되면 이것은 아무것도 하지 않는 것이다라고 하셨고내부 트랜잭션이 커밋해도 신규 트랜잭션이 아니기 때문에 실제 커밋을 호출하지 않는다. 그리고 실제 커넥션에 커밋이나 롤백을 호출하면 트랜잭션을 끝나기 때문에 안되기 때문에 실제 커밋을 호출하면 안되고 여기서는 아무것도 안한다 라고 설명하시는데요.그렇다면 다음 코드에서@Test void inner_commit() { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); log.info("내부 트랜잭션 시작"); TransactionStatus inner = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); log.info("내부 트랜잭션 커밋"); // txManager.commit(inner); log.info("외부 트랜잭션 커밋"); txManager.commit(outer); }내부 트랜잭션에서 실제 커밋을 호출하면 안되고 어차피 아무것도 하지 않는 것이라면 없어도 되는 코드 아닌가? 라고 생각했는데 아래 다른 분이 하신 비슷한 질문의 답변에서 내부 트랜잭션을 사용한다고 결정했다면 항상 내부 트랜잭션을 커밋이나 롤백을 결정하셔야 합니다. 라고 답변 하신 것을 보았는데요. 아무것도 하지 않는데 내부 트랜잭션은 왜 커밋을 해주어야하는건가요? 2) 1번 질문이랑 관련 있는 것 같기는한데요.이전 강의에서 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다고 하셨는데요, 이번 강의에서나 다음 강의에서나 외부(물리) 트랜잭션만 커밋해도 실제 커넥션에 모두 커밋되는 것 같은데.. 아닌가요? 이것이 맞다면 1번 질문과 마찬가지로 외부 (물리) 트랜잭션만 하면 되니 txManager.commit(inner) 코드는 필요 없는 것 아닌가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
빌드 시작부터..
빌드 시작부터 오류가 나요;;
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
두번째 게시글 등록이 안되네요.
안녕하세요. 수업 내용의 모든 내용에 대응했는데도,두번째 게시글 등록이 안되네요.브라우저에 보이는 에러 로그 남겨놓겠습니다.조언 부탁드립니다.
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
안녕하세요 토비님 개인적인 질문이 있습니다.
강의와는 관련이 없는데, 개인적인 질문이 있습니다.저는 자바 스프링 신입 개발자를 준비하고 있는 학생입니다.지금까지는 MVC 패턴만 사용하고, 모놀리틱 아키텍처를 사용해서 배포를 진행하고 프로젝트를 해왔습니다. 제가 알기로는 학습적으로나 포트폴리오적으로나 필요성을 느껴서 하는 공부가 제일 좋다고 들었습니다. 근데, 최근에는 어떤 필요성을 느끼지 못하면서 대규모 시스템 강의,헥사고날 아키텍처가 중요하다고 하니 강의 등을 듣고 있습니다. 왜냐하면, 본격적인 취업은 내년이고 시간이 좀 남았습니다. 그래서 해당 강의들을 들어두면 언젠가 개인 프로젝트나 현업에서 사용할 수 있지 않을까하고 듣고있습니다만, 제가 사용했던 MVC 패턴의 장단점 등 기본적인 것들도 알지 못하는 상태에서 계속 진도 나가듯이 이런 저런 강의를 듣고 하는게 괜찮을까요? 즉, 아직 기본도 잘 모르면서 계속 새로운 걸 배우는 과정들이 괜찮을까하는 걱정이 드네요. 하지만, 한편으로는 CS지식이 너무 방대해서 기초를 다 잡아두고 다음 단계로 넘어간다는 것도 솔직히 엄두가 안납니다. 그래서 우선은 쭉 이것저것 배워두고 나중에 필요하면 다시 찾아보면서 공부하면 되지 않을까 싶은데, 토비님은 어떤 방향이 더 괜찮다고 생각하시나요??
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
영상 편집에 오류가 있는것 같습니다.
3:10 MemberRegisterResponse 생성3:23 MemberRegisterResponse 생성같은 과정이 반복되는데 편집이 잘 못 된것 같습니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberInfoUpdateRequest, MemberRegisterRequest의 패키지 위치
학습중에 MemberInfoUpdateRequest, MemberRegisterRequest와 같은 객체들은 어댑터에서도 사용하고, 애플리케이션에서도 사용하고, 도메인 내부로직에도 사용하는데 도메인 패키지 내에 위치하는게 맞는지 의문이 들어서 질문드립니다!
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegister가 Member 엔티티의 C/U/D 작업을 모두 담당하나요?
안녕하세요, 토비님. 현재 MemberRegister 인터페이스는 register 뿐만 아니라 활성화/비활성화, 정보 업데이트 등의 오퍼레이션을 제공하고 있는데요,해당 인터페이스에 작성된 주석은 회원의 등록과 관련된 기능을 제공한다여서 'register를 제외한 오퍼레이션은 다른 인터페이스에 위치해야 하지 않나?' 하는 생각이 듭니다.혹은 회원 등록 외 오퍼레이션이 해당 인터페이스에 존재하는게 의도하신 바지만, 주석 내용이 수정되지 않은 걸까요? 궁금한 점을 요약해서 정리하자면, xxxFinder는 조회와 관련된 오퍼레이션을, xxxRegister는 생성/수정/삭제와 관련된 오퍼레이션을 가지는 걸까요? 완강 후 회사에서 강의로 알려주신 것들을 이것저것 적용해보며 재밌게 일하고 있습니다, 정말 감사드립니다.
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
같은 계층에서의 의존성 관리 질문
안녕하세요 Toby!먼저 좋은 강의 올려주셔서 감사 말씀 드립니다.열심히 강의를 듣던 와중에 궁금한 점이 있어서 질문드립니다. 회원 애플리케이션 기능 추가 강의에서 보면,MemberModifyService 클래스에서 MemberFinder 빈을 주입받아 사용하도록 구현해주셨습니다. 관련해서 같은 application 계층에서 서로 DI 받는 구조로 구성하게 될 경우, 발생하는 순환 참조와 같은 문제점들에 대해서는 어떻게 관리하는게 좋을까요? 그리고 그런 문제점이 발생하지 않도록 예방하기 위해서는 어떤 방법이 있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
프로젝트 오픈 에러
제공된 소스 폴더 itemservice-db-start 를 itemservice-db로 변경 후 openProject 하였더니 다음과 같은 빌드 에러가 납니다..질문 답변 봐도 별 내용 없는거로 보아 저만 이런거같은데 어떻게 해결하나요
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
DB 설정 문제
안녕하세요 프로젝트 초기 설정을 토비님 강의 진행대로 따라하고 있는 중입니다.제가 docker 는 잘 몰라서 강의 자료에 있는 Rancher Desktop 을 그냥 설치했구요서버 구동하기 전에 먼저 켜고 토비님 강의 순서 대로 진행했습니다 compose.yaml 의 내용을 수정하기 전에는 오류없이 잘 되는데 토비님이 작성하신 대로 수정을 해서 서버를 구동하면 계속 오류가 발생하고 있습니다 제 디비에 문제가 있나 싶어서 mysql를 완전 삭제하고 재설치 까지 해서 다시 해봐도 이전과 계속 같은 오류가 발생하는데 ai 를 통해서 해결해보려고 해도 해결을 못하고 있습니다 혹시 확인해보시고 알려주셨으면 합니다