개발환경 및 상황 window, Node 22.14.0, react: ^19.0.0, react-native: 0.79.2, expo ^53.0.9 SDK 53으로 올리면서 react19이 강제 되어, react19를 사용하였습니다. 대부분의 라이브러리들이 react18을 기반으로 되어있어 의존성 충돌이 일어나, 강의에서 사용된 라이브러리는 --legacy-peer-deps로 설치하여 개발은 가능하였습니다. 문제 라이브러리 사용까지는 상관없었는데, '[7-5] 개발빌드 실행 및 알림 수신하기'의 EAS 빌드를 위하여 eas build --profile development (--clear-cache) 를 사용하였는데 npm ci단계에서 peer dependecy충돌로 빌드가 실패하고있습니다. 에러 메세지 expo build detail Install dependencies Running "npm ci" in /home/expo/workingdir/build directory npm warn ERESOLVE overriding peer dependency npm warn While resolving: @react-native/virtualized-lists@0.79.2 npm warn Found: @types/react@18.3.21 npm warn node_modules/@types/react npm warn dev @types/react@"~18.3.12" from the root project npm warn 4 more (@radix-ui/react-compose-refs, @radix-ui/react-slot, ...) npm warn npm warn Could not resolve dependency: npm warn peerOptional @types/react@"^19.0.0" from @react-native/virtualized-lists@0.79.2 npm warn node_modules/@react-native/virtualized-lists npm warn @react-native/virtualized-lists@"0.79.2" from react-native@0.79.2 npm warn node_modules/react-native npm warn npm warn Conflicting peer dependency: @types/react@19.1.8 npm warn node_modules/@types/react npm warn peerOptional @types/react@"^19.0.0" from @react-native/virtualized-lists@0.79.2 npm warn node_modules/@react-native/virtualized-lists npm warn @react-native/virtualized-lists@"0.79.2" from react-native@0.79.2 npm warn node_modules/react-native npm error code ERESOLVE npm error ERESOLVE could not resolve npm error npm error While resolving: react-native@0.79.2 npm error Found: @types/react@18.3.21 npm error node_modules/@types/react npm error dev @types/react@"~18.3.12" from the root project npm error peerOptional @types/react@"*" from @radix-ui/react-compose-refs@1.1.2 npm error node_modules/@radix-ui/react-compose-refs npm error @radix-ui/react-compose-refs@"1.1.2" from @radix-ui/react-slot@1.2.0 npm error node_modules/@radix-ui/react-slot npm error @radix-ui/react-slot@"1.2.0" from expo-router@5.0.7 npm error node_modules/expo-router npm error expo-router@"~5.0.7" from the root project npm error 3 more (@radix-ui/react-slot, ...) npm error npm error Could not resolve dependency: npm error peerOptional @types/react@"^19.0.0" from react-native@0.79.2 npm error node_modules/react-native npm error react-native@"0.79.2" from the root project npm error peer react-native@"*" from @expo/metro-runtime@5.0.4 npm error node_modules/@expo/metro-runtime npm error peerOptional @expo/metro-runtime@"*" from expo@53.0.9 npm error node_modules/expo npm error expo@"^53.0.9" from the root project npm error 25 more (expo-application, expo-asset, expo-blur, expo-constants, ...) npm error 1 more (expo-router) npm error 30 more (@expo/vector-icons, @react-native/virtualized-lists, ...) npm error npm error Conflicting peer dependency: @types/react@19.1.8 npm error node_modules/@types/react npm error peerOptional @types/react@"^19.0.0" from react-native@0.79.2 npm error node_modules/react-native npm error react-native@"0.79.2" from the root project npm error peer react-native@"*" from @expo/metro-runtime@5.0.4 npm error node_modules/@expo/metro-runtime npm error peerOptional @expo/metro-runtime@"*" from expo@53.0.9 npm error node_modules/expo npm error expo@"^53.0.9" from the root project npm error 25 more (expo-application, expo-asset, expo-blur, expo-constants, ...) npm error 1 more (expo-router) npm error 30 more (@expo/vector-icons, @react-native/virtualized-lists, ...) npm error npm error Fix the upstream dependency conflict, or retry npm error this command with --force or --legacy-peer-deps npm error to accept an incorrect (and potentially broken) dependency resolution. npm error npm error npm error For a full report see: npm error /home/expo/.npm/_logs/2025-06-23T04_14_21_012Z-eresolve-report.txt npm error A complete log of this run can be found in: /home/expo/.npm/_logs/2025-06-23T04_14_21_012Z-debug-0.log npm ci exited with non-zero code: 1 시도 했던 방법 npm ci 우회 npm ci 를 우회하기 위하여 pacakge.json에 npm install --legacy-peer-deps 로 우회하는 쉘스크립트도 사용해봤는데, (chmod 로 권한 설정 & LF 줄바꿈) permission denied 로 빌드되지 않았습니다. "scripts": { "start": "expo start", "eas-build-pre-install": ".eas/build/pre-install.sh", .eos/build/pre-install.sh , ...} https://github.com/miloe2/rn-practice/commit/16f0c2448cd138eb63ab7385dea3b7c0d89b50e9 라이브러리 업데이트 타입만 우선적으로 업데이트하였는데( types/@react18.3.12 => 19.1.8, ) 그 외에도 react19가 지원하지 않는 다른 라이브러리들 (react-test-render 등)이 있어서 실패. ❗ 질문 작성시 꼭 참고해주세요 에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다. 질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github 을 첨부해주세요. 개발중인 OS, ReactNative, Node 버전 등의 개발환경 을 알려주셔야합니다. 에러메세지는 일부분이 아닌 전체 상황 을 올려주세요. 일부만 보여주시면 답변이 어렵습니다. 에러 잘라서 올리시면 안됩니다! (에러 일부만 자르거나 일부만 복사하지말아주세요)
아래 동일한 질문이 있어서 봤는데 그냥 암기하라고 하셔서 다시 질문드려봅니다. 일단 설명이 틀린 것 같은데 자세하게 다시한번 봐주세요. (7:12)(설명중)먼저 정적메서드에서 인스턴스변수를 접근하려고 한다 -> ??? 정적메서드에서 인스턴스메서드를 접근중인거 같은데요? 설명이 명확하지 않는 부분이 있어서 질문 드려봅니다
Member#create() 메서드를 register로 공통언어를 바꾸셨는데, 뜻이 모호해진 것 같아서 질문드립니다! 제가 생각하기에 register(등록)이라는 단어는 생성과 영속화라는 두가지의 행위를 함축한 단어로 느껴집니다. 따라서 MemberService#register()는 너무 자연스럽습니다. 실제로 Member를 생성한 후에 MemberRepository를 통하여 영속화까지 하는 내용으로 구현되어있습니다. 하지만 Member#register()는 이와 다르게 Java 객체를 생성하기만 하는 것이라, 메서드명과 실제 동작이 불일치한다고 느껴집니다. 하지만 또 동시에 도메인 모델을 글로 작성하는 과정에서 '멤버를 등록한다.' 라는 말을 쓰는 것은 자연스럽습니다. 그 구현이 코드적으로 Member에 있는 것만이 부자연스럽습니다. 이런 경우에는 Member라는 객체만으로 도메인 모델을 온전히 표현해내기가 어려운 것일까요? 해당 모델을 표현하기 위해서는 MemberService 같은 코드가 꼭 필요한 걸까요?
반대로 자식에게만 생성자가 있으면 오류인가요?? 질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야 어떤 강좌에서 질문하셨는지 알 수 있습니다. 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다. 이미 다른 누군가가 질문을 한 이력 이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다. 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다. 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다. 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산) 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.
멤버를 저장하는 테스트에서 EntityManager#flush()를 호출해서 플러시되어 DB까지 쿼리문이 제대로 가는지 검증하시는 것을 보았습니다. (저는 플러시까지 테스트해볼 생각을 못했어서 아주 인상깊었습니다 ㅎㅎ) 하지만 해당 부분이 검증문 없이 홀로 호출되고 있습니다. 좀더 의도를 드러내기 위해서는 assertThatCode(() -> em.flush()).doesNotThrowAnyException() 처럼 코드를 작성하는게 더 좋지 않을까 싶어서 질문드립니다! 적용 예시 @Test void 멤버를_저장한다() { var member = MemberFixture.createAny(); memberRepository.save(member); assertThat(member.id()).isNotNull(); assertThatCode(() -> em.flush()) .doesNotThrowAnyException(); }
MemberRepositoryTest는 EntityManager 나 @DataJpaTest 등 Jpa와 깊게 관련되어있는 테스트로 이해됐습니다. EntityManager#flush() 가 잘 호출되는지 확인하는 부분도 그런 이유에서 이해됩니다. 하지만 테스트명이 MemberRepositoryTest인 점에서 헷갈리는 부분이 발생합니다. MemberRepository 인터페이스의 메서드를 테스트하는 것이 목적이라면 좀 더 추상화된 테스트를 작성하는 것이 옳지 않았나? 라는 것이 주된 궁금증입니다. 물론 Spring Data JPA 특성상 런타임에 구현체가 만들어지기 때문에, 테스트 대상은 인터페이스를 사용해야 한다는 것은 이해합니다만, 최소한 클래스명은 좀 더 구체적으로 작성해주는 것이 의도에 부합하지 않나? 해서 질문드립니다! 어떻게 생각하시나요?
해당 코드에서 자기 자신의 프로필 address와 비교하는 로직을 도메인에게 맡기는 건 어떨까요? 토비님! 이렇게 해도 되는건지 아니면 따로 빼신 이유가 있으신 지 궁금합니다. private void checkDuplicateProfile(Member member, String profileAddress) { if (profileAddress.isEmpty()) return; Profile currentProfile = member.getDetail().getProfile(); if (currentProfile != null && currentProfile.address().equals(profileAddress)) return; if (memberRepository.findByProfile(new Profile(profileAddress)).isPresent()) { throw new DuplicateProfileException("이미 존재하는 프로필 주소입니다: " + profileAddress); } } 이런 식으로요! private void checkDuplicateProfile(Member member, String profileAddress) { if (profileAddress.isEmpty()) return; if (!member.isProfileNull() && member.isProfileEquals(profileAddress)) return; if (memberRepository.findByProfile(new Profile(profileAddress)).isPresent()) { throw new DuplicateProfileException("이미 존재하는 프로필 주소입니다: " + profileAddress); } }
ㅎㅎ 완강했어용~ 이전에 유튜브 통해 커서 AI로 프론트앤드 쪽이나 단위 기능 구현은 실습을 몇번 해봐서 강사님 강의 듣는데 수월했습니다. 백앤드쪽 연계가 무척 궁금해서 강의를 봤는데 궁금했던게 많이 해소되었습니다. 감사드리고요~ 그런데 강사님! 배포할 때 Vercel 대신 Cloudflare Workers도 괜찮을까요?
강의에서 Typescript를 사용하고 있는데, 정작 타입은 제대로 안 잡고 넘어가는 경우가 많네요 수강생 타겟이 초보라고 되어 있지만, 타입 에러가 방치돼 있어서 따라가기가 더 어려운 느낌이에요 오히려 타입을 명확히 잡고 넘어갔으면 더 수월하게 진행됐을 것 같다는 생각이 드네요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 안녕하세요, 강의 수강 중 문제가 생겨 여쭤봅니다. validation/v2부터 따라하며 공부 중 갑자기 인코딩 처리가 안되고 깨지는 문제가 발생했습니다. 이것 저것 찾아도 해결되지 않아서 질문드리게 되었는데 혹시 어떤 것이 문제가 될 지 여쭤봐도 될까요 ? addForm, editForm, item, items.html에는 아래 사진처럼 utf-8로 설정해두었습니다. preference의 file Encodings에서도 utf-8을 설정해주었습니다. 서버를 띄우고 캐시 메모리를 비워봐도 여전히 같은 문제가 발생하던데 혹시 짚어볼 만한 원인이 더 있을까요 ?
안녕하세요 먼저 좋은 강의 정말 감사드립니다. 섹션2 인가코드(프론트에서 발급) 강의와 강의 자료에서 get 요청을 통해 인가코드 전달을 한다 고 설명하셨는데, 프론트엔드 코드에서는 post로 요청하고 있고, http body로 jwt 토큰을 받으려면 post로 요청해야하는게 맞는 것 같은데, 제가 잘못 이해하고 있는건지 잘못 설명하신건지 헷갈려서 질문글 남깁니다. const response = await axios.post("http://localhost:8080/member/google/doLogin", {code});
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 혹시 제출할 때 index false없이 제출하게되면 0점 처리가 되나요...? 이번 10회차에서 안하고 제출한게 기억이 났습니다... 이의제기신청하면 바뀔까요...?