안녕하세요, 김영한님! 두어달 전에 취업 준비를 하면서 Django를 이용해서 웹사이트를 만들고 있었는데 운 좋게 취업이 되어 개발을 멈췄었습니다. 그러다가 페이스북 생활코딩 커뮤니티에 입문 강의를 무료로 만드셨다는 글을 보고, 퇴근 후에 이 강의를 흥미롭게 들으며 스프링에 대해 관심이 많아져 장고보다는 스프링을 이용하여 다시 웹사이트를 개발해보고 싶은 마음이 생겼습니다. 1. 사이드 프로젝트로 가볍게 웹 사이트를 만들 때에도 스프링을 많이들 사용하시는 지 궁금합니다. 강의를 들었을 때는 웹 사이트 하나만 개발 하기에는 좀 무거운 프레임워크라는 생각도 드는데, 스프링 외에 간단한 사이드 플젝에 빠르고 간편하게 사용하시는 프레임워크 혹은 기술이 있나요? 아니면 보통 스프링을 많이들 사용하시나요? 2. (1번 질문에서) 만약에 스프링으로 개발한다고 할 때, (현재 스프링 핵심 입문 강의도 듣고 있는데) 핵심 입문 강의와 무료인 이 입문 강의 두 개의 강의로도 썩 괜찮은 웹사이트를 만들 수 있을지 궁금합니다. 부족하다면 추가로 들어볼만한 강의 혹은 배울 지식이 있을까요? (만드려고 하는 사이트는 디시x사이드처럼 게시판에 글을 쓰는 기본 형태에 특정 조건을 만족하는 유저들끼리 소통을 하여 오프라인에서 만나도록 도와주는 컨셉입니다) 핵심 강의에서 리얼포스를 몇 번 언급하시던데, 저도 올해 초에 거금을 주고 산 리얼포스 굉장히 잘 사용하고 있습니다 ㅎㅎ 이 녀석 덕분에 돈 아까워서라도 퇴근 후에 뭐라도 하게 되네요. 열심히 해서 영한님이 현업에 계실 때 같은 팀 후배로 꼭 들어가고 싶네요 :) 늘 질 좋은 강의 감사드리며 더 많이 만들어주세요~~!
개인적으로 객체지향을 공부하면서 궁금증이 생겨서 질문 드립니다! 도메인을 설계하실때 만약 Member라는 도메인에서 여러가지 자동차를 가진다는 관점에서 @OneToMany ( cascade = CascadeType . ALL ) 를 사용하고 ArrayList를 활용해 1:N 관계를 맺을때, 무조건 이런 컬렉션을 사용해야 하나요?? https://jojoldu.tistory.com/412 이 블로그 글을 봤을때, Car라는 클래스를 Cars라는 일급컬렉션으로 만들고 그 Cars라는 List를 사용하려고 하면 1:N관계로 매핑하는건 불가능하겠죠? 그럼 JPA에서는 일급컬렉션을 사용할 일이 있을까요?? 언제나 좋은강의 감사합니다!
들은 강의를 기반으로 Member 클래스와 1대 다로 매핑되는 Community를 구현하려 합니다. Community는 추상 클래스입니다. 1. 위와 같은 경우에는 Repository를 CommunityReposity 외에도 NoticeRepository와 QnARepository를 구현해야하나요..? 1.2. NoticeRepository와 QnARepository를 구현해야한다면 CommunityService 외에도 NoticeService와 QnAService도 따로 구현해줘야하나요? 관련된걸 찾아보려해도 repository나 service 생성에 관한 내용을 찾아볼 수가 없어서 질문 드립니다......ㅠㅠ
안녕하세요! 실무 진행 중에 혹시 질문을 드려도 될까 해서 여기로 다시 왔습니다. Entity에서 column을 매핑할 때, 원래 테이블에 not null인 필드에 default 값이 있다면 엔티티에도 default 값을 정해주어야 하나요? 영한님은 보통 원래 테이블 필드에 default 값이 있으면 엔티티 column 작성시 어떻게 처리하시나요?
우선 정말 좋은 강의 해주셔서 감사합니다. batch size 관련해서 이해 안되는것이 있어서 질문드립니다. 우선 batch size가 일대다 관계에서 조인 문제의 N+1을 해결해준다는 것은 이해가 가는데. batch size를 100으로 설정했을시 쿼리에 team_id 당 member들을 100개씩 날려서 패치 조인처럼 하는 방식인가요?? 정확하게 이해가 안되서 질문드립니다.
두 가지 궁금증이 있어서 질문 드립니다. 1. 왜 Repository는 인터페이스를 만들고 구현체를 만들어 사용하나요? 2. MemberService에서는 왜 구현체인 MemoryMemberRepository가 아니라 MemberRepository를 사용하나요? 3-1. 왜 MemberService에 있는 MemberRepository는 final을 사용하나요? memberRepository가 바뀌지 않게 하기 위한 장치를 하나 더하는 느낌으로 생각해도 괜찮은 건가요? 3-2. MemberController에서 memberService를 정의해서 사용할 때와 MemberService에서 memberRepository를 정의해서 사용할 때 final을 적용하여 사용하는 것이 권장되나요?
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath [土 10 24 00:40:20 JST 2020] Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named hello at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:9) Process finished with exit code 1 안녕하세요 강사님 일본에서 강의를 보고있는데 이런 에러가 뜨는데 어디가 잘못인지 잘모르겠네요 공부를 하고싶은데 처음부터 막혔네요 ㅠ파일 압축해서 링크 올렸습니다 도움 부탁드려요 https://drive.google.com/file/d/1kPvVoYZ1WSx77OdBGGq4YMMpOgyc2q_7/view?usp=sharing
먼저 강의 내용과는 다른 질문 드려서 죄송합니다. 컨트롤러는 왜 테스트 해야 할까요? 컨트롤러 자체에는 비즈니스 로직이 없고 그저 서비스 계층에 위임하는 역할밖에 없는데 테스트 할 가치가 있을까요?? 서비스 계층 모두 테스트가 완료 되었다면 컨트롤러도 정확히 동작할거라고 예상 할수 있지 않나요?
안녕하세요. 우선 매번 좋은 강의 올려주셔서 정말 감사합니다^^ 질문이 있는데 클래스 로딩이 끝나고 나서 heap 영역에 인스턴스 관련 정보가 들어가 있고 Class<Book> bookClass = Book.class 를 통해 인스턴스를 가져올 수 있다고 했는데 그러면 이 인스턴스는 new Book() 으로 생성된 인스턴스와는 다른 건가요? 실제 멤버변수의 값을 가져오기 위해서는 왜 new Book() 으로 인스턴스를 생성해야 하는지 궁금합니다. 그리고 Book.class 로 가져오는 인스턴스와 new Book() 으로 생성된 인스턴스가 다르다면 어떻게 다른지도 알 수 있을까요?
강의를 전부 들어서 기본적인 Domain - Repository - Service - Controller 순서대로 하는 것은 알고있습니다. 그리고 이 강의에서는 회원 가입, 목록, 상품 목록, 상품 검색들 전부의 Domain Repository Service 단을 짜고 그 후에 Controller와 웹 뷰페이지를 만드셨는데요 제가 궁금한 부분이 실무에서도 이런식으로 밑단을 다 만들어놓고 웹을 구현하나요? 아니면 일부분을 먼저 만들어놓고 그 다음껄로 넘어가서 다시 짜는건가요? 예를 들면 전자는 로그인, 회원가입, 상품 등록, 상품 검색이 필요하다고 가정하면 로그인 회원가입 상품등록 검색에 필요한 모든 리포지토리와 서비스단을 미리 구현하는 거고 후자는 일단 회원가입에 필요한 리포지토리와 서비스 단을 구현하고 웹페이지를 만들어서 테스트 후에 로그인 기능을 만들고 상품 등록을 만들고 상품 목록과 검색을 만들고.. 이런 방식입니다. 사실 제가 웹사이트를 현재 만들고 있는데 전자로 진행하려고 했으나.. 이게 jpa도 처음 배워봐서 그런지 먼가 설계를 하는 부분부터 멘붕이 오더라구요.. 당장 필요한 메서드도 생각이 안나고 이 메서드는 무슨 파라미터가 필요할까.. 고생하면서 리포지토리 다 짜놓으니까 또 필요에 의해 List에서 Optional로 리턴 타입받으니까 꼬리에 꼬리를 물고 오류가 터지더라구요.. ㅋㅋ 그래서 실무에서는 보통 어떤 방식을 선호하는지 궁금해서 질문드렸습니다. 그리고 개인플젝같은경우는 후자로 해도 상관없나요? 이게 강의를 들을때는 몰랐는데 다 듣고 막상 해보려니 설계부터 장난이 아니네요
강의 잘봤습니다!! 역시 꿀강의!!! 배운 것을 토대로 토이프로젝트를 간단하게 진행 해보려고 합니다. 그래서 팁좀 받을 수 있을까... 해서요!!! 요구사항은 이렇습니다. - 회원엔티티는 본인의 플레이리스트 엔티티를 조회한다. - 플레이리스트의 정보는 동영상 엔티티에 저장되어 있다. - 회원은 본인의 플레이리스트 목록을 삭제할 수 있다. - 회원은 본인의 플레이리스트 중 가장많이 들은 곡 리스트를 조회할 수 있다. - 모든 사용자는 동영상 엔티티에 있는 모든 곡 중 가장 많이 들은 곡 리스트를 조회할 수 있다. 위와 같은 결과로 아래와 같이 설계하였습니다. 가능하시다면 피드백 가능할까요 ㅜ.ㅜ @Entity public 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 <> (); } @Entity public 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; // 재생 횟수 } @Entity public 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; }
안녕하세요 김영한 강사님. 기본편부터 Querydsl까지 강의를 듣고, 덕분에 예전부터 만들고 싶었던 사이드 프로젝트를 진행 중입니다. 진행 중에 기본적인 CURD를 하던 중, 기본편부터 말씀하신대로 수정은 더티체킹을 통해서 하고 있습니다. 여기서 궁금한게 더티체킹을 하기 위해 엔티티를 영속화시키려면 클라이언트에서 넘어온 id로 findById() 메서드를 통해 DB에 select를 꼭 한번 해주어야 하는건가요? 마찬가지로 삭제할 때도 클라이언트에서 넘어온 id로 엔티티를 조회 후 em.remove() 메서드에 인자로 넘겨주어야 하는건지 궁금합니다. (제가 알고 있는 영속화 시키는법: em.persist, em.find) 기존에 개발하던 방식은 update문, delete문을 통해 한 번만 통신을 하였는데, 뭔가 select를 한 번 더 하자니 손해보는? 느낌입니다 ㅋㅋㅋ 아니면 상황마다 다르게 해도 되는지요? 예를 들면 실무에서 관리자 사이트 같은 실시간 트래픽이 많지 않은 곳은 더티체킹을 하고, 실시간으로 수정이 빈번하게 일어나는 고객 서비스에서는 update문을 직접 날리는 방식으로 하는 것처럼요. 그리고 실무에선 엔티티에 Setter 메서드를 웬만하면 사용하지 않고 의미있는 메서드명을 만들어서 사용한다고 하셨는데, 그럼 예를 들어서 Member 엔티티를 더티체킹을 통해 수정하려면 changeMember(String username, int age) 같은 메서드를 만들어서 사용하시는 건가요? 강의를 들을 땐 뭔가 다 이해가 되는 기분이였는데, 막상 실제로 개발을 시작하니 기존과 다른 개발 방식이 낯서네요 ㅋㅋㅋㅋ 그래도 덕분에 개발에 대한 새로운 눈이 띄여지는 것 같습니다.