updateItemForm 메소드에서 강사님은 modelattribute로 데이터를 받으셨는데, modelattribute를 안쓰고 그냥 BookForm form으로 데이터를 받아도 잘 수정이되더라구요. 1.modelattribute를 쓰신 이유가 궁금하며, 2. 파라미터로 데이터를 매칭할때 modelattribute를 쓰지 않는 상황에서 파라미터 변수가 form이라는 이름 때문에 매칭되는건지, 아님 Bookform이라는 객체타입를 인식해서 알아서 매핑되는건지 궁금합니다.
안녕하세요 제로초님, 강의 잘 보고 있다가, 댓글 삭제 기능도 만들고 싶어 만들어 보았는데요... 삭제시 삭제는 되나 새로고침을 해야 사라지는 부분이 있더라구요, 삭제 버튼 클릭시 바로 사라지도록 하고 싶은데 어느 부분이 잘못 됬는지 감이 잡히질 않습니다ㅠㅠ 한번 확인 부탁드려요ㅠㅠ reducer api onClick 삭제 버튼 사가
끝에 첨부한 코드로 실행하면 작동은 잘 됩니다. window.addEventListener('click', () => { onClickRef.current(); }); 문제는 강의에 나오는 코드인 위 코드로 작성하면 removeEventListener를 반환 해주더라도 계속해서 이벤트가 삭제되지 않고 클릭할 때마다 Listener가 계속 생성되면서 Count 가 몇 배로 불어나는 버그가 생깁니다. addEventListener에서 화살표함수를 사용하여 OnClickRef.current(); 를 호출해주는 이유가 있나요? 물론 removeEventListener없이 화살표 함수로 eventListener 를 실행하여도 의존성 배열부분에 빈배열로 남기면 당연히 작동은 잘 합니다. 그런데 보통 removeEventListener 를 리턴해주는 것이 정석인 것 같은데 화살표함수로 호출한 eventListener는 removeEventListener로 제거가 안되더라구요. 별거 아닌 코드인데 원인을 모르니 답답하네요. 그리고 제가 작성한 코드에서도 이 부분을 ref객체를 useEffect 내에서 수정하지 않으면 문제가 생기는데 왜 그런지 모르겠네요.. 강의에서 설명해주신 바로는 useEffect 내에서 ref객체를 수정하는 이유는 이후에 있을 concurrent mode로 실행될 때를 대비해 사용하는 것이고, concurrent mode로 실행하지 않을 시에는 문제가 생기지 않을 것이다라고 하셨는데, Component 함수에서 직접 수정 시엔 원인 모를 문제로 웹이 다운 되어버립니다. 느낌상 어떤 부분이 지나치게 렌더링이 되면서 다운 되는 느낌인데 뭔지 모르겠습니다. 왜 이런 현상이 일어나는지 알 수 있을까요? import { useState } from "react"; import MyComponent from "./components/MyComponent"; function App() { const [count, setCount] = useState(0); function onClick() { setCount(count + 1); } return ( <div> <MyComponent onClick={onClick}/> <div>{count}</div> </div> ); } export default App; import { useEffect, useRef } from "react"; export default function MyComponent({ onClick }) { const onClickRef = useRef(); useEffect(() => { onClickRef.current = onClick; }); useEffect(() => { window.addEventListener('click', onClickRef.current); return () => window.removeEventListener('click', onClickRef.current); }); return ( <div>테스트</div> ); }
@Test public void findbyName() { Member member1= new Member(); member1.setName("spring1"); repository.save(member1); Member member2= new Member(); member1.setName("spring2"); repository.save(member2); Member res = repository.findByName("spring1").get(); assertThat(res).isEqualTo(member1); } 코드에 이상이 있는 것 같지는 않은데... java.lang.NullPointerException이 뜨네요ㅠㅠ 다른 테스트들은 잘 돌아갑니다. MemoryMemberRepository.java 일부 @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); }
제목이 좀 이상해서 죄송합니다. @OnetoOne 어노테이션을 붙히고 Parent와 Son을 1대1 관계로 만들어 보았습니다. 각자 Son1, Parent1 객체를 만들고, 추가적으로 Son2 까지 만들었는데, 신기했던건 Son1의 Parent1이 연결되고, Son2에도 parent1이 가능하다는 겁니다. 당연히 자바관점이나, Sql 관점에서는 당연한 거긴 한데, 이왕 어노테이션 까지 달았으면, 하이버네이트에서 어떤 로직이 있을거 라 예상했지만 그렇지 않네요. 혹시 제가 모르는 다른 방법으로 OneToOne이 아닐 때 Exceoption을 던져주거나, 그렇지 않다면 개발자 입장에서 예방하는 방법이 있을까요? 꼭 답을 안알려주셔도 됩니다.! 제가 참조할만한 자료나, 어떤 부분의 공부가 부족해서 그런지 알려주시면 더욱 더 감사하겠습니다. ^^
안녕하세요, 김영한님! 두어달 전에 취업 준비를 하면서 Django를 이용해서 웹사이트를 만들고 있었는데 운 좋게 취업이 되어 개발을 멈췄었습니다. 그러다가 페이스북 생활코딩 커뮤니티에 입문 강의를 무료로 만드셨다는 글을 보고, 퇴근 후에 이 강의를 흥미롭게 들으며 스프링에 대해 관심이 많아져 장고보다는 스프링을 이용하여 다시 웹사이트를 개발해보고 싶은 마음이 생겼습니다. 1. 사이드 프로젝트로 가볍게 웹 사이트를 만들 때에도 스프링을 많이들 사용하시는 지 궁금합니다. 강의를 들었을 때는 웹 사이트 하나만 개발 하기에는 좀 무거운 프레임워크라는 생각도 드는데, 스프링 외에 간단한 사이드 플젝에 빠르고 간편하게 사용하시는 프레임워크 혹은 기술이 있나요? 아니면 보통 스프링을 많이들 사용하시나요? 2. (1번 질문에서) 만약에 스프링으로 개발한다고 할 때, (현재 스프링 핵심 입문 강의도 듣고 있는데) 핵심 입문 강의와 무료인 이 입문 강의 두 개의 강의로도 썩 괜찮은 웹사이트를 만들 수 있을지 궁금합니다. 부족하다면 추가로 들어볼만한 강의 혹은 배울 지식이 있을까요? (만드려고 하는 사이트는 디시x사이드처럼 게시판에 글을 쓰는 기본 형태에 특정 조건을 만족하는 유저들끼리 소통을 하여 오프라인에서 만나도록 도와주는 컨셉입니다) 핵심 강의에서 리얼포스를 몇 번 언급하시던데, 저도 올해 초에 거금을 주고 산 리얼포스 굉장히 잘 사용하고 있습니다 ㅎㅎ 이 녀석 덕분에 돈 아까워서라도 퇴근 후에 뭐라도 하게 되네요. 열심히 해서 영한님이 현업에 계실 때 같은 팀 후배로 꼭 들어가고 싶네요 :) 늘 질 좋은 강의 감사드리며 더 많이 만들어주세요~~!
강의와 별개의 내용일수도 있지만, 한가지 여쭙고 싶습니다. 선생님 강의를 듣고 테이블을 좀 많이 사용하는 프로젝트를 하나 해보고 있습니다. 각 테이블마다 saga/reducer를 하나씩 만들고 있는데요, 이럴경우 문제가 될 수 있나요? 공통된 부분은 묶어내고 싶긴 한데, 분류하기가 조금 복잡해서요. 예를 들어, authReducer, customerReducer, productReducer 등등 각 테이블마다 다 만들었거든요. 이런 경우 퍼포먼스 면에서 부족함이 있을까요? 내용이많고 큰 프로젝트보단 중/소 규모의 프로젝트가 리액트에 어울리다라는 이야기를 들은적이 있었지만, 개발하는 사람의 능력에 따라 다르겠지만, 제가 배운 내용을 기반으로 한번 프로젝트를 진행해보고 싶어서 이렇게 시도해보고 있습니다. 강의와 관련있는 질문 을 남겨주세요. • 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등) • 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색 을 해주세요. (중복 질문을 자제해주세요.) • 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’ 를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달 에도 요령이 필요합니다. • 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요. • 강의실 페이지 (/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다. • 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재 해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드 를 남겨주세요! 구체적인 질문 일수록 명확한 답을 받을 수 있어요. • 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요. • 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요 . • 정확한 질문 내용과 함께 코드 를 적어주시거나, 캡쳐 이미지 를 첨부하면 더욱 좋습니다. 기본적인 예의 를 지켜주세요. • 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용 은 스팸 처리 등 제재를 가할 수 있습니다.
개인적으로 객체지향을 공부하면서 궁금증이 생겨서 질문 드립니다! 도메인을 설계하실때 만약 Member라는 도메인에서 여러가지 자동차를 가진다는 관점에서 @OneToMany ( cascade = CascadeType . ALL ) 를 사용하고 ArrayList를 활용해 1:N 관계를 맺을때, 무조건 이런 컬렉션을 사용해야 하나요?? https://jojoldu.tistory.com/412 이 블로그 글을 봤을때, Car라는 클래스를 Cars라는 일급컬렉션으로 만들고 그 Cars라는 List를 사용하려고 하면 1:N관계로 매핑하는건 불가능하겠죠? 그럼 JPA에서는 일급컬렉션을 사용할 일이 있을까요?? 언제나 좋은강의 감사합니다!
제가 setState가 비동기처리이면서 배치이다 라는것을 보면서 궁금한 점이생겼는데요.. onAdd함수를 보면 currentId를 1증가시키고, todo변수에 값을 할당한뒤 setTodoList에 값을 넣어서 렌더링하는 순서인데요. 만약에 동기처리처럼 onAdd버튼을 클릭시 currentId에 1을 증가한후, 그값을 todo에 넣은뒤 그 값을 setTodoList에 반영 하고 싶다고면 어떻게 해야할까요?
들은 강의를 기반으로 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개씩 날려서 패치 조인처럼 하는 방식인가요?? 정확하게 이해가 안되서 질문드립니다.