블로그

인공지능과 추천 시스템 강의 노트 (13/16) - 2025.11.29.

들어가며 개인적인 사정으로 미국에서 온라인으로 진행하였다. 녹화 영상을 들으며 출석 처리가 되는 환경이라고 하면 그래도 조금은 가벼운 내용들이기를 기대하다가도 반대로 이참에 다른 데서 못 듣는 것들을 포함하자 싶은 서로 상반된 생각들이 있었다. 학기 초에 과목과 관련해서 준비한 내용들은 다 커버했고, 이번 시간에는 조금 더 일반적인 이야기들을 '실무에서 만나는 이슈들' 이라는 주제로 준비한 내용들을 상영하였다.아래는 시간차 어긋난 곳에서 진행한 미국 서부의 명절 스케치들.. 준비한 내용들13주) 강의 update알파고 이후에 알파스타가 스타크래프트 2 프로토스로 인간을 이겼다고 했는데, Grok 과 T1 과의 5:5 롤 대전은 그것대로 꽤 기대되는 게 있다. 실무에서 만나는 이슈들-강사 소개.pptx실전에서 만나는 이슈들-데이터 기반 의사 결정.pptx실전에서 만나는 이슈들-운영과 모니터링.pptx실무에서 만나는 이슈들-서비스 설계 개발.pptx 학기 시작하기 전에 녹화 영상으로 미리 준비해 놓았던 내용 중 마지막으로 아껴 놓았던 ‘실무에서 만나는…” 시리즈를 나누었다. 몇년 전에 FastCampus 에서 진행했던 “현실 세상의 컴퓨터공학 지식 with 30가지 실무 시나리오 초격차 패키지” 라는 강의 셋트( https://fastcampus.co.kr/dev_online_newcomputer ) 의 한 부분으로 준비했던 내용인데, 전공자의 시각에서 생각해 보니 필요했던 내용들 위주로, 비전공자가 이거라도 꼭 배워야 한다면 이라는 시각으로 준비한 내용들이었다. 굳이 금융으로 한정짓지는 않더라도 전공자들과 비전공자들이 일터에서 이야기하게 될 때 서로를 위해 알아 두면 하는 내용들을 모았더랬다. 다 합하면 5시간이 넘는 분량이어서 마지막 하나는 수업과 상관 없이 optional 로 시청할 수 있도록 하였다. 맺으며15분씩 발표 영상을 만들어 제출한 내용들로 이후를 구성할 예정인데, 숫자가 모자라면 그 시간들을 같이 나눌 이야기거리들이 더 필요하게 될 거 같다. 여전히 많은 일들이 벌어지는 세상이라 재미있는 배울 것들이 넘쳐나고, 한편으로는 연말에 리뷰하게 될 중간 기말 과제들이 몰려 오는 것들과 개인적인 내년 준비들에 대해 생각이 많아지게 되었다.

대학 교육 기타인공지능추천시스템

인공지능과 추천 시스템 강의 노트 (12/16) - 2025.11.22.

들어가며 추워진 날씨와 갑자기 다가온 연말 분위기 물씬 나는 여의도의 주말이고, 회사에서도 수업에서도 연말과 내년을 준비하느라 다들 분주한 상황이라 하겠다. 수업 시간 재료로 쓰려 했던 나눌 수 있는 기말 과제 발표들을 충분히 모으지 못한 상황에서 이야기하고 싶었던 몇몇 주제들을 모아 수업을 준비했다. 준비한 내용들12주) 강의 update추천시스템 - 5장 - 추천 알고리즘 상세 ( part 4 )지난 주에 Gemini를 전면에 내세운 구글의 본격적인 반격이 시작되었고, OpenAI 는 이에 기다렸다는 듯 코덱스 맥스로 반격하고 있다. 어떤 고귀한 뜻이 있을까 모르겠지만, anti-gravity를 보면서는 한편으로는 여전한 구글의 작명 센스에는 안타까움이 많다.먼저 similarweb 에서 발표한 GenAI + web 의 상황들에 대한 리포트를 같이 훑어 보았다. 유료는 아니지만 회원들에게 제공하는 리포트였고, 주로 AI 서비스와 검색 시장에 대한 작년 대비 변화에 대한 내용들이었다. SEO 이후 GEO 혹은 AEO 라는 이름으로 다양한 주장들과 논의들이 벌어지고 있고, 꽤 여러 전문가라 칭하고 있는 사람들이 말들을 얹고 있는 상황이지만, 좋은 스코어보드로서 similarweb 같은 데이터들이 중심을 잡아 주면 좋겠다는 생각이다. 아래는 간단 요약.‘Chatgpt’ 가 구글에서 ‘facebook’을 제치고 제일 많이 불리는 쿼리가 되었고deepseek strike 이후 구글의 AI mode 는 구글 검색 페이지에서의 배치 덕에 안착했다.전체 검색의 수는 줄어들고 있고, 구글 이외의 엔진들은 훨씬 더 많이 줄어들었다.여전히 구글 검색은 세션의 길이가 짧고, chatgpt 는 길게 물어본다. 세션 길이는 짧은 게 좋은 걸까? 긴 게 좋은 걸까 ?다음 파트에서는 스마트팩토리라는 토픽으로 지난 봄에 써 놓았던 글들을 같이 보면서 인이지(http://ineeji.com/) 와 관련된 이야기들을 나누었다. 피지컬 AI, 제조 공정 등의 키워드가 각광받고 있는데, 실제 현장에서 어떤 문제들을 어떻게 풀고 있는지에 대한 이야기들을 주로 정리했고, 수년 전 DX 이후 AX 라는 이니셔티브가 있지만, 실제 현장에서는 아직 오래된 공정, 잃을 게 많은 서비스 등의 이유로 많은 산업에서 일어나기 혁신이 일어나기 힘든 점들에 대해서 다양한 도메인들과 상황에 따른 이야기들을 나누었다. 새로운 장비들만 놓고 문제는 풀지 못하는 사례들도 있고, 여러 의미로 onpremise 를 고수해야 하는 상황 들도 꽤 강한 제약들로 여전히 작용하고 있는데, 최근에 팔런티어라는 새로운 공룡이 들어오면서 일어나는 변화들과 그 사이에서 역할을 찾으려는 크고 작은 기업들의 노력들이 앞으로의 관전 포인트라 하겠다. 클라우드 기반 스마트팩토리 - 용어들클라우드 기반 스마트팩토리 - 이슈들클라우드 기반 스마트팩토리 - 사례들 세번째 파트에서는 요즘 어딜 가나 듣게 되는 Agent / Agentic 이야기들을 거슬러 올라가서 LLM 이 처음 나왔을 때부터 어떻게 쓰면 좋을까 고민하던 업권의 노력들에 대해 정리를 하였다. prompt 잘 쓰기부터 fine tuning, RAG 를 이용하면서부터 생긴 정보 찾아 주기와 chain 로직을 이용한 다양한 답변 만드는 방법들에 이르기까지.. 한창 진행중인 논의들을 최근 정보들 위주로 다루었다. 여전히 변화무쌍한 상황들을 연결하는 역할을 하고 있는 MCP 까지.. 오늘은 키워드 중심으로 진행한 것이었지만 너무 간단하게 훑어서 이후에 어떤 것들을 조금 깊이 다뤄 볼까 고민이 된다.마지막으로 추천 시스템 파트에서는 교재에서는 남아 있던 부분인 행렬 분해와 자연어 처리를 이용하는 방법들에 대한 예제들을 나누었다. 고전적이지만, 사용자와 아이템의 거대한 행렬을 만들고 빈 칸을 예측하며 채워 나가는 꽤나 수학적 접근이고 사용자가 ‘좋아할 만한’ 아이템들을 예측하는 것으로 문제를 정의해 나가고 있다. 메타 정보들을 사용하기도 하고, 사용자들의 리뷰들을 풀어서 입력으로 사용하기도 하는 방법들이고, LDA 와 word2vec 을 적용하는 방법들에 대한 소개들이 있었다. 사용자의 purchase list 를 attribute 로 사용해서 user-user relation을 구현하는 방법들까지 정리가 되어 있다.교재로서 준비한 책에서 코드와 함께 다루는 내용들은 여기까지여서 더 깊은 이야기들을 마저 나누지 못하였고, 코드들은 링크들로 대체하며 조금 훑어 보긴 했다지만 아쉬운 마무리를 하게 되었는데, 조금은 고전적인 방법론들을 영감으로 각자 실무에 쓰임이 있는 내용들을 해 나갈 수 있길 약간은 무책임하지만 바래 본다. 맺으며중간 과제와 기말 과제들은 피드백을 부지런히 주고 받고 있지만, 아직 서로 읽어 보며 발표할 수 있을 정도의 글들이 많이 모이지는 않고 있다. 중간 과제인 EDA 리포트들은 다양한 주제들에 대해 기록들이 모이고 있어서 2주 후에 같이 정리할 수 있을 거 같고, 많은 기말 과제들은 마지막 시간에 몰리게 되는 것을 피할 수 없을 거 같다. 다음 주는 개인적인 사정으로 온라인 수업을 진행해야 하겠고, 진행했던 특강 중 하나를 담아 놓을 예정이다. 

대학 교육 기타인공지능추천시스템

인공지능과 추천 시스템 강의 노트 (11/16) - 2025.11.15.

들어가며가까이, 멀리 단풍이 꽤 잘 보이는 몇번 없는 맑은 가을 날씨이고, 길거리에 두꺼운 외투들이 보이는 것으로 보아 금방 겨울이 될 것이리라 싶다. 캘리포니아에는 이제 우기가 시작되며 짧은 낮이 시작되었겠다.강의실 옆 공간에서 2026년 신입 DFMBA 선발 과정의 면접이 있어 많은 경영대학과 DFMBA 교수님들께서 오셨고, 지난 2월의 올해 기수 오리엔테이션 이후 반년만에 인사드릴 수 있었다. 겸임 교수의 제한적인 경험들로 부족함이 많지만, 다른 교수님들께서 챙기지 못하는 부분을 담당해 준다고 하여 고마워 해 주셔서 오히려 어찌할 바를 모르기도 하고, 한편으로는 여전히 강의 평가 평균을 깎아 먹는 것들에 대해서 죄송하고 불안한 마음이다. 많은 일들이 그렇지만, 열심히 하는 거랑 결과가 나오는 게 매번 일치하지는 않는 거 같긴 하고, 진인사대천명의 가르침만 다짐해 본다. 준비한 내용들11주) 강의 updateLessons from Google Search - part 2.pptx며칠 전의 수능 시험 이후 각종 AI 서비스들이 이 문제들을 풀고 있으면서 스스로를 단련하기도, 혹은 출제자 진형에 이의를 제기하기도 하고 있다. 재작년에는 이 AI 들이 얼마나 잘 맞추고 있는가가 관건이었다면 지금은 얼마나 덜 틀리는가를 비교하며 자랑한다. 여전히 인서울 대학은 못 간다는 둥, 킬러 문항 혹은 영어 문장의 한글 이해 등에 차이가 있어 보이는데, 한글을 조금 다르게 이해하고 있는 것은 여러 면에서 은근히 걱정 거리이기도 하다.인공지능 파트에서는stateof.ai에서 industry 부분을 같이 이야기 나누었다. 100페이지 정도에 해당하는 지난 한 해동안 벌어진 일들이 총망라되어 있는 내용들이었고, 갑자기 전력, 부동산 등에 대한 이야기들이 과하게 논의되는 느낌이었다. Agent 라는 이름으로 스피디한 변화들이 많이 벌어지고 있고, ROI 를 중심으로 하는 비지니스에서 adoption 이 과할 정도로 일어나고 있으며, 그에 따른 거품들도 꽤 걱정스럽긴 하다. ㄲ개인적으로는 similarweb을 인용한 검색의 총량이 줄어드는 변화들이 관심이 많고, 하루 아침에 일들이 벌어지는 것보다 여기저기서 끊임없이 변화들이 있으리라. 여전히 미국에서는 chatgpt 를 써 보지 않은 사람들도 많고, 이들을 재교육시키는 것부터 많은 사업들의 기회와 변화가 있고, 마지막으로 빅테크의 플레이어들이 회사들을 너무 과하게 옮겨다니는데 개인적으로 상도덕과 이해가 가지 않아 혼란스럽긴 하다. 이건 자격지심과 부러움 혹은 꼰데 마인드라 해 두자 싶기도 하다.추천 시스템 파트의 남은 부분, 조금 고급 난이도의 구현 등은 다음 주로 놓고, 이번 주에는 구글 검색에 대한 특강 부분을 마무리 지었다. web result UI , rich snippets ( 지금은 rich results ) , knowledge panel , 구글이 이미 10년 전에 했던 crazy project 들을 다루고 그 뒤에 내가 직접적으로 관여했던 universal search, app search, app indexing 등의 챌린지들을 나누었다. AI 시대에 얼마나 가치가 있을 것인가 라는 질문들이 있는 것도 사실인데, 예전부터 agent 를 만든다면 제일 먼저 나 대신 검색을 하게 했을 거라는 생각에는 변함이 없고, 공개 자료면 표준에 맞게 잘 해 놓아서 이들이 이전에 노력한 대로 따라가야 하지 않겠느냐 라는 시각에서 이야기들을 나누었다.학생들의 질문들이 있을 경우, 조금 더 심각하게 많은 이야기를 나눌 수 있는 내용들이기도 해서, 나름 많은 내용들을 나눌 수 있는 주제이긴 한데, 한편으로 audience 입장에서 진입 장벽 또한 높게 있다 싶다. 당시 구글이라는 소프트웨어와 데이터에 진심인 서비스라는 만들어 져 있는 토대 위에 내 노력들이 살짝 더해진 것이었을 것이고, 마냥 좋은 경험이었다 라고 두리뭉실하게 접어 놓기에는 이래저래 아쉬운 마음이 든다. 맺으며본격적인 숙제 검사의 시간들이 진행되고 있고, 시간이 허락할 때마다 신청하는 학생들의 진로 상담 등도 힘 닿는대로 거들고 있다. 과정의 특성 상 대부분 생짜 취준생이기 보다는 예비 이직러들에 가깝긴 하고, 길게 여러 일을 하고 싶어하는 학생들에게 20년 혹은 그 뒤를 바라보며 이야기를 나눈다는 게 얼마나 현실적일까 싶기도 하지만, 각자 걸러 들을 만큼 걸러 듣고 도움이 되는 이야기들만 담아 갈 수 있기를 바라며, 이 인연들이 조금이라도 내 덕을 볼 수 있기를 기도한다. 

대학 교육 기타인공지능추천시스템

인공지능과 추천 시스템 강의 노트 (10/16) - 2025.11.8.

들어가며새벽에 인천공항에 도착해서 긴 하루를 보내는 일정이었는데, daylight saving이 끝나고 바람 때문에 조금 늦게 도착해서 아침 6시 넘어 공항에 도착했다. 숙소를 3시간 넘게 다녀 올 시간이 여의치 않고 여의도가 그에 비해 한편으로 공항에서 가까워서 바로 강의장으로 와서 하루를 시작했다. 갑자기 쌀쌀해 진 날씨에, 미국보다 일찍 시작하는 연말 장식 설치, 거기에 학생들 졸업 촬영까지 여러 모로 다르고 좋은 의미로 어수선하게 바쁜 도시의 주말 아침이다. 준비한 내용들10주) 강의 update추천시스템 - 5장 - 추천 알고리즘 상세 ( part 3 )Lessons from Google Search - part 1.pptx인공 지능 파트에는 stateof.ai 의 research 부분을 같이 읽었다. 거의 모든 연구들이 어떻게 reasoning 을 해 내고 있는지에 대한 이야기들이었고, 테스트 방법들이 오염되는 것들과 지식 증류의 방법으로 해자들이 없어지는 것들에 대한 내용들이 눈에 띄었다. 아직 언어 모델 이외의 연구 결과들에 대해서는 Alphafold 이후 획기적인 것들이 결과물로 보이지는 않고 있지만, Physical AI 같은 키워드들은 산업 현장에서 오히려 먼저 반영되지 싶다. 추천 시스템 파트에서는 연관 규칙, 사용자-사용자 메모리 기반 협조 필터링, 회귀 모델 부분을 같이 다루었다. 추천이라는 주어진 문제를 회귀 모델로 변환해서 접근한 방법들이었는데, 사용자들의 평점만을 가지고 모델을 만들어 접근하는 것이라 한계도 있지만, 한 번은 시도해 봄직한 방법이라 하겠다. Regression 이라 정의되는 순간 오차로부터 자유롭기 힘들고, 사람의 감정을 숫자로 예측한다는 것에 대한 챌린지가 있다 하겠다. 서비스 특강 파트에서는 구글 검색 이야기를 오프라인으로 하는 이번 시간과 다음 시간에 깊이 다루기로 하였다. 조금 오래 된 기억과 기록이지만 ‘해 봐서 아는’ 이야기에 해당하겠고, 만만하게 보이기도 혹은 반대로 어렵게만 보이기도 한 검색에 대한 이야기들과 고민 거리들을 같이 나눌 수 있으면 하였다. 사용자의 행동을 읽고 모으는 방법으로 이벤트 로그, 세션 이야기들을 다루었고, 이들을 이용한 품질을 높게 만들게 하기 위한 온라인/오프라인 방법들에 대해 정리를 했다. 맺으며중간 과제로 모으는 리포트들은 생각보다는 자유 형식이지만, 분석 위주의 내용들을 모으게 되었고, 나역시 다양한 주제들에 배우는 것들이 있어 감사한 마음이다. 중간 과제들은 댓글로 comment 들을 공유할 수 있으면 하는 바램으로 구글 독스나 공개적인 노션의 형태로 해 보고 있는데… 기술적인 숙제를 얼른 끝내 놓아야 겠다 싶고, 다음 주에 검색 부분이 끝나면 원격 수업 1회를 포함해서 특강 부분의 내용들을 다시 준비해야 하는데, 생각보다 할 일이 많은 11, 12월이 되겠다 싶다. 

대학 교육 기타

크로

[Tech Lead 관점] - 신입 개발자 이력서에서 제일 먼저 보는 3가지

채용하는 입장에서 말해볼게요.“실력이 중요하죠.” 맞아요. 근데 그 실력을 보기 전에, 이력서에서 먼저 걸러지는 포인트가 있습니다. 제가 이력서 열자마자 습관처럼 확인하는 것 딱 3가지만 정리해볼게요.결론부터 말하자면, 우리 회사 들어와서, "사고칠거 같냐? 아니냐?" 를 기준으로 잡습니다.그걸 판단하기 위해서 다음 3가지를 가장 먼저 봅니다. 1) 구조 & 가독성 — 코드 보기 전부터 이미 점수 난다이력서 파일을 열자마자 제일 먼저 보는 건 기술 스택이 아니라 구조예요. 제목/섹션/프로젝트가 한눈에 정리돼 있으면, 그 자체로 “일 잘하겠다”는 인상을 줍니다.반대로, 글이 길고 흐름이 없으면 이런 생각이 먼저 들어요.“실무에서도 정리 없이 던지고 끝내는 스타일이면 어떡하지?” 체크 포인트프로젝트는 무슨 문제 → 내가 한 일 → 결과 순서가 제일 읽기 좋음“열심히 했습니다/많이 배웠습니다” 같은 문장 줄이고, 사실(근거)로 대체 2) 프로젝트에서 “내가 뭘 했는지”가 선명한가신입 이력서에서 정말 많이 보는 문장이 있습니다.“팀 프로젝트로 웹 서비스 개발”이 문장 자체는 틀린 말이 아닌데, 정보가 거의 없어요. 실무 입장에서는 “그래서 본인은 뭘 했는데?”가 바로 떠오릅니다. NO : 기능 나열만 있음로그인/회원가입 구현OK : 문제 + 선택 + 결과가 보임JWT 기반 로그인 구현. 토큰 만료로 인증 오류가 자주 발생해 refresh token 구조로 개선했고, 재로그인 빈도를 줄였다(예: 관련 이슈/로그 감소 등 근거가 있으면 더 좋음). 체크 포인트역할/담당 범위를 1~2줄로 먼저 못 박기가능하면 결과를 숫자/지표로(속도 개선 %, 오류 감소, 트래픽 규모 등) 3) 기술 스택 ‘많음’이 아니라, 기술 이해도가 느껴지는가기술 스택을 잔뜩 적어두면 좋아 보일 것 같지만… 솔직히 말하면, 스택이 10개 넘어가면 오히려 신뢰가 떨어질 때가 있어요.대신 이런 걸 봅니다.왜 그 기술을 썼는지 설명할 수 있는지어떤 트러블이 있었고 어떻게 해결했는지하나라도 깊게 써본 흔적(설계/트러블슈팅/성능/테스트 등)이 있는지팁“써봤어요”보다 “이 상황에서 이 이유로 선택했고, 이런 trade-off가 있었다”가 훨씬 강합니다.체크 포인트기술 스택은 ‘나열’보다 프로젝트 문장 안에 녹이기자신 없는 기술은 과감히 빼고, 자신 있는 2~4개를 더 탄탄하게깊게 한 경험이 없으면 “학습/개인 실습”으로 분리 표기 마무리 — 신입에게 기대하는 건 ‘완성도’가 아니라‘태도와 근거’신입에게 완벽한 실력을 기대하진 않아요. 대신, 정리할 줄 아는 사람, 배운 걸 자기 말로 설명하는 사람, 같이 일할 때 불안하지 않은 사람을 찾습니다.이력서는 “저 이런 사람이에요”를 보여주는 첫 대화고요. 그래서 프로젝트가 화려하냐보다, 읽히냐/설명되냐/근거가 있냐가 먼저입니다.취업을 하고 싶은 분은,인프런의 "취업용 프로젝트 4주 챌린지"도 한 번 참고해보세요.  —

취업 · 이직프로젝트개발자취업이직백엔드데이터분석인공지능취업이력서

인공지능과 추천 시스템 강의 노트 (9/16) - 2025.11.1.

들어가며개인 일정으로 미국에서 진행해야 하는 주여서 온라인으로 진행했다. 지난 번의 온라인 수업은 추석 연휴 중에 있었지만, 이번은 그게 아니어서 줌을 통한 라이브로 갈 지, 녹화 영상을 준비해서 주 단위로 준비할 지 논의가 있었는데, 토요일 오후에서 각자의 자리에서 줌 접속을 기대하는 게 여의치 않아서 녹화 영상으로 대체했다.학기 초부터 준비했던 ‘해 봐서 아는’ 일들 중 하나로 플레이스토어 이야기들을 정리했고, 녹화된 영상의 방법으로 잘 전달이 되었으면 하는 바램이다. 기존에 동작하고 있는 서비스를 설명하고 예를 들어 하나의 기능을 처음부터 기안해서 운영하기까지를 다룬 내용으로, 특히 제품 기획 혹은 담당하는 입장에서 하나의 타산지석이 되면 좋겠다는 생각이다. 준비한 내용들9주) 강의 updateGoogle(Playstore)에서 과제 런칭하기 - 2.pptx 나눈 이야기들APEC 회의 전후로 다수의 굵직한 협약들이 기업간, 정부간에 발표되었고, GPU 26만장 이슈가 한창이다. 개인적으로는 Physical AI, LLM, agent 등의 다양한 키워드들이 비슷한 선상에서 통용되고 있는 상황, 소버린 AI 를 이야기할 때 필요한 좋은 한글 컨텐츠 등의 운영에 더 많은 우려와 의견들이 있지만, 그 우려들도 저 GPU들 없이는 무용지물이니 일단 응원의 마음이 먼저라는 점은 명확하고, 관객, 코치가 아닌 내가 선수로 다시 뛴다면 어디서 무엇을 어떻게... 라는 고민을 다시 해 본다.업권에 관심 있는 뉴스로는 OpenAI 와 PayaPal 의 wallet 을 이용한 instant checkout 이 눈에 들어왔다. 얼마전 거의 비슷한 시기에 Google 주도로 Agent Payments Protocol 을 PayPal 을 비롯한 꽤 많은 회사들과 만들어 발표하고, 그리고 그 리스트에 없던 Stripe 만 OpenAI 와 Agentic Commerce Protocol 을 만들어서 다들 어떻게든 payment의 벽을 헤쳐 나가겠다는 의지를 보였는데, 이 뉴스는 PayPal 의 wallet expansion strategy 와 맞아 떨어지려는 것으로 읽혀 또하나의 대세 혹은 전쟁이 일어나는 공간이겠구나 싶은 생각을 했다.  서비스 이야기 중 플레이스토어 관련 내용에서는 제품의 설명에 대해 마무리한 후에, 실제 '해 봐서 잘 아는', 기안하고 진행했던 세 과제에 대해서 이야기를 나누었다. Fulfillment 부분이 빠진 유사 쇼핑몰의 성격이지만, 그래도 있을 건 다 있는 꽤 오래된 서비스이기에 참고하기에 나쁘지 않다 싶고, 여기에 구글에서 life of a project 가 살짝 덤으로 포함되어 있다.당시 한국과 일본 제품을 담당하던 시기에 제품 책임자의 위치에서 역할을 하고 있었을 때였고, 풀고 싶었던 혹은 풀어야 했던 문제들을 발견, 정의, 구현, 부작용 발견, 재구현, 회고 후 운영까지의 경험들을 담백하고 이야기 하고 싶었다. 아래 과제 이름 등이 한글로 미처 번역해 준비해 놓지 못한 부분은 살짝 아쉽다.Locale-aware scoringPre-registrationLocale-ready signals 맺으며모이는 중간과제들을 내외부로 어디까지 공개할 것인지 기술적인 조절을 하고 있고, 기말과제는 아직 완제품이 모이지 않고 있다. 수업 시간에 이야기거리를 더 준비해야 만들어야 하는 부담이 살짝 생기게 되었고 기말에 몰리게 될 게 예상되어 개인적인 일정들을 그에 맞게 조절해야 하겠다, 특히 이번 시간에는 추천시스템 부분에서 조금 복잡한 선형 회귀 방법들을 같이 이야기해야 하는데, 한글, 영어가 섞여 난이도가 꽤 있다.일정이 예상대로 진행되면 목요일 밤에 출발해서 토요일 새벽에 공항에 도착하는데, daylight saving 이 풀리면서 한 시간 여유가 사라져 바로 여의도로 짐과 함께 이동해야 하는 일정이어야 할 거 같다. 정신 차려 보니 겨울이 다시 와 있겠다 싶다.

대학 교육 기타인공지능추천시스템

인공지능과 추천 시스템 강의 노트 (8/16) - 2025.10.25

들어가며개인적인 용무들을 본 후 12시 넘어 조금 빠듯하게 도착을 하였다. 주중에 분량 조절을 꽤 하는 편이었는데, 이번 주는 코드 구현이 들어가 있어 가늠이 잘 되지 않았다. 준비한 내용들을 다 훑었는데, 2시간 정도가 지나게 되었다. 바이브 코딩의 세상에 이렇게 하는 게 어떤 의미가 될까 한 번 고민해 보기도 한다.학생들의 과제들로 수업이 채워지면 좋겠다 싶은데, 아직 중간 과제와 기말 과제 현황판에 제안들이 예년 대비 많이 부족해 보인다. 수업 태도라고까지는 모르겠지만, 절반 정도의 학생들에게는 아직 무엇을 해야 하는지가 전달이 되지 않은 거 같아 조금 걱정스럽다.단풍이 보이는 가을의 여의도. 준비한 내용들8주) 강의 update추천시스템 - 5장 - 추천 알고리즘 상세 ( part 2 ) 나눈 이야기들인공지능 부분에서는 stateofai 2025 의 총평들과 survey 내용들에 대해 이야기를 나누었다. 작년의 10개 예측에 대한 평가들은 절반 정도가 적중했고, 내년에도 10개의 내용을 예측하였는데, reasoning 을 하나의 축으로 놓고, 각종 agentic 서비스들이 난무하게 될 것이라 여전히 복잡한 일들이 있게 되겠다.stateof.ai 2024년 예측의 성적표stateof.ai 2025년 예측들선수들이 인정하는 AI lab 순서들추천 시스템 영역에서는 MovieLens 에서 실제 추천 서비스를 만들어서 앞시간에 했던 지표들을 비교하는 과정을 담았다. 그 중 직관적인 설명이 가능한 무작위, 통계 정보, 연관 규칙 세 가지에 대해서 어떻게 구현하였는지에 대한 해설들과 함께 코드들을 같이 보았다.수업 시간에 커버한 추천 시스템 구현 방법들한글과 영어가 섞여 있어 애매하지만, 그래도 내용들이 직관적이어서 아이디어들을 설명할 수 있는 정도는 되었다. 하지만, colab 으로 execution button 을 누르는 것들만으로는 이래저래 한계가 있고, 학생들이 이것저것 바꾸어 체크해 보면 좋을텐데 하는 생각으로 진행하였다. 다음 시간부터는 더 복잡한 user-user 협조 필터링과 행렬 분해를 위한 여러 노력들을 설명하게 될텐데, 이대로 괜찮을까 하는 걱정이 조금 든다.Random 에 대한 이야기를 꽤 오래 나누었다. Random 자체가 합의된 정의가 없는 것이고, 돌릴 때마다 다르게 나오는 것, 미래에 대해서는 50% 확률, 게임 가차에서 반대로 지켜야 하는 입장에서의 활용, 정규 분포 등에 대한 이야기들을 하였고, 예전 구글 면접 때 풀었던 monkey sort ( bogo sort ) 에 대한 이야기들과 복잡도들 설명을 나누었다. 맺으며다음 주는 개인적인 사정이 있어 미국에서 리모트로 진행을 해야 한다. 녹화를 해서 방송하려 하니 시차 등의 난이도가 더 높은 거 같은데, 플레이스토어 못다한 부분을 마무리지으려 한다.대부분 사회 생활들을 꽤 한 MBA 과정의 학생들이지만, 해외로 취직을 계획하며 준비하는 학생이 있어 수업 후 여의도에서 커피챗을 한 시간 남짓 하였다. 개발자가 아닌 친구들이 글로벌 꿈을 펼치는 방법이 어떤 것들이 있을까 궁금하기도 하고, 선수와 코치, 감독 사이에서 여전히 고민하는 개인적인 시각까지 더해서 여러 가지 면에서 고민들이 많아지지만, 또다른 에너지를 반대로 얻을 수 있는 시간이었다.

대학 교육 기타인공지능추천시스템

인공지능과 추천 시스템 강의 노트 (7/16) - 2025. 10. 17

들어가며 연휴 이후 첫 수업인데, 토요일에 강의장에서 일정이 있어 금요일 저녁으로 이동해서 수업을 진행하였다. 꽤 오랫동안 잊고 있었는데, 금요일 오후의 여의도는 토요일 오전보다 훨씬 북적이는 동네였다.이전의 두 번의 녹화 온라인 강의가 강제로 끝까지 보게 하는 내용이라 하여 장단점이 있다 싶었고, 학기 말까지 남은 다음 2번의 원격 수업을 아예 녹화로 진행해야 할까 하는 생각을 해 보게 되었다. 준비한 내용들 7주) 강의 update추천시스템 - 5장 - 1 나눈 이야기들한시간 분량의 수업을 준비하는 내용은 양에서는 적었지만, 추천 시스템 항목에서 MovieLens 데이터의 EDA 를 조금 진지하게 하게 되었는데, 학교에 있는 Chrome + colab 등으로 입코딩과 클릭 클릭을 해야 하는 수업이었다. 학교 PC 에 뭘 설치하기도 애매하기에 여러 방법을 고려해 봤지만, 이 정도가 맞는 거 같은데, 해 본 사람들에게는 아무 것도 아닌 일일 수도, 여전히 처음 해 본 사람들한테는 진입 장벽일 수 있겠다.학생들 각자 보고 싶은 데이터는 직접 보며 분석했으면 하는 마음에 pre-requisite 으로 Python 을 놓았고, 자유 방식의 EDA를 과제로 내었는데, 한 학생은 이 벽을 넘지 못하고 혹은 넘지 않고 과제를 drop 하였다. 코딩 자체를 평가 잣대로 놓지는 않기에 용기를 내기에 나쁘지 않은 환경이라 생각하는데 이래저래 아쉬움이 있다. 이후 근처의 식당에서 간담회를 진행했는데, 조금 자유로운 분위기에서 여러 이야기들을 나누며 명함들을 수집하였다. 절반 정도의 학생들이 참석을 하였고, 미래야 모른다지만, 이것도 인연인데 싶다. p.s.학생 하나가 7개월 아기와 함께 수업에 들어오게 되었다. 뉴스로만 접하던 상황이어서 조금 신선하긴 했고, 아기네 식구들과 다른 학생들 모두에게 불편하지 않은 상황이었기를 바라는 마음으로 이야기들을 진행했다. 다행히 울지 않은 순한 아이였고, 한국에서 거의 처음으로 유모차에 사람이 앉아 있는 것을 본 기억이기도 하다.

대학 교육 기타인공지능추천시스템

도서출판 길벗

미래를 여는 힘은 여전히 우리, 프로그래머들에게 있다! <우리, 프로그래머들> 펀딩 오픈!

"The only way to go fast, is to go well."(빨리 가는 유일한 방법은 제대로 가는 것이다.)- 로버트 마틴(Robert C. Martin) - 우리는 누구일까요?우리 프로그래머는 왜 존재할까요? 사회에는 디테일에 집착하는 사람, 즉 우리 같은 사람이 꼭 필요하기 때문입니다.그런 사람이 있어야만 나머지 사람들은 아이스버킷 챌린지나 앵그리버드를 하거나 치과 대기실에서 솔리테어(solitaire, 혼자하는 카드 놀이)를 하며 시간을 보내는 일에 집중할 수 있으니 말이죠. 이렇게 대부분의 사람이 디테일을 피하려고 하는 한 그 디테일 속으로 뛰어드는 우리 같은 사람도 반드시 필요합니다. 그것이 바로 우리 정체성입니다. 우리는 이 세상 디테일을 책임지는 사람입니다. 지금부터 컴퓨팅과 프로그래밍의 시대가 어떻게 시작되었는지 이야기를 들려드리려 합니다. 이는 몇몇 비범한 사람의 삶과 도전, 그들이 살았던 특별한 시대, 그들이 다루었던 놀라운 기계들에 관한 이야기입니다. 자, 이제 준비가 되었다면 안전벨트를 꽉 매기를 바랍니다.아마도 아주 길고 거친 여정이 시작될 테니까요. -본문 발췌 및 재구성-🎉🎉 펀딩 오픈 당일 목표 100% 달성! 🎉🎉<우리, 프로그래머들> : AI 시대에 잊혀 가는 ‘프로그래머 정신’을 다시 깨우다 🌊 AI라는 거대한 파도 앞에서 길을 잃은 당신에게,📘 '엉클 밥' 로버트 C. 마틴이 보내는 뜨거운 응답. 변화의 한가운데서, 우리는 다시 본질로 돌아가자.미래를 여는 힘은 여전히 우리, 프로그래머들에게 있다! 🔹엉클 밥이라는 이름을 모르는 프로그래머는 거의 없다.이 책에서 그는 과거와 미래를 잇고, 프로그래머에게 다시 희망을 말한다.— 추천사, ThePrimeagen (소프트웨어 개발자이자 유튜버, 전 넷플릭스 엔지니어) 🔎지금 교보문고에서 만나보세요! [바로가기] *특별 사은품 구성도 놓치지 마세요! (수량 한정)

교양코딩개발자기계발프로그래머개발자AI클린아키텍쳐코드프로그래밍

Jerry Lee

🚀 Backstage Plug-in 소개 - Platforming Engineering

📢 최근 Platform Engineering에 대한 관심이 많아지고 있기에, 도움이 될만한 정보를 공유합니다. Platform Engineering(특히, IDP) 구현은 일반적으로 Backstage를 많이 고려하고 있으나🧐, Backstage의 Base 기능에 대한 불편한 점들, 특히 👀Backstage에서 생성된 Service or Resource 수정 또는 Update의 번거로움 등 여러가지 불편한 부분이 있었는데, entity-scaffolder Plug-in이 지원을 합니다. 즉, 📝 Backstage Entity Page에 Scaffolder Template을 직접 embedding하여, 기존 Data를 기반으로 손쉽게 Entity를 Update하고 Self-Service 강화할 수 있는 Plug-in 입니다. 🙌 🔥 주요 기능 & 특징⇉ 엔티티 내 템플릿 실행 (Embed Scaffolder) 더 이상 템플릿 페이지로 이동할 필요 없이, 엔티티 상세 페이지(Entity Page) 안에서 해당 리소스와 관련된 템플릿을 바로 실행할 수 있습니다.⇉ 데이터 자동 완성 (Pre-populate Values) 수정할 때마다 모든 정보를 다시 입력할 필요없이, 기존 엔티티의 메타데이터를 가져와 템플릿 입력 필드를 자동으로 채워주기 때문에(Pre-fill). 개발자는 변경이 필요한 부분만 수정하면 됩니다.⇉ 조건부 워크플로우 (Conditional Steps) 단순한 입력뿐만 아니라, 상황에 따라 달라지는 복잡한 조건부 단계들도 매끄럽게 처리하여 정교한 셀프 서비스 시나리오를 지원합니다.⇉ 진정한 셀프 서비스 (Self-Service) 리소스 사양 변경, 태그 수정, 설정 업데이트 등 빈번한 유지보수 작업을 개발자가 직접, 빠르고 정확하게 수행할 수 있도록 돕습니다.  Platform Engineering 구축에 실질적인 도움이 되시기를 기대합니다.  [출처]: https://github.com/TheCodingSheikh/backstage-plugins/tree/main/plugins/entity-scaffolder[참고 Link] : https://www.cloudbro.ai/t/3538

개발 도구백스테이지플러그인

바커스

취업은 타이밍! 실시간 채용 무료앱 추천

  안녕하세요. 취업 준비생 여러분! 자소서 쓰느라 바쁜데, 채용 사이트 매번 새로고침 하기 힘드시죠? "아, 맞다! 그 공고 마감일 언제였지?" 하고 깜빡해서 기회를 놓친 적이 있다면, 오늘 소개해 드리는 이 앱이 필수입니다.  취업은 스피드! '공채속보'복잡한 건 딱 질색인 분들을 위해 만들었습니다. 이것저것 설정할 필요 없이, 설치만 하면 바로 실시간 채용 정보를 배달해 드립니다. 남들보다 한발 앞서는 비결 새 공고가 뜨면 '푸시 알림' 도착  내가 직접 찾으러 다니지 않아도 됩니다. 새로운 기업 공채, 대기업/공기업 소식이 업데이트되는 즉시 휴대폰으로 [알림]을 보내드립니다. 왜 '공채속보'를 써야 할까요? 1. 군더더기 없는 심플함 � 복잡한 필터 설정하느라 머리 아플 필요 없습니다. 앱을 켜는 순간, 지금 가장 핫한 채용 정보가 한눈에 들어옵니다. 2. 1초도 아까운 취준생을 위한 속도  좋은 공고는 타이밍이 생명입니다. 누구보다 빠르게 확인하고 먼저 지원하세요. 3. 평생 100% 무료  취업 준비 비용도 만만치 않으시죠? 이 앱의 모든 정보와 알림 서비스는 예비 직장인들을 위해 완전 무료로 제공됩니다.  지금 바로 알림을 켜두세요! 지금 이 순간에도 새로운 채용 정보는 계속 올라오고 있습니다. 놓치고 후회하지 마시고, 지금 바로 앱을 설치해서 알림을 받아보세요. 합격의 기운을 담아 가장 빠르게 전달해 드리겠습니다.  [클릭] 실시간 공채속보 무료 다운로드 받기 (위 글자를 클릭하면 구글 플레이스토어로 이동합니다)   

취업 · 이직채용정보공채기업공채실시간공채

[프로젝트 공유] 프레임워크에 덜 의존적인 UI 컴포넌트를 만들어봤습니다

안녕하세요.프론트엔드 개발을 하면서 React, Vue 등 여러 프레임워크를 오가다 보니항상 비슷한 고민을 하게 되었습니다.Select, Toast 같은 기본 UI 컴포넌트는프레임워크가 바뀔 때마다 다시 구현해야 할까?UI 동작과 UX는 거의 같은데,프레임워크에 묶여 있다는 이유로매번 새로 만드는 구조가 과연 효율적인지 의문이 들었습니다.그래서 개인 프로젝트로프레임워크에 덜 의존적인 UI 컴포넌트를 Web Components 기반으로 만들어보았습니다.🔧 어떤 것을 만들어봤나요?크게 두 가지 컴포넌트입니다.1⃣ Select 컴포넌트Web Component 기반 (의존성 없음)대용량 데이터 처리를 위한 가상 스크롤한글 초성 / 일본어 / 중국어 검색 지원키보드 접근성 및 스크린 리더 대응CSS Variables 기반 스타일 커스터마이징React, Vue 등에서 사용할 수 있도록 래퍼 제공2⃣ Toast 알림 컴포넌트프레임워크에 종속되지 않는 Toast UI여러 위치와 애니메이션 지원중복 메시지 자동 그룹핑SSR 환경 고려접근성(ARIA) 기본 지원🤔 Web Components를 선택한 이유Web Components를 선택한 이유는 단순합니다.브라우저 표준 기술이라 장기 유지에 유리특정 프레임워크 라이프사이클에 묶이지 않음여러 프로젝트에서 재사용 가능UI 프리미티브(Select, Toast 등)에 적합하다고 판단물론 프레임워크 전용 컴포넌트만큼의 DX는 아닐 수 있지만,장기적인 관점에서는 충분히 의미 있는 시도라고 생각했습니다.💬 커뮤니티 분들께 여쭤보고 싶습니다실무에서 Web Components를 사용해보신 경험이 있으신가요?프레임워크 변경 가능성이 있는 프로젝트에서UI 컴포넌트를 어떻게 관리하고 계신지 궁금합니다.이런 접근 방식이 현실적인 선택일지 의견을 듣고 싶습니다.아직은 실험적인 프로젝트이고,피드백을 받아가며 개선해보려는 단계입니다.편하게 의견 주시면 감사하겠습니다.🔗 참고 링크Select 컴포넌트: https://www.npmjs.com/package/seo-selectToast 컴포넌트: https://www.npmjs.com/package/seo-toast

프론트엔드javascripttypescriptreactvuewebcomponentnpmselecttoast

[학습일기] HTTP 서비스 인증/인가 관련 이해한 내용 정리

들어가며인증과 인가와 관련해서 공부를 할 때 원리가 이해가 안 되어서 로그인과 CSRF와 같은 개념을 그냥 예시를 통해서 귀납적으로 학습하는 데에 그쳤다. 당연히 뭔가 답답한 느낌이 들었고 CSRF의 경우 외우고 까먹고를 반복했다.그러다가 최근에 갑자기 이 내용이 이해가 되었다. 방금 깨달은 사람의 따끈따끈한 이해를 말아드리고 싶어서 이 블로그글을 작성하게 되었다. (이랬는데 알고 보니 틀린 이해일 수도 있습니다ㅠㅠ 혹시 틀린 부분을 발견하시면 댓글 달아주시면 감사합니다!!)이해한 부분네트워크 서비스의 인증 및 인가와 관련해서 이해하는 데 개인적으로 다음 활동이 굉장히 도움이 많이 되었다.특정 사용자를 인증하기 위한 필요충분조건을 논리식으로 작성하기특정 서비스의 사용을 인가하기 위한 필요충분조건을 논리식으로 작성하기 이 관점에서 인증 및 인가를 다음과 같이 정리하게 되었다.인증(Authentication, Authn)정의위키피디아에서 찾아본 인증의 정의는 다음과 같다.특정 사용자의 본인확인을 증명하는 과정. 다시 말해, 특정 사용자가 본인이라고 주장하는 사람이 맞는지 확인하는 과정인증이라는 개념이 왜 필요하게 되었는지를 웹 서버의 입장이 되어 생각해보자.일반적인 웹 서비스에서 사용하는 웹 서버의 경우 대부분의 ip로부터 요청을 받을 수 있다. 비유하자면 불특정 다수로부터 쪽지를 받는 것과 같다. 다음 쪽지를 받았다고 가정해보자.안녕하세요, 미스터 비스트 유튜브 팀에서 연락드렸습니다.저희가 이번에 만들고 있는 영상에 초대드리고 싶습니다.아래의 주소에 접근해서 설명을 따라 주시면, 다음 영상에 출연하실 수 있습니다.https://example.com?phishing=true문제가 한두개가 아니다. 일단 미스터 비스트가 내게로 연락을 보낼 리가 없고, 글솜씨가 허접하다. (글쓴이의 글쓰기 스킬 이슈입니다.) 하지만 웹서버 입장에서 중요한 문제는 따로 있다. 본인이 알고 있는 주소에서만 접근하는 것도 아니고 불특정 다수의 ip 주소로부터 HTTP 요청을 받기 때문에 요청을 보낸 것이 실제 미스터 비스트인지 미스터 비스트인 척 하는 김 아무개씨인지를 확인할 방법이 없다. 다시 말해 웹 서비스에 가입한 특정 사용자 A가 있을 때, 본인이 사용자 A라고 주장하는 요청이 실제 사용자 A가 보낸 것인지 아닌지 확인하는 과정이 필요하다. 이런 맥락에서 인증이라는 개념이 자연스럽게 필요해진 것 같다.간단한 웹 서비스에서의 사용자 인증비밀번호를 통한 인증소개 및 필요충분조건웹 서비스를 누군가는 처음 만들었을 것이다. 만들면서 인증에 대한 문제를 다음과 같이 풀 생각을 하지 않았을까? (즉, 뇌피셜입니다.)인증의 문제를 다음과 같이 해결하면 어떨까?하나, 사용자 A가 가입하는 시점에 A와 웹 서비스 둘이서만 아는 비밀번호를 공유한다.둘, 앞으로 HTTP 요청을 보낼 때 본인이 A라고 주장하며 동일한 비밀번호를 제시하면, 그 사람은 A라고 유추할 수 있다.현재까지의 사고 과정을 필요충분조건으로 정리하면 다음과 같다.(사용자 A 인증) <=> (HTTP 요청 시 A의 비밀번호가 제시됨)문제점위의 인증 방식은 조금만 생각해보면 사용성 또는 보안에서 엄청난 문제점이 있는 것을 확인할 수 있다. 웹사이트에 요청을 보낼 때마다 비밀번호를 제시해야 하기 때문이다. 사용자가 본인 페이지 내에서 이동할 때마다 비밀번호를 입력하게 하자니 사용성에서 하자가 있다. 또한 매 요청마다 평문으로 비밀번호가 전송되기 때문에 요청 중 하나라도 감청당한다면 비밀번호가 그대로 노출되게 된다.비밀번호 및 세션 토큰을 통한 인증소개사용자가 웹 서비스를 사용할 때 특정 시각부터 특정 시각까지 대화가 오가는 패턴이 자주 등장한다. 대화에서와 마찬가지로 이 대화 내의 나중의 요청은 이전의 요청들에 의해 쌓인 맥락을 가지고 있다. 이렇게 특정 시간 범위 동안 존재하는 고수준 양방향 연결을 세션이라고 한다. 보통 세션은 이전 요청들에서 쌓인 맥락을 가지고 있기에 stateful하다.이렇게 웹 서비스에서 흔하게 존재하는 세션이라는 개념을 활용하면 "매 요청마다 비밀번호가 평문으로 전송된다"는 문제를 다음과 같이 해결할 수 있다.이미 사용자 A에 대한 세션이 있는 경우 A의 세션에 대한 접근 권한을 A의 비밀번호 대신 사용할 수 있다.이 경우 연결이 감청당한 경우에도 세션 접근 권한 정보는 세션이 존재하는 동안만 유효하기 때문에 비밀번호가 유출되는 확률을 낮출 수 있다. (추가: 그러나 세션이 탈취당한 상황에서 이게 얼마나 의미가 있는지는 모르겠습니다.)따라서 매번 비밀번호를 입력받는 과정을 다음의 세 단계 과정으로 대체할 수 있다.하나, 사용자 A에 대한 아이디와 비밀번호를 받아서 서버에서 세션 저장소에 A를 위한 세션의 정보를 저장하고, 세션 정보에 접근할 수 있는 권한을 응답에 반환한다. 이를 보통 "로그인"이라고 칭한다.둘, 로그인 상태에서는 세션 접근 권한을 비밀번호 대신 인증 수단으로 사용한다.셋, 특정 시간이 지나거나 사용자가 직접 요청하는 경우 세션 정보를 파기한다. 이를 "로그아웃"이라고 칭한다.토큰 소개오해를 방지하기 위해 토큰에 대해서 짚고 넘어가보자. 위키피디아에 의하면 토큰의 정의는 다음과 같다.특정 작업에 대한 권한을 표현하는 소프트웨어 혹은 하드웨어 객체따라서 꼭 JWT의 형식이 아니더라도 세션 접근에 대한 권한을 표현하는 데이터를 모두 "세션 토큰"이라고 칭할 수 있는 것으로 보인다. (혹시 아니라면 알려주시면 감사드립니다!)필요충분조건위에서 정리한 내용을 필요충분조건으로 정리하면 다음과 같다.(사용자 A 인증) <=> (A 비밀번호 제시) OR (현재 존재하는 A의 세션에 대한 토큰 제시)여기서 인상적인 점이 토큰이라는 개념은 바로 뒤에 다룰 내용인 인가에 대한 내용이지만, 인증 정책의 일환으로 A의 세션에 대한 권한이 있는 사용자를 A에 대한 인증의 충분조건으로 사용했기에 여기에 등장했다는 사실이다.정리여기까지 인증에 대한 내용을 간단하게나마 살펴보았다. 인증으로 접근 권한도 퉁쳐서 나타내면 안 되는 걸까? 여기서는 CSRF의 사례를 들어 둘을 분리해야 하는 이유 중 하나를 살펴보겠다.인가정의위키피디아에서는 다음과 같이 서술하고 있다.리소스에 접근할 수 있는 권한을 명시하는 것인증과 구별해야 하는 이유여기서 "A로 인증했으면 A가 권한이 있는 작업들을 모두 허용해도 되는 것 아닌가?"라는 의문이 당연하게 들 수 있다. 이 둘을 일치시켰을 때 발생할 수 있는 문제 중 하나로 CSRF 공격을 예로 들어보겠다.CSRFCSRF는 Cross-Site Request Forgery의 약자로, "사이트 간 요청 위조"를 뜻한다. 쉽게 말해 S1 사이트에서 사용자 A에게 본인의 의사와는 무관하게 S2 사이트로 특정 요청을 보내도록 시키는 공격이다. 예를 들어 S1이 해커 사이트이고, S2가 은행 사이트이고, S2가 CSRF에 대한 보호가 안 되어 있는 경우, S1 사이트에서 HTML Form과 자바스크립트를 통해 S1에 접속한 사용자 A로 하여금 해커에게 송금을 하라는 요청을 S2에 보내도록 시킬 수 있다. 자세한 정보는 MDN에서 잘 설명되어 있다.CSRF가 발생할 수 있는 이유는 사용자가 브라우저에서 S1 사이트를 방문했을 때 S2 사이트에 대신 요청을 보내도록 하는 것이 너무 쉽게 가능하기 때문이다. Form 태그의 action attribute를 활용하면 사용자로 하여금 다른 사이트에 요청을 보내도록 할 수 있고, 이 때 cookie에 저장된 인증 정보가 같이 전송되기 때문에 문제가 된다.CSRF 발생 원인 분석 및 해결사이트 S2 입장에서 다음과 같은 정책을 생각할 수 있다.(사용자 A의 송금 서비스 접근 권한) <=> (사용자 A의 인증 정보)이렇게 할 경우 문제가 안 생기는 맥락이 어디엔가 있을지도 모르지만, 안타깝게도 웹 서비스 환경에서는 위에서 기술한 이유로 인해서 요청한 사용자가 정상적으로 웹 서비스를 사용해서 나온 요청인지, CSRF 공격의 피해를 당해서 발생하는 요청인지 구분할 수 없다.이에 대응해서 정상적으로 웹 서비스를 사용하는 사람에게만 발급해주는 토큰을 사용해서 해결할 수 있다. 구체적으로 HTML Form으로 웹 서비스를 제공하는 경우, Form의 hidden field에다가 매번 바뀌는 랜덤 문자열 토큰을 삽입해주고, Form을 제출했을 때 이 토큰을 확인함으로써 해결할 수 있다. 이 경우 토큰은 사이트 외부에서 접근 가능한 정보가 아니지만 요청에 꼭 필요한 정보이기 때문에, CSRF로 요청을 위조하는 것이 불가능하게 된다.이를 논리식으로 나타내면 다음과 같다.(사용자 A의 송금 서비스 접근 권한) <=> (사용자 A의 인증 정보) AND (CSRF 방지 토큰 소유)정리하며생각보다 시간이 많이 걸렸습니다. 잘 이해했는지 모르겠네요...

웹 개발학습일기

[인프런 클론 6주 완성 챌린지] 선택 및 집중 과정에서 포기해야 하는 것들에 대한 고민

지난주는 nextjs에 익숙해지는 데 많은 시간을 할애했다.주어진 속도로는 시간을 최대한으로 투자해도 진도를 정해진 일정대로 따라가는 것은 무리라고 판단하였다. 그래서 어차피 챌린지 일정이 밀릴거라면, 1-2주차처럼 무리해서 시간을 배분하지 말고 챌린지 외 일정들을 챙기면서 진도를 천천히 따라가자는 계산을 했다.사실 지난주와 지금을 비교해봤을 때 실력적으로 큰 차이가 있지는 않지만 비슷한 패턴을 여러 번 반복해서 보다 보니 심적으로 익숙해지게 되었다. 그래서 다시 챌린지로 돌아와 프런트엔드 코드를 작성할 때 (할 일 계획) + (nextjs 코드 작성 및 이해)의 두 가지 변수 중에 후자가 해결되어 cursor에게 어떻게 일을 시킬지에 집중할 수 있게 되었고, 문제였던 불안도 어느 정도 해결되었다.각설하고 이제 급한 문제를 해결하고 보니 절대적인 시간이 부족하게 되어, 챌린지 기간 동안 어떤 부분을 챙기고 어떤 부분을 포기할지를 고민해야 하는 상황이다. 사실 이 생각을 하게 된 구체적인 이유가 있다.인프런의 지식공유자 강의 수정 화면은 다음과 같이 구성되어 있다.페이지상단 헤더: 현재 수정중인 강의 제목, 저장 및 제출 버튼 등메인 영역사이드바: 수정 과정의 모든 단계들 및 현재 단계 표시 강의 수정 영역: 강의 수정 정보 입력 폼반면 챌린지의 화면은 다음과 같이 구성되어 있다.페이지 사이드바메인 영역상단 헤더강의 수정 영역개인적으로 느끼기에 챌린지의 화면 구성이 훨씬 고민거리가 적기 때문에 챌린지 설계 과정에서 훌륭한 트레이드오프가 들어간 게 아닌가 생각하고 있다. (아닌가요...? 죄송합니다ㅠㅠ)이 파트를 구현하면서 챌린지 화면 구성에서 끝내도 되는 줄 모르고 이를 인프런 화면 구성으로 리팩터링을 시도하느라 하루를 보냈다. (결국 오늘 더 시간 쓰고 싶지 않아서 revert했습니다.) 이와 관련해서 글의 주제와는 관련 없는 몇 가지 흥미로운 생각이 들었는데 [여담]에서 따로 기술하였다.이 문제를 해결하면서 한 고민들은 nextjs를 이해하는 데 도움은 되었지만, 챌린지의 맥락에서 봤을 때 너무 지엽적인 내용인 것 같았다. 그래서 오늘 챌린지 전체 과정을 한 번 훑어보면서 내가 어떤 부분을 취하고 어떤 부분을 버려야 할지 다시 한 번 생각하게 되었다.개인적으로 챌린지를 하면서 가져가고 싶은 부분은 다음과 같다.백엔드 실 서비스 개발의 전체 흐름을 직접 경험해보기 (상세한 디테일은 챌린지 목차에서 확인 가능)이를 위해서 nextjs에 대한 이해는, 챌린지 코드의 큰 구조 및 데이터 흐름 및 AI 생성 코드를 이해할 수 있는 만큼만 가져가기로 결정했다. 그리고 "인프런 화면 구성 구현하기"는 이 관점에서 살펴봤을 때 욕심이라는 생각이 들었다.이상입니다. 읽어주셔서 감사드립니다.[여담] 여담이지만 위 현상을 경험하면서 몇 가지 생각이 들었다.스스로 무언가를 해보면서 발생하는 문제 상황을 해결할 때 배우는 게 많다. (주관적인 생각입니다.)AI가 이 과정을 방해한다고 생각했는데, 방금 배운 것을 돌아보니 AI를 활용한다고 해도 이 과정이 바뀌지는 않는구나 싶은 생각이 들었다.나는 AI가 작성하는 코드를 이해하고 싶은 마음이 크다. 혹시 관련이 있을지도?Context 왜 쓰는지 백날 고민해봤는데 한 번 리팩터링하면서 와닿는 게 더 많았다. 역시 직접경험이 짱인 것 같다.UI가 응집되는 방향성과 데이터/함수/메소드가 응집되는 방향성이 달라서 발생하는 문제를 해결한다고 생각했었고 이번 리팩터링에서 이를 실감했다. 개인적으로는 현재 리액트 주류 스택이나 MobX 활용 스택이나 주인공을 컴포넌트로 둘 것인지 객체로 둘 것인지의 관점의 차이만 있지 둘 다 이 문제를 훌륭하게 해결한다고 느꼈다. (물론 저는 말하는 감자입니다. 감자가 느낀 것을 그대로 믿으시면 안됩니다.)내가 초기 스타트업에서 일을 하는 상황이었다면 챌린지 화면처럼 구현하자고 기획자와 승부를 봐서 타협을 했을 것 같다.나는 AI가 작성한 코드를 더 쉽게 이해하고 싶어서 스타일링 최소화한 ui 코드 만들기 / 스타일링하기의 2단계로 쪼개서 일을 시키는 것을 좋아한다.또 리팩터링을 설계하고 AI 생성 코드를 이해하는 과정에서 다음과 같은 고민들을 했거나 진행중이다. 내가 생각하기에 괜찮은 고민인 것 같다.nextjs에서 서버 컴포넌트로 ViewModel A에 대한 초기 json 데이터를 얻고, 클라이언트 컴포넌트에서 A를 업데이트하는 패턴이 보이는데, 이 패턴을 공통으로 묶을 수 없을까? (고민중)인프런 화면 구성을 구현하려면 Layout 컴포넌트를 어떻게 설계해야 할까? (마음에 드는 솔루션 하나 확인)

개발 · 프로그래밍 기타학습일기

채널톡 아이콘