묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
중간에 막혀서 남깁니다 도와주세요
여기서 에러가 계속 나옵니다 ~ 한번 영상 나와서 두번째 영상 뽑는데 이렇습니다. 어떻게 해야할까요?
-
미해결실전 프론트엔드 테스트 시작하기
장바구니 테스트 코드 작성에 대한 질문입니다.
강의를 들으며 장바구니 페이지에 대해 Cypress로 테스트 코드를 작성하다가 궁금한 점이 몇가지 있어서 질문을 작성합니다 :) 장바구니 페이지에서 '장바구니의 상품을 삭제한 후 장바구니에 담겨있는 총 수량과 가격이 변경된다.'라고 테스트 시나리오를 작성했는데 이런 걸 e2e로 테스트 하는 게 맞는지 잘 모르겠습니다.이런 부분은 unit 테스트로 넘겨야 하는 부분일까요?e2e테스트는 어떤 걸 중심으로 하면 좋을지 잘 모르겠습니다. 그냥 제가 필요하다고 생각되는 게 있으면 진행을 하면 되는 걸까요? 저도 모르게 저 대신 클릭 등을 수행하고 값을 확인하는 용도로 다루게 되는 것 같습니다. 그래도 일단 1번 질문에서 작성한 테스트 시나리오에 대한 코드를 직접 작성해봤습니다.이 때, 장바구니 페이지에서 장바구니 아이템 데이터가 getServerSideProps를 통해 주입되고 있더라구요. 이 상황에서 API 모킹을 어떻게 해야할지 몰라서 Claude Sonnet 4.6이랑 구글링을 통해 몇가지 코드를 작성해봤습니다. 단순하게 테스트 코드가 작성되지 않고 다소 복잡하게 작성이 되는 것 같아서 뭔가 이 방향이 맞지 않는 것 같다는 생각이 들었습니다. 그래서 테스트 시나리오 자체를 제가 잘못 생각한 것 같다는 생각이 들기도 했습니다. SSR 환경에서 어떤 코드로 작성을 하는 게 맞는 방식인지 알 수가 없어서 한 번 확인해봐주시면 감사하겠습니다 :)a. nock + intercept 사용 - SSR은 서버 프로세스에서 진행되기 때문에 intercept 할 수 없다고 하여 nock을 사용했습니다. 코드는 해당 링크를 참고 했습니다. - 그리고 router.replace를 통해 데이터를 refetch 될 때도 백엔드 api를 intercept를 할 수 없다고 해서 '/_next/data/**/*.json'를 intercept 했습니다. - 개인적으로 아래 코드는 'nock'과 'intercept'를 혼용해서 쓰다보니 장기적으로 봤을 때 유지보수성 측면에서 좋지 않은 코드라고 느꼈습니다. it.only('장바구니의 상품을 삭제한 후 총 수량과 가격이 변경된다', () => { // 1) 초기 로드용 nock (SSR - 서버사이드 fetch) cy.task('nock', { hostname: Cypress.env('API_URL'), method: 'GET', path: '/carts', statusCode: 200, body: FIVE_CART_ITEMS, }); // 2) router.replace 후 재조회용 intercept (클라이언트사이드 fetch) cy.intercept('GET', '/_next/data/**/cart.json', { body: { pageProps: { carts: FOUR_CART_ITEMS_AFTER_DELETE }, __N_SSP: true, }, }).as('refetch'); // 삭제 API mock cy.intercept('POST', '/api/cart', { statusCode: 200, body: { data: { name: '4' } }, }).as('deleteCart'); cy.visit('/cart'); // action cy.getByCy('cart-item-delete-button').first().click(); cy.wait('@deleteCart'); cy.wait('@refetch'); // 페이지 갱신 대기 // assertion cy.contains('Unbranded Rubber Chair').should('not.exist'); cy.getByCy('cart-item').should('have.length', 4); cy.getByCy('cart-item-total-amount').should('have.text', '4'); cy.getByCy('cart-item-total-price').should('have.text', '836.00'); });b. intercept 사용그래서 초기 로드에도 intercept를 사용했습니다. it.only('장바구니의 상품을 삭제한 후 총 수량과 가격이 변경된다', () => { // 1) 초기 로드용 (SSR - 서버사이드 fetch) cy.intercept('GET', '/_next/data/**/*.json', { body: { pageProps: { carts: FIVE_CART_ITEMS }, __N_SSP: true, }, }); // 2) router.replace 후 재조회용 intercept (클라이언트사이드 fetch) cy.intercept('GET', '/_next/data/**/*.json', { body: { pageProps: { carts: FOUR_CART_ITEMS_AFTER_DELETE }, __N_SSP: true, }, }).as('refetch'); // 삭제 API mock cy.intercept('POST', '/api/cart', { statusCode: 200, body: { data: { name: '4' } }, }).as('deleteCart'); cy.visit('/cart'); // action cy.getByCy('cart-item-delete-button').first().click(); cy.wait('@deleteCart'); cy.wait('@refetch'); // 페이지 갱신 대기 // assertion cy.contains('Unbranded Rubber Chair').should('not.exist'); cy.getByCy('cart-item').should('have.length', 4); cy.getByCy('cart-item-total-amount').should('have.text', '4'); cy.getByCy('cart-item-total-price').should('have.text', '836.00'); });c. API 모킹을 사용하지 않기 - ssr 환경에서 delete 테스트를 위해 api 모킹을 사용하는 게 오히려 복잡하게 느껴져서 API 모킹을 사용하지 않고 코드를 작성하는 방식을 생각했습니다. - 대신에 테스트 할 때마다 수량과 가격이 변경될 거라고 생각해서 수량과 가격을 캡쳐하는 코드를 추가했습니다. it.only('장바구니의 상품을 추가한 뒤 삭제하면 해당 상품이 사라진다', () => { const cartItem = { "id": "24", "name": "Practical Frozen Pants", "price": "607.00", "imageUrl": "https://cdn.pixabay.com/user/2023/05/21/19-38-51-804_250x250.jpg" } // prepare: API로 상품 직접 추가 cy.request('POST', `${Cypress.env('API_URL')}/carts`, cartItem).then(({ body }) => { cy.visit('/cart'); // 삭제 전 수량과 가격 캡처 cy.getByCy('cart-item-total-amount').invoke('text').then((beforeAmount) => { cy.getByCy('cart-item-total-price').invoke('text').then((beforePrice) => { // action: 방금 추가한 항목 삭제 cy.contains('Practical Frozen Pants') .closest('[data-cy="cart-item"]') .find('[data-cy="cart-item-delete-button"]') .click(); // assertion cy.contains('Practical Frozen Pants').should('not.exist'); cy.getByCy('cart-item-total-amount').should('have.text', String(Number(beforeAmount) - 1)); cy.getByCy('cart-item-total-price').should('have.text', (Number(beforePrice) - cartItem.price).toFixed(2)); }); }); }); }); 일반적으로 delete에 대해 테스트할 때 어떤 식으로 하는지 궁금합니다. 삭제 성공 여부 / 해당 데이터가 보이지 않는지 체크 정도만 하고 삭제가 진행됨으로써 총 아이템 개수 수량이 변경되는 것에 대해서는 테스트 코드로 굳이 짚고 넘어가지 않나요? 실무에서 테스트 데이터는 보통 어떻게 관리하나요? 전부 api 모킹으로 테스트 해야하는 건지, 아니면 테스트용 DB를 따로 생성해서 거기서 테스트를 진행해야하는 건지 궁금합니다.아니면 상황에 따라서 api 모킹을 해야할 때가 있고, DB를 연결해서 테스트 해야할 때가 있나요?한번에 질문이 다소 많아서 죄송합니다 ㅠㅠ 완강하고 며칠동안 혼자서 공부해보다가 제대로 제가 하고 있는 건지 모르겠어서 여쭤봅니다 ㅠㅠ 긴 글 읽어주셔서 감사합니다!!
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
노션 DB 설정 관련
노션을 처음 사용해봅니다. DB 연결에서 노션이 나오는데 영상과 실제 노션 앱과 화면이 다르게 나오고 화면대로 하려니 다른거 같습니다. 예) invoice-web 페이지를 생성하고 invoice DB 전체item DB 이렇게 두개를 생성 하는데 연결에 가니 invoice-web이 화면과 달리 보이지 않습니다. 다른 LLM 툴에 물어보니 웹페이지를 만들어서 연결하는게 아니라 DB를 만들고 그 아래에 invoice DB와 item DB를 만들어야 한다는데 현재 이부분에서 더이상 진도가 나가지 못하고 있습니다.
-
미해결스프링 핵심 원리 - 고급편
TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 아래처럼 등록해서 의존성 주입하면문제없이 실행 되는것 같은데, 미리 빈으로 등록해서 의존성 주입하라는게 이렇게 코드를 작성하라는 말씀이셨던게 맞을까요?!@Configuration public class LogTraceConfig { @Bean public TraceTemplate traceTemplate() { return new TraceTemplate(threadLocalLogTrace()); } @Bean public ThreadLocalLogTrace threadLocalLogTrace() { return new ThreadLocalLogTrace(); } }
-
미해결성장과 상금은 누구의 것? 인프런 3주 '서바이벌' 챌린지 : All or Nothing!
마지막 미션
오늘 하루 정신이 없어서 부랴부랴 1시간 채우려고했는데 재생시간 59분에서 안올라가네요... 확인좀해주세요!
-
미해결[7일 완성] 한 번에 합격하는 MS AI-900 자격증
시험 응시 할인권
시험 응시 할인권은 어디서 다운로드 또는 제공받을 수 있는지 궁금합니다~
-
해결됨AI 시대 대체되지 않는 미국 빅테크 시스템 디자인 & 오픈소스 실무 기여 완성 코스
simcached를 검색을 했을때 해당 자료가 나오지 않는데 혹시 MemcachedGPU 라고 불리는 기술을 말씀하시는건가요?
해당 용어로 검색했을때 관련 자료를 찾을수가 없더라고요.혹시 업계에서 다른 용어로도 불리고 있는 기술인가요?
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
혹시 강사님은 lovable, replit모두 유료 쓰시는가요?
현재 1-5 듣고 있었습니다.lovable, replit이 심할정도로 무료 credit을 많이 잡아먹네요.. 그러니까 지금 가이드라인 주신 질문 한번하면 약 70%정도의 코인이 소모되고, 추가 질문시 upgrade하라고 끊겨버립니다. 실제 강의는 좋지만.. 무료로 한번 시도해보기가 쉽지않아 보입니다.
-
미해결FreeRTOS 프로그래밍
STM32 포팅할 때 STM32 Project가 없음
안녕하세요 강의듣고있는 학생입니다.STM32 포팅-시작 강의에서, File - New - STM32 Project로 쭉쭉 넘어가는데 제 IDE에서는 아래 그림처럼 STM32 Project가 없습니다.버전 차이 인것으로 생각되고 STM32 Project Create/Import를 통해서 PORT를 생성했는데 강의처럼 .ioc 파일이 없습니다. 버전 문제라면 강사님은 STM32CubeIDE 1.0.2를 하신 것 같은데.. 이거로 다시 해보겠습니다. 현재 저는 2.0.0 입니다.
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
[해결방법] 노션 db 조회 안될 시
분명히 노션 세팅 잘 했고 연결까지 했는데 데이터베이스 조회 안 되는 분들은 참고해주세요. 강의 영상 촬영 날짜가 아마도 2025년 09월 이전으로 생각 됩니다. 그 이후에 노션 API 버전이 바뀌면서 데이터베이스 조회가 안 되는게 원인입니다.[ 노션 API 업그레이드 가이드 ]https://developers.notion.com/guides/get-started/upgrade-guide-2025-09-03 해결 방법은 2가지인데 API를 구버전을 쓰도록 프롬프트를 유도하거나, 신규 API 버전에 맞춰서 해야 하는데 신규 버전은 "데이터베이스 ID"가 아닌 "데이터베이스 소스 ID"를 필요로 합니다. [ 구버전 프롬프트 ]노션 api를 "2022-06-28" 버전으로 사용하고 관련 코드 전부 수정해줘. [ 최신 버전 해결 방법 ] 데이터베이스를 열면 위 사진처럼 보일텐데 새로 만들기 왼쪽에 설정 누르면 밑에서 3번째에 데이터 소스 관리 있습니다. 소스 관리에서 위 사진처럼 데이터 소스 ID 복사하시고 그 값을 env에 넣으시면 됩니다.
-
미해결빌더 조쉬의 클로드 코드와 멀티 에이전트로 내 일상을 모두 자동화하기
랜딩페이지 gpts 프롬프트 pdf 파일은 어디서 볼 수 있을까요?
안녕하세요. 강의 잘 보았습니다!랜딩페이지 프롬프트에 사용한 pdf파일을 보고 싶은데 이도 공개가 가능할까요??
-
미해결Docker Essentials - 감 잡히는 컨테이너 & 도커
도커 이미지와 컨테이너 이미지가 다른 건가요?
강의를 듣다 보면 '도커이미지'라는 용어도 있고 '컨테이너이미지'라는 용어도 있는데 둘 다 동일한 부분 일까요? 혹시 다르면 어떻게 다른지 설명부탁드려요
-
미해결원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
수업 질문입니다. fal.ai 사이트에 tts 스피드 항목이 없습니다.
스피드 라는 항목이 아예 없습니다. 도움 부탁드립니다.
-
미해결Basic SystemVerilog Testbench ( 회로설계 검증 )
FIFO read sequence waveform 관련 문의
안녕하세요, 공유해주신 FIFO verilog tb 관련하여 문의 드립니다.read transaction (task fifo_rd) 에서 temp_data = dout; 동작과 dout_read = 0;의 동작이 같은 시간대에서 진행되고 있습니다.코드 상에서는 temp_data = dout; 이후에 #(input_delay) 만큼 시간이 지난 후에dout_read = 0;이 되는 것으로 이해했는데, 이런 경우는 compile 과정에서 문제가 있는 것인지 궁금합니다.
-
해결됨3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.1
rebuild와 changederee의 차이점
안녕하세요 선생님 강의 듣는 와중에 제가 정립한 생각이 맞는지 확인 하고 싶어서 문의 드립니다. rebuild는 차수와 점을 동시에 변경 가능하고 changederee는 차수만 변경이 가능하다고 배웠습니다. 그렇다면 나는 작업을 하면서 해당 차수에 최소한의 점의 갯수로만 작업해도 상관없으면 changederee 나 rebuild(차수만 적용시 따라오는 점의 최소한의 점의 수 그대로)를 사용하고 만약에 나는 해당 차수에서 최소한의 점의 갯수 보다 더 많은 점을 추가하고 싶어라고 하면 rebuild를 사용하면 될까요?
-
미해결FastAPI 찍어먹기 (FastAPI + React.js + AWS LightSail)
vscode 자동 완성되는 익스텐션 질문
학습 관련 질문을 남겨주세요 성실히 답변해드립니다!강의와 관련이 없어도 유사한 학습 질문도 괜찮습니다강의에서 나오는대로 따라 모두 설치를 했습니다. 근데 제 vscode에서는 강의처럼 자동 완성을 강의처럼 제공해주지 않고 있어요... 혹시 어떤 익스텐션인지 알 수 있을까요? 그리고 fastapi와 react에서 더 유용한 익스텐션들이 있다면 알고 싶어요!
-
미해결[2탄] 옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트
터미널에서 sql작성은 도커라서 그런거죠? 도커 안쓰는데..ㅜ
도커안하고 일반적으로 mysql이나 데이터베이스에서 사용하는거 올려주실순없나여ㅜㅜ이미다 찍으셨겠지만..
-
미해결한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편
프로필 수정 후 post item 의 글들에서 수정된 프로필 업데이트 반영
프로필 수정후 프로필 디테일 화면의 포스트 아이템들에서는 수정된 프로필 내용이 반영이 안되는 것이 확인됩니다. 시나리오대로라면 프로필 수정 후 포스트아이템의 프로필 ui 도 업데이트 해주는게 자연스러운듯 하여 위와 같이 아래 코드를 추가해 주었습니다. 맞을까요?queryClient.resetQueries({ queryKey: QUERY_KEYS.post.userList(updatedProfile.id), });
-
미해결14 days with Claude Code
강의 목적이?
강좌를 신청해서 보고 있습니다만, 튜토리얼이라고는 하지만,무엇을 설명하고자 하는 것인지 전혀 알 수가 없습니다. 우선, 개발환경에 대한 설명이 공유해주시고,최초 시작 최종 마무리에 대한 설명을 해주세요.
-
미해결[빡센 챌린지 2기] 네트워크 게임 개발자 5주 트랙
발사체 동기화 부분 질문입니다!
1번 플레이어에서 포탄을 쏘면 2번 플레이어에서만 보이고 반대도 마찬가지인데 맞게 잘 따라한건지 궁금합니다