묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! Querydsl
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. start.spring.io 에 Querydsl 을 지원하지 않는 특별한 이유가 있는지 궁금합니다. 그리고 build.gradle 에서 Querydsl 설정이 잘 안된다면 임의로 QHello 파일을 생성하더라도 문제가 없는 것인지 궁금합니다.2. H2 DB 접근 시 localhost 로 변경해서 사용해야 하는 이유가 뭘까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
20강과 21강을 듣고 질문드립니다!
안녕하세요, 우선 좋은 강의 만들어주셔서 너무 잘 듣고 있습니다.Spring 어노테이션의 의미를 대략은 알고 있었지만 자세히 알지 못하고 사용했던 것 같은데, 강의를 들으면서 하나씩 정리되어 가는 기분을 느끼고 있어서 많이 배우고 있습니다.듣다가 궁금한 점이 생겨서 부족한 질문이지만 남겨보게 되었습니다! 21강에서 설명해주신 Configuration + Bean 조합과 Component의 어노테이션 차이가 있을까요? 개발자가 직접 만든 클래스를 스프링 빈을 만들어줄 때 사용해주는 것으로 이해해서 같은 역할인 것 같은데 어떤 차이가 있을까? 라는 생각이 들었습니다.20강에서 설명해주신 @Primary, 그리고 21강에서 설명해주신 @Qualifier는 모두 스프링에서 여러 선택지가 있어서 선택하기 어려울 때 이게 우선순위야! 라고 알려주는 개념으로 이해하였는데요. 그럼 이 두가지도 같은 역할을 하는 것 같은데 어떤 차이가 있을까? 가 궁금해졌습니다. 직접 지정해주는 @Qualifier가 우선순위는 더 높지만, 두가지 다 사용하면 개인적으로는 버그가 있을 때 디버깅을 하기 어려워질 것 같은데 두가지 다 사용하는 경우도 있나요? (제가 현업에서 아직 경험해보지 못했을 수도 있을 것 같습니다 ^^;) 답변해주시면 많은 도움이 될 것 같습니다! 좋은 강의 만들어주셔서 감사드립니다 🙏🏻
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
eGov 와 Intellij 둘쓰고 싶은데?
eGov 와 Intellij 둘쓰고 싶은데?안녕하세요 강의 잘듣고 연습하고 있습니다^^.eGovframe속에 내장된 mysql과 Intellij와 새로운mysql설치후 실행해보니 자꾸에러나는데어떻게하면 좋을까요? eGov속 mysql를 삭제해야하나요?
-
미해결실전! 스프링 데이터 JPA
Entity질문
Entity에 private String phoneNm; entity는 대소문자 구분안되고 phone_nm으로 넘어가나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persist에 대하여...
안녕하세요. 공부하다 헷갈리는 부분이 있어서 질문드립니다.제가 알기로는 persist를 실행을 해도 트랜잭션이 끝날 때 쿼리가 나가면서 insert가 되는 걸로알고 있습니다. 그래서 아래 사진과 같은 테스트를 해봤습니다.@Slf4j @SpringBootTest @Transactional @Commit class CategoryRepositoryImplTest { @Autowired CategoryRepository categoryRepository; @Autowired EntityManager em; @Test void save() { Category category = new Category("상의", 1, null); category.addDate(LocalDateTime.now(), LocalDateTime.now()); em.persist(category); log.info("================================="); } } save를 실행해보았더니 로그가 아래와 같이 찍힙니다.2023-02-16 22:43:53.648 DEBUG 8220 --- [ main] org.hibernate.SQL : insert into t_category (mod_date, reg_date, depth, name, parent_id) values (?, ?, ?, ?, ?)2023-02-16 22:43:53.684 INFO 8220 --- [ main] s.s.r.c.CategoryRepositoryImplTest : ================================= persist를 날리면 메소드가 끝날 때 트랜잭션이 끝나기 때문에 insert쿼리가 로그보다 먼저 찍히면 안될 것 같은데 로그에는 그렇게 찍히니 조금 혼란스럽습니다.현재 저 프로젝트는 jpa, spring data jpa, querydsl 를 같이 사용하고 있습니다.왜 저렇게 동작되는지 원인을 알 수 있을까요?혹시나 해서 관련된 테이블 category클래스와 dateColumn 클래스도 캡처하겠습니다.@Entity @Table(name = "T_CATEGORY") @Getter @NoArgsConstructor(access = PROTECTED) public class Category extends DateColumns { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "CATEGORY_ID", nullable = false) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer depth; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENT_ID") private Category parent; public Category(String name, Integer depth, Category parent) { this.name = name; this.depth = depth; if(depth > 1) { this.parent = parent; } } }@MappedSuperclass @Getter public class DateColumns { @Column(name = "REG_DATE", updatable = false, nullable = false) private LocalDateTime regDate; @Column(name = "MOD_DATE", nullable = false) private LocalDateTime modDate; public void addDate(LocalDateTime reg, LocalDateTime mod){ regDate = reg; modDate = mod; } }
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
26강 코딩 후 컨파일 시 오류 문의드립니다 !
Description:The bean 'userRepository', defined in com.group.libraryapp.domain.user.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration, could not be registered. A bean with that name has already been defined in class path resource [com/group/libraryapp/config/UserConfiguration.class] and overriding is disabled.Action:Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=truedelete 부분까지 코딩 후에 테스트 진행하려고 , 컴파일 시에 위와 같은 오류가 발생하고 있습니다. 구글링으로 아래 action 부분도 해보았으나 다른 오류들이 발생하네요 ㅜㅜ
-
해결됨실전! 스프링 데이터 JPA
스프링 데이터 jpa delete 최적화
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강사님 강의 정말 잘 보고 있다가 의문점이 생겨 이렇게 질문 남깁니다. 일단 간단하게 예시를 만들면 양방향 관계로 묶인 Member와 Team이 있을때 Team을 삭제할때 해당 Team에 있던 Member도 전부 삭제를 원하는 상황입니다.데이터는 Team 2개 Team 하나당 3개의 Member씩이 있는 상태입니다.Member.javapackage com.example.demo.entity; import lombok.*; import javax.persistence.*; @Entity @Table(name = "member") @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class Member { @Id @Column(name = "member_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long memberId; @Column(name = "member_name") private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team") private Team team; public Member(String name, Team team) { this.name = name; this.team = team; } } Team.javapackage com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "team") public class Team { @Id @Column(name = "team_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, orphanRemoval = true) List<Member> members = new ArrayList<>(); } controller.javapackage com.example.demo.entity.controller; import com.example.demo.entity.repository.TeamRepository; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor public class Controller { private final TeamRepository teamRepository; @DeleteMapping("/") public void deleteTeam(@RequestParam Long id) { teamRepository.deleteById(id); //deleteById는 JpaRepository에서 제공하는 기본 } } 위의 코드를 실행하고 delete요청을 했을때Hibernate:selectteam0_.team_id as team_id1_1_0_fromteam team0_whereteam0_.team_id=? Hibernate:selectmembers0_.team as team3_0_0_,members0_.member_id as member_i1_0_0_,members0_.member_id as member_i1_0_1_,members0_.member_name as member_n2_0_1_,members0_.team as team3_0_1_frommember members0_wheremembers0_.team=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefromteamwhereteam_id=? 이렇게 나오고 Team의 members의 fetch type을 eager로 바꾸었을때는 selectteam0_.team_id as team_id1_1_0_,members1_.team as team3_0_1_,members1_.member_id as member_i1_0_1_,members1_.member_id as member_i1_0_2_,members1_.member_name as member_n2_0_2_,members1_.team as team3_0_2_fromteam team0_left outer joinmember members1_on team0_.team_id=members1_.teamwhereteam0_.team_id=? Hibernate:deletefrommemberwheremember_id=?Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefromteamwhereteam_id=?이러한 쿼리가 발생하는것을 볼 수 있습니다. 여기서 제가 든 궁금점은 (편의상 맨 위의 쿼리를 1번쿼리라 하겠습니다)지연로딩을 할때 Team의 Member는 프록시이므로 member select 하긴 할텐데 selectmembers0_.team as team3_0_0_,members0_.member_id as member_i1_0_0_,members0_.member_id as member_i1_0_1_,members0_.member_name as member_n2_0_1_,members0_.team as team3_0_1_이 쿼리(2번 쿼리)가 어떻게 나오게 된건지 이해가 되질 않습니다. 최대한 쿼리를 최적화 해보려 했지만 지연로딩을 할때 fetch join, entity graph등을 사용할 수 없어 1번과 2번 쿼리를 즉시로딩을 사용할때 처럼 최적화 할 수가 없었고 delete문도 멤버를 한번에 delete, 그다음 team delete 이렇게 두번으로 최적화 하고 싶었는데 방법이 떠오르질 않습니다. 정확하게 알려주시기 번거로우시면 키워드나 따로 어떻게 공부하면 해결 할 수 있을지 알려주시면 정말 감사드리겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]엔티티 클래스 개발 1 강의에서 1:10분 쯤 Member, MemberRepository를 삭제 후 회원 레포지토리 개발 강의에서 MemberRepository를 새로 개발하셨습니다.이때 MemberRepositoryTest에는 그 전에 작성한 MemberRepository 기준으로 되어 있어 리턴 값이나 필드 값이 (UserName > name) 맞지 않아 오류가 발생하고 있습니다.그런데, 강사님은 MemberRepository를 새로 작성할 때 오류가 뜨지 않고 관련해서 언급을 하신 것이 없는 것(돌려봤는데 찾지 못한 것일 수도 있습니다.)으로 간주되는데 MemberRepositoryTest를 어떻게 처리하신 것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 폼 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/file/d/1nMMxLmSaPSEIpUd17iJ9VjbdbC_Elybx/view?usp=sharingnull point Exception이 일어나는데 어디서 문제가 있는지 도저히 못 찾겠습니다..jap로 올렸습니다ㅜ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gradle
안녕하세요만약 9003번을 커맨드라인에서 gradle 명령어로 띄우려면 어떻게 해야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
존경하는 김영한님 pdf에 오타가 있어 조심스레 말해봅니다
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 v2023-01-03 파일입니다.22페이지 맨 마지막 줄에 엔티티에가 -> 엔티티가 이렇게 되어야 할 거 같습니다.완벽한 강의가 더 완벽해지면 하는 마음에 조심스레 남겨봅니다.
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 유틸클래스 질문있습니다
보통 암호화하는 클래스들을 static 유틸클래스들로 만들었었는데 이런 static유틸클래스와 @Component를 달아서 사용하는 유틸클래스는 어떤 차이를 만들어낼수있는건가요..?제가 생각했을땐 유틸클래스를 스프링 빈으로 관리하겠다는 생각만 떠오르는데.. 이해할수있을만한 예시가있을까요..? 제가 못찾는건지 마땅히 그럴싸한 자료를 못봤던것같아서요 ㅠ강의도중 @Component얘기가 잠깐나와서 생각이나서 질문드려봅니다...
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 듣고 궁금한 점 질문 드립니다.
안녕하세요! 이번 강의를 들은 후 생긴 궁금증에 대해 질문 드립니다.1차 캐시 질문입니다.-> member1은 1차캐시와 db에 있고, member2는 1차 캐시에 없고 db에는 있는 상황을 봤을 때, 1차캐시가 저장(?)되려면 sava후 바로 find를 해야하나요? 즉, 하나의 트랜잭션 안에서 실행되어야 하는건가요? -> 1차 캐시가 성능면에서 엄청난 장점이 있지는 않다고 하셨는데, 그럼에도 아주 약간의 성능 개선(?)이 있기 때문에 영속성 컨텍스트의 장점이 되는건가요? 영속성 Entity의 동일성 보장 파트에서 질문입니다!-> 1차 캐시로 반복 가능한 읽기를 DB가 아닌 애플리케이션 차원에서 제공한다고 하셨는데, '애플리케이션 차원'이 정확한 어딘지? 무엇인지 궁금합니다! DB가 아닌 spring에서? 또는 jpa에서 트랜잭션 격리 수준을 제공해준다는 말씀이신가요? flush관련 질문입니다.-> 다음 강의에 설명이 자세히 있을 것 같긴 하지만... 강의를 듣기전 flush에 대한 제 생각과 들은 후의 이해도를 비교해 보고 싶어서 질문 남깁니다. transaction.commit()을 하면 쓰기 지연 저장소에 있는 쿼리들이 먼저 DB로 이동(flush)을 하고, 그 후에 실질적인 commit이 이루어진다고 이해하면 되나요? 개념적으로 flush와 commit의 차이를 잘 모르겠습니다!감사합니다!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티 직접 사용 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 강의를 복습하다가 질문이 생겨서요"select new jpabook.jpashop.repository.order.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count) " + " from OrderItem oi " + " join oi.item i " + " where oi.order.id = :orderId", OrderItemQueryDto.class)다음 소스를 보면 oi.order.id = :orderId 부분에서예전 강의 내용에서 jpql에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다는 내용이 생각나서 oi.order = :orderId로 수정했더니 정상적으로 동작하지 않더라구요. 혹시 다른 내용인걸까요?
-
미해결실전! 스프링 데이터 JPA
application.yml 질문드립니다.
[질문 내용]여기에 질문 내용을 남겨주세요. spring: datasource: url에 datajpa 부분이 오타났다고 뜨는데 왜 그렇게 되는 건가요? db 명은 datajpa로 했습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔터티 설게시 주의점 setter 리팩토링
안녕하세요! 영한님 강의 질 좋은 강의 너무 감사하게 보고 배우고 있습니다!다름이 아니라, 엔터티 설계시 주의점 강의에서setter를 사용하지 않기위해서 엔터티 설정을 아래와 같이 코드 수정을 해보았는데 이렇게 하는 게 더 안전한 방법인가요?? 실무에서도 이렇게 사용하는지 매우 궁금합니다..!Order 엔터티public class Order{ ... public void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); // orderItem.setOrder(this); OrderItem.builder() .order(this) .build(); } public void setDelivery(Delivery delivery){ this.delivery = delivery; // delivery.setOrder(this); Delivery.builder() .order(this) .build(); } } OrderItem 엔터티... @NoArgsConstructor public class OrderItem { ... @Builder public OrderItem(Order order){ this.order = order; } }
-
미해결실전! Querydsl
3.0 querydsl
선생님이 올린 3.0 + querydsl로 다시 gradle했는데 Gradel -> other -> complieQuerydsl이 없는데 상관없는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버에 배포 시 View 화면이 나오지 않습니다.
리눅스에 오류 뜨는 것도 없고 제목도 도서관리 애플리케이션이라고 나오는데 HTML 폼이 나오질 않습니다.Integllij에서 실행하면 잘 실행이 되는데 왜 이럴까요?./gradlew clean 이후 다시 ./gradlew build -x test로 다시 해봤는데도 안됩니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@JoinColumn(name="parent_id")
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@JoinColumn(name="parent_id") 의 parent_id 는 어디서의 column을 의미하는건가요?? @Column(name="parent_id") 부분이 없는거 같은데 어디서 parent_id의 컬럼이 만들어져서 이것과 join을 하는건지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소 order.cancel 호출 시 배송부분 검증 로직 때 연관관계가 Lazy라 delivery는 null 아닌가요?
안녕하세요 강의 잘듣고있습니다.주문서비스에서 cancel이 발생하면위 Order 엔티티에서 delivery 객체 배송상태 검증 부분이 있는데 Order 와 Delivery 연관관계 매핑시 FetchType.LAZY로 설정되어있으니 잘못검증되는건 아닌가요? jpql로 fetch join으로 가져와야 하는 케이스아닌가해서요