항상 좋은강의 감사드립니다! spring-boot-web-starter 를 사용하면 추이적으로 JacksonJSON2 의존성이 추가되고 WebMvcConfigurerSupport 에 클래스패스에 HTTP 메세지 컨버터 관련 의존성이 있으면, DispathcerServlet 이 사용할 HTTP 메세지 컨버터로 추가해주는 기능이 구현되어 있음으로, 부트를 사용하면 추가적인 설정없이도 JacksonJSON2 HTTP 메세지 컨버터를 사용할 수 있다고 이해했습니다. 그리고, 앞선 강의에서 스프링 부트가 제공하는 자동설정을 사용하기 위한 조건에는 WebMvcConfigurerSupport 타입의 클래스가 빈으로 등록되어있지 않아야하는 조건이 있는것을 확인했습니다. 그렇다면 JacksonJSON2 HTTP 메세지 컨버터를 등록할 때 WebMvcConfigurerSupport를 사용하긴하지만 빈으로 등록하지 않고 사용하는 것이라고 이해하면 될까요? 감사합니다!
안녕하세요 강의 정말 잘 보고 있습니다. 강의 도중에 많이 사용하시는 map 함수에 대해 질문이 있어 글을 작성하게 되었습니다. 로또 만들기에서 {renderNum . map ( ( v ) => < div key ={ v } >{ v }</ div > ) ;} 이런식으로 사용하셨는데 이 구문을 그냥 바로 return에 넣으면 화면에 나타나지 않고 return 구문전에 변수에 담은 다음에 return 문에 변수로 나타내주어야 화면에 잘 나오는 현상이 있는데 리액트 버전이 올라가면서 바뀐 부분인 건가요? 아니면 제가 혹시 실수한 것이 있는건가요?
안녕하세요 ^^ 항상 강의 감사하게 듣고 있습니다! @Autowired public MemberController(MemberServcie service) {} 생성자 방식으로 주입할때 생성자 함수위에 autorwired를 생략해도 동작하던데 실무에서는 생략을 많이 하나요? 그리고 생략을 한다면 설명을 위해서 작성을 하신건가요?
sagas/index.js의 axios default url을 localhost 나 혹은 api.nodebird-hyun.shop 으로 바꾸면 ssr 로그인 유지가 안되요 axios.defaults.baseURL = 'http://127.0.0.1:3065'; // ssr 로그인 유지 o // axios.defaults.baseURL = 'http://localhost:3065'; ssr 로그인 유지 x // axios.defaults.baseURL = 'http://api.nodebird-hyun.shop'; ssr 로그인 유지 x 로그인 시점에서 쿠키가 생성은 되는거 같은데 application 탭을 열어보면 없는데 이유가 무엇일까여? 알려주시면 감사여
안녕하세요. 궁금한 내용이 생겨서 질문 올립니다. Entity 란 DB의 테이블과 매핑되는 객체라고 알고 있는데, update()라는 메서드가 엔티티에 들어가도 괜찮은 건가요? Entity 의 필드 값을 변경시키는 것이므로 Dto 나 다른 곳에서 update 가 되어야 하지 않을까 하는 궁금증입니다.
spring 핵심 원리에서 배웠던 DI, interface를 이용해서 추상화하는 방식이 사용되고 있지않고. 그냥 private final ItemService itemService 이런식으로 진행하고 계시는데 jpa 강의라서 이렇게 간단하게 설계 하시는건가요?? 실무에서 프로젝트 사이즈가 커지다보면 자연스레 추상화하게 되나요?? 질문 자체가 이상했으면 죄송합니다..
안녕하세요 강의를 듣던 중 궁금한점이 생겨 질문드리게되었습니다. MemberService에서 @Autowired 를 통해 MemberRepository를 주입시키는 과정에서 MemberRepository가 MemberService 보다 먼저 빈등록이 되어있다면 문제가 없겠지만 MemberRepository가 MemberService 보다 늦게 빈등록이 될경우 문제가 생길것 같은데 어떻게 작동하나요? 즉, 빈등록되는 순서가 궁금합니다. 읽어주셔서 감사합니다
복습을 하면서 예제 코드를 이리저리 건드려 보고 있습니다. 그런데 문득 이런 생각이 들었습니다. fetch 조인 대신 그냥 join문을 써서 같은 효과를 낼 수 있지 않을까? 그래서 예제 코드를 약간 수정해서 아래 코드를 돌려봤습니다. Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("회원1"); member1.setAge(10); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setAge(15); member2.changeTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setAge(15); member3.changeTeam(teamB); em.persist(member3); em.flush(); em.clear(); String query = "select m,t From Member m join m.team t"; List<Object[]> resultList = em.createQuery(query).getResultList(); for (Object[] o : resultList) { System.out.println(Arrays.toString(o)); } 그러면 다음과 같은 결과를 볼 수 있습니다. (아 참고로, Member와 Team 클래스에 toString을 미리 설정했습니다. 연관관계만 뺀 나머지 필드는 모두 출력합니다) fetch join을 안 썼지만, 한 방 쿼리가 날렸고, 같은 효과를 내는 걸 확인 했습니다. 이렇게 일반 join을 쓰면 되는데 어떤 차이 때문에 fetch join을 써야 되는 건가요? 아니면 제가 뭔가 놓친 게 있는 걸까요?
안녕하세요. 다대일 양방향 관계에 대해 질문 드립니다. Member 엔티티와 Team 엔티티가 다대일 양방향 맵핑 되어있고, package hellojpa; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue @Column(name= "MEMBER_ID") private Long id; private String name; private int age; @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<Order>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setTeam(Team team) { this.team = team; team.getMembers().add(this); } } package hellojpa; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany(mappedBy = "team",fetch = FetchType.LAZY) private List<Member> members = new ArrayList<>(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public List<Member> getMembers() { return members; } public void setName(String name) { this.name = name; } } 팀에서 getMembers 메소드를 통하여 해당 팀에 소속된 멤버들을 조회할 때 public class hellojpa { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); try { Member member =new Member(); member.setName("member1"); member.setAge(20); Team team = new Team(); team.setName("team a"); em.persist(team); member.setTeam(team); em.persist(member); Member member2 = new Member(); member2.setName("member222"); member2.setTeam(team); em.persist(member2); em.flush(); em.clear(); List<Member> memberList = em.find(Team.class, team.getId()).getMembers(); for (Member member1 : memberList) { System.out.println(member1.getName()); } } catch (Exception e) { transaction.rollback(); } finally { em.close(); } emf.close(); } } 저는 select member0_.MEMBER_ID members0_.TEAM_ID members0_.age members0_.name from Member members0_ where members0_.TEAM_ID=? 이러한 쿼리가 생성될 것으로 예상했습니다. 하지만 실제 쿼리가 나간것을 확인해보니 select members0_.TEAM_ID as team_id4_0_0_, members0_.MEMBER_ID as member_i1_0_0_, members0_.MEMBER_ID as member_i1_0_1_, members0_.age as age2_0_1_, members0_.name as name3_0_1_, members0_.TEAM_ID as team_id4_0_1_ from Member members0_ where members0_.TEAM_ID=? select문에서 특정 컬럼들이 중복되어 표시되는데(bold표시), 혹시 이렇게 표시되는게 정상적인 것인지 혹은 맵핑 과정에서 실수가 있었던지 궁금하여 질문 드립니다!
강의와 관련있는 질문 을 남겨주세요. • 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등) • 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색 을 해주세요. (중복 질문을 자제해주세요.) • 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’ 를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달 에도 요령이 필요합니다. • 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요. • 강의실 페이지 (/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다. • 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재 해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드 를 남겨주세요! 구체적인 질문 일수록 명확한 답을 받을 수 있어요. • 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요. • 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요 . • 정확한 질문 내용과 함께 코드 를 적어주시거나, 캡쳐 이미지 를 첨부하면 더욱 좋습니다. 기본적인 예의 를 지켜주세요. • 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용 은 스팸 처리 등 제재를 가할 수 있습니다. 제가 리액트만 공부하고 싶어서 섹션 2부터 보려고 하는데 섹션1, 2 나눠진 내용인가요 아니면 연달아 봐야하나요?