안녕하세요 교수님 강의를 통해 많은 도움을 받고 있는 수강생입니다. 수정 기능 구현 시, 전체 데이터를 Body에 담아 보내는 방식은 대용량 파일이나 멀티파트 폼 데이터 처리 시 효율성이 떨어지는 경험을 했습니다. 그래서 모든 필드를 Optional로 설정하여 부분 수정을 허용하게 하면 벨리데이션(Validation) 로직이 복잡해지는 문제가 발생했습니다. 현업에서는 어떤 식으로 업데이트 코드 스타일을 관리하는 것이 표준인지 교수님의 조언을 듣고 싶습니다. 감사합니다.
- is_host를 기준으로 호스트 사용자와 게스트 사용자를 구분하는 것은, 가입 당시부터 본인의 역할을 선택하여 구분 짓는 경우에 효과적인 것으로 판단됩니다. 가입 시점부터 역할(게스트/호스트)을 구분 지어서 관리하고자 하는 경우에 적절한 구조라고 생각되며, 호스트의 자격조건이 있거나, 검증이 필요한 서비스라면 이렇게 관리하는 방법이 적절해 보입니다. - 반면, 호스트/게스트의 타입을 캘린더의 존재 여부(또는 갯수)로 정의한다고 하면, 모든 가입자가 가입시에 동일한 자격을 갖는 가입자로서 가입처리가 되고, 추가 단계로서 캘린더를 생성 함으로 써, 호스트와 게스트의 역할을 자유롭게 넘나드는 자유도가 생기는 구조가 될 것 같습니다. - 지금은 커피챗을 목적으로 일정을 조율하는 목적을 갖는 시스템이므로, is_host를 사용하지 않는 결정을 하겠습니다. 전자상거래 시스템같은 판매자와/소비자 처럼 엄격한 구분과 자격을 검증해야 하는 시스템으로 여겨지지는 않기때문입니다. is_host 필드가 없어지는 경우에, 사용자의 상태(또는 역할)을 구분하기 위해서 매번 캘린더의 존재 여부를 확인해야 하지만 앞서 언급한 호스트와 게스트의 역할 변경에 열려있는 점이 중요하게 생각되기 때문입니다. 하지만 모든 가입자가 게스트로 시작하는 만큼 커피챗 호스트를 어떻게 유치할 것인가는 고민이 되는 부분입니다.
한 번에 끝내는 AI 에이전트 개발 올인원 (w. LangGraph, Google ADK, CrewAI)
RSS, 웹 서치 Tool 개발 8분 20초쯤 crewai - trace batch finalization을 확인하는 부분이 있는데, 코드에서 tracing이 켜져있지 않아 출력하지 않게 됩니다. 필요하다면 crew에서 tracing=True를 추가해주어야 하는것 같습니다.
window -> irm https: // claude.ai / install.ps1 | iex 붙여넣기 했을 때 설치가 되지 않아 npm으로 설치 했는데 npm으로 설치하면 선생님이 말씀하신 path 복사할 내용은 따로 나오질 않아 그대로 폴더 생성 후 실행했는데 제대로 설치가 되지 않은 듯 합니다. 확인 부탁드립니다.
안녕하세요. 선생님. 커서에서 클로드코드 쓸 때 ctrl+v로 붙혀넣기가 안됩니다. 커서에서 파워쉘에 입력할 때는 잘 되는데, claude 명령어를 입력해서 클로드코드로 작업할 때는 ctrl+v가 안먹어요. art+v도 안먹습니다. 텍스트 붙혀넣기 텍스트 붙혀넣기는 클로드코드 내에서 ctrl+v, alt+v 등 전부 다 안됩니다. 마우스 우클릭을 하면 붙혀넣어지는데 이게 너무 불편해요 ㅠ 클립보드 이미지 붙혀넣기 이것도 ctrl+v alt+v 다 안되기는 마찬가지입니다. 클립보드에 확실히 저장이 된 건 그림판에서 체크를 해 봤습니다. 이건 마우스 우클릭으로도 붙혀넣기가 안돼요. 파일을 이미지로 저장한 후에 드래그 드롭으로 하고 있는데 너무 비효율적입니다. 혹시 이거 2개 해결방법이 있을까요?
POSTMAN에 to: fail@naver.com 으로 변경하여 send할 시 총 5번 재시도 후 강사님 처럼 멈추지 않고 아래 에러가 무한 반복이 됩니다. 2026-01-04T20:45:42.814+09:00 ERROR 20160 --- [ner#0.dlt-0-C-1] k.r.DeadLetterPublishingRecovererFactory : Record: topic = email.send.dlt, partition = 0, offset = 2, main topic = email.send threw an error at topic email.send.dlt and won't be retried. Sending to DLT with name email.send.dlt. org.springframework.kafka.listener.ListenerExecutionFailedException: Listener failed at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.decorateException(KafkaMessageListenerContainer.java:3011) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2911) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:2877) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:2787) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:2629) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:2523) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:2161) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeIfHaveRecords(KafkaMessageListenerContainer.java:1538) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1476) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ ListenerConsumer.run (KafkaMessageListenerContainer.java:1345) ~[spring-kafka-4.0.1.jar:4.0.1] at java.base/java.util.concurrent.CompletableFuture$ AsyncRun.run (CompletableFuture.java:1804) ~[na:na] at java.base/ java.lang.Thread.run (Thread.java:1583) ~[na:na] Caused by: org.springframework.kafka.listener.TimestampedException: Exception thrown at 2026-01-04T11:45:42.814281400Z at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:100) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:49) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2898) ~[spring-kafka-4.0.1.jar:4.0.1] ... 10 common frames omitted Caused by: org.springframework.kafka.listener.ListenerExecutionFailedException: invokeHandler Failed at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.checkAckArg(MessagingMessageListenerAdapter.java:519) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:496) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invoke(MessagingMessageListenerAdapter.java:425) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:92) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:52) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.invokeDelegateOnMessage(KafkaBackoffAwareMessageListenerAdapter.java:106) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:97) ~[spring-kafka-4.0.1.jar:4.0.1] ... 12 common frames omitted Caused by: java.lang.IllegalStateException: No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment. ... 19 common frames omitted 위
강의의 시퀀스 다이어그램을 보았을 때, 2가지 정도 질문 드립니다. 1) stateless 요청에서 상태값의 전달 관련 일반적으로 웹과 같이 stateless 한 서비스를 고려했을 때, 비동기 처리로 인해 주문서비스가 고객의 주문요청에 대해 (이후의 수행작업과 상관없이) 즉시 리턴하게 되는 것이 예상되는데요. (위 그림에서는 동기적인 flow 로 주문완료 응답을 end point 유저에게 전달하는 것으로 보이긴 합니다만) 주문 완료 페이지에서 주문한 상품 정보나 결제 수단의 상태값 전/후 를 보여주는건 어떤 식으로 동작하게 될까요? 가령, 실물 상품이 아닌 연속선상의 사이버 재화(ex: 네이버포인트 등)를 지급해야하는 입장에서 주문 이전의 재화 정보와 주문 요청 후(최종적으로 트랜잭션 완료된 후의) 증/감 재화 정보를 유저에게 보여주어야 할 수도 있는데, 뒷단의 비동기 작업(이벤트 subscribe)을 수행하는 스레드랑 최초 주문 요청을 받는 요청스레드가 다른 부분에서 고려해야할 것이 더 있을 것 같은데요. 얼핏 생각했을 때는, 사용자에게 즉시 내려주는 응답 페이지는 PENDING 에 해당하는 페이지 UI 로 (ex: 결제 진행중... 표시) 전달하고, 사용자 PENDING 페이지 (클라이언트)에서 몇초 단위의 주기적인 서버 요청 등으로 완료 이벤트를 조회 하도록 처리하여 완료페이지로 리다이렉션 처리되는 방식이 될까요? 이 때, 중간 상태값은 별도 캐시서버등에 저장을 해야 할 것이고요. (리다이렉션 되는 완료페이지와 PENDING 페이지의 state가 또 다르므로) 2) 메시지 브로커(카프카) 를 쓸 때 고려사항 주제랑 좀 벗어난 걸 수는 있는데요, 보통 메시지 발행의 정확성을 위해 CDC (Change Data Capture) 를 설정하는 것이 일반적인 방식으로 알고 있습니다. 다만, 현재 서비스중인 DB 의 설정이나 부하 이슈로 CDC 를 쓰지 못하는 경우에는 어떤 방식으로 처리가능할지가 궁금합니다.
지금까지 영상을 쭉 봐왔고, 대략적인 흐름은 알 것 같아요. 미션 24/25가 지금까지 학습한 내용을 요약해서 실습을 하는 중요한 내용인데, 따라하기 형식으로 요약 영상 또는 튜토리얼 문서를 하나 만들어 주시면 큰 도움이 될 것 같습니다. 최대한 빠른 시간에 하나의 앱을 한 번 만들수 있도록 지원 부탁드립니다. 내용은 너무 훌륭하고 많은 것을 배우고 있습니다. 감사해요. 강사님의 다른 영상으로도 지속적으로 학습할 예정입니다.
안녕하세요. 완강하고, 이제는 제가 원하는 주제로 한번 더 수업을 보며 따라하는 중입니다. 첫단계 Basic LLM Chain의 GPT 나레이션 생성하고 Append row in sheet까지 마치고 난 다음에, 제가 구글 시트에서 나레이션의 내용을 수정했다면, 업데이트를 어느 단계에서 어떻게 하면 좋을까요? ^^
책에서는 128p if TYPE_CHECKING: from appserver.apps.calendar.models import Calendar 이렇게 appserver 부터 시작하니다 130페이지 하단에 보면 https://gilbut.co/c/25069573YP 커밋 참조하라고 되어있는데요 깃헙에서는 if TYPE_CHECKING: from apps.calendar.models import Calendar 여기는 apps부터 시작합니다. 초보에게는 이런거 하나하나가 어렵네요 어떤게 맞는 건지 궁금합니다.
mcp 사용 해서 사이트 작성 하는 것은 어렵지도 않고..찾아보면 자료도 많습니다. 저 또한 평상 시 MCP 는 잘 쓰고 있는데 스킬은 이해가 안되서 유튜브 영상 이나 블로그 등 자료를 많이 찾아 봅니다. 그래도 이해가 안되더군요.. 지금 이 영상도..다른 영상이나 블로그 등에서 본 내용과 별반 다른 내용은 없었던 것 같습니다. 그래서.. - skill 이라는 것을 어떻게 작성 하는 건가요? - skill 이라는 것을 어떤 내용을 작성 하는 건가요? 지금 이 영상도..클로드코드 사이트에 있는 예시를 사용 해서 설명 하는데.. 이게..실제 프로젝트에 적용 할 수 있다고 보시나요? 이런 거 말고.. 실제로 사이트 제작 시 스킬을 이용 해서 작성한다던가 ..하는...실제로 사용할 수 있는 것을 예시라도 보여 주셔야죠.. 단순히 클로드코드 사이트에 있는 예시 하나 보여준다고 해서..크게 도움이 될 것 같지는 않습니다.
사진처럼 안녕 다음 "아"라는 글자를 쓰고 있는데, 자음 모음을 모두 조합하는 과정에선 저렇게 실선 바깥에서 조합이 되고, 다음 글자 입력이 될 때 이전 조합이 완료되었다 판단하며 다시 실선 내에 표시되고 그런 현상이 있습니다... iTerms를 사용해도, cursor 에디터 내 터미널을 사용해도 동일 증상이 재현됩니다...
수업 정말 유익하게 보고 있습니다. 감사드립니다. Mcp 설정들이 많아지다 보니 컨텍스트에서 기본적으로 작업 영역이 많이 줄어든 채로 새로운 세션이 시작하게 되네요. 제 claude code cli 의 /context 슬래쉬 명령에서는 아래 이미지에서처럼 항상 Autocompact Buffer가 45k를 차지하고 있는데 강의 화면에서는 이것이 보이지 않고 있어요. 어떤 차이 때문에 그런 걸까요? 저는 프로플랜을 사용하고 있습니다. 강의화면