묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
4주차 과제(1회차, 5회차)
1회차 과제 : 호스트 정의 정책저는 호스트를 자격과 상태라는 두 가지 관점으로 나누어 정의했습니다. is_host 필드는 시스템이 부여한 면허증 같은 정체성이라면, 캘린더 보유 여부는 실제 모임을 열 장비를 갖췄는지 보는 준비 상태입니다.저는 두 요소를 모두 유지하되 역할을 수직적으로 분리하는 정책을 세웠습니다.is_host(권한 레이어): 메뉴 노출 등 UI/UX 접근 제어용으로 활용합니다.캘린더 여부 (데이터 레이어): 실제 예약 로직 실행 시 최종 검증용으로 씁니다.이 정책의 의도는 '잠재적 호스트에 대한 배려'입니다. 가입 즉시 자격을 부여해 소속감을 주되, 실제 운영은 캘린더 개설을 통해 단계적으로 유도하는 UX를 설계했습니다. 캘린더를 수정하거나 잠시 삭제해도 호스트라는 자격(정체성)은 유지되어야 안정적인 서비스 이용이 가능하다고 판단했기 때문입니다.데이터 불일치는 API 단의 강한 검증으로 막고, 조회 성능 문제는 예약 시점에만 확인하는 지연 검증으로 해결하겠습니다.5회차 과제 : 파일 삭제 정책논리적 삭제 후 유예 기간 뒤 물리적 삭제 방식을 생각해보았습니다. 사용자가 삭제를 클릭하면 is_deleted 같은 표시를 남기고, API 로직에서 is_deleted가 True이면 없는 데이터로 취급해서 접근 권한을 차단하도록 만듭니다. 그리고 실제 파일은 30일 뒤에 물리적으로 삭제 하는 것입니다. 미팅 서비스 특성상 예약 취소 후에도 분쟁이 생길 수 있고, 사용자가 실수로 파일을 지웠을 때 복구할 최소한의 시간을 벌어주고 싶었기 때문입니다. 그렇다고 너무 오래 보관하면 저장 공간이 넘쳐날 수 있으니 최적화를 위해 1달 정도의 유예 기간을 두는 것이 적절하다고 생각했습니다.
-
미해결
4주 1~5회차 과제
# 4주 1회차 두가지 요소를 다 사용하는 전략을 이용할것 같습니다. 1. is_host 만 체크할 경우 호스트 권한은 있지만 캘린터 미생성등으로 캘린더가 없는 host가 api를 호출했을때 500 에러가 발생할 위험이 있습니다. 2. 또한 캘린더 존재만 체크할 경우 일반 유저가 확인하지 못한 경로고 캘린더를 생성하거나, host 권한이 없어진 유저가 호스트 기능을 수행할수 있게 될 위험이 있습니다. 그러므로 먼저 is_host 로 유저의 자격을 검증하고, 이후 실제 비즈니스 로직 진입 전 캘린더 유무를 확인해 예외처리 등을 하는 것이 가장 안정적으로 접근할수 있게 될것 같습니다. # 4주 2회차 sqlalchemy를 사용해 기존 예약과 겹치지 않는 지 확인하는 메서드입니다. ```python from sqlalchemy import select, and_, or_ from app.models.booking import Booking async def check_timeslot_overlap(session, calendar_id, start_time, end_time): # (새로운 시작 시간 < 기존 종료 시간) AND (새로운 종료 시간 > 기존 시작 시간) # 위 조건이 참이면 시간이 겹치는 슬롯이 존재함 stmt = select(Booking).where( and_( Booking.calendar_id == calendar_id, Booking.status != "cancelled", Booking.start_at < end_time, Booking.end_at > start_time ) ) result = await session.execute(stmt) overlap_booking = result.scalars().first() if overlap_booking: return False # 중복 발생 return True # 예약 가능 ``` # 4주 3회차 동일 일자/ 타임슬롯에 대해 중복 예약을 막되, cancelled 상태인 경우는 제외해야 한다. -> postgresql에서 지원하는 partial index를 사용하는 것이 가장 깔끔할 것 같습니다. ```python from sqlalchemy import Index class Booking(Base): # ... 기존 필드 (id, calendar_id, start_at, attendance_status 등) ... # attendance_status가 'cancelled'가 아닌 데이터들에 대해서만 # calendar_id와 start_at의 조합이 유니크해야 함 __table_args__ = ( Index( "ix_unique_active_booking", "calendar_id", "start_at", unique=True, postgresql_where=(text("attendance_status != 'cancelled'")), ), ) ``` # 4주 4회차 정책 : 호스트의 노쇼 방지 맟 일정 관리의 안정성을 보장하기 위해서 예약 시간 24시간 전까지 1회에 한해 일정을 변경하는것을 허용한다. 그 이후는 취소 후 재예약만 가능한것으로 구현하는 정책을 구성할 것 같습니다. 구현 시나리오: 1. 변경 가능 기간 내 시도 (성공) 게스트가 2월 10일 오후 2시 예약을 2월 8일에 확인. 2월 11일 오후 4시로 변경 요청. 시스템은 현재 시간 + 24시간 < 예약 시작 시간을 검증 후 True. 기존 타임슬롯을 업데이트하고 성공 메시지 반환. 2. 임박한 변경 시도 (실패) 게스트가 2월 10일 오후 2시 예약을 2월 9일 오후 8시에 변경 시도. 잔여 시간이 18시간이므로 검증 로직에서 False. "예약 24시간 전에는 일정을 변경할 수 없습니다. 취소 후 재예약 바랍니다." 메시지 반환 # 4주 5회차 - soft delete 후 배치 처리를 통한 db 레코드 삭제를 세울것 같습니다. - 데이터 복구 가능성 고려 - 유저가 실수로 예약을 삭제했을때 db 레 코드와 함께 파일까지 지워지면 복구가 불가능합니다. - 트렌잭션 성능 고려 - api 요청 내부에서 s3나 로컬 파일 시스템의 i/o 작업을 직접 수행한다면 응답 시간이 길어집니다.
-
미해결[Unity6] 나만의 서바이벌 게임 만들기
강의 코드 파일은 혹시 어디에 있나요?
자료 다운 받으면 코드 파일들이 없는것 같습니다.혹시 어디서 받으면 될까요?
-
해결됨[매일 완독 챌린지] 저자와 함께하는 <FastAPI로 기획에서 출시까지>
4주 3회차 과제
데이터베이스 고윳값 제약으로 예방하는 구현에 대해서 조사했습니다. 동일 일자와 동일 타임슬롯인 경우 중복Booking에 unique index를 생성하는 것인데 동일 일자 (when)과 동일 타임슬롯(time_slot_id) 조건을 생성하면 됩니다. CREATE UNIQUE INDEX uq_booking_slot ON bookings (when, time_slot_id);class Booking(SQLModel, table=True): __tablename__ = "bookings" __table_args__ = ( UniqueConstraint("when", "time_slot_id", name="uq_booking_slot"), ) attendance_status 필드값이 cancelled인 경우PostgreSQL의 경우 partial unique index가 가능합니다. where를 사용해서 field가 cancelled가 아닌 경우에 unique 제약을 걸면 됩니다. CREATE UNIQUE INDEX uq_booking_slot ON bookings (when, time_slot_id) WHERE attendance_status <> 'cancelled' ;class Booking(SQLModel, table=True): __tablename__ = "bookings" __table_args__ = ( UniqueConstraint("when", "time_slot_id", name="uq_booking_slot"), postgresql_where=text("attendance_status <> 'cancelled'") ) 다중 컬럼에 대한 unique는 종종 사용하는 방법이었는데 where를 이용해서 조건을 설정할 수 있는 건 이번에 첨 알았습니다. 필요하면 python에서 처리하곤 했었는데 데이터베이스 기능으로 이용하는게 레이스 컨디션도 피할 수 있고 장점이 있어보이네요. 실무에 적용할때도 꼭 이용해보겠습니다.
-
해결됨수익형 AI Agent n8n 전문가 강의, 블로그·쇼츠 자동화
30강에서 몇일째 고생중입니다ㅜ
남박사님. 오디오 아웃풋 테스트에서 여러가지 방법으로 진행중인데, 잘 안되네요. 파일 또는 URL을 제공하라는데, 어디서 문제가 생겼을까요?ㅜ공유기가 문제인가 싶어서, DDNS 9900번 포트를 인터넷창으로 접속하면, 아래와 같이 접근이 되는거 같은데요.(이게 맞는지 잘 모르겠습니다만...)조언 부탁드립니다..
-
해결됨[매일 완독 챌린지] 저자와 함께하는 <FastAPI로 기획에서 출시까지>
4주 5회차 과제
파일 삭제 정책booking을 삭제할때 해당 booking과 업로드된 파일을 같이 삭제하는 정책의미없는 파일이 남아있는 것은 저장 공간 낭비유출 위험을 줄여준다(?) (예: 삭제된 booking의 파일을 남겨두어 총 100개의 파일이 저장된 상태라고 가정. 그 중에 70개는 필요한 파일, 나머지 30개는 필요없는(삭제된 booking) 파일임. 파일을 바로 제거하지 않아서 100개가 다 유출되는 것보다 의미없는 파일을 바로바로 제거하여 70개만 유출되는 것이 더(?) 낫다..)그러나 한편으로는 트래픽이 적은 시간에 삭제된 booking의 파일을 주기적으로 정리하는 로직을 실행하는 것이 더 나을까 하는 생각도 드네요
-
해결됨[매일 완독 챌린지] 저자와 함께하는 <FastAPI로 기획에서 출시까지>
4주 1회차 과제
is_host / 캘린더 보유 여부 중에 어느 것을 사용할까? 둘 다?is_host 는 반드시 사용할 것 같음is_host 필드가 있으면 캘린더 라는 다른 엔티티에 의존하지 않고 is_host 만으로 호스트 여부를 판단할 수 있어서캘린더 보유 여부는 선택적일 것 같음아래와 같은 정책을 설정해야할 필요가 있을때is_host 인데 캘린더가 있는 경우s_host 인데 캘린더가 없는 경우 아니면 '호스트는 최소 하나 이상의 캘린더는 있어야 한다' 같은 정책
-
미해결맥킨지 출신 김재성의 AI로 앞서가는 문제 해결력 & 리서치 전략
강의 자료 다운로드가 안됩니다.
궁금하신 점은 편하게 질문 주세요! 안녕하세요,6종 패키지, 오픈채팅 코드 pdf 등등.. 모든 자료 다운로드가 되지 않고있습니다.하단 "자료 다운로드" 버튼, 강의목차의 "다운로드" 버튼 모두 눌러봐도 다운로드가 시작되지 않고 있는데 자료 다운로드 어떻게 할 수 있나요?
-
미해결graphRAG - Neo4J로 구현하는 지식 그래프 기반 RAG 시스템 (feat. LangChain)
neo4j 사용에 질문 드립니다.
만약, 만든 랭체인과 그래프rag를 서비스로 만든다면, neo4j를 호출할 때, pooling은 고려하지 않아도 되는지요? 일반적으로 db 연결에 timeout이나 pooling 등의 설정을 해줘야 하는 것으로 아는데,api를 호출하는 것이라 서버에서 자체적으로 처리하는 것으로 생각하면 될런지요?
-
미해결실전에서 바로 써먹는 Kafka 입문
질문드립니다.
22강 [실습] Spring Boot로 Kafka에서 메시지 조회하기(Consumer)를 실습하고 있었습니다.강사님이 제공한 방식과 다르게 해보고 싶어서 이전 강의에서 Producer를 구현한 프로젝트에 Consumer를 추가적으로 구현하였습니다. yml 설정 추가와 consumer 클래스를 추가하엿는데, 프로젝트 기동 시 Consumerr가 초기화가 되지 않고 있습니다. 강의대로 consumer를 프로젝트 분리하여 실행하면, 강의와 동일하게 정상동작하는데, 왜 1개의 프로젝트에선 정상동작하지않는 것인지 궁금합니다.
-
해결됨남박사의 파이썬으로 실전 웹사이트 만들기
DB 검색하면 데이터가 없습니다. 라고 나와요. 5시간을 찾아봐도 모르겠어서 문의드려봅니다.
안녕하세요저의 환경은윈도우 11이고 파이선 3.12 버전입니다. 몽고DB는 8.2.3 x64입니다.ms 엣지 브라우저 버전 143.0.3650.96 (공식 빌드) (64비트) 입니다. 구글에서 긁어오는게 문제가 있어서네이버로 변경하여 긁어왔습니다.DB에 35개의 데이터를 넣었습니다.Studio 3T 프로그램으로 검새하면db.getCollection("board").find({$or:[// {title: { $regex: "이유", $options: "i" }},{name:{ $regex: "테스터", $options: "i" }}]})위의 쿼리로 검색을 했을 때name = '테스터'로 하면 35개 전부 나오고title = '이유'로 검색하면 3건이 나옵니다. 그런데 웹에서 list.html 검색에서는 0건으로 데이터가 없다고 나옵니다.원인을 아무리 찾아도 모르겠어서 문의드려봅니다. 위와 같이 네이버에서 검색하여 DB에 넣음title 이유로 검색하면 3건name 테스터로 검색하면 35건 조회됩니다.위와 같이 제목, '이유'로 검색하면 3건이 나와야 하는데위와 같이 데이터가 없습니다. 라고 나옵니다. # 검색 대상이 한개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) # datas_count = board.count_documents({}) # 정확한 카운트 방식 datas_count = board.count_documents(query) print(datas_count) 위와 같이 print로 값을 보면{'$or': [{'title': {'regex': '이유'}}]}0127.0.0.1 - - [11/Jan/2026 17:42:01] "GET /list?search=0&keyword=이유 HTTP/1.1" 200 -이렇게 나옵니다.쿼리는 title 이유라고 잘 들어가는 것 같은데검색 결과가 0건으로 나옵니다.DB에서 검색이 제대로 안되는걸로 보이는데 어느부분일지 찾지 못하고 있습니다. 아래는 전체 소스코드 입니다. < run.py 전체 코드 > from flask import Flask from flask import request from flask import render_template from flask_pymongo import PyMongo from datetime import datetime from bson.objectid import ObjectId from flask import abort from flask import redirect from flask import url_for import time import math app = Flask(__name__) app.config["MONGO_URI"] = "mongodb://localhost:27017/myweb" mongo = PyMongo(app) @app.template_filter("formatdatetime") def format_datetime(value): if value is None: return "" now_timestamp = time.time() offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(now_timestamp) value = datetime.fromtimestamp((int(value) / 1000)) + offset return value.strftime('%Y-%m-%d %H:%M:%S') @app.route("/list") def lists(): page = request.args.get("page", default=1, type=int) limit = request.args.get("limit", 5, type=int) search = request.args.get("search", -1, type=int) keyword = request.args.get("keyword", type=str) query = {} search_list = [] if search == 0: search_list.append({"title": {"regex": keyword}}) elif search == 1: search_list.append({"contents": {"regex": keyword}}) elif search == 2: search_list.append({"title": {"regex": keyword}}) search_list.append({"contents": {"regex": keyword}}) elif search == 3: search_list.append({"name": {"regex": keyword}}) if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find(query).skip((page - 1) * limit).limit(limit) datas_count = board.count_documents(query) print(datas_count) tot_count = datas_count last_page_num = math.ceil(tot_count / limit) block_size = 5 block_num = int((page - 1) / block_size) block_start = int((block_size * block_num) + 1) block_last = math.ceil(block_start + (block_size - 1)) return render_template( "list.html", datas=datas, datas_count=datas_count, limit=limit, page=page, block_start=block_start, block_last=block_last, last_page_num=last_page_num, search=search, keyword=keyword) @app.route("/view/<idx>") def board_view(idx): if idx is not None: page = request.args.get("page") search = request.args.get("search") keyword = request.args.get("keyword") board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data is not None: result = { "id": data.get("_id"), "name": data.get("name"), "title": data.get("title"), "contents": data.get("contents"), "pubdate": data.get("pubdate"), "view": data.get("view") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword) return abort(404) @app.route("/write", methods=["GET", "POST"]) def board_write(): if request.method == "POST": name = request.form.get("name") title = request.form.get("title") contents = request.form.get("contents") print(name, title, contents) current_utc_time = round(datetime.utcnow().timestamp() * 1000) board = mongo.db.board post = { "name": name, "title": title, "contents": contents, "pubdate": current_utc_time, "view": 0 } x = board.insert_one(post) print(x.inserted_id) return redirect(url_for("board_view", idx=x.inserted_id)) else: return render_template("write.html") if __name__ == "__main__": app.run(debug=True, port=9000) < list.html 전체 코드 ><script> function search() { var v_search = document.getElementById("search").value; var v_keyword = document.getElementById("keyword").value; if(v_search == "" || v_keyword == "") { return false; } else { self.location.href = "{{url_for('lists')}}?search=" + v_search + "&keyword=" + v_keyword; } } </script> <!-- % if datas_count() > 0 %} # Deprecated 됨--> {% if datas_count > 0 %} <table> <thead> <tr> <td>번호</td> <td>제목</td> <td>이름</td> <td>날짜</td> <td>조회수</td> </tr> </thead> <tbody> <!-- 반복되는 구간 --> {% for data in datas %} <tr> <td>{{loop.index + ((page - 1) * limit)}}</td> <td><a href="{{url_for('board_view', idx=data._id, page=page, search=search, keyword=keyword)}}">{{data.title}}</a></td> <td>{{data.name}}</td> <td>{{data.pubdate | formatdatetime}}</td> <td>{{data.view}}</td> </tr> {% endfor %} <!-- 반복되는 구간 끝 --> </tbody> </table> {% if block_start - 1 > 0 %} <a href="{{url_for('lists', page=block_start - 1, search=search, keyword=keyword)}}">[이전]</a> {% endif %} {% for i in range(block_start, block_last + 1) %} {% if i > last_page_num %} {{ i }} {% else %} {% if i == page %} <b>{{ i }}</b> {% else %} <a href="{{url_for('lists', page=i, search=search, keyword=keyword)}}">{{ i }}</a> {% endif %} {% endif %} {% endfor %} {% if block_last < last_page_num %} <a href="{{url_for('lists', page=block_last + 1, search=search, keyword=keyword)}}">[다음]</a> {% endif %} <select name="search" id="search"> <option value="" {% if search == '' or search == -1 %} selected {% endif %}>검색대상</option> <option value="0" {% if search == 0 %} selected {% endif %}>제목</option> <option value="1" {% if search == 1 %} selected {% endif %}>내용</option> <option value="2" {% if search == 2 %} selected {% endif %}>제목+내용</option> <option value="3" {% if search == 3 %} selected {% endif %}>작성자</option> </select> <input type="text" name="keyword" id="keyword" {% if keyword != "" %} value={{keyword}} {% endif %}> <input type="button" value="검색" onclick="search()"> {% else %} <h3>데이터가 없습니다.</h3> {% endif %} <a href="{{url_for('board_write')}}">글작성</a>오타가 있는지 문제가 될만한 부분이 있는지 5시간이나 찾아봤는데 도저히 못찾아서 문의드려봅니다.봐주셔서 감사합니다.버전 143.0.3650.96 (공식 빌드) (64비트)버전 143.0.3650.96 (공식 빌드) (64비트)ㅍ
-
미해결즐거운 블렌더 - 아이소메트릭 하우스
컨트롤 방법
익스투르드 혹은 스케일 조절할 때 명령어를 실행 도중에 화면을 돌리거나 줌인아웃하면서 확인 할 수 없는걸까요..?
-
해결됨[매일 완독 챌린지] 저자와 함께하는 <FastAPI로 기획에서 출시까지>
4주 1회차 과제
기획의 관점에서 Host 체크 방법is_host 필드 체크사용자가 호스트인지 먼저 확인을 하게 되므로 호스트 등록, 호스트만 조회, 호스트에 주어진 권한 제어 등 호스트를 따로 관리하고 싶을때 장점이 있습니다캘린더 보유 체크캘린더로 호스트일 경우는 호스트, 게스트 구분이 회원 등급이나 종류가 아닌 모두가 호스트나 게스트가 될수 있고 예약이 서로에게 일어날 수 있을때 장점이 있습니다. 구글 캘린더로 예를 들면 모두가 초대가 가능하고 초대도 가능한 방식입니다. 내가 선택한다면저라면 기본적으로는 is_host 필드로 체크하고 실제 예약을 받는다면 캘린더 체크를 이후에 하겠습니다. 호스트 관리를 따로 하게 되면 호스트만 따로 조회도 가능하고 호스트를 하고 싶지 않을때는 호스트가 되지 않는 것도 가능합니다. 또한 is_host를 기본 true로 하게 되면 모두가 호스트가 되는 방식도 가능하므로 앞에서 가정한 모두가 호스트/게스트인 방식도 쉽게 전환이 가능합니다. 예약 가능한 캘린더 체크는 실제로 이사람이 호스트라고 하더라도 예약일자가 있는지에 따라 예약화면 컨트롤 등이 가능하기 때문에 체크가 필요합니다. 요약하면 is_host 체크를 할 때 상황에 따라 유연하게 호스트 <-> 게스트 전환이 쉽고 필요한 경우 호스트이면서 게스트인 정책도 가능하기 때문에 좀 더 유연한 방법이라고 생각합니다.
-
해결됨수익형 AI Agent n8n 전문가 강의, 블로그·쇼츠 자동화
DNS server 오류 관련 문의 드립니다.
전체적으로 Execute workflow를 진행 할 때, 노드를 넘어 갈때 위와 같은 Dns Server 오류가 발생되고 있습니다.기존 실습에서는 그때 마다 다시 해당 노드만 Execute step(플레이 버튼)을 2~3번 정도 누르면 다시 실행이 되는데, 전체적으로 한번에 실행 되지 않고 노드를 넘어갈때 마다 거의 해당 오류가 노출 되고 있습니다. 어떤 방법을 조치하면 좋을지 문의드립니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
맥 os vscode 설정 - python interpreter select
안녕하세요.맥 os에 vscode를 설정하려고 하는데 python interpreter select -> 알맞는 python 버전을 클릭해도 선생님과 같은 파란색 바가 안 뜨는데 어떤 문제가 있을까요? 코드를 입력해도 그에 따른 설명이 선생님과 같이 안 뜹니다(ex. 명령어 print를 입력해도 설명이 안 뜸 )
-
미해결밑바닥부터 설계하는 컴퓨터 과학 - Nand2Tetris Part 1
혹시 Part2 강의 계획은 있으신가요?
책으로 독학했을 때 2부 소프트웨어의 첫 장인 7장부터 과제 진행 속도가 더뎌져서 강의를 수강할 수 있으면 좋겠다는 생각이 듭니다. Part2 강의 제작 중이시거나 계획이 있으신지 궁금합니다.
-
미해결2026 코딩테스트 올인원 [JAVA]
part5. 청팀홍팀 풀이 질문 드립니다.
안녕하세요! 남노씨님 덕분에 강의 잘 들으며 학습중입니다. part5.청팀홍팀 풀이로 보여주신 것에서 질문이 있습니다.문제의 Input 예시 이해가 잘 되지 않았습니다.제가 혼자 생각했을 때는, 주어진 friends[][] 배열을 인접리스트로 만들어야한다고 생각했고, 서로는 쌍방이니 양방향 그래프. 양방향 값을 인접리스트에 넣어주어야 한다고 생각했습니다. 근데 input 예시를 보니, 예시1은 서로 양방향 없이 구성되어있고, 예시2는 인접리스트처럼 서로 양방향으로 구성되어있습니다. 이상황에서 인접리스트를 구성하려니 예시2로는 중복이 발생하더라구요.1. 예시 1,2 기준이 달라보이는데 어떻게 해석해야 좋을까요?2. 양방향 그래프=무방향 그래프 같다고 볼 수 있나요? 이 문제의 경우 어떤 그래프인지, 구현의 차이점이 있는지 궁금합니다.3. 풀이에서는 인접리스트를 별도로 안만들고, 받은 배열 자체를 인접리스트인것처럼 바로 사용하였는데, 이전 풀이와 비교해서 왜 이렇게 사용하였는지 궁금합니다. (문제에서 캐치할 수 있는 차이점이 뭘지)4. dfs/bfs에서 사용하는 자료구조(큐,재귀/스택)는 풀이에 사용하지 않으셨는데 문제 상 필요 없는건지, 이분그래프일 때 사용 안해도 되는지 궁금합니다. (일단 bfs 큐 사용한 구조 만들고 시작했는데 이렇게 접근하면 안되는걸까요?ㅠㅠ)이해 도와주시면 감사하겠습니다 :)
-
미해결AWS SAA-C03 자격증 벼락치기 - 딱 163문제로 2주만에 합격하기
예상 기출 문제 오탈자 제보
제공해 주신 기출문제 PDF에서 오탈자를 발견하여 제보드립니다. p5. "분ㅅ거해" > "분석해"p51. "리로스" > "리소스"좋은 강의에 감사드립니다 : )
-
미해결원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
fal.ai 요청시 wait 무작정 넉넉히 잡는건 비효율적인것 같아요
fal.ai 요청시 wait 무작정 넉넉히 잡는건 서버 메시지큐 상태를 알수없고 내 TASK가 언제 처리될지 모르는 상태에서 감(?) 으로 때리는 방법이라 엣지 케이스가 너무 많은것 같아요주기적으로 Status 호출해서 체크하는 방법이 좋아보입니다. 200 외에 응답으로 에러 응답이 오는경우는 어쩔수 없지만, 일반적으로 정상응답인 상황에서while 문처럼 내부에 sleep 있는 것 처럼 loop 돌리는게 호율적이여 보입니다.코드 리뷰 정도의 의견이라고 생각해주세요!강의 잘보고 있습니다. 감사합니다. 예시>
-
미해결AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
hooks가 동작하기 위한 내용이 없는 것 같아서 추가가 필요하지 않을까 싶습니다.
Claude Code활용(Skills, Hooks)에서 hook과 관련된 설정(예: spotless)내용은 깃 주소에 올려진 프로젝트의 build.gradle.kts에 반영이 되어 있지 않은 것 같아요. hooks경로에 lint.sh는 생성이 되어 있는데 말이죠. settings.loca.json 파일도 없어요. 강의에 관련 설명만 존재하기 떄문에 git에 올려진 프로젝트에 업데이트를 해주시면 어떨까 싶습니다.