<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>miminglog</title>
        <link>https://velog.io/</link>
        <description>🐕발쟈</description>
        <lastBuildDate>Wed, 01 Apr 2026 05:16:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>miminglog</title>
            <url>https://velog.velcdn.com/images/miming-00/profile/c3fde1ce-7d44-4e56-a0ca-99c4d086371e/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. miminglog. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/miming-00" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Claude Code] 클로드 코드에서 펫 만들기 🍄 (제 펫은... 버섯 🍄‍🟫)]]></title>
            <link>https://velog.io/@miming-00/Claude-Code-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-%ED%8E%AB-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%A0%9C-%ED%8E%AB%EC%9D%80...-%EB%B2%84%EC%84%AF</link>
            <guid>https://velog.io/@miming-00/Claude-Code-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-%ED%8E%AB-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%A0%9C-%ED%8E%AB%EC%9D%80...-%EB%B2%84%EC%84%AF</guid>
            <pubDate>Wed, 01 Apr 2026 05:16:15 GMT</pubDate>
            <description><![CDATA[<h1 id="claude-code-buddy">Claude Code Buddy</h1>
<blockquote>
<p>Claude Code v2.1.88+ 에 추가된 터미널 동반자 시스템</p>
</blockquote>
<p>커서 인텔리제이에서도 pet을 쓰는 나는 참을 수가 없었습니다 🍄</p>
<hr>
<h2 id="buddy란">Buddy란?</h2>
<p><strong>Buddy</strong>는 Claude Code에 내장된 다마고치 스타일의 가상 반려동물 시스템!! 
터미널 입력창 옆에 ASCII 아트 캐릭터가 말풍선과 함께 상주하며, 대화를 지켜보다가 때때로 혼잣말을 합니다 🍄
캐릭터는 <strong>계정 UUID 기반으로 결정론적으로 배정</strong>된다 — 직접 고를 수 없고, 계정마다 고정된 버디가.. 있는 것 같아요 🐦 (가챠인 것 같기도 하고 🐛)</p>
<hr>
<h2 id="어떤-버전부터-되나">어떤 버전부터 되나?</h2>
<table>
<thead>
<tr>
<th>버전</th>
<th>상태</th>
</tr>
</thead>
<tbody><tr>
<td>v2.1.88 이전</td>
<td>미지원</td>
</tr>
<tr>
<td><strong>v2.1.88+</strong></td>
<td>코드 탑재 완료 (현재 v2.1.89)</td>
</tr>
<tr>
<td>2026년 4월 1–7일</td>
<td>테이저 공개 기간 (지금!)</td>
</tr>
<tr>
<td>2026년 5월</td>
<td>전체 공개 예정</td>
</tr>
</tbody></table>
<pre><code class="language-bash">claude --version   # 현재 버전 확인</code></pre>
<p>클로드 코드 들어갔을 때 해당 버전 이상인지 확인할 것! 아니면 펫을 못 본다 🍄</p>
<hr>
<h2 id="18종의-종족-species">18종의 종족 (Species)</h2>
<pre><code>duck     goose    blob     cat      dragon   octopus
owl      penguin  turtle   snail    ghost    axolotl
capybara cactus   robot    rabbit   mushroom chonk</code></pre><p>저는 머쉬룸이에요 🍄 처음엔 정이 안 갔는데 나름 귀여운 것 같아요 </p>
<hr>
<h2 id="희귀도-시스템">희귀도 시스템</h2>
<table>
<thead>
<tr>
<th>등급</th>
<th>확률</th>
<th>특징</th>
</tr>
</thead>
<tbody><tr>
<td>Common</td>
<td>60%</td>
<td>기본</td>
</tr>
<tr>
<td>Uncommon</td>
<td>25%</td>
<td>모자 지급</td>
</tr>
<tr>
<td>Rare</td>
<td>10%</td>
<td>모자 + 높은 스탯</td>
</tr>
<tr>
<td>Epic</td>
<td>4%</td>
<td>모자 + 더 높은 스탯</td>
</tr>
<tr>
<td><strong>Legendary</strong></td>
<td><strong>1%</strong></td>
<td>최고 스탯</td>
</tr>
<tr>
<td>✨ Shiny</td>
<td>1% (독립 확률)</td>
<td>희귀도와 무관하게 추가 적용</td>
</tr>
</tbody></table>
<blockquote>
<p>Shiny Legendary의 확률 = <strong>0.01%</strong></p>
</blockquote>
<hr>
<h2 id="스탯-5종">스탯 5종</h2>
<table>
<thead>
<tr>
<th>스탯</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>DEBUGGING</td>
<td>버그를 얼마나 잘 잡는지</td>
</tr>
<tr>
<td>PATIENCE</td>
<td>얼마나 참을성 있는지</td>
</tr>
<tr>
<td>CHAOS</td>
<td>혼돈 에너지</td>
</tr>
<tr>
<td>WISDOM</td>
<td>지혜</td>
</tr>
<tr>
<td>SNARK</td>
<td>빈정거림 수준</td>
</tr>
</tbody></table>
<hr>
<h2 id="외형-커스터마이징">외형 커스터마이징</h2>
<ul>
<li><strong>눈 스타일</strong>: 6종</li>
<li><strong>모자 타입</strong>: 7종 (crown, tophat, propeller, halo, wizard, beanie, tinyduck)</li>
<li>모자는 Uncommon 이상에서만 지급됨</li>
</ul>
<hr>
<h2 id="사용-방법">사용 방법</h2>
<h3 id="기본-명령어">기본 명령어</h3>
<pre><code class="language-bash">/buddy         # 버디 활성화 / 첫 부화
/buddy pet     # 버디 쓰다듬기 (하트 애니메이션)
/buddy mute    # 버디 숨기기</code></pre>
<h3 id="처음-실행-시">처음 실행 시</h3>
<p><code>/buddy</code>를 처음 입력하면 <strong>부화(hatch)</strong> 이벤트가 발생합니다.</p>
<ul>
<li>ASCII 스프라이트 애니메이션</li>
<li>떠오르는 하트 이펙트</li>
<li>Claude가 이름과 성격 설명(soul description)을 생성</li>
</ul>
<p>이름과 성격은 한 번 생성되면 <strong>계정에 영구적으로 고정</strong>된다고 ... 하는데 🐛</p>
<hr>
<h2 id="한-번-부화하면-계속-가지고-있어야-하나">한 번 부화하면 계속 가지고 있어야 하나?</h2>
<p><strong>그렇다.</strong> 버디는 계정 UUID에 묶인 결정론적 시스템이래요. </p>
<table>
<thead>
<tr>
<th>항목</th>
<th>동작 방식</th>
</tr>
</thead>
<tbody><tr>
<td>종족/희귀도/스탯</td>
<td>계정 UUID에서 고정 결정 — 재설정 불가</td>
</tr>
<tr>
<td>이름 &amp; 성격</td>
<td>첫 부화 시 Claude가 생성, 이후 고정</td>
</tr>
<tr>
<td><code>/buddy mute</code></td>
<td>숨길 수는 있지만 버디 자체는 사라지지 않음</td>
</tr>
<tr>
<td>재설치/업데이트</td>
<td>버디 정보 유지됨 (서버 측 계정 연동)</td>
</tr>
</tbody></table>
<blockquote>
<p>요약: <strong>다시 뽑을 수 없다.</strong> 운명처럼 정해진 버디와 계속 함께 간다.</p>
</blockquote>
<p>아니 희귀도는 다시 뽑게 해줘라 ! </p>
<hr>
<h2 id="참고">참고</h2>
<ul>
<li>이 기능은 <strong>npm 패키지 소스맵을 통해 유출된 v2.1.88 소스코드</strong>에서 발견... 🍳</li>
<li>공식 문서에는 아직 미등재 상태고, 추후에 바뀔 수도 있을 것 같습니다용 🍄</li>
<li>터미널에서 움직이고, 쓰다듬어주면 하트 뿌리는 게 좀 귀엽습니닼ㅋㅋㅋ</li>
<li>클로드 코드 사용하시는 분들은 한 번씩 해보시는 것도 재밌을 것 같아유</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[토이 프로젝트 하기 ]]></title>
            <link>https://velog.io/@miming-00/%ED%86%A0%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@miming-00/%ED%86%A0%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 05 Jan 2026 04:44:47 GMT</pubDate>
            <description><![CDATA[<p>2026년엔 토이 프로젝트를 야금야금 하기로 했다.</p>
<p>많은 거 말고.
그냥 내가 필요한데 돈 내고 구독하고 싶지 않은 것들 위주로 ... </p>
<p>일단은 TODO list부터 만들어 손 풀기를 하기로 했다.
이번엔 AI 이미지도 넣어서, 내가 가진 todo를 쌓아서 일련의 기록으로 만들 수 있게끔 하는 계획만 잡고 있다.
디자인은 툴을 최대한 활용해서 할 예정이고, 내가 많이 사용할 법하게 만들 예정.</p>
<p>노션보다 자유도를 줄이는 대신 쉽게 계획할 수 있게 할 건데, 아직 프로젝트 이름을 못 정했다 🐴</p>
<p>야금야금 만들어야지 🥳</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 스터디 서비스 (1)]]></title>
            <link>https://velog.io/@miming-00/AWS-%EC%8A%A4%ED%84%B0%EB%94%94-%EC%84%9C%EB%B9%84%EC%8A%A4-1</link>
            <guid>https://velog.io/@miming-00/AWS-%EC%8A%A4%ED%84%B0%EB%94%94-%EC%84%9C%EB%B9%84%EC%8A%A4-1</guid>
            <pubDate>Fri, 02 Jan 2026 08:50:53 GMT</pubDate>
            <description><![CDATA[<p>목적 :</p>
<ul>
<li>아무것도 모른 채로 aws의 s3</li>
<li>아무것도 모른 채로 aws의 iam 사용</li>
<li>아무것도 모른 채로 aws의 secrets manager 사용
.
.
.</li>
</ul>
<p>쉬운 것들만 사용해오며 안 보이는 척... 하고 있었던 aws에 대해 알아보기로 했습니다... 😶</p>
<h1 id="aws">AWS</h1>
<p>(멋드러진 버전)
AWS는 글로벌 데이터 센터를 기반으로 한 <strong>클라우드 서비스</strong>로, IaaS, PaaS, SaaS를 포함합니다. 핵심 요소로 리전(Region: 지리적 위치별 데이터 센터 그룹, 현재 30개 이상), 가용 영역(AZ: 리전 내 독립된 데이터 센터, 3~4개), 엣지 로케이션(콘텐츠 전송 최적화)이 있습니다. Well-Architected Framework는 운영 우수성, 보안, 신뢰성, 성능 효율성, 비용 최적화, 지속 가능성 6개 기둥으로 시스템 설계를 안내합니다.</p>
<p>(쉬운 설명 버전)
AWS는 ‘집 렌트’처럼 서버나 저장소를 빌려주는 서비스입니다. 직접 컴퓨터 사지 말고 필요할 때 쓰고 비용만 내며, 물리 서버 대신 인터넷으로 연결된 가상 공간을 씁니다.
핵심 구조 (집 비유)</p>
<ul>
<li>리전(Region): 서울, 부산처럼 지역별 데이터 센터 묶음. 가까운 곳 선택해 지연 줄임.</li>
<li>가용 영역(AZ): 한 리전 안 ‘아파트 동’처럼 여러 건물. 한 동 고장 나도 다른 동 쓸 수 있음.</li>
<li>엣지 로케이션: 유튜브처럼 가까운 서버에서 영상 빠르게 보여줌.</li>
</ul>
<h2 id="클라우드란">클라우드란?</h2>
<p>클라우드 컴퓨팅은 인터넷을 통해 온디맨드(on-demand)로 컴퓨팅 자원(서버, 스토리지, 데이터베이스 등)을 제공하고 사용량만큼 비용을 지불하는 기술</p>
<p>이번엔 해당 기능이 존재하고, 이번 글에서는 이 기능은 뭐다 정도까지만 알아볼 생각입니다... 🐴</p>
<h2 id="aurora-and-rds">Aurora and RDS</h2>
<h3 id="aurora란">Aurora란?</h3>
<p>Amazon Aurora는 RDS 패밀리 안에 있는 “AWS가 만든(MySQL/PostgreSQL 호환) 고성능 관계형 DB <strong>엔진</strong></p>
<h3 id="rds란">RDS란?</h3>
<p>관계형 데이터베이스(Relational DB)를 AWS가 대신 운영해주는 관리형 <strong>서비스</strong></p>
<p>AWS의 고성능 관리형 관계형 데이터베이스 서비스로 MySQL과 PostgreSQL 호환. 서버리스 옵션으로 자동 스케일링, 읽기 복제본 최대 15개까지 지원하며 성능이 일반 RDS보다 5배 빠름. 글로벌 데이터베이스 기능으로 리전 간 데이터 동기화 가능.</p>
<p>용도: 트랜잭션 워크로드, 웹 앱 백엔드 DB.</p>
<blockquote>
</blockquote>
<p>“RDS”는 서비스 이름(관리형 DB 플랫폼)이고, “Aurora”는 그 안에서 선택할 수 있는 DB 엔진 중 하나(특별히 AWS가 만든 엔진)</p>
<h2 id="ec2">EC2</h2>
<h3 id="ec2란">EC2란?</h3>
<p>AWS에서 “필요한 만큼 빌려 쓰는 가상 서버(컴퓨팅 용량)”입니다.
원하는 OS/스펙으로 인스턴스를 띄우고, 네트워크/보안그룹/디스크(EBS 등)를 붙여서 웹서버, 배치서버, 게임서버 등 범용으로 씁니다.</p>
<p>핵심 용어</p>
<ul>
<li>인스턴스(Instance): EC2에서 실행되는 가상 머신 1대</li>
<li>보안 그룹(Security Group): 인바운드/아웃바운드 허용 규칙을 정하는 “가상 방화벽”</li>
<li>EBS(디스크): 서버의 “영구 저장 디스크” 같은 개념으로, 인스턴스 스토어(임시)와 구별!</li>
</ul>
<h2 id="cloudfront-cdn캐시">CloudFront (CDN/캐시)</h2>
<h3 id="cloudfront란">CloudFront란?</h3>
<p>CDN으로, 전 세계 엣지 로케이션에서 콘텐츠를 캐시해서 빠르게 제공하도록 돕습니다.캐시에 없으면 오리진(origin: S3나 EC2 같은 원본 서버)에서 가져와 응답하고, 이후 요청은 캐시로 더 빠르게 처리하는 구조가 기본입니다.
핵심 용어</p>
<ul>
<li>Origin: 원본이 있는 곳(S3 버킷, EC2 웹서버 등)</li>
<li>Cache: 자주 요청되는 결과를 가까운 곳에 저장해 속도를 올리는 방식</li>
</ul>
<h2 id="cloudwatch">CloudWatch</h2>
<h3 id="cloudwatch란">CloudWatch란?</h3>
<p>CloudWatch는 AWS 리소스와 애플리케이션의 지표(metrics)와 로그(logs)를 모으고, 알람을 걸어 상태를 관찰하는 모니터링 서비스입니다.즉 “서버 CPU 사용량”, “에러 로그”, “요청 수 급증” 같은 걸 보고 알림을 받는 곳</p>
<h2 id="aws-global-view">AWS Global View</h2>
<h3 id="aws-global-view란">AWS Global View란?</h3>
<p>모든 AWS 리전(Region)의 EC2/VPC 리소스를 한 곳에서 요약·검색·탐색할 수 있게 해줍니다.
AWS는 기본 콘솔이 리전별로 나뉘어 있어서, 여러 리전 쓰는 사람이 “전체 리소스 파악”이 불편하여 한 번에 확인할 수 있게 도와줍니다...</p>
<h2 id="route-53">Route 53</h2>
<h3 id="dns-name-resolution-흐름">DNS Name Resolution 흐름</h3>
<ol>
<li>브라우저 주소창에 example.com 입력</li>
<li>브라우저/OS가 <strong>DNS</strong>에게 “example.com 어디야?” 물어봄</li>
<li>DNS가 “이 IP로 가” 또는 “이 서버로 가”라고 답함</li>
<li>브라우저가 그 주소로 접속해서 웹페이지를 받음</li>
</ol>
<h3 id="route53이란">Route53이란?</h3>
<p>Route 53은 AWS가 제공하는 DNS 관리 서비스입니다.</p>
<p>⁇ 근데 왜 route 53일까?? 
DNS는 관례적으로(표준적으로) “목적지 포트는 53&quot; 라고 정해져있다고 함니다. 🐴 마치... 프론트는 localhost3000... 이런 것 처럼 ... 거기서 유래된 것 같습니다...</p>
<h2 id="iam">IAM</h2>
<h3 id="iam-이란">IAM 이란?</h3>
<p>IAM은 AWS 리소스에 대한 접근을 안전하게 제어하는 서비스로, 누가(인증) 무엇을(권한) 할 수 있는지 정의합니다.유저/역할(role)/정책(policy)을 조합해서 최소 권한으로 운영하는 게 핵심입니다.</p>
<h2 id="s3">S3</h2>
<p>파일 저장소: 객체 스토리지, 원격 에셋</p>
<h2 id="vpc-내-aws-전용-네트워크">VPC (내 AWS 전용 네트워크)</h2>
<h3 id="vpc-란">VPC 란?</h3>
<p>VPC(Virtual Private Cloud)는 사용자가 정의한 IP 범위로 논리적으로 격리된 네트워크를 만듭니다. 서브넷, 라우팅 테이블, 인터넷 게이트웨이 등을 설정해 보안과 네트워크를 제어합니다. EC2나 다른 리소스가 이 안에 배치됩니다.</p>
<p>즉, EC2보다 VPC가 더 큰 개념이며, AWS에서 가상의 사설 네트워크 공간을 의미합니다.</p>
<h2 id="lambda-서버리스-실행">Lambda (서버리스 실행)</h2>
<h3 id="lambda-란">Lambda 란?</h3>
<p>Lambda는 서버를 직접 만들고 관리하지 않고도 코드를 실행할 수 있는 “이벤트 기반 컴퓨트 서비스”입니다. 기본 단위는 “함수(function)”이고, 어떤 이벤트(예: HTTP 요청, S3 파일 업로드 등)가 들어오면 그 함수를 실행하는 방식으로 애플리케이션을 구성합니다. 또한 Lambda는 권한(실행 역할/permission), 이벤트 소스(trigger), 실행 환경(runtime) 같은 개념이 같이 따라오며, 로깅/모니터링은 CloudWatch와 함께 보는 경우가 많습니다.</p>
<ul>
<li>Serverless
Serverless는 “서버가 없다”가 아니라 “서버 운영(패치, 스케일링, 프로비저닝)을 사용자가 직접 하지 않는다”에 가깝고, 코드는 필요할 때 실행되며 트래픽에 맞춰 자동으로 확장되는 모델을 말합니다</li>
</ul>
<p>항상 켜있지 않고, 트리거시 자동 실행되며 비용은 실행 시간만큼 청구된다.</p>
<h2 id="amplify">Amplify</h2>
<h3 id="amplify-란">Amplify 란?</h3>
<p>웹/모바일 앱 개발·배포를 빠르게 하도록 돕는 도구/서비스 모음으로, 프론트엔드 호스팅과 백엔드 기능(Auth/Data/Storage 등) 연결을 쉽게 하는 방향으로 설계되어 있습니다. 즉 “프론트 개발자가 클라우드 지식이 많지 않아도” 인증/데이터/API/스토리지/배포 흐름을 빠르게 구성하는 용도로 자주 사용됩니다.</p>
<h2 id="secrets-manager">Secrets Manager</h2>
<h3 id="secretes-manager란">secretes manager란?</h3>
<p>Secrets Manager를 사용하여 데이터베이스 자격 증명, API 키 및 OAuth 토큰 같은 보안 암호를 저장, 교체 및 모니터링하고 이러한 보안 암호에 대한 액세스를 제어할 수 있습니다.
백엔드에서 시크릿매니저를 바라보게 하면, 코드딴에 암호를 남길 필요가 없어 안전합니다.</p>
<h2 id="security-hub-cspm">Security Hub CSPM</h2>
<h3 id="security-hub-cspm-란">Security Hub CSPM 란?</h3>
<p>클라우드 설정을 실시간으로 스캔해서 보안 문제나 규정 위반을 찾아줘요. 마치 집 안을 자동으로 청소하고 이상 징후를 알려주는 로봇 청소기처럼 작동합니다.</p>
<h2 id="certificate-manager">Certificate Manager</h2>
<h3 id="certificate-manager-란">Certificate Manager 란?</h3>
<p>HTTPS로 사이트를 잠그는 인증서를 무료로 만들어주고, 만료되면 자동 갱신해줘요. 수동으로 인증서 관리할 때 생기는 골치 아픈 일을 대신 처리하는 간편 도우미입니다.</p>
<p>.
.
.
기본 개념 0.1 들어갔으니 다음은 EC2나 하나를 더 심도 있게 돌아오려고 한다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[깃허브 꾸미기]]></title>
            <link>https://velog.io/@miming-00/%EA%B9%83%ED%97%88%EB%B8%8C-%EA%BE%B8%EB%AF%B8%EA%B8%B0</link>
            <guid>https://velog.io/@miming-00/%EA%B9%83%ED%97%88%EB%B8%8C-%EA%BE%B8%EB%AF%B8%EA%B8%B0</guid>
            <pubDate>Fri, 02 Jan 2026 03:11:38 GMT</pubDate>
            <description><![CDATA[<p>2026년 신년맞이 깃허브를 꾸미기로 했다🐴</p>
<p>지금 모습
<img src="https://velog.velcdn.com/images/miming-00/post/e487b2d4-3bb7-4851-b255-ba08237a079c/image.png" alt="">
<img src="https://velog.velcdn.com/images/miming-00/post/9f6adefe-3e95-414f-97bc-9f683c079560/image.png" alt=""></p>
<p>한 번 깃꾸를 해서 있을 건 있는 듯한 모습...</p>
<p>깃애니멀은 살리고 싶어서 계속 하기로 했다!</p>
<ol>
<li><p>깃 애니멀
<a href="https://github.com/git-goods/gitanimals">깃 애니멀 링크</a>
커밋 30번을 하면 펫 입양이 가능 
나는 꽤나 희귀 동물인 코틀린 돼지가 있다! &#39;🔽&#39;v</p>
</li>
<li><p>뱃지
<a href="https://simpleicons.org/">뱃지 링크</a></p>
</li>
</ol>
<p>기존에 쓰던 뱃지들은 사실 좀 큼지막한 녀석들인데, 채울 게 없지만 뭔가 길게 늘여져있고 싶은 욕망으로....</p>
<pre><code>![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&amp;logo=javascript&amp;logoColor=white)</code></pre><p><img src="https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=white" alt="JavaScript">
이런 식으로 style=for-the-badge를 써서 커다랗게 해놨는데, </p>
<pre><code>![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=flat-square&amp;logo=javascript&amp;logoColor=white)</code></pre><p><img src="https://img.shields.io/badge/JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=white" alt="JavaScript"></p>
<p>이번엔 조금 작게 변경하고, contact를 추가하기로 했다.
이때는 뱃지가 아니라 이미지 태그와 a 태그를 같이 쓰기로 했다</p>
<pre><code>&lt;div&gt;
  &lt;a href=&quot;mailto:내 메일 쓰기~&quot;&gt;
    &lt;img src=&quot;https://img.shields.io/badge/gmail-EA4335?style=flat-square&amp;logo=gmail&amp;logoColor=white&quot; /&gt;
  &lt;/a&gt;
  &lt;a href=&quot;내 벨로그 주소 쓰기~&quot;&gt;
    &lt;img src=&quot;https://img.shields.io/badge/velog-20C997?style=flat-square&amp;logo=velog&amp;logoColor=white&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;</code></pre><p>주소 없이
<img src="https://velog.velcdn.com/images/miming-00/post/612c7ed4-830f-4b3d-a7bc-bd8d754347e6/image.png" alt="">
이렇게 나올 예정 &#39;&gt;&#39;b</p>
<p>잔디도 꾸밀까 하다가............. 스탯도 넣을까 하다가 그냥 뒀다 ...... 깃꾸는 한계가 있는 듯 하다.</p>
<p>하지만? 필요한 사람도 있을 수 있으니 찾아본 것들...</p>
<p>나는 심심해서 포켓몬 세마리도 넣어줬다
<img src="https://velog.velcdn.com/images/miming-00/post/3384c3e4-45f6-4687-88a5-a9181a436e1e/image.png" alt=""></p>
<ol start="4">
<li><p>헤더
<a href="https://github.com/kyechan99/capsule-render">https://github.com/kyechan99/capsule-render</a>
다양한 테마랑 다양한 커스텀 가능해서 쓰면 예쁠 듯 하다</p>
</li>
<li><p>방문자 수 표기
<a href="https://myhits.vercel.app/ko">https://myhits.vercel.app/ko</a></p>
</li>
</ol>
<p>프로필은 뭘로 할까 하다가<img src="https://velog.velcdn.com/images/miming-00/post/cb7b67a4-e6cb-4bc6-9b31-29a4ee7106a6/image.png" alt=""></p>
<p>좋아하는 돌로 바꿔줌 ^ㅁ^b</p>
<p>2025년은 1800개 정도로 마무리한다... 2026년엔 2000개 찍어보고 싶고, 퍼블릭에 더 많이 올려서 내 농장도 다른 동물들이 많아졌음 한다. 🐴</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!241110 취준_프론트엔드 에러 모니터링, 로그 데이터 수집의 필요]]></title>
            <link>https://velog.io/@miming-00/241110-2</link>
            <guid>https://velog.io/@miming-00/241110-2</guid>
            <pubDate>Sun, 10 Nov 2024 14:36:13 GMT</pubDate>
            <description><![CDATA[<p>잠깐 👏 제목 거창하게 썼는데 정보 관련이 아니라 내가 알아본 것 위주로 내가 리마인딩하려고 하는 것</p>
<h1 id="프론트엔드-에러-모니터링">프론트엔드 에러 모니터링</h1>
<p>프론트엔드에서 에러 관리하는 건 중요하다. 아니다. 에러는 어디나 중요한데, 오늘은 프론트엔드에서 에러 관리를 어떻게 할지!!! 알아보자 💡💡💡</p>
<p>프론트엔드의 에러 =&gt; 사용자가 직접적으로 느낀다.
에러 처리가 제대로 되어있지 않을 때 : 웹사이트가 생각대로 안 움직여서 사용자 이탈</p>
<p>그래서 프론트엔드는 에러 처리 빠릿빠릿하게 해줘야 한다.</p>
<p>뭔가 서버에서 파일이 커서 이거 엔티티에 저장 안 할 거예요!!!!!!!! 하면 -&gt; 파일이 크대요 다른 파일 올려줘요 .... 라고 사용자한테 안내해줘야 한다. 아니면 영원히 멈춰있어서 사용자가 ? 🤷‍♀️ 뭐지 왜 안 돼? 하는 상황 발생. 사용자가 기분이 안 좋으면 3초만 밀려도 그냥 꺼버릴 것이다.</p>
<p>근데 이 에러를 잡는 건 너무 힘들다. 브라우저도 다 다를 거잖아 .... 😂😂</p>
<p>하지만 그래서 등장한 에러 모니터링 도구가 꽤~ 많다.</p>
<p>Sentry, Bugsnag, LogRocket, New Relic 같은 도구가 있다고 하는데, </p>
<p>오늘은 그 중에서도 Sentry를 소개해볼까 한다.</p>
<h2 id="sentry">Sentry</h2>
<p><a href="https://sentry.io/">Sentry</a>는 실시간으로 에러를 추적하고, 바로바로 알려주는 도구다. 프론트엔드에서 일어나는 에러를 자동으로 잡아내고, 어떤 에러가 어디서 발생했는지 정확하게 알려줘서 개발자가 빠르게 문제를 해결할 수 있게 해준다!!!!!!
예를 들어, 버튼 클릭했을 때 발생한 오류나, API 호출 실패 같은 걸 실시간으로 모니터링 가능 🐞</p>
<p>Sentry 사이트 들어가서 깃허브로 회원 가입 진행하고 -&gt; 해당 프로젝트에 맞는 기술 + 설정 몇 개 간단하게 체크하면 dsn이 나온다.</p>
<p>홈페이지에 진짜 자세하고, 아름답고, 예쁘게 나와있다.....
최근에 본 라이브러리 중에 제일 상호작용이 아름다움 ....... </p>
<p>npm이나 yarn 으로 센트리 추가하는 것부터, 초기 세팅까지 초보자도 쉽게 적용할 수 있게 되어있다! 에러를 일부러 만드는 버튼 하나 만들고 테스트 해보는 것도 좋은 경험일 듯 💪</p>
<h1 id="로그-데이터-수집">로그 데이터 수집</h1>
<p>콘솔 로그, API 로그, 서버 로그, 클라이언트 로그 등 다양한 방식이 있다!</p>
<p>사실 이거저거 다 사용하는 입장에서 ... 개발할 때 테스트 하면서 로그 보고 알럿 띄워주는 경우가 많긴 한 것 같다. 이때는 알려줘야 좋겠다 -&gt; 하면 바로바로 만드는 것도 방법이 될 수 있다. (아니면 진짜 높은 확률로 까먹음)</p>
<p>오늘의 정리 끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!241110 취준_라이브러리 살펴보기]]></title>
            <link>https://velog.io/@miming-00/241110</link>
            <guid>https://velog.io/@miming-00/241110</guid>
            <pubDate>Sun, 10 Nov 2024 10:01:32 GMT</pubDate>
            <description><![CDATA[<p>라이브러리는 많고 닥스를 열심히 보는 요즘 ...</p>
<p>리액트에서 쓸 수 있는 라이브러리를 최대한 많이 써보려고 노력 중이다.</p>
<p>회원가입 / 로그인 / 프로필 수정 =&gt; 간단한 사이트에 적용할 수 있는 라이브러리는 뭐가 있을지 살펴보기</p>
<p>디자인 기획부터 하고 시작했으면 좋았겠지만 시간이 부족했다. 🐱‍🐉다 그러는 거잖아요.</p>
<p>이번엔 색 정도의 컨셉을 가지고 꾸려나갈 예정이기 때문에 디자인 관련은 스킵하고 썼던 것과 고려했던 것 등등 말해보려고 한다.</p>
<p>1) 스키마 유효성 검사_ zod</p>
<p><a href="https://zod.dev/">Zod</a></p>
<p>가장 최근에 알게 된 라이브러리로 <strong>스키마 유효성 검사 라이브러리</strong>다</p>
<p>유사품으로 <a href="https://github.com/jquense/yup#table-of-contents">yup</a> 가 있다. </p>
<p>솔직히 말하면 내가 보기엔 둘 다 아주 비슷해 보였는데, yup이 먼저 있었고 -&gt; 이후 zod가 나왔다고 해서 최신 라이브러리를 쓰고 싶어서 zod를 선택했다.</p>
<p>일단 좋은 점 에러 메시지가 출력이 기가 막혀서 좋았다.</p>
<p>라이브러리를 안 쓰고 프로젝트를 한다든가 하는 수가 없다면 계속 쓰고 싶다. ts에 호환도 잘 되는 것 같다.</p>
<p>2) zustand, tanstackQuery(reactQuery)_상태 관리</p>
<p>이번엔 <a href="https://zustand-demo.pmnd.rs/">주스탠드</a>랑 <a href="https://tanstack.com/query/latest">탄스택</a>을 섞어서 썼는데, 사실 둘을 언제 어디서 써야 하는지 감이 전<del>~</del>혀 안 잡혔다. 주스탠드로 싹 만들어놓고 몇 가지만 탄스택으로 리팩토링 했을 정도.</p>
<p>주스탠드의 장점은 진짜. 쉬운 거. 나는 프롭스 드릴링을 정말 싫어하는데 상태 관리 라이브러리르 좋아하냐고 하면 그렇지도 않음 .... 👀 쪼오끔 헷갈리잖아요 ... </p>
<p>그래도 RTK 에서 넘어가면 주스탠드는 선녀다. F5 하면 싹~ 날라가지만 ... 이번엔 persist를 안 쓰려고 이거저거 했는데, 사실 과용이 된 것 같아서 고민. 나중에 리팩토링 하면 몇 가지는 삭제하지 않을까...</p>
<p>(*홈페이지 왕 귀여움...)</p>
<p>탄스택 쿼리는 원래 내가 워낙 좋아해서... 훅으로 만들고 쓰긴 썼는데 또 mutate 쓸 땐 살짝 버벅인다. 이상하게 탄스택 쿼리 닥스는 뭔가 많이 써있는데 진짜 뭔가 이상함......... 뭔가 불편한데 이유를 찾을 수가 없다. 닥스 고마운데 묘하게 딱 긁어주는 게 없다.</p>
<p>솔직히 말하면 클로드한테 가서 useMutation 예시 코드 달라고 하는 게 쉬울 지경... 이건 내가 보라고 긁은 클로드 예시 코드. 개인적으로 이런 느낌의 탄스택 쿼리 코드를 좋아하는데 괜찮을라나 모르겠다.</p>
<pre><code>// API 호출 함수
const postTodo = async (newTodo: Todo) =&gt; {
  const response = await fetch(&#39;https://api.example.com/todos&#39;, {
    method: &#39;POST&#39;,
    headers: {
      &#39;Content-Type&#39;: &#39;application/json&#39;,
    },
    body: JSON.stringify(newTodo),
  });
  return response.json();
};

// 컴포넌트 내부
import { useMutation, useQueryClient } from &#39;@tanstack/react-query&#39;;

function TodoComponent() {
  const queryClient = useQueryClient();

  const mutation = useMutation({
    mutationFn: postTodo,
    onSuccess: (data) =&gt; {
      // 성공 시 todos 쿼리 무효화
      queryClient.invalidateQueries({ queryKey: [&#39;todos&#39;] });
      console.log(&#39;Todo created:&#39;, data);
    },
    onError: (error) =&gt; {
      // 에러 처리
      console.error(&#39;Error creating todo:&#39;, error);
    },
    onSettled: () =&gt; {
      // 성공/실패 상관없이 실행
      console.log(&#39;Mutation completed&#39;);
    }
  });

  const handleSubmit = (e: React.FormEvent) =&gt; {
    e.preventDefault();
    const newTodo = {
      id: Date.now(),
      title: &#39;New Todo&#39;,
      completed: false
    };

    mutation.mutate(newTodo);
  };

  return (
    &lt;div&gt;
      &lt;button 
        onClick={handleSubmit}
        disabled={mutation.isPending}
      &gt;
        {mutation.isPending ? &#39;Creating...&#39; : &#39;Create Todo&#39;}
      &lt;/button&gt;

      {mutation.isError &amp;&amp; (
        &lt;div&gt;An error occurred: {mutation.error.message}&lt;/div&gt;
      )}
    &lt;/div&gt;
  );
}

export default TodoComponent;</code></pre><p>3) tailwind</p>
<p><a href="https://tailwindcss.com/">테일윈드</a>는 그냥 마음의 고향이다 ...</p>
<p>제출 과제가 아니었으면 온갖 곳에 animate-spin 넣고 싶었는데 참았다. 
라인이 좀 지저분해지긴 하는데 빠르게 꾸미기 좋다. 시간 부족하면 항상 테일 윈드...</p>
<p>4) react-spinners</p>
<p>파일 크기 때문에 종종 오류가 나는 것 같길래 막아두긴 했는데, 혹시 몰라서 로딩 스피너 적용 ... uiux 필수 같다. 시간이 많으면 만드는 것도 좋지만 시간 부족하면 항상 <a href="https://www.davidhu.io/react-spinners/">리액트 스피너</a>~~!</p>
<p>5) 스윗알럿2</p>
<p><a href="https://sweetalert2.github.io/">스윗알럿2</a> ... 귀여움</p>
<p>토스티파이를 쓰려다가 일단 스윗알럿 적용. 둘 다 그렇게 어렵진 않은데 스윗알럿2가 정말 쉽다. 프로바이더도 안 써도 되니까...</p>
<p>alert 쓰고 싶을 때 Swal.fire... 어쩌고 하면 되는데, 시간이 부족하면 항상 스윗알럿2 ...</p>
<p>전반적으로 시간이 부족해서 쓴 라이브러리가 많지만, 그건... 즉 쉽다는 것 ....................... 최고의 장점이라고 생각한다... </p>
<p>끝~!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[화살표 함수는 뭘까
? 🏹 (1)]]></title>
            <link>https://velog.io/@miming-00/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%981</link>
            <guid>https://velog.io/@miming-00/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%981</guid>
            <pubDate>Fri, 04 Oct 2024 07:41:47 GMT</pubDate>
            <description><![CDATA[<h1 id="✨-화살표-함수🏹-와-일반-함수-👍는-뭐가-다를까">✨ 화살표 함수🏹 와 일반 함수 👍는 뭐가 다를까?</h1>
<h3 id="1-문법--함수-선언-방식">1. 문법 : 함수 선언 방식</h3>
<p>일반 함수</p>
<pre><code>function sayHello() {
  return &quot;Hello, world!&quot;;
}</code></pre><p>function + 함수명 으로 시작한다.</p>
<hr>
<p>화살표 함수</p>
<pre><code>const sayHello = () =&gt; &quot;Hello, world!&quot;;</code></pre><p>function 대신 함수명과 =&gt; 기호를 써서 쓴다. 일반적으로 한 줄 정도라면 {} 나 return은 생략 가능 OK</p>
<h3 id="2-this-키워드-차이">2. this 키워드 차이</h3>
<p>여기 별표 다섯개 🌟⭐🌟⭐⭐🌞🌞🌟⭐</p>
<pre><code>const person = {
    name: &quot;철수&quot;,
    //일반 함수
    sayHi: function() {
        console.log(`${this.name}가 인사합니다!`);
    },
    //화살표 함수
    sayHiArrow: () =&gt; {
        console.log(`${this.name}가 인사합니다!`);
    }
};

person.sayHi();        // 출력: &quot;철수가 인사합니다!&quot;
person.sayHiArrow();   // 출력: &quot;undefined가 인사합니다!&quot;</code></pre><p>this 는 좀 재밌는 친구다.
일반 함수에서의 this는 약간 상식선에서 행동한다고 생각하면 좋다. 대충... 되겠지? 될 것 같은데? 하고, 상단의 코드를 보면 대충 철수가 나올 것 같다 싶을 때 철수가 나온다. 이거는 안 나오려나..? 하면 보통 undefined가 출력된다.</p>
<p><strong>일반 함수</strong>에서의 this는 함수가 호출되는 시점에서 정의된다. <strong>상황에 따르게 다르게 동작</strong>한다. </p>
<p><strong>화살표 함수</strong>에서는 예외없이 <strong>함수의 상위 스코프</strong>를 가리킨다. (*상단 예시에서 또한 window.name or global.name 이어서 대부분 undefined 출력)</p>
<h4 id="2-1-클래스와-this">2-1. 클래스와 this</h4>
<pre><code>class Superhero {
    constructor(name) {
        this.name = name;
    }

    // 일반 함수를 메서드로 사용
    introduceSelf() {
        console.log(`안녕하세요, 저는 ${this.name}입니다!`);
    }

    // 화살표 함수를 클래스 필드로 사용
    flyAway = () =&gt; {
        console.log(`${this.name}이 날아갑니다!`);
    }
}

const superman = new Superhero(&quot;슈퍼맨&quot;);
superman.introduceSelf();  // 출력: &quot;안녕하세요, 저는 슈퍼맨입니다!&quot;
superman.flyAway();        // 출력: &quot;슈퍼맨이 날아갑니다!&quot;

const introduce = superman.introduceSelf;
const fly = superman.flyAway;

introduce();  // 출력: &quot;안녕하세요, 저는 undefined입니다!&quot;
fly();        // 출력: &quot;슈퍼맨이 날아갑니다!&quot;</code></pre><p>따로 빼내서 호출하면 일반 함수의 경우 this가 undefined가 되는 모습을 확인할 수 있다. 화살표 함수는 멀쩡하다.
(물론 화살표 함수의 경우에도 프로토 타입 매서드로 직접 정의하면 undefined가 나올 수도 있다고 한다.)</p>
<p>...2편에 계속 👀</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240924 취준_인성 면접]]></title>
            <link>https://velog.io/@miming-00/240924</link>
            <guid>https://velog.io/@miming-00/240924</guid>
            <pubDate>Tue, 24 Sep 2024 08:21:24 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>해당 직무 지원 목적</p>
</li>
<li><p>장점?</p>
</li>
<li><p>마감 기한 대처</p>
</li>
<li><p>협업 시 중요한 것</p>
</li>
<li><p>나를 뽑아야 하는 이유</p>
</li>
</ol>
<p>작성 완료!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240923 취준_면접 준비]]></title>
            <link>https://velog.io/@miming-00/240923</link>
            <guid>https://velog.io/@miming-00/240923</guid>
            <pubDate>Mon, 23 Sep 2024 06:47:05 GMT</pubDate>
            <description><![CDATA[<p>맥북을 반납하고 이제 데탑으로 코딩과 취준하는 이야기...</p>
<p>면접 강의)</p>
<p>과거의 행동과 대치되는 행동을 했을 때, &quot;왜&quot; 라는 질문으로 탐침을 한다. </p>
<p>실제로 어떤 경험을 하여, &quot;무엇을&quot;
문제 해결 과정에서는, &quot;왜&quot;, &quot;어떻게&quot;
결과를 통해 배운 것은, &quot;어디서&quot;</p>
<p>=&gt; 정말로 이 지원자가 실제 경험을 했는가? 를 탐색</p>
<p>모르는 질문이 나올 경우 신중하게 접근</p>
<p>1) 생각할 시간이 필요할 경우: 잠시 생각하고 말씀드려도 괜찮을까요?
2) 그냥 모르겠는 경우
 2-1) (솔직함) 모르겠다고 답변
 2-2) 최대한 답변 이후 : 제가 아는 대로 최대한 답변했지만, ........ </p>
<p>면접 이후 키워드라도 꼭 기록하기 (*차후 면접에서도 나올 확률이 높음)</p>
<p>오늘의 후기</p>
<ol>
<li>모니터가 왕 커져서 어색하다!!!!!!!!!!!</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[240909 TIL_ 최종 프로젝트 UI 목업]]></title>
            <link>https://velog.io/@miming-00/240909-TIL</link>
            <guid>https://velog.io/@miming-00/240909-TIL</guid>
            <pubDate>Mon, 09 Sep 2024 13:28:54 GMT</pubDate>
            <description><![CDATA[<p>ui 목업을 위해 조금씩 준비 중 ... .... ... </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[240904 TIL_ 최종 프로젝트 ICON 변경]]></title>
            <link>https://velog.io/@miming-00/240904-TIL</link>
            <guid>https://velog.io/@miming-00/240904-TIL</guid>
            <pubDate>Tue, 03 Sep 2024 16:16:52 GMT</pubDate>
            <description><![CDATA[<p>최종 프로젝트 icon 변경</p>
<p>리액트 아이콘 -&gt; 디자이너님 메이드 뽀짝 아이콘 바꾸기</p>
<p>색은 또 따로 바꿔야 한다<del>.</del> 아니면 activeIcon으로 2개 해야 할 듯 하다.</p>
<p>*오늘의 오류
컴포넌트의 import 오류
Default Export vs Named Export</p>
<p><strong>Default Export</strong></p>
<pre><code>// 컴포넌트 파일
const MyComponent = () =&gt; { /* ... */ };
export default MyComponent;</code></pre><pre><code>import MyComponent from &#39;./MyComponent&#39;;</code></pre><p>vs</p>
<p><strong>Named Export</strong></p>
<pre><code>// 컴포넌트 파일
export const MyComponent = () =&gt; { /* ... */ };</code></pre><pre><code> import { MyComponent } from &#39;./MyComponent&#39;;</code></pre><p>디폴트로 내보낼 때는 중괄호 없이<del>! 그냥 맨 몸...
내보내는 게 많을 경우 중괄호 있게</del>!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240903 취준_이력서 수정]]></title>
            <link>https://velog.io/@miming-00/240903</link>
            <guid>https://velog.io/@miming-00/240903</guid>
            <pubDate>Tue, 03 Sep 2024 12:06:01 GMT</pubDate>
            <description><![CDATA[<p>이력서 피드백이 왔다 &#39;ㅠ&#39;</p>
<p>과연 프로젝트 관련해서 피드백이 많은데, 팀플 2개 넣었다가 그냥 팀프로젝트 1개, 개인 프로젝트 1개로 일단 바꾸는 중이다..!!</p>
<p>피곤하군 <del>.</del> !!!</p>
<p>인텔리픽 제출 완료~!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[240902 TIL_타입 스크립트]]></title>
            <link>https://velog.io/@miming-00/240902-TIL</link>
            <guid>https://velog.io/@miming-00/240902-TIL</guid>
            <pubDate>Mon, 02 Sep 2024 08:47:42 GMT</pubDate>
            <description><![CDATA[<p>기획, 디벨롭 회의 등등으로 코딩을 살짝 멀리한 것 같아서 다시 강의 보면서 코딩 치는 중 !</p>
<p>타입스크립트를 하나도 몰랐을 때, 이게 머야...... ....... ...라고 힘들었던 것과 달리 어느 정도 쪼오오끔 알게 되다 보니 끄덕끄덕 하게 된다...!!</p>
<p>1-5까지 완료</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[240830 TIL_ 최종 프로젝트 디벨롭]]></title>
            <link>https://velog.io/@miming-00/240830-TIL</link>
            <guid>https://velog.io/@miming-00/240830-TIL</guid>
            <pubDate>Fri, 30 Aug 2024 08:45:34 GMT</pubDate>
            <description><![CDATA[<p>최종 프로젝트 기간은 끝났지만, 팀원 분들과 조그맣게 디벨롭 하기로 했다.</p>
<p>챗봇이 없어서 좀 아쉬워하는 중이라 관련 라이브러리, sdk 찾는 중인데 쓰기가 제법 까다롭다.</p>
<ol>
<li>실시간 유저 채팅 기능 유지 + ai 챗봇을 한 번에 가져가는 게 쉽지는 않아서 계속 고민해봐야 할 듯 하다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[240829 취준_ gpt 활용 강의]]></title>
            <link>https://velog.io/@miming-00/240829</link>
            <guid>https://velog.io/@miming-00/240829</guid>
            <pubDate>Thu, 29 Aug 2024 09:03:56 GMT</pubDate>
            <description><![CDATA[<p>너무 공부를 안 하는 것 같아서 GPT 활용 강의 보면서 집중력 향상을 도모 중...</p>
<p>GPT 활용 강의 완료~!</p>
<p>프로젝트 정리 중 ... 정리는 1차 완료!</p>
<p>이력서 사부작사부작 쓰는 중이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240828 취준_ 이력서 기초 다지기]]></title>
            <link>https://velog.io/@miming-00/240828</link>
            <guid>https://velog.io/@miming-00/240828</guid>
            <pubDate>Wed, 28 Aug 2024 08:24:10 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>깃허브 readme.md 꾸미기</p>
</li>
<li><p><strong>3/21 ~ 4/12</strong> 사전캠프기간 끄트머리부터 til 시작... 
js 문법, css, 피그마, 알고리즘 문제, 깃, 깃허브 익숙해지는 시간</p>
<p> ❗️ <strong>3/26-3/27</strong> 와이어프레임 기획 사전 프로젝트 1등 :-&gt; </p>
</li>
<li><p><strong>4/15 ~ 4/19</strong> 팀 프로젝트1
 팀 소개 웹페이지 만들기
 웹페이지(HTML)에 파이어베이스를 활용하여 댓글 CRUD 구현</p>
</li>
<li><p><strong>4/22 ~ 4/30</strong> 개인 프로젝트1
 영화 검색 사이트 제작</p>
</li>
<li><p><strong>05/01 ~ 05/09</strong> 팀 프로젝트2
 localstorge 이용하여 댓글 CR 구현</p>
</li>
<li><p><strong>05/10 ~ 05/17</strong> 개인 프로젝트2 </p>
</li>
</ol>
<p>노션에 정리 중 .... </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240827 취준_ 나의 강점]]></title>
            <link>https://velog.io/@miming-00/240827</link>
            <guid>https://velog.io/@miming-00/240827</guid>
            <pubDate>Tue, 27 Aug 2024 08:28:46 GMT</pubDate>
            <description><![CDATA[<p>오늘은 본격적으로 이력서를 작성하기 전,</p>
<ol>
<li>나의 강점이 무엇인지</li>
<li>나의 약점이 무엇인지</li>
</ol>
<p>를 생각해보는 시간을 가졌다 ...</p>
<p>약점을 강점으로 전환할 수 있는 팁도 ...</p>
<p>이것과 함께 이제 내일 내가 뭘 했는지 코드 보면서 좀 전환하는 시간을 가지기로 했다.</p>
<p>벌써 까먹기 시작...</p>
<p>노션에 야금야금 정리해둔 게 있어서 거기 보충해서 정리하고, 코드 뜯어보면서 회고해보기로 한다...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[!240826 취준_이력서 준비기]]></title>
            <link>https://velog.io/@miming-00/240826</link>
            <guid>https://velog.io/@miming-00/240826</guid>
            <pubDate>Mon, 26 Aug 2024 10:09:45 GMT</pubDate>
            <description><![CDATA[<p>할 일 : 커리어톤 강의 완강</p>
<ol>
<li>이력서 기초 다지기</li>
<li>프로젝트 내용 완성</li>
<li>자기소개서 작성</li>
<li>이력서 다듬기</li>
<li>개발자 취업 도전</li>
</ol>
<p>=&gt; 왜 지금 써야 하는가? 기억이 생생하다
=&gt; 빠른 시작은 빠른 취업과 연관되어 있음</p>
<p>나의 경험을 바탕으로 무엇을 할 수 있는지, 했던 일을 통해 문제 해결 역량을 보여주기
구체적인 경험의 사례와 무엇을 할 수 있는지 기재하기</p>
<p>--</p>
<ol>
<li><p>재료 수집하기</p>
<p>e.g. 꾸준히 쓴 벨로그 글, 깃허브 커밋, 직접 찍은 시연 영상, 팀 회의록, gif, 팀 회의록 , 테스트 코드 커버리지, discord, 슬랙 채팅 메시지, 라이트 하우스 점수</p>
</li>
</ol>
<p>=&gt; &quot;일단 모으기!&quot;</p>
<ol start="2">
<li><p>재료 분류하기 
a. 간단한 구현 (서브 재료)
b. 트러블 슈팅 (메인 재료)</p>
<p>=&gt; 기능/개선 결과별 구분 혹은 페이지별 구분</p>
</li>
<li><p>재료 다듬기</p>
</li>
</ol>
<p>골든 서클의 핵심은 문제 정의에 대해 타인을 공감시키고 해결 방안에 대해 타당하다고 타인을 설득하는 것
    a. 목적 : 구현 이유
    b. 과정 : 목적 달성을 위한 구현
    c. 결과 : 행동의 결과가 되는 성과    </p>
<p>일반적으로 역순으로 결과 -&gt; 과정 -&gt; 목적으로 말을 한다.</p>
<pre><code>(골든 서클 적용 x)
웹소켓을 활용한 실시간 채팅 서비스 구현
-유저간 소통을 위해 구현</code></pre><p>왜, 무엇을, 어떻게 방향성을 넣는 방법</p>
<pre><code>(골든 서클 적용 O)
유저간 소통을 위한 실시간 채팅 서비스 구현
-양방향 통신을 지원하는 웹소켓 활용
-텍스트 형태의 대화를 서버에 저장하여 확인할 수 있도록 채팅 방식 적합</code></pre><p>간단한 구현, 기능을 수정했던 경험
특정 기능을 구현
라이브러리를 사용하여 구현</p>
<p>트러블 슈팅이나 기능, 성능을 개선했던 경험</p>
<ol>
<li>목적 : &quot;왜&quot; 문제라고 생각했는지, 가장 먼저 해결해야 한다고 생각했던 이유</li>
<li>과정 : &quot;어떻게&quot; 구현했는지</li>
<li>결과 : &quot;무엇을&quot; 구현했는지</li>
</ol>
<p>--</p>
<p>이력서 중 가장 중요한 부분은 
&quot;설득력 있는 트러블 슈팅&quot;
&quot;수치/정량화된 성과&quot;
&quot;기술적 의사 결정&quot;</p>
<p>=&gt; 이력서는 구문 다이어트를 하여 가독성을 높이기
나는, 저는, 수동체, 구어체, 하나의 문장에 하나의 내용만, 시니어들이 알 수 있는 것이라면 삭제하기 &quot;그리고 두괄식 제목 선정&quot;</p>
<hr>
<p>이력서 마무리... 경력과 연결 지어 하기</p>
<p>개발자 역량과 연관 지을 수 있는 부분만 간략히 작성. 배경 지식 / 특정 지식</p>
<p>=&gt; 모든 항목이 개발자로서의 역량을 어필하는지 확인</p>
<p>이력서 취업 노트 작성 중 .... !</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[240820 TIL_ 최종 프로젝트 트러블 슈팅]]></title>
            <link>https://velog.io/@miming-00/240820-TIL</link>
            <guid>https://velog.io/@miming-00/240820-TIL</guid>
            <pubDate>Tue, 20 Aug 2024 13:27:45 GMT</pubDate>
            <description><![CDATA[<p>왜~ 슬픈 예감은~ 틀린 적이 없나<del>.</del>!!!</p>
<p>배포 하루 전 시연 영상 찍으시다가 와장창 오류 발견하셨다. &quot;내 파트에서&quot;</p>
<p>진짜 심장이 너무 떨렸는데 이게 최종 발표날이 아니라는 것에 지금은 감사.</p>
<p>대신 시연 영상이 너무 늦게 되어 너무 죄송했다ㅠㅠㅠㅠㅠㅠ.. 다시는 이런 일이 없도록 하게 하기 위해서 쓰는 오늘의 트러블 슈팅</p>
<p>실시간 채팅은 금방 기능을 완료 했는데, 리팩토링한다고 수를 쓰다가 난리남.</p>
<p>트러블 슈팅 1) 리팩토링 중 오판</p>
<pre><code> {
          event: &#39;*&#39;,
          schema: &#39;public&#39;,
          table: &#39;chat&#39;,
          filter: `room_id=eq.${selectedChatRoom?.room_id}`
        },</code></pre><p>채팅 최적화를 위해서 해당 event 부분을 &#39;INSERT&#39;로 바꾸었다.
우리 채팅의 경우 수정 / 삭제 기능이 없어서 썼던 것.
근데, 이렇게 되니 상대가 insert 할 때 추적을 못한다^^ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 내 채팅은 업로드 되는데, 상대가 채팅을 치면 보이지가 않는 것 .... ..... </p>
<p>다시 event를 * 로 바꾸었다.</p>
<p>트러블 슈팅 2) 알럿 .... ㅋㅋㅋㅋㅋㅋ</p>
<p>알럿을 제작해서 쓸 일이 있어서, div로 열심히 꼼지락꼼지락 만졌다 ....</p>
<p>그래서 alert, sweetalert2 대신 컴포넌트로 제작해서 만졌는데, 그 탓에 &quot;어... 얘를 어떻게 호출하지 🧐&quot; 하다가 너무 쉽게 접근해서 망했다.</p>
<p>트루 값으로 변하면 알럿 호출하려고 했는데 ... ... ... </p>
<p>=&gt; 트루 일 때 알럿이 생기다 보니 맨 마지막으로 item 값이 전송되는 거 같다. 
=&gt; 맵 안에서 함수 호출하다 보니 함수 2010191개 됨</p>
<p>왠지~! 그림자 넣어놨는데 그림자가 왕 깊어 보이더라...</p>
<p>dev에서는 잘 됐는데, 이게 배포에서 소중한 모래성 무너졌다.... </p>
<p>=&gt; 알럿 호출을 맵 밖으로 빼내고, item.id 전송 받기로 했다! 해당 아이디는 넘버 값이어서 나는 초기값은 0으로 설정. item은 find해서 id랑 맞는 아이템 값을 쓰기로 함</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[240819 TIL_ 최종 프로젝트]]></title>
            <link>https://velog.io/@miming-00/240819-TIL</link>
            <guid>https://velog.io/@miming-00/240819-TIL</guid>
            <pubDate>Mon, 19 Aug 2024 15:24:56 GMT</pubDate>
            <description><![CDATA[<p>오늘의 기가 막힌 트러블 슈팅</p>
<p>뭔가뭔가 이상한 친구가 오늘 앞길을 막았다.</p>
<p>바로바로</p>
<pre><code>    else if (event.key === &#39;ArrowDown&#39;) {
      event.preventDefault();
      setActiveIndex((prev) =&gt; (prev &gt;= response.length - 1 ? prev : prev + 1));
    }</code></pre><p>키보드 아래로 내려갔을 때 이 친구였다.</p>
<p>문제는 맨 처음 화살표 다운을 누르면 두 번 함수가 실행 되어 두 번 내려간다는 것.</p>
<p>근데 진짜 웃긴 건 해결한 지금까지도 이유가 명확하지 않다...^^ 좀 더 탐구해야 함</p>
<p>의혹 1) 인풋에서 div로 내려갈 때 리랜더링이 발생해서
의혹 2) onChange 랑 onKeyDown 이랑 같이 써서</p>
<hr>
<p>의문1) 영어일 땐 안그럼
의문2) 마우스 커서 위치를 바꾸면 됨</p>
<p>왜인지는 진짜 모르겠는데 일단 마우스 커서 위치를 바꾸면 된다는 것을 착안해서 해결 완료했다.</p>
<p>해결방법</p>
<pre><code>setTimeout(() =&gt; {
        if (inputRef.current) {
          inputRef.current.blur();
          inputRef.current.focus();
        }
      }, 100);</code></pre><p>나는 지금 디바운스 걸어놓고 -&gt; 서버에서 데이터 찾은 다음(response 있을 경우) -&gt; 그것을 화살표 아래 방향으로 내려가는 중이니까, 서버에서 데이터를 담았을 때 이걸 실행시켜줬다.</p>
<p>ref에 담은 포커스를 없애면... 이상하게 된다.... ㅋㅋㅋㅋㅋㅋㅋ 진짜 이걸로 하루종일 괴로워한 듯 하다.</p>
<p>그 외에도 뽀시락뽀시락 알럿 div 제작, 약간의 리팩토링, </p>
<p>헤더 트러블 슈팅</p>
<p>디테일 페이지에서도 헤더의 색을 변하게 하기 위해서</p>
<pre><code>    const targetNavIndex = HeaderNavPaths.findIndex((item) =&gt; {
      if (item === &#39;/&#39;) {
        return pathName === &#39;/&#39;;
      } else {
        return pathName.startsWith(item);
      }
    });

    setCurrentIndex(targetNavIndex);
    setActiveIndex(targetNavIndex);</code></pre><p>셋 엑티브 인덱스를 스타트위드 값을 줘서 먹여놨는데,
문제는 하단</p>
<pre><code>if (index === currentIndex) return;</code></pre><p>인덱스 === currentㅑㅜㅇㄷㅌ 일 떄 return을 시켜놔서 안타깝게도 디테일 페이지에서 전체 보드로 못 넘어가는 사태 발 ... .. 생 .... ...</p>
<p>if 식 안에 또 다른 조건문을 주기로 했다. 이건 쉽게쉽게 라우터 푸쉬로 처리.</p>
]]></description>
        </item>
    </channel>
</rss>