안녕하세요! 저는 지난 몇 달간 AI·SW마에스트로 (이하 소마) 제17기를 위해 준비를 해왔습니다. 오늘은 그 과정과 후기에 대해서 조금 이야기해볼까 합니다. 이번 17기부터 바뀐 것들이 많았습니다.이름이 "SW마에스트로"에서 "AI·SW마에스트로"로 바뀌었습니다.16기에는 모집 인원이 110명이었지만 이번 17기에서는 300명으로 대폭 늘어났습니다.IT 기기 지원금이 150만원에서 300만원으로 두 배나 늘어났습니다.우선 이름에 "AI"가 새로 들어간 만큼, 서류 전형부터 면접에 이르기까지 AI 활용 능력을 검증하려는 문항들이 눈에 띄게 늘어났습니다. AI 관련 역량이 더욱 중요해진 것이죠. 특히 이번 17기는 연수생들을 위한 지원이 엄청나게 강화되었습니다. IT 기기 지원금이 300만 원으로 두 배..
더보기1️⃣ Lymo 개발일지 #1: https://parkcool.tistory.com/82️⃣ Lymo 개발일지 #2: https://parkcool.tistory.com/123️⃣ Lymo 개발일지 #3: https://parkcool.tistory.com/144️⃣ Lymo 개발일지 #4: 현재 글지난 세 편의 일지를 통해 AI와 백엔드, 그리고 데이터 스트리밍을 완성하는 과정을 보여드렸습니다. 이제 사용자의 눈에 보이는 부분인 프론트엔드 개발기로 넘어갈 차례입니다. 오늘 다룰 주제는 Lymo의 정체성과도 같은 기능이자, 개발 과정에서 가장 많은 애를 썼던 부분입니다. 바로 기기에서 재생되는, 즉 다른 음악 스트리밍 앱에서 나오는 음악을 실시간으로 가로채는 기능입니다. 🕵️ 미디어 세션 가로채기..
type Product = "apple" | "banana" | "orange";const menu: Record = { apple: 1000, banana: 2000, orange: 1500};const products = Object.keys(menu);// products의 타입은?위와 같은 Typescript 코드에서, `products`의 타입은 뭘로 추론될까? `menu`는 `Record` 타입의 객체니까, 이 객체의 키의 타입은 Product일 것이다. `Object.keys()` 메소드는 객체의 모든 키를 배열로 반환하는 메소드이다. 따라서 `products`의 타입은 `Product[]`로 추론되는 것이 마땅하다. 하지만, 이 글의 제목에도 나와있다시피, 정답은 `stri..
안녕하세요! 저는 현재 군 전역 후 복학을 앞두고 있는 컴공 1학년 개발자입니다. 저는 군 입대 전부터 웹 개발에 관심이 많았습니다. 그래서 대학교 동아리에서 프로젝트에 참여도 해보고, 개인적으로도 여러 토이 프로젝트를 개발하기도 하였습니다. 군 입대 이후에도 군대의 PC방이라고 할 수 있는 사지방 (사이버지식정보방)에서 꾸준히 프로젝트 개발과 공부를 병행하며 개발 실력을 키워나갔습니다.최근 군 전역 이후에는 과연 "내가 만든 코드가 시장에서 경제적 가치가 있을까?"라는 궁금증이 생겨 무작정 크몽에 발을 들였습니다. 결과적으로 백만 원대 규모의 풀스택 개발 외주를 성공적으로 마무리했습니다. 오늘은 그 과정을 한 번 공유해볼까 합니다. ✨ 실속있고 예쁜 포트폴리오저는 경력이 전혀 없는 학생 신분이었습니다...
더보기1️⃣ Lymo 개발일지 #1: https://parkcool.tistory.com/82️⃣ Lymo 개발일지 #2: https://parkcool.tistory.com/123️⃣ Lymo 개발일지 #3: 현재 글4️⃣ Lymo 개발일지 #4: https://parkcool.tistory.com/17안녕하세요! 지난 글에서는 SSE를 버리고 RTDB로 갈아탄 삽질기를 통해 실시간 데이터 스트리밍을 어떻게 구현했는지 이야기했었죠. 오늘은 혼란의 AI 개발 과정을 다뤄보려 합니다. 그리고 그 혼란 속에서 저를 구원해 준 TypeScript와 Zod 이야기도요. 🤯 AI 개발의 현실흔히 AI 개발이라고 하면, "프롬프트를 입력하니 AI가 척척박사처럼 대답해주는" 모습을 상상합니다. 저도 그랬고요. G..
더보기1️⃣ Lymo 개발일지 #1: https://parkcool.tistory.com/82️⃣ Lymo 개발일지 #2: 현재 글3️⃣ Lymo 개발일지 #3: https://parkcool.tistory.com/144️⃣ Lymo 개발일지 #4: https://parkcool.tistory.com/17안녕하세요! 지난 첫 번째 개발 일지에서는 Lymo의 기획 배경과 기술 스택을 결정하는 과정을 공유해 드렸습니다. "음악 앱인데 음악을 재생하지 않는" 기묘한 기획 배경을 설명드렸죠. 실시간 AI 가사 해석 기능을 구현하기 위한 기술 스택으로 Genkit을 선택했었죠. 오늘은 그 기획을 현실로 만들기 위해 개발하며 겪었던, 삽질기를 공유하려 합니다. 🚀 챗지피티처럼 쭈르륵 나오게Lymo의 핵심 경험은 ..
1️⃣ 결론리액트에서 컴포넌트 안에 있는 모든 코드는 컴포넌트가 렌더될 때마다 다시 실행된다.함수 선언도 마찬가지이다. 컴포넌트가 리렌더될 때마다 함수가 다시 만들어지고 할당되는 것이다. 그렇다면 모든 함수를 useCallback으로 감싸면, 불필요하게 함수를 새로 만들고 할당할 필요가 없어지는 것 아닌가?function Counter() { const [count, setCount] = useState(0); const handleButtonClick = useCallback(() => setCount((prev) => prev + 1), []); return ( {count} );}결론부터 말하자면, 이럴 필요 전혀 없다. 오히려 대부분의 경우 useCallb..
🎉 지금 바로 사용해보기https://parkcoool.github.io/notion-export/⚠️ 주의토이 프로젝트입니다.아직 부족한 기능도 많고, 버그도 많이 보입니다.이러한 부분들은 추후에 차차 보완할 예정이니 양해해주세요 !💬 기획 배경노션으로 작성한 문서를 블로그나 웹사이트에 게시할 때, 스타일이 모두 깨져서 일일이 수정하셨던 경험이 있으신가요?저도 노션으로 작성한 글을 티스토리 블로그로 옮길 때 겪는 이 불편함이 너무 컸습니다. 이미 노션에서는 문서를 HTML로 내보내는 기능을 제공하고 있지만,H1(제목1)을 원하는 글꼴 크기로, 인용구를 원하는 배경색으로 바꾸는 등,제가 원하는 대로 문서의 요소별 스타일을 자유롭게 커스터마이징할 수 있는 기능은 없었습니다. 그래서 만들었습니다.noti..