반갑습니다!
AI와 컴퓨터 공학의 무한한 가능성을 탐구하며, 그 여정을 여러분과 나누고 싶은 해여입니다.
학부 시절 '컴퓨터 공학 중독자'라 불릴 만큼 전공에 대한 열정으로 4.4점 이상의 전공 학점으로 수석 졸업하였고, S대학원에서 AI를 전공하며 석사 학위를 받고 박사 과정을 통해 전문성을 심화했습니다.
하지만 이론적 탐구만큼이나 실제 세상의 문제를 AI로 해결하는 것에 큰 매력을 느껴, 박사 과정을 잠시 멈추고 스타트업에서 AI 기반 LLM 및 비디오 분석 프로젝트를 경험하며 귀중한 실전 경험을 쌓았습니다.
지금은 국내 Top3 대기업 중 한 곳에서 LLM 프로젝트 개발 및 PM으로 일하며, AI 기술이 우리 삶에 가져올 긍정적인 변화들을 만들어가는 데 기여하고 있습니다. 제가 겪었던 고민과 해결의 과정, 그리고 현장에서 얻은 생생한 노하우들을 여러분께 아낌없이 전달해 드리겠습니다. AI라는 흥미로운 세계로의 여정에 든든한 길잡이가 되어 드릴게요.
講義
受講レビュー
- コード5行の魔法、5行機械学習PyCaret:データ分析プロジェクトにAutoMLの翼をつける
- FastAPI: Pythonで3倍速く、2倍正確な、10倍速いAPIの作り方
投稿
Q&A
강의 소개란에 '이런 내용을 배워요' 잘못 올라온거 같아요
안녕하세요, 처음 제공되는 템플릿에 포함된 내용이 바로올라와버렸군요 😅바로 수정하였습니다! 친절한 피드백 감사드리며! 즐거운 수강되길 바랍니다!! 언제든 질문이 생기면 편하게 올려주세요!항상 친절히 답변해드릴게요 🙂
- 0
- 2
- 12
Q&A
ydata_profiling 랜더링 이슈
안녕하세요 강사해여입니다.현재 본가에 내려와있어 답변이 늦는 상황입니다.빠르게 확인 후 회신드리겠습니다!감사합니다.
- 0
- 1
- 23
Q&A
github 소스코드
안녕하세요, 강사 해여입니다.먼저 수강신청해주셔서 감사하다는 말씀올립니다. 🙂현재 강의자료는 PPT가 아닌 노션을 활용하고있는데요!이 이유는 강의 개선과 연관이 있습니다. 한번 제작된 강의는 수강생 분들께서 남겨주시는 피드백, 변화하는 라이브러리 정보들을 계속해서 반영해 강의를 개선하는 작업을 반복하고 있는데요! 노션의 경우 PPT와 달리 사이트에 강의자료를 게시하는 형태라서 수강생 분들께 개선된 강의자료를 배포하는 게 굉장히 용이합니다. 이 때 Github을 활용하여 코드를 관리하는 경우 간혹 레포와 강의자료의 버전이 맞지 않는 등의 문제가 발생하는 것이 확인되어 현재는 노션으로 강의에 사용되는 모든 리소스를 관리하고 있습니다. 각 챕터에서 사용하는 모든 코드는 한번 노션의 상단에 기입해두는 방식을 사용하고 있습니다. 최근 레포 형태의 소스코드 공유를 원하는 수강생분들이 보여, Notion 강의자료와 Github 소스코드를 연동 시키는 방안을 준비하고 있으니 참고부탁드립니다. 감사합니다!
- 0
- 2
- 36
Q&A
강의자료 링크로 들어가면 페이지를 찾지못한다고 나와요
안녕하세요 강사 해여입니다 🙂 현재 강의 영상에 중간중간 잘린 부분이 있어 해당 부분 재촬영을 진행하니라강의자료 게시를 30분 정도 멈췄었습니다! 현재는 다시 정상적으로 접근 가능하니 확인 부탁드려요!새로 촬영한 강의 영상은 8/28일까지 모두 업로드될 예정이니 참고부탁드립니다.불편을 끼쳐드려 죄송합니다. 감사합니다.강사해여 올림
- 1
- 2
- 47
Q&A
PDF로 내보내기 기능 활성화 부탁드립니다.
추가로 확인해보니 Chrome에 여백 최소화 + 배율 조절을 통해 잘림없이 PDF로 내보내기가 가능한 듯 합니다! 활용해보시고 문제가 있으시면 말씀부탁드리겠습니다 🙂
- 0
- 3
- 78
Q&A
PDF로 내보내기 기능 활성화 부탁드립니다.
안녕하세요, 강사 해여입니다.Notion 템플릿 복제 기능을 3일동안 활성화해두겠습니다!강의 자료 개선, 저작권 등의 문제로 인해 영구 활성화는 어려운 점 양해부탁드립니다. 해당 부분 활용하여 PDF로 내보내기가 되는 지 확인 부탁드릴게요 🙂 감사합니다.강사 해여 올림
- 0
- 3
- 78
Q&A
31강 질문: /docs에 read_all_users 관련
🙂
- 1
- 3
- 62
Q&A
15강 수정 요청: DOWNLOAD_DIR 확인 구문 부분
안녕하세요, 강사 해여입니다. 먼저 피드백 감사드립니다. 말씀해주신 대로 상대경로(file_path)를 절대경로(os.path.abspath(DOWNLOAD_DIR))와 startswith로 비교한 기존 코드는 의도한 검증이 제대로 동작하지 않습니다.제가 저렇게 쓴 이유는 예제의 흐름을 단순하게 보여주려다가 “경로를 안전한 루트 안에 가두자”는 취지만 남기고, 절대경로로 정규화하는 단계를 빠뜨렸기 때문입니다. 😿덕분에 문제를 명확히 짚을 수 있었어요. 감사합니다.말씀 주신 대로 절대경로로 변환 후 비교하면 의미 있는 검증이 됩니다.DOWNLOAD_DIR_ABS = os.path.abspath(DOWNLOAD_DIR) safe_base_filename = os.path.basename(file_name) file_path = os.path.join(DOWNLOAD_DIR, safe_base_filename) full_file_path = os.path.abspath(file_path) # 기존: if not file_path.startswith(DOWNLOAD_DIR_ABS): # 상대 vs 절대 비교라 문제 if not full_file_path.startswith(DOWNLOAD_DIR_ABS): raise HTTPException(status_code=403, detail="Access denied") 조금 더 고급 주제로 다뤄보자면, startswith는 .../downloadables2 같은 접두어 충돌이나 OS별 경로 차이, 심볼릭 링크에 취약합니다. 그래서 아래처럼 “좀 더 안전한” 방식으로 바꾸는 걸 권합니다.pathlib의 resolve()와 relative_to()를 쓰면 심볼릭 링크, .. 포함 경로까지 정규화해 확실히 가둘 수 있어요.from pathlib import Path import os, mimetypes from fastapi import HTTPException from fastapi.responses import FileResponse BASE = Path(DOWNLOAD_DIR).resolve() def resolve_under_base(user_name: str) -> Path: safe = os.path.basename(user_name) # 경로 성분 제거 path = (BASE / safe).resolve() # 심볼릭 링크/.. 정규화 try: path.relative_to(BASE) # BASE 밖이면 ValueError except ValueError: raise HTTPException(status_code=403, detail="Access denied") if not path.is_file(): raise HTTPException(status_code=404, detail="File not found") return path @app.get("/download/basic/{file_name}") async def download_basic(file_name: str): requested = resolve_under_base(file_name) return FileResponse(str(requested)) @app.get("/download/custom/{file_name}") async def download_custom(file_name: str): requested = resolve_under_base(file_name) media_type, _ = mimetypes.guess_type(str(requested)) media_type = media_type or "application/octet-stream" return FileResponse( path=str(requested), filename=f"downloaded_{requested.name}", media_type=media_type ) 대안으로 os.path.commonpath([requested, base]) == base 비교도 안전한 편입니다. (realpath/abspath로 정규화 후 사용)추가 팁!허용 목록(allowlist): 제공 가능한 파일명/확장자를 제한하세요.유니코드 정규화: unicodedata.normalize("NFC", name)로 이름 혼동을 줄입니다.로깅 최소화: 존재 여부를 과하게 로그로 노출하지 않기.테스트 케이스: .., %2e%2e/, 심볼릭 링크, 윈도우/리눅스 경로 차이를 포함해 단위테스트 추가.다시 한 번 날카로운 피드백에 감사드립니다. 덕분에 자료를 더 탄탄하게 다듬을 수 있게 되었어요! 🙏곧 해당 자료는 반영해두겠습니다 🙂
- 0
- 2
- 45
Q&A
26강 에러발생: 해결방법 알려주세요.
안녕하세요 강사해여입니다!인프런 AI인턴님이 대답해주셔서 다행이네요!열정적인 강의 수강 감사드립니다!👍
- 0
- 3
- 68
Q&A
34강 강의 마지막에 나오는 35강 websocket 관련 강의 관련 질문
안녕하세요! 강사해여입니다.websocket 부분도 강의에 포함됩니다 🙂이번 주말까지는 음성 개선 및 인코딩을 완료해서 업로드하겠습니다!
- 1
- 1
- 61