안녕하세요. 현재 섹션 13, "Playwright MCP 란?" 까지 수업을 수강한 학생입니다. 가르쳐주신대로 성실하게 스타터킷을 클로드 코드와 공식 문서를 이용하여 만들었습니다. 다만 제가 궁금한것은 본 스타터킷을 어떻게 활용하는지 입니다. 배포한 웹페이지를 통해 사람들이 코드를 퍼가서 이용하는 방식인건지, 아니면 제가 만든 소스코드의 산출물일 뿐인지 궁금합니다. 강의에서는 어느 용도로 쓰인다고는 나와있지만, 어떻게 활용할 수 있는지는 안나옵니다. (예를들어 코드를 복사하여 그대로 CLI 등에 붙인다는지 등이요..) 제가 만든 스타터 킷의 기술 스택 란은 아래와 같이 돼있는데 이런경우 딱히 복사를 한다고도 보기 어렵습니다. 어떤식으로 본 스타터킷을 사용할 수 있는지 가이드 부탁드립니다! 만약 추후 인강에 있는 내용이라면 인강 회차 이름 말씀부탁드립니다! 감사합니다 아래는 제가 만든 페이지 입니다. https://starterkit-test.vercel.app/examples Next.js 기반이라 그런지 아니면 정적인 페이지가 아니라 그런지 github로 배포가 안되어 vercel을 통해 올렸습니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 항상 퀼리티 높은 강의를 해주셔서 감사드립니다. 강의를 듣던 중 궁금한 점이 생겨 질문드립니다! 객체를 참조할 때는 .(dot)을 사용한다라고 하셨습니다. 그러면 해당 객체의 참조값을 담은 참조변수는 객체에 접근할 수 있는 참조값을 가지기만 한 것이고 . 을 사용해야 접근 및 멤버들을 사용할 수 있다라고 생각이 드는데 이 생각이 맞는 사고인지 궁금합니다 그림을 그릴때는 객체랑 참조변수랑 참조값으로 연결되어져 있다고 생각했는데 그럼 참조변수는 객체에 접근한 게 아니다라는 의문이 자꾸 들어서 질문 남겨요!
안녕하세요 저는 데이터사이언스 전공자이며, 파이썬을 메인언어로 썼습니다. 코딩을 직접 안하는 분야로 재직중인데, 시간이 나지 않지만, 얼마전 강의 수강을 시작했습니다. 부끄럽지만, 정처기를 재수를 했는데도 떨어졌는데, 항상 코딩에서 c언어와 java가 문제인것 같습니다. 25년 3회차부터 듣기시작했는데, 언어 자체가 익숙하지가 않아 다른 강사의 강의도 듣고 교재도 보고 있으나, 막상 코딩문제를 직접 풀면, 답이 다르게 나오는 경우가 많습니다 특히 문제는 기출 문제중 많이 봤던 부분들은 답이나 로직 자체가 먼저 떠올라 맞추는 것도 많습니다. 지금은 우선 강의를 빠르게 들으며, 2~3회 반복하는 전략을 취하려고 하나, 이게 맞는지 궁금합니다. 올해 1회차에 합격이 목표인 만큼 강사님의 고견을 구합니다
(AI 퀀트) 코드 한 줄 안 쓰고 주식 자동 분석 시스템 만들기 feat. Claude CLI
파이썬은 설치 위치를 체크하면 그나마 위치가 정리되는데 기타 tool 들을 두서없이 따라 하다 보면 어느 순간 위치를 못 찾아서 헤매게 되는 경우가 있는 것 같습니다. 본 강의의 경우 유저 밑의 폴더에 까는 것 같은데 유저명이 한글일 경우에도 나중에 헤매는 것 같습니다. 유저 폴더 밑이 아니라 지정한 위치에 모아서 설치 가능한지요? 가능하다면 본 강의는 어디에 설치하면 따라하기 좋을지요? 초보라 많이헷갈려서 문의 드립니다. ex) .\\\\hello_world> claude Claude Code on Windows requires git-bash ( https://git-scm.com/downloads/win ). If installed but not in PATH, set environment variable pointing to your bash.exe, similar to: CLAUDE_CODE_GIT_BASH_PATH=C:\Program Files\Git\bin\bash.exe
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-10 2. 어려움을 겪는 부분 강의 끝 부분에서 네임드 락을 위한 커넥션과 일반 트랜잭션을 처리하는 커넥션을 분리시켜서 중요한 트랜잭션 처리에 영향을 주지 않는 방법을 말씀해주셨습니다. 제가 기술면접을 보면서 서킷 브레이커 라는 내용을 접하게 되었는데, 이 부분이 해당 내용과 연관이 있는건지 궁금합니다. 정확히는 외부 API의 호출 지연으로 인해 스레드 풀이 고갈되는 상황에서 어떻게 설계할 것인지에 대한 질문이었고, 이 과정에서 예시 키워드로 서킷 브레이커 Bulk Head가 있었습니다. 또한, 실제 실무 환경에서는 커넥션 풀을 분리하기 위해 어떤 방법들을 사용하는지 궁금합니다! Q&A로 설명이 어렵다면, 키워드라도 알고 싶습니다.
*prt_a=str;이면 ptr_a가 str의 주소값을 가지는것아닌가요? 아래보면 *(prt_a+1)을 설명해주실때 prt_a가 H를 가르키니까 +1이라서 e라고하셨는데 이부분이 이해가 잘 안됩니다 그리고 배열부분에서의 주소값과 그냥 값을 어떻게 하면 쉽게 이해하고 풀수있는지 알려주시면 좋겠습니다
섹션6 - 33 강의를 듣고 있는데요. 처음에 claude cli 를 사용 하라고 해서 그렇게 하고 있는데. 강의 영상은 cli 가 아니네요. 그래서 이미지 붙여 넣는것도 cli 에서는 안되고 다른곳에 저장해서 경로를 설정해야 하구요. cli 가 아닌 다른것 사용해도 되나요? 기능을 전부 지원하지 않는다 해서 않하고 있는데.. 좀 헷갈리네요.
안녕하세요, 짐코딩님 하나하나 따라가고 있는데 윈도우 환경에서 D 드라이브에 실습 환경 만들어서 실행 중입니다. 커서에서 live server 확장 프로그램 다운로드 했고, open with live server 누르면 화면이 자꾸 안 나와서 일단 클로드 코드한테 물어봐서 http://localhost:8000/ 으로 실행시키긴 했는데 앞으로 수업에 지장이 있을까봐 여쭤봅니다. 무엇이 문제일까요 ..?
notion-db-expert 서브에이전트를 만들어서, 실행한 뒤에 prd-generator 서브에이전트로 그 결과값을 넘겨서 prd를 생성하는 방법을 설명해주신 것인지, 아니면 자연스럽게 과정 중에 있는 것인지가 약간 햇갈립니다. notion-db-expert 서브에이전트의 결과를 기다렸다가 그 결과를 prd 서브에이전트에 반영해라 라는 식의 프롬프트는 필요가 없는 것일까요? 강의의 5:44 정도에 나오는 것 같은데 관련된 설명이 없는 것 같아서 여쭙습니다! 감사합니다.
notion-db-expert 서브에이전트를 만들어서, 실행한 뒤에 prd-generator 서브에이전트로 그 결과값을 넘겨서 prd를 생성하는 방법을 설명해주신 것인지, 아니면 자연스럽게 과정 중에 있는 것인지가 약간 햇갈립니다. notion-db-expert 서브에이전트의 결과를 기다렸다가 그 결과를 prd 서브에이전트에 반영해라 라는 식의 프롬프트는 필요가 없는 것일까요? 강의의 5:44 정도에 나오는 것 같은데 관련된 설명이 없는 것 같아서 여쭙습니다! 감사합니다.
FormEvent는 deprecated 되고 SubmitEvent를 사용하는 것으로 권장된다고 합니다. 그런데 (e: SubmitEvent<HTMLFormElement>) 방식은 FormEvent가 제네릭을 지원하지 않아서 안 된다고 하고 (e: SubmitEventHandler<HTMLFormElement>) 처럼 시도해도 빨간줄이 자꾸 뜹니다. 여기저기 알아보고 const handleSubmit: SubmitEventHandler<HTMLFormElement> = (e) => { ... } 로 하면 된다는데 이들의 차이점과 FormEvent를 사용할 때 처럼 사용하면 안 되는 이유가 궁금합니다.
강의를 들으며 장바구니 페이지에 대해 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를 연결해서 테스트 해야할 때가 있나요? 한번에 질문이 다소 많아서 죄송합니다 ㅠㅠ 완강하고 며칠동안 혼자서 공부해보다가 제대로 제가 하고 있는 건지 모르겠어서 여쭤봅니다 ㅠㅠ 긴 글 읽어주셔서 감사합니다!!