<Node.js + NestJS 교과서> 10주 완독 챌린지 - 안정적인 AI 서비스 개발을 위한
마지막 11장 미션에 혜택 받을 이메일 주소를 남긴다는걸 누락해서요! 다시 남길 방법을 몰라서 QnA에 남깁니다. 책은 Yes24에서 구매했습니다. 길벗, 인프런 계정 둘다 (구글 로그인) moonyoungsik95@gmail.com 입니다. 늘 존경하고 감사하고 응원합니다!
아직은 어색하고 서먹서먹하니 존댓말로 질문드립니다. 인프피니까 이해좀.. 1장. 작전1: 바이너리 초이스 - 스프링 배치의 두 가지 스텝 유형 요걸 지금 읽고 있는데 중간에 이런 내용이 있습니다. [시스템 주의] 예시와 같이 ResourcelessTransactionManager 인스턴스를 직접 생성해 tasklet() 메서드에 전달해도 되지만 애플리케이션 내의 여러 스텝에서 재사용할 수 있도록 별도의 Bean으로 정의하고 싶을 수도 있다. 그러나 PlatformTransactionManager 빈을 직접 정의할 땐 주의가 필요하다. 뭔가 문장이 좀 어색한데 처음엔 ResourcelessTransactionManager인스턴스를 Bean으로 정의하고 싶을 수 있다고 하시고는 갑자기 PlatformTransactionManager 빈을 직접 정의할 땐 주의가 필요하다고 하셨습니다. 이게 말 그대로 PlatformTransactionManager 빈을 직접 정의할 때 주의 하라는 뜻인건지, 아니면 ResourcelessTransactionManager 빈을 직접 정의할 때 주의 하라는 뜻인건지, 아니면 둘 다 빈을 집적 정의할 때 주의 하라는 뜻인지 조금 헷갈립니당 뒤에 따라오는 문장들을 읽어보면 아마도 PlatformTransactionManager 빈을 직접 정의할 때 주의하라는 말 같은데 그럼 ResourcelessTransactionManager 빈을 직접 정의 할 때의 주의사항은 없나용?
안녕하세요! 6번 문제에서 약간 헷갈리는게 있어서 질문 드립니다. 비용효율성을 높이고 싶고, 다년계약에 묶이고 싶지 않다. 가장 적절한 구매 옵션은? 에서 부분 선결제 조건이 선결제 없음보다 할인율이 높다면 부분 선결제로 가는 것이 비용 효율성을 높이는 방법일 수 있지 않을까요? 지문에 선결제를 원하지 않는다가 없어서 질문드립니다.
강사님 안녕하세요 강의를 듣다보니 인덱스를 어느정도 아는 사람이 들어야 이해도가 많이 높아질거 같아 문의 드립니다 혹시 강사님 강의 중 인덱스나 좀 더 기본기 모델링을 배울 수 있는 강의가 있을까요? (ex: Hash Table과 Tree 자료구조,인덱스) 또, 혹시 행 기반 dbms가 아닌 duck db , 빅쿼리등 열 기반 dbms 강의도 론칭 예정이 있으신지 궁금합니다 현재 빅쿼리를 사용중인 신입 데이터 엔지니어인데 인덱스 개념은 안쓰고 파티셔닝, 클러스터링 밖에 없더라구요..
"AI 딸깍의 시대" 원리로 돌파하는 Node.js와 CS Part 2 - 스트림 아키텍처와 하드웨어 통제기
안녕하세요. AI 딸깍의 시대를 1~4 구매하여 수강 중에 있습니다. 강의를 듣다보니, 의문이 들어서 문의드립니다. AI로 딸깍하니, 얕은 수준으로 다루게 되니 원리를 이해하자를 이야기하고자 해당 강의가 있는 것 같습니다. 실무에서는 라이브러리나 프레임워크로 개발을 진행하게 되는 것 같습니다. 원리를 이해하면 개발을 조금 더 잘하게 된다? AI에 명령을 내릴 때 조금 더 잘 내릴 수 있다? 아니면 장애가 터졌을 때 이유를 알 수 있다? 그것도 아니라면 개발 시 장애를 미리 예측하여 대응할 수 있다로 봐야할까요? 보면서 궁금하여 문의드립니다.
안녕하세요 재민님! 좀 오래되긴 했지만, 2년 전쯤에 발표하신 (유튜브에도 자주 언급하신 ㅎㅎ) 개념과 격벽을 통해서 지속 성장 가능한 설계를 만드는 방법에 대해 여쭤보고 싶은 부분이 있어서 질문드립니다! Q1) 발표에서 개념을 코드로 느끼면서 잡아간다고 하셨는데, 이게 개인의 사고에 많이 의존하는 것 같아서요. 실제 팀에서는 한 사람이 발견한 개념(예: 대출 사례의 '연체' 분리 같은)을 팀원들과 어떻게 합의하고 공유하시나요? 코드 리뷰에서 자연스럽게 되는 건지, 별도의 논의 과정이 있는지 궁금합니다. 팀과 협업하는 관점에서는 설계가 결국 합의의 과정이기도 하다 보니, 이 방식이 팀 규모에서는 어떻게 작동하는지가 특히 궁금했습니다 ㅎㅎ Q2) 개발을 하다 보면 "설계"라는 과정을 많이 겪게 되는 것 같습니다. API 설계, ERD 설계, 시스템 아키텍처 설계 등등 참 많네요. 발표에서는 분석·설계 없이 바로 구현하면서 개념과 격벽을 잡아가라고 하셨는데, 실제로 새 기능이나 서비스를 시작하실 때 무엇부터 손대시는지 궁금합니다. 개념(도메인 클래스)부터 코드로 잡고 API나 DB 스키마는 나중에 따라오게 하시는 건지, 아니면 이런 것들 중 일부는 최소한으로 먼저 정해두고 시작하시는지, 재민님의 실제 작업 순서가 궁금합니다. 물론 절대적인 정답은 없고 케바케일 것 같긴 합니다. 예를 들면 프론트엔드나 타 팀이 의존하는지 등등에 따라 달라지겠지만요. 재민님만의 어떤 기준 같은게 있는지 궁금합니다. Q3) AI가 코드를 대신 짜주는 시대가 되다 보니, 회사에서도 코드를 잘 짜는 것 자체의 가치가 점점 낮아지는 분위기인데요. (물론 회사 KPI마다 다르겠지만 ㅎㅎ) 이런 시대에 개념과 격벽을 세우는 역량은 오히려 개발자의 마지막 차별점이 된다고 보시는지, 아니면 이 피드백 루프(구현하며 느끼고 개선하는)마저 AI가 돌게 될 거라고 보시는지, AI 시대에 이 방법론이 가지는 의미를 어떻게 보시는지 궁금합니다.
안녕하세요 강의 잘 보고 있습니다. 다름이 아니라, 클라우드 프론트 멀티 오리진의 의미가 정확히 무엇인가요? "단일 배포 안에서 여러 개의 origin(S3,ALB,온프레미스 서버 등)을 가질 수 있다"의 의미가 정확히 무엇인지 잘 이해가 안됩니다. 단순히 API 경로가 다른거 같은데, 이를 왜 다양한 오리진을 가질 수 있다라고 표현하는 건가요??
안녕하세요. 현재 Node.js를 학습한 뒤 NestJS를 공부하고 있습니다. 부족한 CS 지식과 Node.js의 내부 동작 원리를 보완할 수 있을 것 같아 강의를 수강하고 있는데, NestJS 학습과 개인 프로젝트를 병행하다 보니 강의를 모두 시청하는 데 많은 시간을 투자하기가 어려운 상황입니다. 그래서 가능하다면 강의 노트를 중심으로 학습하여 시간을 조금 더 효율적으로 활용하고 싶습니다. 혹시 강의 노트만으로도 핵심 내용을 충분히 습득할 수 있을까요? 아니면 영상 강의를 통해서만 얻을 수 있는 중요한 설명이나 실무적인 인사이트가 많은 편인지 궁금합니다. 만약 강의에서만 얻을 수 있는 내용이 많다면 시간을 조금 더 내서라도 영상을 함께 수강하려고 합니다. 의견 부탁드립니다.
GET /v1/shared-carts API 부분의 구현을 보니 CartReader.getCartAccessList 부분이 있는데 cartAccessRepository.findByUserIdAndStatus 메서드를 사용하여 조회하더라구요. 이렇게 되면 내가 만든 내가 소유자인 카트만 조회될 것 같고, 공유 장바구니 참여자 수 만큼 같은 공유카트가 여러개 조회 될 것 같습니다. 결국 소유자 조차도 access 데이터에 추가된다면 cartAccessRepository.findByAccessUserIdAndStatus 를 사용하여 범용으로 사용하는 것은 불가능할까요? 그리고 CartHandler.createCharedCart 부분에는 도구 레이어임에도 불구하고 하나의 트랜잭션으로 두지 않으셨는데요, 카트 생성 이후 나의 접근 권한이 추가 되지 않는다면 카트 리스트에서 볼 수 없을 것 같은데 이 점에 대해서도 의도하신 바가 있는지 궁금합니다! 또한 access 부분에서 DB 유니크를 걸어두었지만 사전 존재 확인이나 멱등처리가 없는 것 같습니다. 개념적인 예외를 사용하지 않고 DB 무결성 예외를 노출시키신 이유가 궁금합니다.
안녕하세요 강의 잘 듣고 있습니다. 다른게 아니라, 14번 문제에서 D의 Direct Connect가 비용 효율적이라고 말씀하셨습니다. 근데 , 개념 강의에서는 Direct Connect는 직접 선을 연결하는 작업이기 때문에 비용이 많이 든다고 하셨습니다. 왜 해당 문제에서는 "Direct Connect"가 비용 효율적인 방법이 되는건가요??
강의 2강에 대한 노트에 대한 질문입니다. 💡 [CS 및 실무 적용 Point: MSA와 BFF 아키텍처] 현대의 마이크로서비스 아키텍처(MSA)에서 Node.js는 특히 BFF(Backend For Frontend) 패턴의 핵심 기술로 사용됩니다. 브라우저의 DOM을 다루던 언어적 특성을 살려 클라이언트(React, Vue 등)의 요청을 쉽게 파싱하고, 이식된 운영체제 제어 능력(http, fs)을 통해 백엔드의 여러 마이크로서비스(Java, Python 등)로 비동기 네트워크 요청을 뿌린 뒤, 그 결과를 모아 빠르게 클라이언트에게 반환하는 완벽한 미들웨어 역할을 수행합니다. 해당 설명에서 BFF로 NodeJs를 유용한 이유는 I/O 입출력 특출나기 때문에, BFF로 사용하면, API 요청을 받아서 마이크로 서비스에 통신 요청을 보내는 용도로 사용한다는 건가요? 한번 더 거쳐가면 더 성능이 안 좋은 거 아닌가요? 아니면 원래 SpringBoot로 개발되었던 웹 사이트를 NodeJs로 구현한다면 더 좋다는 의미일까요?
"AI 딸깍의 시대" 원리로 돌파하는 Node.js와 CS Part 2 - 스트림 아키텍처와 하드웨어 통제기
// 3. 작업 종료 알림: end 이벤트를 통해 댐 바닥 확인 streamRead.on("end", async () => { console.log("\\n✅ [종료] 댐 바닥 도착. 모든 데이터 복사 완료!"); // 메서드: 더 보낼 물이 없다고 선언하고 파이프 닫기 절차 진입 // finish 이벤트: 쓰기 파이프가 논리적으로 완벽히 닫혔음을 보장 streamWrite.on("finish", async () => { // 쓰기 파일 디스크립터(번호표) 운영체제에 반환 (메모리 누수 방지) await fileHandleWrite.close(); console.timeEnd("복사_소요_시간"); console.log( `📊 요약: 총 ${chunkCount}회 펌프질, ${pauseCount}회 비상 정지(메모리 방어 성공)`, ); // 메서드: 실험용 임시 파일 삭제 클린업 (unlink) await fs.unlink(SOURCE_FILE); await fs.unlink(DEST_FILE); }); streamWrite.end(); // 메서드: 사용이 끝난 읽기 파일 디스크립터(번호표) 운영체제에 반환 await fileHandleRead.close(); 읽기 스트림과 쓰기 스트림을 종료하는 3번 단계에서 쓰기 스트림을 end 하기 전에 .on finish를 등록을 해야 콘솔에서 요약을 볼 수 있었습니다. 클로드는 레이스 컨디션이 발생해서 그렇다고 하는데 어떤 부분에서 경합이 일어났는지 잘 모르겠습니다.
let previousContent = ""; const addToFile = async (path, content) => { if (previousContent === content) return; // 중복 실행 방지를 위한 거름망 if(!(await fileExist(path))) return; // file이 존재하는지 않하는 지 체크 try { await appendFile(path, content); previousContent = content; console.log(`✅ ${content} is successfully appended to ${path}`); } catch (error) { if (error.code === "ENOENT") { console.log(`⚠️ ${path} does not exist`); } console.error(`❌ 에러 발생: ${error.message}`); } }; catch error 부분에서 에러 코드로 ENOENT를 사용해서 path가 존재하지 않는 경우를 잡아내는 코드를 작성했지만, 실제로 실행했을 때 appendFile 자체가 이미 새로운 파일을 생성해내는데 성공하였기 때문에 error로 연결되지 않았습니다. 중복 콘텐츠 방지를 위한 if 밑에 또 다른 if로 fileExist를 사용해서 early return을 하는 이런 방식으로 처리를 하는 게 맞을까요? 아니면 제가 놓친 다른 catch error 가 있는 걸까요?