묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링과 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수를 증가시키지않고 딱 되지 않나요 ?? 이해했던게 막 꼬이네요 ㅜㅜ
-
미해결스프링 프레임워크 핵심 기술
Converter와 Fomatter 질문입니다.
안녕하세요. 강의를 다 듣고 복습을 하는데 여전히 좀 헷갈리는 부분이 많습니다ㅠㅠ 1. Converter, Formatter Registry는 메소드의 파라미터로 들어온 값들을 저장하는 공간 같은 것 인가요?? 2. WebConversionService가 Converter, Formatter registry를 상속받고 있으면, Registry의 메소드를 사용하지 않고 그냥 WebConversionService만 사용해도 registry의 파라미터를 받아서 변환할 수 있나요? 아니면 Converter, Formatter registry의 메소드를 이용해서 각각 파라미터를 저장 후 WebConversionService가 사용하는 방식인가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api 에 대해 질문이 있습니다.
안녕하세요 영한님 며칠 비 내렸더니 선선한 요즘이네요 ㅎㅎ API에 대해 궁금한 점이 있어 질문 드립니다. 이 강의 이후에도 api 에 대해 계속해서 다루게 되는데, 어떤 형식의 데이터를 가지고 있는지 api의 기준 같은 것이 실무에서 프로젝트 별로 딱 정해져있는건가요? 결과를 필요로 하는 개발자가 이런 데이터가 나오게끔해서 만들어주세요~ 하면 이제 그것에 맞춰 개발을 하게 되는 것인지 궁금합니다.
-
미해결스프링 시큐리티
비동기 질문
앞전영상에서는 MODE_INHERITABLETHREADLOCAL 로 시큐리티 컨텍스트 홀더의 전략을 바꾸지 않더라도 서로다른 스레드 내에서 시큐리티 컨텍스트가 공유되었습니다. 어떤 차이가 있는건가요?? 앞 영상에서도 메인 스레드와 메인스레드로부터 파생된 스레드인 것 같았는데..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
메서드를 만들어서 사용할때는
Item쪽에서 change() 메서드를 만들어야하나요 ? 만약 만들게된다면 service에서는 파라미터값으로 Id값을 안넘겨주고 findeOne만 실행하게 되는데 Item class에서는 값을 셋팅할때 book에대한 Author는 수정을 어떻게하나요?? Item에 존재하는 필드로 넘겨받은 값들은 수정할 수 있는데 Book에 있는 Author는 수정을 못하는데 어떻게 하면 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
onetoone에서 lazy관련해서 질문드립니다~!
안녕하세요, 고퀄리티 강의 감사합니다 영한님. onetoone과 lazy에 관련해서 궁금한점이 있어 질문 남깁니다. ※ table구조 - member (1) - (1) phone (onetoone) - fk는 phone에 member_id로 존재하는 형태 - member에 phone_id소유 X 1. 위 테이블 구조일때 jpa입장에서 onetoone에서는 proxy객체를 생성할 수 없기때문에 lazy로 설정해도 쿼리가 나간다는 부분에대해 이해했습니다. 2. 그런데 모든 연관관계는 lazy로 설정해야된다고 말씀하셨는데 onetoone을 lazy로 설정해버리면 복수건을 find했을때 바로 N+1이 발생하는것 같습니다. onetoone일 경우 lazy로 어떻게 동작하게 할 수 있는지 궁금합니다~! 불가능하다면 이런 경우 어떻게 해결할 수 있는지도 말씀해주시면 감사하겠습니다~!
-
해결됨스프링 프레임워크 핵심 기술
ApplicationRunner 인터페이스 질문입니다!
"5부 빈의 스코프" 강의를 보던 중 ApplicationRunner 인터페이스에 관해서 질문이 있습니다. API를 찾아보면 ApplicationRunner는 반드시 실행시켜야 하는 빈을 등록하는 것이라고 이해를 했습니다. 근데 궁금한게 어차피 Demonspring51Application에서 run 메소드를 사용하는데, 굳이 클래스파일을 하나 더 만들어서 run 메소드를 사용하는 이유는 뭔가요?? 아래와 같이 무식하게 코드를 집어 넣으니 static 필드가 아니라서 사용할 수 없다는 에러 메세지는 발생합니다... 근데 이유를 잘 모르겠습니다ㅠㅠ @SpringBootApplication public class Demospring51Application { @Autowired Single single; @Autowired Proto proto; public static void main(String[] args) { SpringApplication.run(Demospring51Application.class, args); System.out.println(single.getProto()); System.out.println(proto); } }
-
미해결실전! 스프링 데이터 JPA
마지막 부분 질문드립니다.
안녕하세요 !! 마지막 부분 궁금한 점이 생겨서 질문드립니다. 벌크를 사용하면 db에 바로 때려버린다고 하셨는데, //given ~~~~~ 5개 //when int resultCount=memberRepository.bulkAgePlus(20); em.flush(); em.clear(); 이 상황에서 먼저 벌크연산을 통해 db 값을 수정을 하고, flush와 clear 연산을 하게되는데, 이 상황에서의 flush 연산의 동작이 궁금합니다. 책에 따르면, 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 이 쿼리를 db에 전송한다. 라고 나와 있습니다. 먼저, save를 하는 과정에서 persist 한 member들 중 20이 넘는 것들은 member3 20member4 21member5 40 이 있습니다. persist 이후 bulk연산으로 db에 바로 값을 변경시키고, flush에 들어서게 되면 스냅샷 자체는 20,21,40 으로 되어있고 영속성컨텍스트에 따로 값을 변경하지 않았으니 수정된 엔티티를 찾지 못하고, 수정쿼리를 만들어서 지연 SQL 저장소에 등록하지도 않았을 것이고, 이곳에 등록된 것이 없으니 db에 전송하는 쿼리문도 없기 때문에 bulk 연산으로 수정된 값이 남게 되는 것인가요 ? 그렇다면 이 부분에서 flush는 스냅샷과의 비교를 했을 뿐 변경된 엔티티를 감지하지 못하였기 때문에 사실상 비교의 역할만 했다고 볼 수 있는건가요? 제가 이해한게 맞나 궁금합니다!! 긴 질문 읽어주셔서 감사합니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
안녕하세요 ModelMapper 질문이 있습니다.
현재 강의 수강하면서 개인적으로 프로젝트를 하나 만들어보면서 함께 적용도 해보면서 공부하고 있는데요. 웹이 아닌 API만 구현 중 입니다. 1. 제가 공부하기로는 API개발에서도 Entity를 리턴해주면 않되고 DTO로 만들어서 사용자에게 내보내줘야 한다고 알고 있는데 이때에도 ModelMapper와 같은 라이브러리를 이용해서 DTO to Entity와 Entity to DTO로 사용해야 하는건가요 ? 2. 모든 Response에서 DTO로 만들어서 리턴을 해주는지 궁금합니다. 모든 요청마다 DTO를 만들어서 리턴해주기에는 번거롭고 DTO가 많아질 것 같습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드
안녕하세요, 영한님 강의에선 위처럼 하셨는데 궁금한게 생겨 질문드립니다. 1. 위 대신에 아래처럼 Member 엔티티에 연관관계 메서드를 해도 되나요? public void addOrders(Order order){ this.orders.add(order); order.setMember(this);} 2. 연관관계의 주인에 편의 메서드를 하는게 좋은건가요? 3. 둘다 작성하면 안되나요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v3 질문드립니다.
안녕하세요~~ 제가 이해를 잘 못하고 있는 것 같아서 질문드립니다. 이번 강의에서 정리를 하면서, 엔티티 조회와 DTO 직접 조회로 크게 분류하셨는데, 저는 v3를 DTO List를 Return 하니깐 DTO 직접 조회에 속하는데 이 녀석은 batch_fetch_size 의 도움 또한 받는데, 그렇다면 둘 중 어느 곳에 속하는지 아리송 했는데 PDF정리하신 것을 보니 엔티티 쪽이라고 하셨습니다. 1. 여기서 말하는 DTO 직접 조회란, 엔티티의 다른 필요없는 컬럼을 보여주지 않기 위해서 OrderDto의 형태로 리턴해주는 것이 아니라, 따로 패키지를 만들정도의 DTO 를 칭하는 것인가요 ?? 정확한 구분이 어떤 기준으로 나뉘는지가 너무 헷갈립니다. 알 것 같으면서도 눈앞에서 놓치는 듯한 느낌이네요.. 2. 이번 최적화하는 과정에서의 코드에서 stream() 이용법 등 익숙치 않아서 이해하는데 어려움을 많이 느꼈던 것 같습니다. stream().map ~~ 은 괜찮았는데 리스트를 forEach(o-> ~~ 이런식으로 활용하는 부분이요. 혹시 이것과 관련되어서 어떤 키워드로 찾아서 공부를 해야하는지 알고 싶습니다. java8 stream 으로 공부하면 될까요 ? 이번 강의도 굉장히 도움이 많이되고 감사했습니다!!