묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Ctrl + Alt + M 단축키가 안되는 분들 보세요!
Geforce Experience가 설치된 분들에 한해서 Ctrl + Alt + M(Extract Method) 단축키가 작동하지 않는 오류를 발견했습니다. Geforce Experience를 켜고 설정에서 빨간색 네모 친 게임 내 오버레이 기능을 OFF하시면 단축키가 잘 작동할 것입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
src/test/resources/application.yml 인식 문제입니다.
안녕하세요 강사님! 테스트 수행 중 application.yml 파일을 test 밑에 두고 따라하는중에 application.yml 파일을 찾지 못하고 자꾸 main 밑에있는 파일을 불러왔습니다. 찾아보니 test/resources/config/application.yml 로 두어야 인식한다고 되어있고 저도 config 디렉토리를 생성해 그 밑에 두었더니 별도의 application.yml 파일로 읽어오더라구요. https://stackoverflow.com/a/53134737 인텔리제이로 학습중인데 이부분 한번 확인 부탁드리겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 등록시에 데이터 받는 로직
안녕하세요따로 공부하다가 궁금한 점이 생겨서 질문 남깁니다. item에서 InheritanceType.JOINED 를 사용하게 되면 화면에서 컨트롤러로 Form data를 받아와서 처리하는 로직은 어떤식으로 구현을 하는게 효과적인가요? 예를들면 formData에 타입을 넣어줘서 if else문으로 각각에 맞는 Controller(formData){if(formData.getType equals "B") persist( new B(formData.a formData.b , formData.c)) else if ("A") persist( new A(formData.dd formData.gg ) else if ~~~~} 이런식으로 전부 빼야 하나요?? 만약 위와 같은 상황이라면 타입이 엄청나게 많아지는 경우 무한if else을 쓰기는 좀 비효율적인 코드가 될 거 같아서 질문드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다.
안녕하세요 영한님. 강의를 참고하여 프로젝트를 진행 했는데 문제가 발생해서 질문드립니다. 관리자(admin)가 item 테이블의 데이터 하나를 삭제하려고 할 때 해당 item을 주문한 orderItem이 존재하여 외래키 제약 조건 위반이 발생하여 삭제를 하지 못하는 경우,(제가 의도한 설계는 아닙니다) 어떤 식으로 해결 해나가야 할지 감이 잘 잡히지 않네요. JPA에 외래키 제약 조건이 발생하더라도 강제로 삭제를 진행하는 옵션이 있다면 해당 옵션을 걸어줘야 하는지, 아니면 애초에 설계를 orderItem이 있다면 해당 item은 삭제가 안되게 설계를 해야하는건지 영한님이라면 어떻게 해결하실지 궁금합니다..ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 관련 질문입니다!
안녕하세요 김영한 강사님! 먼저 좋은 강의 만들어주셔서 감사합니다! 강의를 듣다가 cascade 관련하여 질문이 생겨서 질문 작성을 하게 되었습니다. 먼저 밑에 분이 먼저 해주신 질문과 강사님의 답변을 보고 cascade 옵션 자체는 연관관계 주인, 양방향등 관계 없이 1. 동일한 라이프 사이클, 2. 참조하는 주인이 private owner 일 때 라고 2가지 조건을 충족할 때 쓴다고 이해하게 되었는데, 그럼 order, orderItem, delivery에서 orderItem과 delivery가 각각 order만 참조하는, 다른 것이 참조할 수 없는 private owner인 건가요? private owner 라는 말에 대한 이해가 정확하게 되지 않아서 질문을 드립니다. 제가 이해한 것이 맞는 건가요? 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 영한님 질문있습니다.
안녕하세요 영한님. 바보같은 질문일 수 있는데, 상품주문() 단위테스트 작성하실 때 em.persist(member); em.persist(item); 엔티티를 영속성 컨텍스트에 저장, 을 해주는게 이득이라고 하셨는데, 어떤 이득이 있나요?? 1] 해당 코드 없어도 단위테스트는 통과해서요. 2] flush() 하는건 insert 쿼리문을 눈으로 할 수 있으니, 유용하겠구나 생각이 들었는데, persist()는 잘 와 닿질 않아서요 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity의 Embedded타입 쿼리 질문드립니다!
안녕하세요 김영한선생님! 좋은 강의 잘 듣고 있습니다. 우선 강의는 완강하였고 다음 강의도 수강 예정입니다^^ 그전에 몇가지만 질문 드려요! 1. 현재 Member Entity에 Embedded타입으로 Email을 넣었습니다. @Embeddable class Email{ private String eHead; // '@'전까지 private String eBody; // 첫 '.'전까지 private String eTail; // 나머지 } 이때 email을 통해 멤버를 찾는 쿼리를 EntityManager를 통해 생성하려고 하는데요! 이메일을 통해 멤버를 찾는 쿼리는 어떻게 생성해야 할까요?? 단순히 public List<Member> findByEmail(Email email){ return entityManager.createQuery("select m from Member m where m.email =: email", Member.class) .setParameter("email", email) .getResultList();} 이런 방식으로는 같은 이메일임을 쿼리가 못 안다고 생각합니다 ㅠㅠ 그렇다고 email의 각 필드를 get해서 and로 처리하는 방법은 뭔가 비효율적인 것 같습니다! 더 좋은 방법이 있을까요? 2. 보통 실무에서 멤버의 썸네일과 같은 이미지 데이터는 어떻게 관리하나요?? 이또한 벡엔드 서버에 넣나요? 아니면 프런트엔드 서버에 따로 관리하나요?? 강의와는 좀 무관하지만 간략하게 답변해주시면 너무너무 감사하겠습니다!!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지에 대해 질문 있습니다.
jpa를 이용해 게시판을 만들고 있는 중 입니다. 저는 repository 계층을 인터페이스에 JpaRepository를 상속해서 사용하고 있는데 수정 작업 시 영속이나 준영속 신경 안 쓰고 무조건 save로 데이터를 처리하는건 좋지않은 방법인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findOne과 findByName 의 차이에 대해
안녕하세요 강사님. 다름아니라 제가 JPA 기초를 듣지않고 바로 실습으로 와서 그런지 몰라도 entityManager의 기능 중 find 는 id 로만 조회가 가능하고 나머지 프로퍼티( 예 : name ) 으로 조회할 때는 쿼리를 날려서 조회해야하는 건가요? 그리고 쿼리로 조회하면 건 수가 1개이더라도 무조건 List로 반환되는 건가요 ??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. 다대다 관계에서 질문 있습니다.
안녕하세요. 예제에서는 Category에 JoinTable을 설정하고 Item에는 mapped by를 설정해주셨는데요. 그러니까 Category를 연관관계 주인으로 잡아주셨는데, 이거는 혹시 꼭 Category로 잡은 기준이 있는 걸까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
기본키 매핑 전략을 AUTO에서 IDENTITY로 변경 시 고려사항
안녕하세요. 기본키 매핑 전략을 AUTO에서 IDENTITY로 변경 시 고려해야하는 부분들에 대해 조언을 얻고자 질문드립니다. 현재 저는 MariaDB 10.3.11 version을 사용중이며 엔티티 클래스 개발시 LONG 타입 PK에 기본키 전략을 AUTO로 해왔습니다.서비스를 오픈 후, 개선 사항들을 확인해보던 중 기본키 전략이 TABLE전략으로 되어있더라구요.(hibernate_sequence 테이블이 생성되어있고 엔티티 수만큼 next_val row가 있으면 TABLE 전략이겠지요..?) 성능 문제 및 여러 이유때문에 모든 엔티티 클래스를 AUTO에서 IDENTITY 전략으로 변경하려 합니다. 그러기 위해, 엔티티 클래스 ID 필드를 IDENTITY로 바꾸고 DB 모든 테이블에 Auto Incerement 속성을 부여하고, 개발 서버에서 테스트한 결과 지금까지는 큰 문제를 발견하지 못했습니다. Id 값이나 필드 속성이 아닌 바꾸는 것이 아니라 크게 문제는 없을 것 같긴해서운영 환경에서도 변경을 하려는데 지금까지 너무 수월하게(?) 변경이 되어서 좀 걱정이 되더라구요. 그래서 강사님께 엔티티 ID 매핑 전략 변경 시 추가적으로 고려해야하는 부분이 있는지 여쭤보고자 이렇게 질문을 드립니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강사님 파라미터에서 데이터 받는것에 질문 드립니다.
updateItemForm 메소드에서 강사님은 modelattribute로 데이터를 받으셨는데, modelattribute를 안쓰고 그냥 BookForm form으로 데이터를 받아도 잘 수정이되더라구요. 1.modelattribute를 쓰신 이유가 궁금하며, 2. 파라미터로 데이터를 매칭할때 modelattribute를 쓰지 않는 상황에서 파라미터 변수가 form이라는 이름 때문에 매칭되는건지, 아님 Bookform이라는 객체타입를 인식해서 알아서 매핑되는건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order 엔티티 setter에 대해서 질문드립니다.
강사님께서 되도록 setter 메소드를 생성하지 말라고 하셨는데 createOrder 메소드에서 편의 메소드를 제외하고, setStatus, setOrderDate를 통해서 값을 설정하였습니다. 이 강의는 setter는 열었지만 , 되도록이면 status와 orderdate는 order 객체를 생성할시 생성자로 값 설정해주면 좋다는 의미신가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 관계를 맺을때 궁금한 점입니다.
개인적으로 객체지향을 공부하면서 궁금증이 생겨서 질문 드립니다! 도메인을 설계하실때 만약 Member라는 도메인에서 여러가지 자동차를 가진다는 관점에서 @OneToMany(cascade = CascadeType.ALL) 를 사용하고 ArrayList를 활용해 1:N 관계를 맺을때, 무조건 이런 컬렉션을 사용해야 하나요?? https://jojoldu.tistory.com/412 이 블로그 글을 봤을때, Car라는 클래스를 Cars라는 일급컬렉션으로 만들고 그 Cars라는 List를 사용하려고 하면 1:N관계로 매핑하는건 불가능하겠죠? 그럼 JPA에서는 일급컬렉션을 사용할 일이 있을까요?? 언제나 좋은강의 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Inheritance(strategy = InheritancType.JOINED) 구현 중 질문 있습니다..
들은 강의를 기반으로 Member 클래스와 1대 다로 매핑되는 Community를 구현하려 합니다. Community는 추상 클래스입니다. 1. 위와 같은 경우에는 Repository를 CommunityReposity 외에도 NoticeRepository와 QnARepository를 구현해야하나요..? 1.2. NoticeRepository와 QnARepository를 구현해야한다면 CommunityService 외에도 NoticeService와 QnAService도 따로 구현해줘야하나요? 관련된걸 찾아보려해도 repository나 service 생성에 관한 내용을 찾아볼 수가 없어서 질문 드립니다......ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실무에서 WEB을 구현할 때의 순서가 궁금합니다.
강의를 전부 들어서 기본적인 Domain - Repository - Service - Controller 순서대로 하는 것은 알고있습니다. 그리고 이 강의에서는 회원 가입, 목록, 상품 목록, 상품 검색들 전부의 Domain Repository Service 단을 짜고 그 후에 Controller와 웹 뷰페이지를 만드셨는데요 제가 궁금한 부분이 실무에서도 이런식으로 밑단을 다 만들어놓고 웹을 구현하나요? 아니면 일부분을 먼저 만들어놓고 그 다음껄로 넘어가서 다시 짜는건가요? 예를 들면 전자는 로그인, 회원가입, 상품 등록, 상품 검색이 필요하다고 가정하면 로그인 회원가입 상품등록 검색에 필요한 모든 리포지토리와 서비스단을 미리 구현하는 거고 후자는 일단 회원가입에 필요한 리포지토리와 서비스 단을 구현하고 웹페이지를 만들어서 테스트 후에 로그인 기능을 만들고 상품 등록을 만들고 상품 목록과 검색을 만들고.. 이런 방식입니다. 사실 제가 웹사이트를 현재 만들고 있는데 전자로 진행하려고 했으나.. 이게 jpa도 처음 배워봐서 그런지 먼가 설계를 하는 부분부터 멘붕이 오더라구요.. 당장 필요한 메서드도 생각이 안나고 이 메서드는 무슨 파라미터가 필요할까.. 고생하면서 리포지토리 다 짜놓으니까 또 필요에 의해 List에서 Optional로 리턴 타입받으니까 꼬리에 꼬리를 물고 오류가 터지더라구요.. ㅋㅋ 그래서 실무에서는 보통 어떤 방식을 선호하는지 궁금해서 질문드렸습니다. 그리고 개인플젝같은경우는 후자로 해도 상관없나요? 이게 강의를 들을때는 몰랐는데 다 듣고 막상 해보려니 설계부터 장난이 아니네요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티설계질문입니다.
강의 잘봤습니다!! 역시 꿀강의!!! 배운 것을 토대로 토이프로젝트를 간단하게 진행 해보려고 합니다. 그래서 팁좀 받을 수 있을까... 해서요!!! 요구사항은 이렇습니다. - 회원엔티티는 본인의 플레이리스트 엔티티를 조회한다. - 플레이리스트의 정보는 동영상 엔티티에 저장되어 있다. - 회원은 본인의 플레이리스트 목록을 삭제할 수 있다. - 회원은 본인의 플레이리스트 중 가장많이 들은 곡 리스트를 조회할 수 있다. - 모든 사용자는 동영상 엔티티에 있는 모든 곡 중 가장 많이 들은 곡 리스트를 조회할 수 있다. 위와 같은 결과로 아래와 같이 설계하였습니다. 가능하시다면 피드백 가능할까요 ㅜ.ㅜ @Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; @OneToMany(mappedBy = "member") private List<PlayList> playList = new ArrayList<>();} @Entitypublic class Video { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Column(name = "video_no") private String videoNo; private String image; private int count; // 재생 횟수} @Entitypublic class PlayList { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int count; // 재생 수 @ManyToOne @JoinColumn(name = "member_id") private Member member; @ManyToOne @JoinColumn(name = "video_id") private Video video;}
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit5 이용했을 시 재고수량초과 테스트코드 작성방법입니다
@Testpublic void 상품주문_재고수량초과() throws Exception{ //given Member member = createMember(); Item item = createBook("시골 JPA", 10000, 10); int orderCount = 11; //when //then NotEnoughStockException ex = assertThrows(NotEnoughStockException.class, () -> { orderService.order(member.getId(), item.getId(), orderCount); }); assertEquals(ex.getMessage(), "need more Stock");}
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@ModelAttribute
안녕하세요! // @PostMapping(value = "/items/edit") @PostMapping(value = "/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form) { Book book = new Book(); book.setId(form.getId()); book.setName(form.getName()); 1. @ModelAttribute를 안붙여도 되는데 강사님은 왜 붙이신건지 알고 싶습니다!! 2. url에 itemId가 form으로 넘어오는 상황인데 이때 url에서 itemId를 빼는 것이 더 올바른 건가요? 아니면 강사님 처럼 사용은 하지 않아도 관례상 넣어줘야 하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
예외 발생 시킬때
문득 궁금한 점이 예외가 발생되어서 catch문으로 잡아서 처리하지 않으면 프로그램이 종료되는걸로 알고 있습니다. 여기서 중복 이름 일때 예외 발생시키고 어디서도 catch로 잡아 주지 않았는데 왜 프로그램이 종료되지 않는지 궁금합니다 ㅠㅠ