묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
6분10초 질문있습니다.
안녕하세요. 6분11초 화면에 질문 있습니다. jpabook...OrderSimpleQueryDto() 에 인자로 o 를 바로 넘기면 엔티티의 식별자로 넘어가서 o를 바로 넣으면 안된다고 하셨는데 어떤 의미인지 이해가 잘 안되서 질문드립니다..ㅜ 제가 현재 이해하고 있는건 값을 가지고 있는 엔티티가 아닌 말 그대로 int,float 처럼 딸랑 Order 식별자만 넘어가서 값을 못 불러온다는 건가요? 제가 생각한게 맞다면 왜 그런지 알고싶은데 키워드나 공식문서에 어느부분을 봐야하는지 알려주실수 있을까요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
ls -arlth
arlth가 어떤용도로 쓰이는 명령어인가요?저는 윈도우 환경입니다.dir -arlth 해도 실행이 안됩니다. (빌드는 문제없이 수행하였습니다.)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
H2실행
안녕하세요 강사님 !H2실행이 안돼서 여러가지 방법을 시도해봤는데 실행이 안되네요.. 브라우저 창이 열리지않고 아래 사진과 같이 보여지고 종료되는데 혹시 이유 아신다면 알려주시면 감사하겠습니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
"강제로 LAZY LOADING을 하다" 의 의미
안녕하세요~ 기본편부터 2편까지 계속 들어오고 있는 수강생입니다. 17:18 초 부터 member를 강제로 LAZY 로딩을 해버린다고 말씀하셨는데 의미가 모호해서 이해가 잘 안됩니다. "강제로 지연로딩을 하다"는 의미가 마치 멤버 객체를 강제로 나중에 가져오겠다는 의미처럼 들리는데 실제 결과를 보면 즉시로딩한거 처럼 나와서 말입니다. 제가 이해하기로는 LAZY 로딩 전략으로 가져온 프록시객체 멤버를 강제로 가져온거 같은데 "강제로 LAZY LOADING 하다" 의 의미를 좀더 구체적으로 말씀해주실수 있으신가요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Interface를 이용한 다형성 매핑을 실무에서는 어떻게 풀어나가나요?
안녕하세요, 선생님(?). 영한님의 온라인 팬인 스프링 주니어 백엔드 개발자입니다. 영한님의 교재와 ORM관련 강의를 듣고, 열심히 사내에서 적극적으로 도입하자고 강추한 결과 실무에 도입을 할 기회가 생겨서 적용하고 있습니다 ! (뿌듯) ----------- 인터페이스를 통한 다형성의 경우에는 JPA 스펙에서 지원하지 않는 것으로 알고있는데요, 강의에 나온 예제 도메인과 같이 (Item, Book ... 등등) 공통적으로 묶어줘야 할 데이터가 있는 경우에는 abstract class를 통한 부모-자식 상속관계로 표현하는 것이 맞다고 생각하나, 이는 자식 클래스가 부모 클래스에게 강하게 결합되기 때문에 다양한 타입의 객체가 수행해야 할 책임을 묶는 경우에는 '인터페이스를 통해서 다형성을 구현하는 것이 더 맞지 않나?'라고 생각해서 질문드리게 되었습니다. 그러면, 실무에서는 JPA를 사용해서 도메인 객체를 표현할 때 인터페이스는 사용하지 않는지 궁금합니다. 혹은 사용하려면 이러한 문제를 실무에서는 어떻게 풀어나가는지에 대해서도 궁금합니다. ----------- 항상 질 좋은 강의 들을 수 있게 해주셔서 감사합니다. - 영한님의 온라인 팬 주니어 개발자 -
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP(TimeTraceAop)를 @Component 로 선언 vs SpringConfig에 @Bean으로 등록
안녕하세요. 김영한 팀장님, AOP(TimeTraceAop)를 @Component로 선언하지 않고 SpringConfig에 @Bean으로 등록할 수 있다고 설명하셨는데 실제로 코드를 돌려보면 빈 순환 참조 에러가 발생합니다. 강의대로 @Component로만 선언하면 문제가 없는데 왜 순환참조가 나는지 질문드립니다. 감사합니다. The dependencies of some of the beans in the application context form a cycle: memberController defined in file [~~~\out\production\classes\com\example\springexample\controller\MemberController.class] ↓ memberService defined in class path resource [com/example/springexample/SpringConfig.class] ┌─────┐ | timeTraceAop defined in class path resource [com/example/springexample/SpringConfig.class]
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
private static Map<Long, Member> store = new HashMap<>(); 관련 질문입니다.
안녕하세요. 존경하는 개발자님 질문 내용은 다음과 같습니다. private static Map<Long, Member> store = new HashMap<>(); 일반적으로 인스턴스를 생성할때에 다음과 같이 생성합니다. 상위객체 = new 하위객체(); 아무런 생각없이 막연하게 그냥 일종의 암묵적인 룰이라고만 생각하면서 사용해왔으나 왜 이렇게 사용을 하는지 정확한 이유를 인지하고 코딩하고자 질문드리옵니다. 제 개인적인 생각으로 이렇게 구현하는 이유는 다양한 HashMap의 구현체 중에 Map에 대한 구현된 기능들만이 필요한 경우가 이유라고 생각합니다. 즉 자원을 아끼기 위한 것이라 생각하여 다음과 같이 코딩하여 테스트 해보았습니다. 하지만 결과적으로 동일한 size라는 결과가 나왔습니다. 만약 HashMap hashMap = new HashMap<>(); 이라면 더 다양한 method 사용이 가능한며, 동일한 size인데, 왜 이렇게 선언하여 사용하는 것인가요?? 참조 : https://www.baeldung.com/java-size-of-object
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO inner class 사용 방식
안녕하세요 영한님 기초적인 질문인 것 같지만 궁금한 점이 있어 질문 드립니다. 강의 내용 중 CreateMemberRequest/Response 를 이너 클래스로 사용하는 이유가 궁금합니다 Dto클래스를 별도(외부) 클래스로 사용하는 것만 익숙하여 이너 클래스로 DTO를 생성하는 별다른 이점이 있는 것인지 궁금하네요 재밌는 JPA 강의 정말 감사합니다 좋은 하루 되세요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
EntityManager를 사용하는 Repository의 단위 테스트는 어떻게 수행하나요?
이번 강의에서는 Service 단위 테스트를 주로 수행하셨는데, Repository나 Domain 단위 등으로 쪼개서 테스트를 수행하는 게 보다 확실하다고 말씀해주셨습니다. 그 장점으로는 1) 테스트 속도가 빠르다. 2) 보다 정확하다. 를 말씀해주셨던 걸로 기억합니다. 강의 완강 후 학습 내용을 바탕으로 작은 실습을 해보고 있는데 이와 관련된 궁금증이 있어 질문드립니다. Repository에서 EntityManager @RequiredArgsConstructor으로 주입 받아 사용중입니다. 이 경우 Spring에서 EntityManager를 주입해주는 것이기 때문에 @SpringBootTest가 필수적인 걸까요? 만약 그렇다면 Repository와 Service단에서는 빠른 테스트를 수행하는 게 불가능하다고 생각하면 될까요? 혹은 다른 방법이 있다면 경험과 지식을 공유해주시면 감사하겠습니다. 좋은 하루 보내세요.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
file not found 질문
안녕하세요, Path를 가져오는 부분(resources.getFile()) 에서 자꾸 file not found를 던지는데 왜 그런지 도무지 이해가 가지 않습니다. csv 파일의 경로는 resources/zone_kr.csv 입니다. resource import 도 spring.core.io.Resource를 사용했습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
recompile말고 새로고침으로는 안 되나요?
영한님 안녕하세요! 강의 정말 잘 듣고 있습니다. 궁금한게 Spring Framework에서는 제 기억에 별 다른 세팅 없이 새로고침하면 정적 소스들이 변경됐던 것 같은데, 스프링 부트에서는 새로고침이 아니라 꼭 recompile을 해줘야 변경사항이 반영되는건가요? 새로고침만으로 변경시킬 순 없나요? 일일이 recompile하기 번거로울 것 같아서요 ㅠㅠ
-
미해결스프링 부트 개념과 활용
테스트 질문입니다!
테스트 강의를 듣던 중에 궁금합니다. 아직 초보라서 그런지, 왜 테스트를 해야 하는지 이해가 잘 안갑니다. 테스트로 돌리는 코드와 일반 코드는 무슨 차이가 있는건가요?? 강의에서도 그냥 일반적인 Runner에서 돌리는 것이랑 뭐가 다른지 잘 모르겠습니다ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
ID에 Type 선언
안녕하세요, Id Type 선언을 하실때 Wrapper 클래스를 사용하셨는데 특별한 이유가 있으신가요?
-
해결됨스프링 부트 개념과 활용
혹시 사용하고 계신 폰트 알 수 있을까요??
강의 잘 듣고 있습니다! 현재 인텔리제이에서 네이버D2 폰트 쓰고 있는데, 백기선님께서 쓰시는 폰트가 좀 더 부드러운 느낌이 들어서 그런데, 혹시 폰트가 뭔지 알 수 있을까요?? 감사합니다
-
미해결실전! 스프링 데이터 JPA
질문드립니다.
9:17초에서 changeTeam 함수를 보다가 문득 질문이 들어 질문 남깁니다. 함수명 자체는 팀을 '바꾼다'는 의미를 가지고 있는데 list에 add를 해주는 방식(team.getMembers().add(this))으로 구현하셨습니다. 그러면 리스트에 있던 기존 데이터객체의 jpa에서 알아서 update되는지, 아니면 무시하고 새로 add 되는지 궁굼합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JUnit5 사용하시는 분들은 이렇게...
JUnit5에서는 @SpringBootTest에 @RunWith(SpringRunner.class)가 포함되어있고, public을 명시해주지 않으셔도 됩니다. @Test(expected)는 4보다 귀찮아졌네요.. package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() throws Exception { //given Member member = new Member(); member.setName("1hoon"); //when Long joinId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(joinId)); } @Test void 중복_회원_예외() throws Exception { //given String name = "1hoon"; Member memberA = new Member(); memberA.setName(name); Member memberB = new Member(); memberB.setName(name); //when memberService.join(memberA); //then IllegalStateException thrown = assertThrows(IllegalStateException.class, () -> memberService.join(memberB)); assertEquals("이미 존재하는 회원입니다.", thrown.getMessage()); } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
junit5로 테스트하시는분은 이렇게 하시면 됩니다
제가 실습중인 환경은 SpringBoot 2.3.1.RELEASE여서 error: cannot find symbol 위 오류가 발생했는데, 코드 수정해서 해결했습니다. 참고하시면 도움될것같습니다. package jpabook.jpashop.member; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional // @Rollback(false) 테스트 종료 후 데이터를 롤배하지 않고 그대로 남겨두는 옵션 public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("1hoon"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then assertEquals(findMember.getId(), member.getId()); assertEquals(findMember.getUsername(), member.getUsername()); assertEquals(findMember, member); } }
-
해결됨스프링 시큐리티
다중 보안 설정
안녕하세요. 강의 잘 보고 있습니다~ 이번 강의 보다가 궁금한게 있는데 실제로도 다중 보안 설정 방식을 자주 사용하는지와 사용한다면 어떤 경우에 쓰여지는지가 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터를 유지 하려면
안녕하세요. 방금 막 완강을 마친 학생입니다. 우선 수업 정말 잘들었습니다. jpa와 함께, 지금까지 배웠던 것을 쭉 다시 복습하고, 2편으로 넘어갈 생각입니다. 이번 질문은 다름이 아니라, 지금 서버를 재시작하면 기존의 데이터가 삭제되고 데이터가 새로 쓰이잖습니까. 이게 application.yml의 ddl-auto:create 때문인지 그래서 테이블을 서버를 run할 때마다 새로 생성하기 때문인지, 아니라면 기존 데이터를 db에 유지하는 방법을 알고 싶습니다. 더 좋은 질문을 가져올 수 있도록 복습하겠습니다. 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findOrders() 질문 있습니다.
안녕하세요 영한님 findOrders() 메서드 질문 있습니다!! 앞에서부터 쭉 내용을 봤더니 머릿속이 굉장히 꼬인 것 같네요 ㅎㅎ; 앞서 V3.1 에서 페이징 한계 극복에 사용한 메서드 findAllWithMemberDelivery 는 to One 을 페이징에 영향을 주지않기 때문에 페치조인을 하였습니다. DTO에 직접 적용하는 V4의 경우 findOrders 메서드를 사용하였는데 이 때에도 to One 을 먼저 조인을 시켰습니다. 여기서 궁금한 점이, 이 때에는 왜 fetch 조인을 사용하지 않은 것인지 궁금합니다. 그리고 어째서 lazy 인데도 불구하고 1건으로 조회가 되는지 궁금합니다. Select o from Order o 만 하면 lazy이기 때문에 Order만 조회가 되지만 위의 경우는 join 을 해주었기 때문에 delivery와 member가 같이 조회가 되는 건가요? lazy인데 어떻게죠? 만약 그렇다면, findAllWithMemberDelivery() 메서드에서는 굳이 fetch를 왜 시켜준건지도 아리송합니다. 그냥 join해도 toOne 이니깐 row수를 증가시키지않고 딱 되지 않나요 ?? 이해했던게 막 꼬이네요 ㅜㅜ