@Service @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; @Transactional //변경 public Long join(Member member) { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } } @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } } --------------------------------------------------------------------------- // 테스트 코드 @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("kim"); //When Long saveId = memberService.join(member); //Then assertEquals(member, memberRepository.findOne(saveId)); } } 회원 도메인 개발 파트의 마지막 강의에 있는 테스트 부분입니다 테스트는 성공이고, 테스트 결과 로그에는 member 객체에 대한 select sql이 찍힙니다 그런데 테스트 로그에 왜 select sql이 나오는지 잘 모르겠습니다 제가 이해하고 있는 내용은 이렇습니다 //When Long saveId = memberService.join(member); 위 코드에서 insert sql 이 생성되지만 내부 트랜잭션이라 커밋하지 않아서 해당 엔티티가 영속성 컨텍스트에만 추가된 상태 //Then assertEquals(member, memberRepository.findOne(saveId)); 위 코드에선 영속성 컨텍스트의 member를 가져오니 select sql 이 실행되지 않습니다 //When Long saveId = memberService.join(member); //Then assertEquals(member, memberRepository.findOne(saveId)); 그리고 테스트 코드에서 @Transactional 은 롤백이니 join()의 결과가 롤백됩니다 join() 은 롤백됬으니 테스트 결과 로그에 insert sql 이 나오지 말아야 하고, 영속성 컨텍스트의 member를 조회했으니 select sql 도 나오지 말아야 하는 것으로 예상됩니다 하지만 insert sql 은 예상한대로 테스트 결과에 나오지 않는데, select sql 은 나오는 이유를 모르겠습니다 해결했습니다 validateDuplicateMember(member) 중복 회원 검증하는 메서드에서 select sql을 호출하고 있었습니다 em.persist() 보다 먼저 호출하기 때문에 DB에서 바로 조회해오고 있었습니다 이걸 못보다니..
안녕하세요. v15로 업데이트를 했는데 하이드레이션 오류가 발생하기 시작했습니다. /book/1 페이지에서 vscode 저장으로 Next.js가 재실행이 되면은 오류가 발생하는데요. 하이드레이션 과정에서 서버와 클라이언트의 HTML이 일치하지 않아 클라이언트에서 재생성이 된다는 오류가 발생하고 있습니다. 그래서 속도 저하가 굉장히 심해진 상태입니다. https://nextjs.org/docs/messages/react-hydration-error 이 곳에서 오류가 발생하는 원인과 해결법을 말해주고는 있는데, 지금 저한테만 발생하는 현상인건지 좀 궁금합니다.
컨텍스르를 설계하실 때 const Consumer = ({childeren } => <>{children(emiiter.get())}</>) 설명하시면서 렌더프롭이라고 설명하셨습니다. 그 이후 Count 설계하실 때 {(value) => <div>{value.count}</div>} 라고 적으셨는데 렌드 프롭에 대한 설명이 없으셔서 정확히 어떻게 렌더링되는지 궁금합니다!! 정확한 원리를 자세히 모르겠습니다
List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList<Integer>(); 객체의 타입에는 들어갈 데이터의 타입을 명시해 주어야 하지만 인스턴스를 생성할 때는 타입추론으로 인해 다이아몬드에 타입을 입력하지 않아도 되는 부분에서 궁금증이 생겼습니다. 타입추론은 인스턴스 생성 시 개발자의 편의를 위해 몇 자 줄여주는 정도인가요? 아니면 다른 부가적인 장점이 있는지 궁금합니다. 컴파일러가 타입을 추론하기 위한 시간이 추가적으로 소요될 것 같은데(고려할 정도는 아니겠지만...) 오히려 타입추론으로 최적화 적인 방면으로 이점도 있을까요?..
ArrayList는 배열을 기반으로 만든 List이며 LinkedList는 객체의 참조로 연결된 List로 이해했습니다. 요즘에는 메모리 용량이 많이 크기 때문에 고려하지 않아도 된다고 생각하는데 궁금증이 있어 질문을 남깁니다. LinkedList는 데이터가 추가 될 때 마다 새로운 Node를 만들어서 현재 가지고 있는 데이터의 크기만큼 메모리를 차지하는 반면 ArrayList는 들어있는 데이터 크기가 일정 크기를 넘는 경우 더 많은 데이터를 저장할 수 있는 새로운 Array를 생성하여 반환하기 때문에 동일한 개수의 데이터를 저장해도 ArrayList가 메모리 상에서 차지하는 크기가 크다고 생각하면 되나요?
안녕하세요! 지금까지 강의 너무 잘 들었습니다. React와 TypeScript 강의를 듣고 복습겸으로 제공해주신 핸드북 사이트까지 참고하면서 공부하고 있습니다! 혹시나 Next.js의 핸드북 사이트를 제가 못 찾은건지 아니면 없다면 만드실 계획은 없으신지 궁금해서 질문 올려봅니다. 좋은 강의 만들어주셔서 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 2강 코틀린에서 null을 다루는 방법 수강중 궁금한 지점이 생겨 문의드립니다. name이라는 필드에 NotNull 어노테이션을 달아주어서 인스턴스 초기화시 null값은 받을 수 없게 하고싶었는데이런 경우에는 null을 대입해도 에디터상에서 에러를 짚어주지 못하더라구요.회사 프로젝트를 전환하는 과정중에는 이런 문제가 꽤나 발생할 것 같은데 좋은 해결책이 있을까요? package com.lannstark.lec02; import org.jetbrains.annotations.NotNull; public class Person { @NotNull private final String name; public Person(String name) { this.name = name; } public String getName() { return name; } } package com.lannstark.lec02 fun main() { val person = Person(null) startsWithA(person.name) }
landingpage에서 useEffect로 fetchProducts를 하고 있는데, VSCode development server를 켜놓고 하지 않습니까? 근데 vscode에서 save를 할 때 landingpage의 useEffect가 실행되는데, 이게 원래 이런건가요? useEffect는 컴포넌트가 처음 마운트 될 때만 실행되는 것으로 알고 있는데, 개발모드에서 save할 때는 save할 때마다 실행되나요? 궁금하네요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 컬렉션 프레임워크9에서 문제와풀이2의 문제6번에 대해 여쭤봅니다. memberMap이라는 해시맵에서 첫번째 매개변수로 member.getId 가 들어가고 두번째 매개변수로 member클래스가 들어가는데 첫번째 매개변수가 member클래스의 멤버변수이어야 하는 이유가 있을까요? 문제를 풀던 중에 아직은 잘 모르겠지만 member클래스의 멤버변수 두개를 memberMap이라는 해시맵에 두개를 지정해도 될거같기도 한데(제 극히 초보인 관점에서 본 추측일 뿐입니다.그렇게 풀어볼 능력까진 없어서요.) 굳이 두번째에 클래스를 넣으시고 첫번째에 클래스의 멤버변수 하나를 넣으신 이유가 궁금합니다. 제 짧은 시각으로 보면 중복 같아 보여서요 질문6번의 의도가 파악이 안 돼서 궁금하여 여쭤봅니다.
안녕하세요 제로초님 modal을 구현하고있는데 궁금증이 생겨 질문드립니다. modal을 구현할 때 intercepting routes를 사용하는 이유가 궁금합니다. 단순히 parallel로만 띄우면 안되는건가요? 아래는 제가 구현한 코드예시입니다. https://github.dev/datoybi/next-playground simple-modal1은 parallel routes만 사용하였고, simple-modal2는 parallel routes + intercepting routes를 사용하였습니다. 두개 다 구현을 해보았는데 새로고침을 해도 둘의 결과값이 같습니다. 무엇때문에 intercepting routes를 사용하는 건가요? 미리 감사합니다!
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 객체와 같이 참조형 타입의 변수를 메서드의 매개인자로 넘기게 되면 값이 "복사"되어 넘어가는 것 이라고 이해했습니다. 그럴경우, 다음의 코드를 실행 했을 때 출력되는 결과는 "abcd" 입니다. 참조 값도 마찬가지로 "복사"를 통해 넘기기 때문에 가능한 부분일까요? public static void main (String[] args) { String str = "abcd" ; changeStr (str); System. out .println(str); } public static void changeStr (String str) { str = new String( "new String!" ); }
기존처럼 사용하면 빌드시 타입 오류가 나와서 따로 type을 Promise 로 만들어 사용해줘야 하는 듯합니다. nextjs 링크도 첨부해두었습니다. https://nextjs.org/docs/app/building-your-application/upgrading/version-15#params--searchparams 참고로 search/page.tsx 에서 searchParams 를 다음과 같이 타입 적용해주었더니 정상 빌드되었습니다. type SearchParams = Promise<{ q?: string }>;
TestBeanPostProcessor 가 BeanPostProcessor인터페이스를 implements했고 BeanPostProcessor에 정의되어있는 메서드들을 오버라이딩 안하면 자동으로 오류가 뜨면서 오버라이딩 해라고 경고가 떠야 정상 아닌가요? 강사님 강의에서도 제 컴퓨터에서도 따로 오류가 뜨지 않아서 궁금해서 질문 남깁니다.