<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>king_kang.log</title>
        <link>https://velog.io/</link>
        <description>꿈을 꾸물꾸물 꾸지 말자!</description>
        <lastBuildDate>Wed, 09 Jul 2025 07:09:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>king_kang.log</title>
            <url>https://velog.velcdn.com/images/king_kang/profile/ddf74c6f-701e-44e5-bd46-4a13c903d901/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. king_kang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/king_kang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[MySQL] 날짜 차이 계산법]]></title>
            <link>https://velog.io/@king_kang/MySQL-%EB%82%A0%EC%A7%9C-%EC%B0%A8%EC%9D%B4-%EA%B3%84%EC%82%B0%EB%B2%95</link>
            <guid>https://velog.io/@king_kang/MySQL-%EB%82%A0%EC%A7%9C-%EC%B0%A8%EC%9D%B4-%EA%B3%84%EC%82%B0%EB%B2%95</guid>
            <pubDate>Wed, 09 Jul 2025 07:09:49 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/king_kang/post/5a89c17d-50b7-4a23-aa1f-547819b618ee/image.png" alt=""></p>
<p>안녕하세용? 으쓱으쓱~</p>
<p>오늘은 &quot;<a href="https://school.programmers.co.kr/learn/courses/30/lessons/59411">[프로그래머스] 오랜 기간 보호한 동물(2)</a>&quot; 이 문제를 풀고 배운 MySQL 함수를 소개드리겠습니다!</p>
<hr>
<p>날짜 차이를 구하는 문제였는데, 일단 제 답안은</p>
<blockquote>
<pre><code>SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2;</code></pre></blockquote>
<pre><code>
이렇게 했는데 흠🤔 다른 함수는 뭐가 있을까..? 찾아보았습니다.

### &lt;span style=&quot;background-color:#ffdce0&quot;&gt;1. DATETIME - DATETIME&lt;/span&gt;
📌 날짜와 시간을 포함한 차이(초 단위) 계산

- 제 답안에 있는 것처럼 따로 함수를 쓰지 않고 바로 DATETIME끼리 차이를 구할 수 있습니다.

### &lt;span style=&quot;background-color:#ffdce0&quot;&gt;2. DATEDIFF(date1, date2)&lt;/span&gt;
📌 두 날짜 간의 &#39;일(day)&#39; 차이 계산

- 시, 분, 초는 무시되고 단순히 며칠 차이인지 구할 때 사용할 수 있습니다.

- 계산 순서: &lt;span style=&quot;background-color:#fff5b1&quot;&gt;**date1 - date2**&lt;/span&gt;</code></pre><p>SELECT DATEDIFF(&#39;2025-07-19 00:00:00&#39;, &#39;2025-07-09 10:00:00&#39;);
-- 결과: 10</p>
<pre><code>
### &lt;span style=&quot;background-color:#ffdce0&quot;&gt;3. TIMESTAMPDIFF(unit, date1, date2)&lt;/span&gt;
📌 단위를 지정해 초, 분, 시, 일 단위까지 정밀하게 계산

- 계산 순서: &lt;span style=&quot;background-color:#fff5b1&quot;&gt;**date2 - date1**&lt;/span&gt; (계산 순서에 유의)

- 단위 종류는 아래와 같습니다!
&gt; - **SECOND** : 초 차이
&gt; - **MINUTE** : 분 차이
&gt; - **HOUR** : 시간 차이
&gt; - **DAY** : 일 차이
&gt; - **WEEK** : 주 차이
&gt; - **MONTH** : 월 차이
&gt; - **QUARTER** : 분기 차이 (3개월 단위)
&gt; - **YEAR** : 연도 차이

- 또한, 단위 기준으로 **남는 건 버림 처리**됩니다.
</code></pre><p>SELECT TIMESTAMPDIFF(HOUR, &#39;2025-07-09 10:00:00&#39;, &#39;2025-07-09 15:59:59&#39;);
-- 결과: 5 (59분 59초는 버림)
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[톡바로] ProtoType]]></title>
            <link>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-ProtoType</link>
            <guid>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-ProtoType</guid>
            <pubDate>Sat, 07 Jun 2025 12:25:49 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/king_kang/post/cd62cfe4-531e-4df2-9991-44c31f0d1e46/image.png" alt=""></p>
<h2 id="오늘-한-일">오늘 한 일</h2>
<blockquote>
<ul>
<li>ProtoType 그리기</li>
</ul>
</blockquote>
<ul>
<li>프로젝트 초기 세팅</li>
<li>AWS EC2 인스턴스 생성</li>
</ul>
<h2 id="내일-할-일">내일 할 일</h2>
<blockquote>
<ul>
<li>배포</li>
</ul>
</blockquote>
<ul>
<li>CI/CD</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] SSAFY 끝...이 아닌 새로운 시작✨]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-SSAFY-%EB%81%9D...%EC%9D%B4-%EC%95%84%EB%8B%8C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-SSAFY-%EB%81%9D...%EC%9D%B4-%EC%95%84%EB%8B%8C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Wed, 04 Jun 2025 02:42:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/king_kang/post/43b30c88-4207-4955-a098-f68d8e66b37c/image.png" alt=""></p>
<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>그동안 개발자 양성의 대표주자였던 SSAFY가 드디어 AI 시대에 맞춰 엄청난 변화를 가져왔습니다.
14기부터 명칭을 기존 &#39;삼성청년SW아카데미&#39;에서 <strong>&#39;삼성청년SW·AI아카데미&#39;</strong>로 변경하고, 교육과정을 전면 개편하였는데요! 과연 새로운 SSAFY는 어떨지 함께 알아볼까요🤔</p>
<hr>
<h2 id="span-stylebackground-colorf1f8ff🔥-14기부터-이것이-달라졌다span"><span style="background-color:#f1f8ff">🔥 14기부터 이것이 달라졌다!</span></h2>
<h3 id="1-교육시간-대폭-확대로-ai-역량-강화">1. 교육시간 대폭 확대로 AI 역량 강화</h3>
<blockquote>
<p>가장 눈에 띄는 변화는 교육시간이에요! 기존 1,600시간에서 <strong>1,725시간</strong>으로 무려 105시간이나 늘어났습니다😮 이 추가된 시간은 모두 새로 신설된 AI 교육에 투자되어, 교육생들이 더 깊이 있는 AI 학습을 할 수 있게 되었어요.</p>
</blockquote>
<h3 id="2-최신-ai-기술을-반영한-신규-교육과정">2. 최신 AI 기술을 반영한 신규 교육과정</h3>
<blockquote>
<p>14기부터는 AI 기초 지식과 파운데이션 모델 학습을 기반으로, 심층 신경망, 이미지 모델, 자연어 처리, LLM/sLLM 등 이론과 실습을 함께 다루며, 다양한 생성형 AI 활용 능력을 강화하는 심화 과정이 새롭게 도입되었습니다.</p>
</blockquote>
<p>특히 주목할 점은 sLLM(small Large Language Model) 구축까지 배울 수 있다는 것! 이론만 배우는 게 아니라 실제로 AI 모델을 직접 만들어보는 실습까지 포함되어 있어요🤖</p>
<h3 id="3-수준별-맞춤-ai-교육-모두를-위한-커리큘럼">3. 수준별 맞춤 AI 교육, 모두를 위한 커리큘럼</h3>
<blockquote>
<p>AI가 처음인 사람부터 어느 정도 기초가 있는 사람까지, <strong>수준별 AI 강의</strong>를 신설해서 누구나 자신의 페이스에 맞춰 학습할 수 있게 되었습니다👍🏻</p>
</blockquote>
<h2 id="span-stylebackground-colorf1f8ff🔎-ai-커리큘럼-더-알아보기span"><span style="background-color:#f1f8ff">🔎 AI 커리큘럼 더 알아보기</span></h2>
<h3 id="ai를-활용한-프로젝트-중심-교육">AI를 활용한 프로젝트 중심 교육</h3>
<blockquote>
<p>단순히 AI 이론만 배우는 게 아니라, 생성형 AI API 활용을 통해 심화 기능을 개발하여 점진적으로 완성하는 미니 프로젝트 프로그램을 통해 실무에서 바로 써먹을 수 있는 실력을 기를 수 있어요💪🏻</p>
</blockquote>
<h3 id="llmsllm-튜닝-실습까지">LLM/sLLM 튜닝 실습까지!</h3>
<blockquote>
<p>LLM/sLLM 등을 자신의 프로젝트 목적에 맞게 튜닝하는 실습 특강도 새롭게 추가되어, 기존 AI 모델을 그대로 쓰는 게 아니라 자신만의 목적에 맞게 커스터마이징하는 방법까지 배울 수 있게 되었습니다.</p>
</blockquote>
<h3 id="업그레이드된-포트폴리오">업그레이드된 포트폴리오</h3>
<blockquote>
<p>자유롭게 본인의 아이디어를 기획 및 명세서를 스스로 작성하고 1·2학기 동안 학습한 다양한 AI 기술들을 활용하여 나만의 포트폴리오 완성할 수 있도록 AI 프로젝트도 추가되었어요.</p>
</blockquote>
<h2 id="span-stylebackground-colorf1f8ff🌟-여전히-유지되는-ssafy만의-장점들span"><span style="background-color:#f1f8ff">🌟 여전히 유지되는 SSAFY만의 장점들</span></h2>
<p>AI 교육이 강화되었다고 해서 기존의 장점들이 사라진 건 아닙니다❌</p>
<blockquote>
<ul>
<li>체계적인 알고리즘 교육으로 탄탄한 SW 기본기</li>
</ul>
</blockquote>
<ul>
<li>6개 개발 트랙(Java, Python, Embedded, Mobile, Robot, Data) 선택 가능</li>
<li>전담 취업 컨설턴트의 맞춤형 취업 지원</li>
<li>현직자 멘토링 상시 운영</li>
<li>기업 연계 프로젝트 및 SSAFY 단독채용 기회</li>
</ul>
<hr>
<p>앞으로 SSAFY 출신 개발자들이 AI 기술을 바탕으로 어떤 혁신적인 서비스와 솔루션을 만들어낼지 정말 기대가 됩니다🚀</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/ed1a0a2d-fe29-4ece-a2a9-29e2c72d17a1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[톡바로] Kafka? WebSocket? 니 누고!!]]></title>
            <link>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-Kafka-WebSocket-%EB%8B%88-%EB%88%84%EA%B3%A0</link>
            <guid>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-Kafka-WebSocket-%EB%8B%88-%EB%88%84%EA%B3%A0</guid>
            <pubDate>Wed, 04 Jun 2025 01:19:29 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/king_kang/post/9dc59489-f932-4ffc-a00e-0e1407f4aca5/image.png" alt=""></p>
<p>오늘은 채팅 서비스에 쓸 기술 공부를 좀 했다!
개발하면서 더 수정해야징</p>
<hr>
<h2 id="span-stylebackground-colorf5f0ffapache-kafkaspan"><span style="background-color:#f5f0ff"><strong>Apache Kafka</strong></span></h2>
<h3 id="kafka란">Kafka란?</h3>
<p>실시간으로 스트리밍 데이터를 수집하고 처리하는 데 최적화된 분산 데이터 스토어</p>
<h3 id="핵심-구성요소">핵심 구성요소</h3>
<pre><code>Producer → Topic(Partition) → Consumer
    ↓             ↓               ↓
메시지 생성      저장/분산      메시지 처리</code></pre><blockquote>
<ul>
<li><strong>Broker</strong>: Kafka 서버들로 구성된 클러스터</li>
</ul>
</blockquote>
<ul>
<li><strong>Topic</strong>: 메시지를 분류하는 카테고리 (채널 개념)</li>
<li><strong>Partition</strong>: 토픽을 나눈 단위로 병렬 처리와 순서 보장</li>
<li><strong>Producer</strong>: 메시지를 발행하는 클라이언트</li>
<li><strong>Consumer</strong>: 메시지를 구독하고 처리하는 애플리케이션</li>
</ul>
<h3 id="주요-장점">주요 장점</h3>
<blockquote>
<ol>
<li><strong>확장성</strong>: 파티션을 통한 수평 확장 가능</li>
<li><strong>지속성</strong>: 디스크 저장과 복제로 데이터 안전성 보장</li>
<li><strong>고성능</strong>: 초당 수백만 개의 메시지 처리</li>
<li><strong>내결함성</strong>: 서버 장애 시에도 데이터 손실 방지</li>
</ol>
</blockquote>
<h3 id="채팅-서비스에서의-역할">채팅 서비스에서의 역할</h3>
<blockquote>
<ul>
<li>채팅 메시지를 안정적으로 전달하고 저장</li>
</ul>
</blockquote>
<ul>
<li>여러 서버 인스턴스 간 메시지 동기화</li>
<li>메시지 히스토리 관리</li>
<li>대규모 사용자 환경에서 메시지 처리량 확보</li>
</ul>
<h2 id="span-stylebackground-colorf5f0ffwebsocketspan"><span style="background-color:#f5f0ff"><strong>WebSocket</strong></span></h2>
<h3 id="websocket이란">WebSocket이란?</h3>
<p>양방향 소통이 가능한 서버와 클라이언트 사이에 데이터를 주고받을 수 있는 프로토콜</p>
<h3 id="websocket-작동-원리">WebSocket 작동 원리</h3>
<blockquote>
<p><strong>연결 과정</strong></p>
</blockquote>
<ul>
<li>핸드셰이크: 클라이언트가 &#39;Upgrade&#39; 헤더가 포함된 HTTP 요청을 서버에 전송</li>
<li>프로토콜 업그레이드: 서버가 WebSocket 프로토콜로 연결 업그레이드 확인 응답</li>
<li>지속 연결: 전이중 연결이 설정되어 클라이언트와 서버 모두 자유롭게 메시지 교환</li>
</ul>
<blockquote>
<p><strong>메시지 전송</strong></p>
</blockquote>
<ul>
<li>메시지는 헤더와 페이로드로 구성된 프레임 단위로 전송</li>
<li>텍스트나 바이너리 형태로 직렬화 가능한 모든 데이터 전송 가능</li>
</ul>
<h3 id="주요-장점-1">주요 장점</h3>
<blockquote>
<ul>
<li>실시간성: 지속적이고 낮은 지연 시간의 양방향 통신</li>
</ul>
</blockquote>
<ul>
<li>효율성: 단일 연결로 서버 리소스 최적화</li>
<li>서버 푸시: 클라이언트 요청 없이 서버에서 콘텐츠 전송 가능</li>
</ul>
<h2 id="span-stylebackground-colorf5f0ffstompjsspan"><span style="background-color:#f5f0ff"><strong>STOMP.js</strong></span></h2>
<h3 id="stomp란">STOMP란?</h3>
<p>pub-sub 이라는 발행-구독 형태를 사용해 쉽게 메세지를 주고받을 수 있는 프로토콜</p>
<h3 id="stomp-사용-이유">STOMP 사용 이유</h3>
<blockquote>
<p><strong>순수 WebSocket의 한계</strong></p>
</blockquote>
<p>WebSocket 프로토콜은 텍스트와 바이너리 두 가지 메시지 타입만 정의하지만, 메시지 내용은 정의하지 않음
즉, 개발자가 직접 메시지 형식과 라우팅을 구현해야 함</p>
<blockquote>
<p><strong>STOMP의 해결책</strong></p>
</blockquote>
<p>CONNECT, SUBSCRIBE, UNSUBSCRIBE, ACK, SEND 등의 프레임 타입을 제공하여 통신 관리를 단순화하고, 메시지 확인응답 같은 고급 기능을 구현할 수 있음</p>
<h2 id="span-stylebackground-colorf5f0ff세-기술의-연동-구조-정리span"><span style="background-color:#f5f0ff"><strong>세 기술의 연동 구조 정리</strong></span></h2>
<blockquote>
<ol>
<li>클라이언트 → STOMP.js로 WebSocket 연결</li>
<li><strong>WebSocket</strong> → 실시간 양방향 통신 제공</li>
<li>서버 → 받은 메시지를 Kafka로 전송</li>
<li><strong>Kafka</strong> → 메시지를 다른 서버 인스턴스들에게 배포</li>
<li>서버들 → Kafka에서 메시지를 받아 WebSocket으로 클라이언트들에게 전달</li>
</ol>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[톡바로] 설계]]></title>
            <link>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-%EC%84%A4%EA%B3%84</link>
            <guid>https://velog.io/@king_kang/%ED%86%A1%EB%B0%94%EB%A1%9C-%EC%84%A4%EA%B3%84</guid>
            <pubDate>Tue, 03 Jun 2025 08:25:13 GMT</pubDate>
            <description><![CDATA[<p>싸피 끝난 나는 이제 개백수.
그래서 개인 사이드 프로젝트를 시작하려고 한다.
주제는 <strong>AI 기반 답장 자동화 1:1 채팅 서비스</strong></p>
<p>기획 배경은요.. 그냥 채팅 해보고 싶었음.
내 꿈을 펼치리라.</p>
<p>가장 큰 산인 약 <del>10일동안 <strong>매일 회고 쓰기</strong></del> 실천하려고 합니다.
예쁘게 봐주세요😍</p>
<hr>
<h2 id="오늘-한-일">오늘 한 일</h2>
<blockquote>
<ul>
<li>기능 명세서 작성</li>
</ul>
</blockquote>
<ul>
<li>ERD 작성</li>
<li>API 명세서 작성</li>
</ul>
<h2 id="배운점">배운점</h2>
<p>ERD 작성하며 늘 의문이었던 것. <strong>PK 필드명: id vs 테이블명_id 선택 기준</strong>
구글링을 해봐도 각자 선호하는 방식이 달랐다...
나도 내가 선호하는 거 할래요~</p>
<blockquote>
<h3 id="내가-id-방식을-선택한-3가지-이유">내가 id 방식을 선택한 3가지 이유</h3>
</blockquote>
<ol>
<li><strong>ORM 친화적 설계</strong>
현대 ORM 프레임워크들은 id를 기본 PK 컬럼으로 가정한다. JPA, Hibernate, ActiveRecord 등 대부분의 ORM에서 별도 설정 없이 id 컬럼을 자동으로 인식하여 매핑한다.</li>
<li><strong>코드 일관성과 간결성</strong>
엔티티 클래스에서 getId() 메서드 하나로 모든 객체의 식별자에 접근할 수 있어 코드가 일관되고 간결해진다. 테이블명을 접두어로 붙이면 불필요한 중복이 발생한다.</li>
<li><strong>JOIN 시 모호함 해결</strong>
SQL에서 테이블 별칭만으로도 어떤 테이블의 id인지 명확하게 구분할 수 있어, 접두어로 인한 컬럼명 중복의 필요성이 줄어든다.</li>
</ol>
<p>최대한 접두어를 피하며 데이터베이스 필드명을 작성했다!</p>
<h2 id="내일-할-일">내일 할 일</h2>
<blockquote>
<ul>
<li>Prototype 그리기</li>
</ul>
</blockquote>
<ul>
<li>개발 시작 전 초기 세팅</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] 삼성 싸피를 선택한 이유, 그리고 지금까지의 이야기📢]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-%EC%82%BC%EC%84%B1-%EC%8B%B8%ED%94%BC%EB%A5%BC-%EC%84%A0%ED%83%9D%ED%95%9C-%EC%9D%B4%EC%9C%A0-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%A7%80%EA%B8%88%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%9D%B4%EC%95%BC%EA%B8%B0</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-%EC%82%BC%EC%84%B1-%EC%8B%B8%ED%94%BC%EB%A5%BC-%EC%84%A0%ED%83%9D%ED%95%9C-%EC%9D%B4%EC%9C%A0-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%A7%80%EA%B8%88%EA%B9%8C%EC%A7%80%EC%9D%98-%EC%9D%B4%EC%95%BC%EA%B8%B0</guid>
            <pubDate>Thu, 08 May 2025 19:28:22 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>이번 글에서는 제가 SSAFY를 지원하게 된 계기와, 현재까지 <strong>어떤 성장을 이뤘는지</strong>에 대해 이야기해보려고 합니다.</p>
<p>혹시 싸피 14기를 준비하고 계시거나, &#39;내가 잘할 수 있을까?&#39; 고민 중이시라면 제 이야기가 조금이나마 도움이 되면 좋겠습니다🙏🏻</p>
<hr>
<h3 id="span-stylebackground-colorf1f8ff왜-ssafy였을까span"><span style="background-color:#f1f8ff">왜 SSAFY였을까?</span></h3>
<blockquote>
<p>저는 수학, 통계학을 전공했습니다. 전공 수업을 듣다 보면 자연스럽게 프로그래밍을 접하게 되는데, 처음에는 단순히 과제를 위해 코드를 짜는 수준이었어요. 그러다 보니 정보처리기사 같은 자격증도 공부해보게 됐고, 어느 순간 진로에 대해 진지하게 생각하게 되었습니다.</p>
</blockquote>
<p>그 과정에서 알게 된 게 바로 싸피였습니다. 제 주변 선배들 중에 광주 SSAFY를 졸업한 분들이 꽤 많았고, 대부분 <strong>“실무를 제대로 경험해보고 싶다면 싸피가 정말 좋다”</strong>고 추천해줬어요. 이론만 배우는 데서 그치는 게 아니라, 프로젝트를 통해 직접 만들어보고 협업하는 과정이 있다는 점이 끌려 SSAFY 지원을 결심하게 되었습니다✨</p>
<h3 id="span-stylebackground-colorf1f8ffssafy-준비-과정span"><span style="background-color:#f1f8ff">SSAFY 준비 과정</span></h3>
<blockquote>
<p>저는 지원서를 최대한 <strong>솔직하고 진정성 있게</strong> 쓰고자 했습니다. 처음부터 완벽하진 않았지만, 제가 왜 SSAFY에 입과하고 싶은지, 어떤 열정을 가지고 있는지를 최대한 담았습니다.</p>
</blockquote>
<p>지원서를 작성한 후에는 SSAFY를 졸업한 선배들에게 여러 번 피드백을 받으며 수정했고, 그 과정에서 저만의 색깔도 조금씩 잡혀갔던 것 같습니다.</p>
<blockquote>
</blockquote>
<p>또한 면접은 <strong>면접 스터디</strong>를 통해 철저히 준비했습니다. 스터디원들과 서로 예상 질문 리스트를 뽑고 <strong>모의 면접</strong>도 수차례 진행했는데, 이를 통해 긴장도 줄이고 대답을 더욱 논리적으로 구성할 수 있었어요. 특히 저희 스터디에는 전 기수에 아쉽게 떨어졌던 분이 계셨는데, 그분의 생생한 정보와 조언 덕분에 정말 큰 도움을 받을 수 있었습니다🙌</p>
<h3 id="span-stylebackground-colorf1f8ff지금까지-얼마나-성장했을까span"><span style="background-color:#f1f8ff">지금까지 얼마나 성장했을까?</span></h3>
<blockquote>
<p>현재 저는 SSAFY 12기로서 1학기부터 지금까지 총 3개의 프로젝트를 완료했습니다. 그 과정에서 단순한 <strong>코딩 실력뿐 아니라, 협업, 기획</strong> 등 다방면에서 많은 성장을 이뤄냈다고 생각합니다🧑‍💻</p>
</blockquote>
<p>특히 감사하게도 지금까지 진행했던 모든 프로젝트에서 수상을 할 수 있었고, 현재는 <strong>기업 연계 프로젝트</strong>를 진행하며 또 한 번의 도약을 준비하고 있습니다.</p>
<blockquote>
</blockquote>
<p>물론 아직도 부족한 부분은 많습니다. 예전에는 전공자들이 사용하는 용어나 개념이 외계어처럼 느껴졌는데, 이제는 어느 정도 기술적인 대화가 가능해졌다는 점에서, 과거의 저와 비교했을 때 분명한 발전이 있었다고 느낍니다😊</p>
<h3 id="span-stylebackground-colorf1f8ff앞으로의-목표span"><span style="background-color:#f1f8ff">앞으로의 목표</span></h3>
<blockquote>
<p>이번 기업 연계 프로젝트에서도 좋은 결과를 낼 수 있도록 최선을 다할 계획입니다. 수상을 목표로 하고는 있지만, 그보다 더 중요한 것은 지금까지 배운 것들을 활용해서 실제 기업이 원하는 사항들을 구현해내는 것입니다🌱</p>
</blockquote>
<hr>
<p>혹시 싸피 준비 중인 분들이 있다면, 꼭 도전해보세요! 분명 쉽진 않겠지만, 성장의 크기도 그만큼 클 거라고 확신합니다💪🏻</p>
<p>저는 기업 연계 프로젝트가 마무리된 후, 그 후기와 배운 점들을 가지고 다시 찾아오도록 하겠습니다. </p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/ed1a0a2d-fe29-4ece-a2a9-29e2c72d17a1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] SSAFY 12기가 말하는 싸피 찐혜택🤫]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-SSAFY-12%EA%B8%B0%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-%EC%8B%B8%ED%94%BC-%EC%B0%90%ED%98%9C%ED%83%9D</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-SSAFY-12%EA%B8%B0%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-%EC%8B%B8%ED%94%BC-%EC%B0%90%ED%98%9C%ED%83%9D</guid>
            <pubDate>Sat, 29 Mar 2025 02:13:58 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>어느덧 SSAFY 12기로 입과한 지 반년이 넘었고, 이제 2학기 중반에 접어들었는데요. 오늘은 입과 전과 후의 달라진 점과 SSAFY만의 특별한 혜택을 소개해 드리려고 합니다. 함께 확인해 보시죠! 🚀</p>
<hr>
<p>먼저, <strong>1학기 후기</strong>가 궁금하신 분들은 아래 블로그 글을 참고해 주세요.
▶ <a href="https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%8B%B8%ED%94%BC%EC%85%9C%EC%9D%B4-%EB%A7%90%ED%95%98%EB%8A%94-1%ED%95%99%EA%B8%B0-%ED%9B%84%EA%B8%B0-%EC%9D%B4%EB%A0%87%EA%B2%8C%EB%82%98-%EC%84%B1%EC%9E%A5%ED%96%88%EB%8B%A4%EA%B3%A0">[알쓸SSA잡] 비전공자 싸피셜이 말하는 1학기 후기📢 (이렇게나 성장했다고..😮⁉️)</a></p>
<p>현재 특화 프로젝트를 진행하면서, 더욱 성장한 점들을 실감하고 있습니다.</p>
<blockquote>
<p>✅ 처음에는 어렵기만 했던 개발 흐름을 이제는 이해할 수 있게 되었어요!
✅ 공통 프로젝트 과정에서 외계어처럼 느껴졌던 기술들도 이제는 조금씩 익숙해지고 있습니다.</p>
</blockquote>
<p>이렇게 빠르게 성장할 수 있었던 건 <span style="background-color:#fff5b1"><strong>SSAFY만의 특별한 혜택</strong></span> 덕분인데요! 궁금하시죠? 여러분만을 위해 소개해 드립니다. (소곤소곤 🤫)</p>
<hr>
<h3 id="1️⃣-2학기의-컨설턴트님과-실습-코치님들">1️⃣ 2학기의 컨설턴트님과 실습 코치님들!</h3>
<p>1학기에는 강사님들의 강의를 중심으로 학습했다면, 2학기부터는 컨설턴트님과 실습 코치님들의 조언을 받으며 스스로 해결하는 능력을 길러야 합니다.</p>
<blockquote>
<p>🧑‍💻 <strong>컨설턴트님</strong>은 현직 개발자로, 실무에서 직접 체득한 노하우와 조언을 들을 수 있어요. 또, 매일 아침 각 캠퍼스 컨설턴트님들의 라이브 방송을 통해 최신 기술 트렌드나 개발 관련 유용한 내용을 접할 수 있습니다.</p>
</blockquote>
<p>👨‍🏫 <strong>실습 코치님</strong>은 SSAFY 선배 기수 출신으로, 우리가 겪고 있는 문제들을 직접 경험해 본 분들이에요. 덕분에 깊이 공감해 주고, 실용적인 해결 방법을 제시해 주셔서 정말 많은 도움이 됩니다.</p>
<blockquote>
</blockquote>
<p>💡 그리고 SSAFY의 모든 활동에 적극적으로 참여하고 열정을 보여준다면, 여러분도 훗날 실습 코치가 될 수 있습니다! 후배들을 이끌어 보는 것도 의미 있는 경험이 되지 않을까요?</p>
<h3 id="2️⃣-취업의-길라잡이-취업-컨설턴트님들">2️⃣ 취업의 길라잡이, 취업 컨설턴트님들!</h3>
<p>2학기부터는 개발뿐만 아니라 취업 준비도 본격적으로 시작해야 하는데요. SSAFY에는 자기소개서 작성부터 면접 준비까지 도와주시는 취업 컨설턴트님이 계십니다.</p>
<blockquote>
<p>📌 프로젝트 일정이 바빠서 자기소개서나 포트폴리오 정리가 어려울 때가 많은데, SSAFY에서는 매달 취업 특강을 통해 이를 해결할 수 있어요.</p>
</blockquote>
<p>📌 강사님을 초청하여 취업의 각 단계별 강의와 실습을 진행해 주시기 때문에, 취업 경험이 없는 사람도 감을 잡을 수 있고, 경험이 있는 사람도 한 단계 성장할 수 있습니다.</p>
<h3 id="3️⃣-매달-지원금과-광주-ssafy의-맛있는-점심">3️⃣ 매달 지원금과 광주 SSAFY의 맛있는 점심!</h3>
<p>여담이지만, SSAFY에서는 매달 교육 지원금이 지급된다는 사실😮 덕분에 경제적 부담 없이 개발과 취업 준비에 온전히 집중할 수 있어 든든하답니다💪🏻</p>
<p>그리고 싸피 광주 캠퍼스에서는 점심 메뉴를 5가지 중에서 선택할 수 있는데요. 음식이 맛있기로 유명해서 든든히 먹고 나면 열심히 개발할 수 있어요!!</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker 넌 누구니..? 🐋]]></title>
            <link>https://velog.io/@king_kang/Docker</link>
            <guid>https://velog.io/@king_kang/Docker</guid>
            <pubDate>Tue, 18 Mar 2025 00:34:38 GMT</pubDate>
            <description><![CDATA[<h2 id="span-stylebackground-color-f1f8ffdocker도커란span"><span style="background-color: #f1f8ff">Docker(도커)란?</span></h2>
<ul>
<li>컨테이너 기반 가상화 플랫폼</li>
<li>응용 프로그램과 그 종속성을 격리된 환경인 컨테이너로 패키징하여 실행하는 기술</li>
</ul>
<h2 id="span-stylebackground-color-f1f8ff그래서-왜-쓰는데span"><span style="background-color: #f1f8ff">그래서 왜 쓰는데?</span></h2>
<p>응용 프로그램을 서로 다른 환경에서도 일관되게 실행할 수 있기 때문!
즉, 개발 환경과 운영 환경 사이의 차이로 인한 문제를 줄일 수 있다😮</p>
<h2 id="span-stylebackground-color-f1f8ff핵심-개념span"><span style="background-color: #f1f8ff">핵심 개념</span></h2>
<p><img src="https://velog.velcdn.com/images/king_kang/post/3f8ffa58-8d0a-478f-807a-22078a35b678/image.png" alt=""></p>
<p><strong>1. 컨테이너 (Container)</strong></p>
<blockquote>
<ul>
<li>애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키징 하는 표준 소프트웨어 단위</li>
</ul>
</blockquote>
<p><strong>2. 이미지 (Image)</strong></p>
<blockquote>
<ul>
<li>코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어 패키지</li>
</ul>
</blockquote>
<ul>
<li>이미지는 읽기 전용이며 변경 불가 (변경하려면 새로운 이미지를 생성해야 함)</li>
<li>Docker Hub와 같은 레지스트리에 저장되며, 이미지를 기반으로 컨테이너를 생성</li>
</ul>
<p><strong>3. 도커 파일 (Dockerfile)</strong></p>
<blockquote>
<ul>
<li>도커 이미지를 생성하기 위한 텍스트 파일
ex) Dockerfile이 요리 레시피라면, 도커 이미지는 완성된 요리🥘</li>
</ul>
</blockquote>
<p><strong>4. 도커 레지스트리 (Docker Registry)</strong></p>
<blockquote>
<ul>
<li>도커 이미지를 저장하고 공유하는 중앙화된 저장소
ex) Docker Hub</li>
</ul>
</blockquote>
<p><strong>5. 도커 컴포즈 (Docker Compose)</strong></p>
<blockquote>
<ul>
<li>여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구</li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알쓸SSA잡] 새로운 시작📣 SSAFY 13기 교육생은 현재...📸]]></title>
            <link>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91-SSAFY-13%EA%B8%B0-%EA%B5%90%EC%9C%A1%EC%83%9D%EC%9D%80-%ED%98%84%EC%9E%AC</link>
            <guid>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91-SSAFY-13%EA%B8%B0-%EA%B5%90%EC%9C%A1%EC%83%9D%EC%9D%80-%ED%98%84%EC%9E%AC</guid>
            <pubDate>Sat, 01 Feb 2025 13:44:01 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>최근 SSAFY 13기가 입과하며 많은 교육생들이 새로운 도전을 시작했는데요😊 현재 스타트캠프를 마치고 본격적인 정규 과정에 들어갔다고 합니다! 이번 기사에서는 광주캠퍼스 13기 추지웅 교육생님의 이야기를 들어보고자 합니다. 그럼 다같이 가보시죠🚀</p>
<hr>
<h2 id="span-stylebackground-colorf1f8ff1-간단한-자기소개-부탁드립니다span"><span style="background-color:#f1f8ff">1. 간단한 자기소개 부탁드립니다!</span></h2>
<blockquote>
<p>안녕하세요! 싸피 <strong>광주캠퍼스 13기 전공 자바 트랙 추지웅</strong>이라고 합니다.
전공은 통계학이라 비전공자로 지원했지만, 분반 테스트 후 자바반으로 입과하게 되었습니다! </p>
</blockquote>
<h2 id="span-stylebackground-colorf1f8ff2-싸피에-지원하게-된-계기와-준비-과정은-어떠셨나요span"><span style="background-color:#f1f8ff">2. 싸피에 지원하게 된 계기와 준비 과정은 어떠셨나요?</span></h2>
<blockquote>
<p>대학 수업에서 처음 코딩을 접하고 개발에 관심이 생겼지만 주위에 개발자를 희망하는 사람이 많이 없어서 어떻게 준비해야 할지 막막했습니다. 그러다가 학과 선배들 중 개발에 관심있던 선배들이 싸피에 입과한 것이 기억나서 싸피에 대해 알아보았고, 저에게도 너무 좋은 기회가 될 것 같아서 지원하게 되었습니다. </p>
</blockquote>
<p><span style="background-color:#fff5b1"><strong>에세이</strong></span>는 대학 수업에서 취업 컨설팅 강의해 주시는 강사님께 연락드려서 코칭도 받고, 몇 번 첨삭도 받았습니다. <span style="background-color:#fff5b1"><strong>시험</strong></span>은 비전공자로 지원했지만 평소 알고리즘 공부를 해왔기 때문에 싸피 CT 문제집을 조금씩 풀며 준비했습니다. 실제 시험 때도 CT 파트는 크게 어렵지 않았지만 수리/추리 영역이 시간이 조금 모자랐던 기억이 있습니다.</p>
<blockquote>
</blockquote>
<p><span style="background-color:#fff5b1"><strong>면접</strong></span> 같은 경우 따로 스터디는 하지 않았고 chatGPT나 싸피 면접 후기들을 찾아서 면접 질문을 정리하고, 답변을 작성했습니다. 이후 답변의 방향성이 적절한지, 설득력이 있는지 강사님께 조언을 받았습니다. PT 면접을 대비해서는 <strong>IT 기사를 매일 몇 개씩 읽어보며 준비</strong>했습니다. 실제 면접에서 인성면접은 무난했던 것 같지만 PT 면접에서 많이 부족했던 것 같습니다. 기사를 읽는 것에서 그치는 게 아니라 <strong>아이디어를 도출하고, 근거를 제시하는 단계까지 연습</strong>했다면 더 만족스러운 면접이 되었을 것 같습니다.</p>
<h2 id="span-stylebackground-colorf1f8ff3-ot-및-스타트캠프-활동은-어떠셨나요span"><span style="background-color:#f1f8ff">3. OT 및 스타트캠프 활동은 어떠셨나요?</span></h2>
<blockquote>
<p>처음 며칠은 생활 패턴을 맞추느라 고생을 좀 했지만 즐겁게 싸피에 적응할 수 있는 시간이었습니다. 또 열정이 넘치고, 이미 실력이 뛰어난 분들이 많아서 더 열심히 해야겠다고 다짐하는 시간이 되었습니다.</p>
</blockquote>
<p>아이디어톤과 로봇퀘스트가 가장 기억에 남습니다. <span style="background-color:#ffdce0"><strong>아이디어톤</strong></span>은 처음으로 조별로 진행한 활동입니다. 조원들과 치열하게 회의했던 기억이 많이 남습니다. 각자 아이디어를 제시하고, 서로 아이디어에 대해 질문하고 평가했는데 의견이 계속 갈려서 결정을 내리는 데 어려웠습니다. 하지만 최종 발표까지 다들 맡은 역할을 열심히 해줘서 나름 만족스러운 결과물이 나왔던 것 같습니다. <strong>협업 과정을 간략하게나마 경험</strong>했던 것 같아 기억에 남습니다.</p>
<blockquote>
</blockquote>
<p><span style="background-color:#ffdce0"><strong>로봇퀘스트</strong></span>는 스타트캠프 활동 중에서 가장 재미있었습니다. 자바 반으로 처음 옮겨서 어색해하고 있었는데 바로 로봇을 조종하라고.. 하셔서 반 동기들과 뚝딱뚝딱 만들다 보니 자연스럽게 어색함이 덜어진 것 같습니다. </p>
<h2 id="span-stylebackground-colorf1f8ff4-싸피를-통해-이루고-싶은-목표나-기대하는-점이-있나요span"><span style="background-color:#f1f8ff">4. 싸피를 통해 이루고 싶은 목표나 기대하는 점이 있나요?</span></h2>
<blockquote>
<p>단기적으로는 <span style="background-color:#f7ddbe"><strong>알고리즘 B형을 취득을 목표</strong></span>로 하고 있습니다. 이왕 알고리즘을 공부하는 거 높은 목표를 잡고 공부해보자 하고 매일 알고리즘 문제를 풀고 있습니다. 또 아직 구체적으로 진로를 결정하지 못해서, 여러 기술 스택도 경험해보며 적성과 흥미에 맞게 하고 싶은 일을 찾고 싶습니다.</p>
</blockquote>
<p>가장 기대하는 점은 <span style="background-color:#f7ddbe"><strong>프로젝트 경험</strong></span>입니다. 과정에서 실력도 키우고, 마음이 맞는 인연들을 만나서 계속 관계를 이어나가고 싶습니다.</p>
<h2 id="span-stylebackground-colorf1f8ff5-앞으로의-다짐-한-마디-부탁드려요span"><span style="background-color:#f1f8ff">5. 앞으로의 다짐 한 마디 부탁드려요!</span></h2>
<blockquote>
<p>아직 입과한지 얼마 되지 않아서 열정과 욕심이 가득한데, 이 마음 잊지 않고 취업할 때까지 열심히 하고 싶습니다. 싸피 13기 화이팅!!!
<img src="https://velog.velcdn.com/images/king_kang/post/2fa3becc-45fb-4977-86bd-2fa970b8615e/image.jpg" width="80%"></p>
</blockquote>
<hr>
<p>지금까지 SSAFY 13기로서 새로운 도전을 시작한 추지웅 교육생님의 인터뷰였습니다! 알고리즘 실력 향상과 다양한 기술 스택을 경험하면서 진로를 탐색하고, 협업을 통해 실력을 키워 나가겠다는 다짐이 정말 멋지네요💪 앞으로 어떤 개발자로 성장할지 기대가 됩니다.</p>
<h3 id="모든-ssafy-13기-교육생-여러분-각자의-목표를-꼭-이룰-수-있길-응원하겠습니다🪄💫">모든 SSAFY 13기 교육생 여러분! 각자의 목표를 꼭 이룰 수 있길 응원하겠습니다🪄💫</h3>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] 성공적인 협업을 위한 첫 걸음👣 - Jira 사용법 알아보기🪄 ]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-%EC%84%B1%EA%B3%B5%EC%A0%81%EC%9D%B8-%ED%98%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%B2%AB-%EA%B1%B8%EC%9D%8C-Jira-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-%EC%84%B1%EA%B3%B5%EC%A0%81%EC%9D%B8-%ED%98%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%B2%AB-%EA%B1%B8%EC%9D%8C-Jira-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Mon, 20 Jan 2025 15:09:22 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>2학기가 시작되고 협업을 위한 툴인 Jira를 처음 접하게 되었는데요! 오늘은 효과적인 Jira 사용법에 대해 알아보겠습니다 ( •̀ ω •́ )✧</p>
<hr>
<h2 id="🤔-span-stylebackground-colorf1f8ffjira란span">🤔 <span style="background-color:#f1f8ff">Jira란?</span></h2>
<blockquote>
<p><strong>Jira</strong>는 짧은 주기의 개발 단위를 반복하여 프로젝트를 완성시켜 나가는 <span style="background-color:#f7ddbe"><strong>애자일 방식</strong></span>의 프로젝트 관리 협업 툴입니다!</p>
<blockquote>
<h3 id="애자일-방법론이란">애자일 방법론이란?</h3>
</blockquote>
<p>일정한 주기를 가지고 계속 검토해 나가며 필요할 때마다 요구사항을 더하고 수정하며 살을 붙여 개발해 나가는 프로세스 모델 방식</p>
</blockquote>
<ul>
<li><span style="background-color:#f7ddbe">계획 → 설계 → 개발 → 테스트 → 검토</span> 순서로 반복적으로 진행</li>
<li>계획이나 기능에 대한 수정 및 변경에 유연</li>
<li>즉각적인 피드백 가능</li>
<li>점진적으로 테스트 가능</li>
</ul>
<h2 id="🚀-span-stylebackground-colorf1f8ffjira-시작하기span">🚀 <span style="background-color:#f1f8ff">Jira 시작하기</span></h2>
<p>Jira 접속 후 오른쪽 상단에 있는 &#39;만들기&#39; 버튼을 클릭하여 프로젝트를 생성합니다.
<img src="https://velog.velcdn.com/images/king_kang/post/b507e394-a71b-4888-a724-f4e2313acf56/image.png" alt=""></p>
<h2 id="😉-span-stylebackground-colorf1f8ff이슈-이해하기span">😉 <span style="background-color:#f1f8ff">이슈 이해하기</span></h2>
<p>만들기를 클릭하면 다음과 같은 네 가지 유형을 발견할 수 있습니다. 각각 어떤 기능인지 알아볼까요?
<img src="https://velog.velcdn.com/images/king_kang/post/9aca576b-0e8a-4603-9b0d-d0cc30074b53/image.png" alt=""></p>
<h3 id="1-에픽-epic">1. 에픽 (Epic)</h3>
<p>여러 스프린트 또는 장기간(보통 1개월 이상)에 걸쳐 완료해야 하는 규모가 큰 단위의 작업입니다.</p>
<h3 id="2-스토리-story">2. 스토리 (Story)</h3>
<p>사용자(유저)를 기준으로 개발해야 할 것을 담고 있는 이야기입니다.
상위 단계인 에픽을 구성하는 요소로서 작업이 어떻게 진행되어야 하는지 생각하도록 도움을 주는 기능입니다.</p>
<blockquote>
<p>사용자 스토리는 다음과 같이 작성할 수 있습니다.</p>
</blockquote>
<p><span style="color:blue"><strong>{페르소나}</strong></span>로서 나는 <span style="color:blue"><strong>{하고 싶다}</strong></span>, <span style="color:blue"><strong>{그래서 무엇이 필요하다}</strong></span>
ex) 강싸피는 업무를 효율적으로 관리하기 위해 할 일 목록 기능이 필요해요.</p>
<h3 id="3-작업-task">3. 작업 (Task)</h3>
<p>작업(Task)은 말 그대로 &#39;할 일&#39;이라고 할 수 있습니다.
Epic과 Story를 통해 우리 팀이 해결해야 할 문제가 무엇인지 정했다면, 거기에 맞춰 할 일을 정의해 나가면 됩니다.</p>
<h3 id="4-버그-bug">4. 버그 (Bug)</h3>
<p>버그는 개발 중이나 개발 후에 생기는 버그를 관리하는 티켓입니다.
버그는 개발을 진행하고 배포 전 QA 작업 단계에서 발견하는 버그를 기록하고, 우선순위에 따라 해결하는 방식을 따릅니다.</p>
<h2 id="🪄-span-stylebackground-colorf1f8ff스프린트-시작하기span">🪄 <span style="background-color:#f1f8ff">스프린트 시작하기</span></h2>
<p>위에서 설명한 이슈(에픽, 스토리, 작업, 버그)를 생성하면 백로그에 저장됩니다.
백로그에 저장된 이슈들을 모아서 &#39;스프린트 시작&#39;을 클릭하면 스프린트가 시작됩니다.
<img src="https://velog.velcdn.com/images/king_kang/post/a7f0efdb-1b4e-4f49-9e0e-6c6755dcd566/image.png" alt=""></p>
<p>스프린트를 시작하면 활성 스프린트에서 <code>할 일 / 진행 중 / 완료</code> 세 가지 상태를 확인할 수 있습니다.
<img src="https://velog.velcdn.com/images/king_kang/post/38aec6f5-3fee-4893-a5fe-9a605b0be78d/image.png" alt=""></p>
<hr>
<p>지금까지 Jira의 기본적인 사용법에 대해 알아보았는데요. 스프린트 기능을 활용하면 팀원들과 함께 일정한 주기로 개발을 진행하고 검토할 수 있어, 프로젝트의 진행 상황을 효과적으로 관리할 수 있습니다!</p>
<p>Jira를 활용해 팀 프로젝트를 성공적으로 이끌어 나가시길 항상 응원하겠습니다💪✨</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Java 21: Virtual Thread]]></title>
            <link>https://velog.io/@king_kang/Java-Java-21-Virtual-Threads</link>
            <guid>https://velog.io/@king_kang/Java-Java-21-Virtual-Threads</guid>
            <pubDate>Sun, 19 Jan 2025 16:17:37 GMT</pubDate>
            <description><![CDATA[<p>안녕..하시렵니까? jdk 21이 출시된 지 어연 1년째...</p>
<p>이번 프로젝트에서 jdk 21을 쓰게 되어 과연 어떤 점이 달라졌는지 알아보고자 합니다.
고고🎢</p>
<hr>
<h2 id="span-stylebackground-colorf7ddbevirtual-thread-도입-배경span"><span style="background-color:#f7ddbe">Virtual Thread 도입 배경</span></h2>
<blockquote>
<p>기존 Java의 스레드(Platform Thread)는 OS의 네이티브 스레드와 1:1로 매핑되었습니다.
이는 메모리 사용량이 많고, 특히 I/O 작업이 많은 애플리케이션에서는 비효율적이라고 합니다.
<strong>Virtual Thread</strong>는 이러한 문제를 해결하기 위해 도입되었습니다💡</p>
</blockquote>
<h2 id="span-stylebackground-colorf7ddbevirtual-thread란span"><span style="background-color:#f7ddbe">Virtual Thread란?</span></h2>
<blockquote>
<p>Virtual Thread는 JDK 21에서 정식으로 도입된 <strong>경량 스레드</strong>입니다.
기존 스레드(Platform Thread)와 달리 OS 스레드와 1:1로 매핑되지 않아 <strong>메모리 사용량이 매우 적고</strong>(약 1KB), 특히 I/O 작업이 많은 애플리케이션에서 큰 성능 향상을 기대할 수 있습니다.</p>
</blockquote>
<h2 id="span-stylebackground-colorf7ddbevirtual-thread의-구조span"><span style="background-color:#f7ddbe">Virtual Thread의 구조</span></h2>
<p><img src="https://velog.velcdn.com/images/king_kang/post/aa558c37-4ea9-4794-9a2a-f405233a11c8/image.png" alt=""></p>
<blockquote>
<p>핵심은 Virtual Thread가 <strong>Carrier Thread</strong> (Platform Thread)에 마운트되어 실행된다는 점입니다.
만약 <strong>blocking 연산</strong>이 발생하면, 해당 Virtual Thread는 자동으로 <strong>언마운트</strong>되고 다른 Virtual Thread가 그 자리를 채워 실행됩니다. 이런 방식으로 적은 수의 Platform Thread로도 많은 동시 작업을 처리할 수 있게 됩니다.</p>
</blockquote>
<h2 id="span-stylebackground-colorf7ddbe사용법span"><span style="background-color:#f7ddbe">사용법</span></h2>
<pre><code class="language-java">// Virtual Thread 방법 1
Thread.startVirtualThread(() =&gt; {
    System.out.println(&quot;Hello Virtual Thread&quot;);
});

// Virtual Thread 방법 2
Runnable runnable = () =&gt; System.out.println(&quot;Hi Virtual Thread&quot;);
Thread virtualThread1 = Thread.ofVirtual().start(runnable);

// Virtual Thread 이름 지정
Thread.Builder builder = Thread.ofVirtual().name(&quot;JVM-Thread&quot;);
Thread virtualThread2 = builder.start(runnable);

// 스레드가 Virtual Thread인지 확인하여 출력
System.out.println(&quot;Thread is Virtual? &quot; + virtualThread2.isVirtual());

// ExecutorService 사용
try (final ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i &lt; 3; i++) {
        executorService.submit(runnable);
    }
}</code></pre>
<h2 id="span-stylebackground-colorf7ddbespring-boot-적용법-32-이상span"><span style="background-color:#f7ddbe">Spring Boot 적용법 (3.2 이상)</span></h2>
<p>Spring Boot 3.2부터는 간단하게 Virtual Thread를 적용할 수 있습니다!</p>
<pre><code class="language-java"># application.yml
spring:
    threads:
        virtual:
            enabled: true</code></pre>
<h2 id="span-stylebackground-colorf7ddbe적합한-사용처span"><span style="background-color:#f7ddbe">적합한 사용처</span></h2>
<blockquote>
<p><strong>1. I/O Blocking이 발생하는 경우</strong>
    - 데이터베이스 조회, API 호출 등 I/O가 많은 작업에 매우 효과적</p>
</blockquote>
<p><strong>2. CPU Intensive 작업에는 적합하지 않음</strong>
    - 복잡한 계산이나 이미지 처리 같은 CPU를 많이 사용하는 작업은 기존 Thread Pool을 사용하는 것이 적합</p>
<blockquote>
</blockquote>
<p><strong>3. Spring MVC 기반 Web API 제공 시 편리하게 사용 가능</strong>
    - Thread per Request 모델을 적은 비용으로 구현 가능</p>
<hr>
<h3 id="reference">[Reference]</h3>
<p><a href="https://www.youtube.com/watch?v=vQP6Rs-ywlQ">JDK 21의 신기능 Virtual Thread 알아보기</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 배열과 리스트과 비교 👀]]></title>
            <link>https://velog.io/@king_kang/Java-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EA%B3%BC-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@king_kang/Java-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EA%B3%BC-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Wed, 08 Jan 2025 16:37:11 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 오늘은 Java에서의 <span style="background-color:#f7ddbe"><strong>배열</strong></span>(Array)과 <span style="background-color:#f7ddbe"><strong>리스트</strong></span>(List)에 대해 알아보겠습니다.</p>
<p>파이썬에서는 리스트 하나로 대부분의 데이터 관리가 가능하지만, 자바에서는 두 가지를 구분하여 제공하는데요! 이 글에서는 두 자료구조의 특징과 실제 코드를 통해 어떤 상황에서 어떤 자료구조를 사용하는 것이 좋을지 살펴보겠습니다🤓</p>
<hr>
<h2 id="1️⃣-span-stylebackground-colorfff5b1배열arrayspan">1️⃣ <span style="background-color:#fff5b1">배열(Array)</span></h2>
<blockquote>
<p><strong>특징</strong></p>
</blockquote>
<ul>
<li>고정된 크기</li>
<li>연속된 메모리 공간 사용</li>
<li>인덱스를 통한 빠른 접근 가능</li>
<li>기본형과 참조형 모두 저장 가능</li>
</ul>
<blockquote>
<p><strong>사용 예시</strong></p>
</blockquote>
<pre><code class="language-java">// 배열 선언과 초기화
int[] scores = new int[5];        // 크기 5로 고정
int[] nums = {1, 2, 3};           // 초기값으로 생성
String[] fruits = new String[3];  // 참조형도 가능
&gt;
// 값 접근과 변경
scores[0] = 100;                    // 인덱스로 접근
System.out.println(scores.length);  // 길이는 .length</code></pre>
<h2 id="2️⃣-span-stylebackground-colorfff5b1리스트listspan">2️⃣ <span style="background-color:#fff5b1">리스트(List)</span></h2>
<blockquote>
<p><strong>특징</strong></p>
</blockquote>
<ul>
<li>동적으로 크기가 변함</li>
<li>다양한 메소드 제공</li>
<li>참조형만 저장 가능</li>
</ul>
<blockquote>
<h3 id="2-1-arraylist">2-1. ArrayList</h3>
</blockquote>
<pre><code class="language-java">// 선언과 초기화
List&lt;Integer&gt; numbers = new ArrayList&lt;&gt;();    // 인터페이스 사용
ArrayList&lt;String&gt; names = new ArrayList&lt;&gt;();  // 구현체 직접 사용
&gt;
// 데이터 조작
numbers.add(10);    // 추가
numbers.remove(0);  // 삭제
numbers.get(0);     // 접근
System.out.println(numbers.size());  // 크기는 .size()</code></pre>
<blockquote>
<h3 id="2-2-linkedlist">2-2. LinkedList</h3>
</blockquote>
<pre><code class="language-java">LinkedList&lt;String&gt; playlist = new LinkedList&lt;&gt;();
&gt;
playlist.addFirst(&quot;노래1&quot;);  // 맨 앞 추가
playlist.addLast(&quot;노래2&quot;);   // 맨 뒤 추가
playlist.add(1, &quot;노래3&quot;);    // 중간 삽입</code></pre>
<h2 id="3️⃣-span-stylebackground-colorfff5b1주요-활용-사례span">3️⃣ <span style="background-color:#fff5b1">주요 활용 사례</span></h2>
<blockquote>
<h3 id="배열-활용">배열 활용</h3>
</blockquote>
<ol>
<li><strong>크기가 고정된 경우</strong><ul>
<li>학생 성적 처리 (과목 수가 정해진 경우)</li>
<li>요일별 데이터 저장 (7일로 고정)<blockquote>
</blockquote>
</li>
</ul>
</li>
<li><strong>빠른 조회가 필요한 경우</strong><ul>
<li>인덱스로 직접 접근하는 경우가 많을 때</li>
<li>순차적인 데이터 처리가 필요할 때<blockquote>
</blockquote>
<h3 id="리스트-활용">리스트 활용</h3>
</li>
</ul>
</li>
<li><strong>ArrayList</strong><ul>
<li>데이터의 크기가 가변적인 경우</li>
<li>주로 맨 끝에 추가/삭제하는 경우</li>
<li>조회가 많은 경우<blockquote>
</blockquote>
</li>
</ul>
</li>
<li><strong>LinkedList</strong><ul>
<li>중간에 삽입/삭제가 빈번한 경우</li>
<li>메모리를 효율적으로 사용해야 할 때</li>
<li>데이터의 순서가 자주 바뀌는 경우</li>
</ul>
</li>
</ol>
<hr>
<p>배열과 리스트는 각각의 장단점이 있으므로, 여러 문제를 풀어보며 각각의 상황에 맞는 자료구조를 선택해야겠어요💡</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring Security] Spring Boot + Spring Security를 이용한 회원가입 구현하기]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-Spring-Boot-Spring-Security%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EA%B5%AC%ED%98%84%ED%95%98</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-Spring-Boot-Spring-Security%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EA%B5%AC%ED%98%84%ED%95%98</guid>
            <pubDate>Sat, 28 Dec 2024 12:46:26 GMT</pubDate>
            <description><![CDATA[<p>이번 포스팅에서는 <strong>Spring Boot</strong>와 <strong>Spring Security</strong>를 함께 사용하여 구현한 회원가입 프로세스에 대해 자세히 알아보겠습니다 🚀</p>
<hr>
<h2 id="span-stylebackground-colordcffe4전체-구조span"><span style="background-color:#dcffe4">전체 구조</span></h2>
<blockquote>
<p><strong>회원가입 구현은 다음과 같은 계층 구조로 이루어져 있습니다:</strong></p>
</blockquote>
<ul>
<li>Controller (웹 요청 처리)</li>
<li>Service (비즈니스 로직)</li>
<li>Repository (데이터 접근)</li>
<li>Entity (데이터 모델)</li>
</ul>
<h2 id="span-stylebackground-colordcffe4entity-구조span"><span style="background-color:#dcffe4">Entity 구조</span></h2>
<pre><code class="language-java">@Entity
@Table(name = &quot;tbl_user&quot;)
@Data
public class User {
    @Id  // Primary Key 지정
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // Auto Increment
    @Column(name = &quot;user_pk&quot;)
    private long userPk;

    @Column(name = &quot;user_id&quot;, nullable = false, unique = true)
    private String userId;

    @Column(name = &quot;user_pw&quot;, nullable = false)
    private String userPw;

    @Column(name = &quot;user_email&quot;, nullable = false, unique = true)
    private String userEmail;

    @Column(name = &quot;user_nickname&quot;, nullable = false, unique = true)
    private String userNickname;

    @Column(name = &quot;user_role&quot;)
    private String userRole = &quot;ROLE_USER&quot;;  // Spring Security의 기본 권한
}</code></pre>
<blockquote>
<ul>
<li><code>@Entity</code> : JPA 엔티티임을 나타냄</li>
</ul>
</blockquote>
<ul>
<li><code>@Table</code> : 실제 DB 테이블 이름 지정</li>
<li><code>@Data</code> : getter/setter/toString 등 자동 생성</li>
<li><code>nullable = false</code>로 필수 입력값 지정</li>
<li><code>unique = true</code>로 중복 방지</li>
</ul>
<h2 id="span-stylebackground-colordcffe4usercreaterequest-dtospan"><span style="background-color:#dcffe4">UserCreateRequest DTO</span></h2>
<p>클라이언트로부터 회원가입 데이터를 받는 DTO</p>
<pre><code class="language-java">@Data
public class UserCreateRequest {
    private String userId;
    private String userPw;
    private String userEmail;
    private String userNickname;
}</code></pre>
<h2 id="span-stylebackground-colordcffe4userrepositoryspan"><span style="background-color:#dcffe4">UserRepository</span></h2>
<pre><code class="language-java">@Repository
public interface UserRepository extends JpaRepository&lt;User, Long&gt; {
    boolean existsByUserId(String userId);
    boolean existsByUserEmail(String userEmail);
    boolean existsByUserNickname(String userNickname);
    Optional&lt;User&gt; findByUserId(String userId);
    Optional&lt;User&gt; findByUserEmail(String userEmail);
}</code></pre>
<blockquote>
<ul>
<li>JpaRepository 상속으로 기본 CRUD 메서드 제공</li>
</ul>
</blockquote>
<ul>
<li><code>Optional</code> : 사용자 조회 시 결과가 null일 수 있는 경우 사용</li>
</ul>
<h2 id="span-stylebackground-colordcffe4controller-구현span"><span style="background-color:#dcffe4">Controller 구현</span></h2>
<pre><code class="language-java">@RestController
public class UserController {
    private final UserService userService;

    @PostMapping(&quot;/auth/join&quot;)  // /auth/** 경로로 Spring Security 인증 없이 접근 가능
    public ResponseEntity&lt;?&gt; join(@RequestBody UserCreateRequest request) {
        userService.createUser(request);
        return ResponseEntity.status(HttpStatus.CREATED).body(&quot;회원 가입이 완료되었습니다.&quot;);
    }
}</code></pre>
<blockquote>
<ul>
<li><code>/auth/join</code> 엔드포인트로 <strong>POST</strong> 요청 처리</li>
</ul>
</blockquote>
<ul>
<li><code>@RequestBody</code>로 JSON 데이터를 DTO로 변환</li>
<li>성공 시 <strong>201 Created</strong> 상태코드 반환</li>
<li>생성자 주입으로 UserService 의존성 주입</li>
</ul>
<h2 id="span-stylebackground-colordcffe4service-구현span"><span style="background-color:#dcffe4">Service 구현</span></h2>
<pre><code class="language-java">@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
    private final UserRepository userRepository;
    private final BCryptPasswordEncoder passwordEncoder;  // Spring Security의 암호화 도구
    private final ModelMapper modelMapper;

    @Override
    @Transactional
    public void createUser(UserCreateRequest request) {
        // 중복 검사
        checkDuplicateUser(request);

        // DTO -&gt; Entity 변환
        User user = modelMapper.map(request, User.class);

        // Spring Security의 BCrypt로 비밀번호 암호화
        user.setUserPw(passwordEncoder.encode(request.getUserPw()));
        // Spring Security의 기본 사용자 권한 설정
        user.setUserRole(&quot;ROLE_USER&quot;);

        userRepository.save(user);
    }

     private void checkDuplicateUser(UserCreateRequest request) {
        List&lt;String&gt; errors = new ArrayList&lt;&gt;();
        if (userRepository.existsByUserId(request.getUserId())) {
            errors.add(&quot;이미 사용 중인 아이디입니다.&quot;);
        }
        // ... 이메일, 닉네임 중복 검사

        if (!errors.isEmpty()) {
            throw new DuplicateUserException(String.join(&quot;, &quot;, errors));
        }
    }
}</code></pre>
<blockquote>
<ul>
<li><code>@Transactional</code>로 트랜잭션 처리</li>
</ul>
</blockquote>
<ul>
<li><code>@RequiredArgsConstructor</code>로 final 필드 생성자 주입</li>
<li><strong>ModelMapper</strong>로 DTO -&gt; Entity 변환 자동화</li>
<li><strong>BCryptPasswordEncoder</strong>로 비밀번호 암호화</li>
<li>중복 검사 로직을 별도 메서드로 분리</li>
<li>여러 중복 오류를 한 번에 반환하도록 구현</li>
</ul>
<h2 id="span-stylebackground-colordcffe4spring-security-관련-주요-특징span"><span style="background-color:#dcffe4">Spring Security 관련 주요 특징</span></h2>
<blockquote>
<p><strong>비밀번호 암호화</strong></p>
</blockquote>
<ul>
<li><strong>BCryptPasswordEncoder</strong>를 사용하여 안전한 비밀번호 해싱</li>
<li>암호화된 비밀번호는 복호화가 불가능<blockquote>
</blockquote>
</li>
<li><em>권한 관리*</em></li>
<li><strong>ROLE_USER</strong>와 같은 Spring Security의 권한 체계 사용</li>
<li>추후 @PreAuthorize 등을 통한 메소드 레벨 보안 적용 가능<blockquote>
</blockquote>
</li>
<li><em>보안 설정*</em></li>
<li><strong>/auth/**</strong> 경로는 인증 없이 접근 가능</li>
<li>나머지 경로는 인증 필요</li>
</ul>
<h2 id="span-stylebackground-colordcffe4개선이-필요한-부분span"><span style="background-color:#dcffe4">개선이 필요한 부분</span></h2>
<blockquote>
<ul>
<li>입력값 검증 (Bean Validation)</li>
</ul>
</blockquote>
<ul>
<li>예외 처리 개선</li>
<li>OAuth2 소셜 로그인을 위한 필드 추가</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알쓸SSA잡] 🪖배틀싸피- 알고리즘 실력과 협동심을 동시에 😮❗]]></title>
            <link>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EB%B0%B0%ED%8B%80%EC%8B%B8%ED%94%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%EB%A0%A5%EA%B3%BC-%ED%98%91%EB%8F%99%EC%8B%AC%EC%9D%84-%EB%8F%99%EC%8B%9C%EC%97%90</link>
            <guid>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EB%B0%B0%ED%8B%80%EC%8B%B8%ED%94%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%EB%A0%A5%EA%B3%BC-%ED%98%91%EB%8F%99%EC%8B%AC%EC%9D%84-%EB%8F%99%EC%8B%9C%EC%97%90</guid>
            <pubDate>Sat, 28 Dec 2024 11:35:50 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>SSAFY하면 떠오르는 대표적인 게임, 일타싸피! 12기부터는 새로운 게임이 추가되었다는 사실, 알고 계신가요?😊 예비 싸피인들을 위해 제가 직접 체험해본 <span style="background-color:#dcffe4"><strong>배틀 싸피(Battle SSAFY)</strong></span>를 소개해드리려고 합니다!</p>
<hr>
<h2 id="🎮-배틀-싸피란">🎮 배틀 싸피란?</h2>
<p><img src="https://velog.velcdn.com/images/king_kang/post/32dfaed4-f63a-4c8f-ac3d-f8bf6449f57a/image.png" alt=""></p>
<p>배틀 싸피는 단순한 게임이 아닌, 알고리즘적 사고를 게임으로 구현한 프로그램입니다. 시각적으로 이해하고 해결하는 게이미피케이션 과정을 통해, 복잡한 알고리즘도 쉽게 접근할 수 있도록 설계되었어요.</p>
<blockquote>
<p>게임을 하듯이 손으로 직접 제어하는 것이 아니라 미리 구현한 하나의 코드를 실행하여 시시각각 주어지는 상황을 <span style="background-color:#fff5b1"><strong>탱크가 스스로 파악하고 어떻게 동작할 것인지를 결정</strong></span>할 수 있도록 하는 것이 매우 중요합니다🎯</p>
</blockquote>
<h2 id="💡-스테이지별로-만나는-다양한-도전과제">💡 스테이지별로 만나는 다양한 도전과제</h2>
<p>게임은 크게 <strong>5개의 스테이지</strong>로 구성되어 있어요. 각 스테이지에서는 제한 시간 내에 적의 포탑까지 최단 경로로 이동하는 것이 기본 미션입니다. 스테이지가 올라갈수록 난이도도 함께 상승하며, 추가 미션도 주어진답니다.</p>
<blockquote>
<p>특히 재미있었던 건 <span style="background-color:#fff5b1"><strong>포탄 수집 시스템</strong></span>이었어요! 맵에 있는 장애물들을 피해 가면서 포탄을 수집하고, 이를 활용해 적의 기지를 공격해야 합니다. 단순히 &#39;공격&#39;만 하는 게 아니라, &#39;어떻게 하면 효율적으로 포탄을 모으고 공격할 수 있을까?&#39; 하는 전략적 사고가 필요해요🤔</p>
</blockquote>
<h2 id="⚔️-팀-배틀-모드로-즐기는-전략-게임">⚔️ 팀 배틀 모드로 즐기는 전략 게임</h2>
<p><img src="https://velog.velcdn.com/images/king_kang/post/ecea9170-98ae-47ce-ad6c-331b5f7ae101/image.png" alt=""></p>
<p>팀 배틀 모드는 <strong>3인 1조</strong>로 진행됩니다. 최초 포탑의 체력은 50, 그리고 최초 탱크의 체력은 30으로 시작하게 되며, 한 번의 공격을 받을 때마다 포탑 및 탱크의 체력이 10만큼 감소하게 됩니다.</p>
<blockquote>
<h3 id="🏆-승리를-위한-핵심-조건">🏆 승리를 위한 핵심 조건</h3>
</blockquote>
<ul>
<li>상대 포탑의 체력이 0이 되면 즉시 승리</li>
<li>두 대 이상의 탱크가 파괴되어도 승리</li>
<li>경기 종료 시점에 상대팀에 더 많은 데미지를 입힌 팀이 승리</li>
<li>만약 경기 종료 시 총 데미지가 같다면? 후공권을 가진 팀이 승리</li>
</ul>
<h2 id="🔫-배틀-싸피-후기">🔫 배틀 싸피 후기</h2>
<p>처음 배틀 싸피를 준비할 때만 해도 단순한 평가로만 생각하였는데, 막상 해보니 색다른 경험이었어요. 팀원들과 함께 코드를 짜고, 그걸 실제로 게임에서 테스트해 보면서 생각보다 더 재미있게 참여할 수 있었어요!</p>
<p>반 친구들과의 대결도 또 다른 재미가 있었답니다. 각자 작성한 알고리즘으로 탱크를 움직이고, 전략을 실행하면서 평소와는 다른 방식으로 알고리즘을 이해할 수 있었죠. 비록 전국 대항전까지는 참여하지 못했지만, 반 친구들과 함께한 시간들이 좋은 추억으로 남았습니다. 😊</p>
<p>무엇보다 팀원들과 함께 게임처럼 알고리즘을 풀어가는 과정에서 개발에 지친 마음도 리프레시하고 새로운 아이디어도 얻을 수 있었어요!✨</p>
<p>이렇게 게임으로 만나는 알고리즘은 저에게 특별한 경험이었고, 앞으로도 이런 즐거운 도전이 계속되었으면 좋겠습니다👊🏻👍🏻</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring Security] JWT 인증을 활용한 API 보안 설정]]></title>
            <link>https://velog.io/@king_kang/Spring-Security-JWT-%EC%9D%B8%EC%A6%9D%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-API-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@king_kang/Spring-Security-JWT-%EC%9D%B8%EC%A6%9D%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-API-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Thu, 12 Dec 2024 11:52:12 GMT</pubDate>
            <description><![CDATA[<h3 id="✅-프로젝트-환경">✅ 프로젝트 환경</h3>
<ul>
<li>Spring Boot 3.x</li>
<li>Java 17 이상</li>
<li>JJWT 0.12.3</li>
<li>Gradle</li>
</ul>
<h3 id="📦-필요한-의존성">📦 필요한 의존성</h3>
<pre><code class="language-java">implementation &#39;org.springframework.boot:spring-boot-starter-security&#39;
implementation &#39;io.jsonwebtoken:jjwt-api:0.12.3&#39;
implementation &#39;io.jsonwebtoken:jjwt-impl:0.12.3&#39;
implementation &#39;io.jsonwebtoken:jjwt-jackson:0.12.3&#39;
testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;</code></pre>
<blockquote>
<h4 id="각-라이브러리의-역할은">각 라이브러리의 역할은?</h4>
</blockquote>
<ul>
<li><code>spring-boot-starter-security</code> : Spring Security를 사용하여 인증, 권한 부여, 세션 관리 등 전반적인 보안 기능을 담당</li>
<li><code>jjwt-api</code> : JWT 토큰을 생성하고 검증하는 데 필요한 인터페이스와 기본 클래스들을 제공</li>
<li><code>jjwt-impl</code> : JWT 명세에 따른 실제 구현체를 제공</li>
<li><code>jjwt-jackson</code> : JWT 토큰의 클레임을 JSON으로 직렬화/역직렬화하는 기능을 제공</li>
<li><code>spring-boot-starter-test</code> : 테스트를 위한 의존성</li>
</ul>
<h3 id="🔒-security-설정-클래스">🔒 Security 설정 클래스</h3>
<pre><code class="language-java">
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    // 비밀번호 암호화를 위한 Bean 등록
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                // CSRF 보호 비활성화 (JWT 사용 시 필요)
                .csrf().disable()

                // 기본 로그인 폼과 HTTP Basic 인증 비활성화
                .formLogin().disable()
                .httpBasic().disable()

                // URL 접근 권한 설정
                .authorizeHttpRequests(auth -&gt; auth
                        .requestMatchers(
                                &quot;/&quot;,
                                &quot;/auth/**&quot;
                        ).permitAll()  // 이 경로들은 모두 접근 가능
                        .requestMatchers(&quot;/admin&quot;).hasRole(&quot;ADMIN&quot;) // ADMIN 권한 필요
                        .anyRequest().authenticated() // 그 외 요청은 인증 필요
                )

                // 세션을 Stateless로 설정 (JWT 사용)
                .sessionManagement(session -&gt; 
                        session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                );

        return http.build();
    }
}</code></pre>
<blockquote>
<h4 id="configuration과-enablewebsecurity">@Configuration과 @EnableWebSecurity</h4>
<p><code>@Configuration</code> : Spring의 설정 클래스임을 나타내는 어노테이션</p>
</blockquote>
<p><code>@EnableWebSecurity</code></p>
<ul>
<li>Spring Security를 활성화하는 어노테이션</li>
<li>커스터마이징된 보안 설정을 적용하기 위해 반드시 포함</li>
</ul>
<blockquote>
<h4 id="bcryptpasswordencoder-bean">BCryptPasswordEncoder Bean</h4>
</blockquote>
<ul>
<li>사용자 비밀번호를 암호화하기 위한 객체를 생성</li>
<li>비밀번호를 해시 방식으로 암호화하며, 복호화가 불가능하기 때문에 보안성이 높음</li>
</ul>
<blockquote>
<h4 id="securityfilterchain-메서드">securityFilterChain 메서드</h4>
</blockquote>
<pre><code class="language-java">http
    .csrf().disable()
    .formLogin().disable()
    .httpBasic().disable()
    .authorizeHttpRequests(...)
    .sessionManagement(...);</code></pre>
<blockquote>
<blockquote>
<h4 id="csrf-보호-비활성화">CSRF 보호 비활성화</h4>
<p>CSRF는 주로 세션 기반 인증에서 문제가 되는데, JWT를 사용하면 세션을 사용하지 않기 때문에 비활성화해도 문제가 없음</p>
</blockquote>
<blockquote>
<h4 id="기본-로그인-폼-및-http-basic-인증-비활성화">기본 로그인 폼 및 HTTP Basic 인증 비활성화</h4>
</blockquote>
</blockquote>
<ul>
<li>JWT 기반 인증을 사용할 경우, 클라이언트가 직접 토큰을 전송하므로 별도의 로그인 폼이 필요하지 않음</li>
<li>HTTP Basic 인증은 JWT를 사용할 경우 필요하지 않으므로 비활성화<blockquote>
<blockquote>
<h4 id="세션-관리-설정">세션 관리 설정</h4>
<p><code>SessionCreationPolicy.STATELESS</code></p>
</blockquote>
</blockquote>
</li>
<li>세션을 생성하지 않도록 설정</li>
<li>모든 요청에서 JWT 토큰을 통해 인증을 수행하며, 서버는 세션 정보를 유지하지 않음</li>
</ul>
<blockquote>
<h4 id="반환값-httpbuild">반환값 http.build()</h4>
</blockquote>
<ul>
<li>Spring Security가 정의한 설정을 기반으로 SecurityFilterChain 객체를 생성해 반환</li>
<li>이 객체는 Spring Security 필터 체인에 등록되어 HTTP 요청을 처리</li>
</ul>
<hr>
<p>추가적으로 공부하며 계속 업데이트 해나갈 예정...✍🏻</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알쓸SSA잡] 비전공자 싸피셜이 말하는 1학기 후기📢 (이렇게나 성장했다고..😮⁉️)]]></title>
            <link>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%8B%B8%ED%94%BC%EC%85%9C%EC%9D%B4-%EB%A7%90%ED%95%98%EB%8A%94-1%ED%95%99%EA%B8%B0-%ED%9B%84%EA%B8%B0-%EC%9D%B4%EB%A0%87%EA%B2%8C%EB%82%98-%EC%84%B1%EC%9E%A5%ED%96%88%EB%8B%A4%EA%B3%A0</link>
            <guid>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%8B%B8%ED%94%BC%EC%85%9C%EC%9D%B4-%EB%A7%90%ED%95%98%EB%8A%94-1%ED%95%99%EA%B8%B0-%ED%9B%84%EA%B8%B0-%EC%9D%B4%EB%A0%87%EA%B2%8C%EB%82%98-%EC%84%B1%EC%9E%A5%ED%96%88%EB%8B%A4%EA%B3%A0</guid>
            <pubDate>Fri, 06 Dec 2024 02:23:38 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>어느덧 싸피에서의 5개월이 지나고 1학기가 마무리 되었습니다. 이 시점에서!! <span style="background-color:#fff5b1"><strong>비전공자로 입과했던 제가 어떻게 성장했는지</strong></span> 여러분들께 공유해 드리고자 합니다. 저의 5개월 압축zip 한 번 다함께 보러 가보실까요~~!! 🚀</p>
<hr>
<h2 id="보초-코딩-시작합니다👩🏻💻">보초 코딩 시작합니다👩🏻‍💻</h2>
<p>저는 학부 시절에 파이썬을 조금 접해본 정도였습니다. 기초적인 문법은 알고 있었지만 제대로 활용하기는 어려웠죠..😵‍💫 하지만 스타트캠프 이후 시작된 본격적인 1학기 과정에서 체계적으로 파이썬을 배우게 되었습니다!!
<img src="https://velog.velcdn.com/images/king_kang/post/183da899-93fd-4604-9eac-c3d0a987bdfe/image.png" width="600"></p>
<p>비전공자반은 약 2주 동안 파이썬 기초부터 차근차근 배우게 됩니다✍🏻 강사님의 상세한 설명과 매일의 실습을 통해 애매하게 알고 있던 개념들을 제대로 정립할 수 있었어요. 특히 객체지향 프로그래밍이나 데이터 구조 같은 개념들은 처음에는 굉장히 어려웠지만, 매일 실습하고 복습하면서 점점 익숙해졌습니다.</p>
<p>파이썬 기초 과정에서는 단순히 문법을 배우는 것을 넘어서 실제로 문제를 해결하는 방법을 배웠다는 점이 가장 큰 수확이었어요🌾 문제를 어떻게 분석하고, 어떤 방식으로 접근해야 하는지, 그리고 어떻게 코드로 구현할 수 있는지 배우면서 프로그래밍의 기초를 다질 수 있었어요!</p>
<h2 id="알고리즘-주간-코테-마스터가-되는-그-날까지️">알고리즘 주간 (코테 마스터가 되는 그 날까지‼️)</h2>
<p>1학기 알고리즘 주간에는 알고리즘 이론부터 실습까지 정말 체계적으로 배우게 되는데요!?
<img src="https://velog.velcdn.com/images/king_kang/post/6a7df826-0c6b-437a-84b3-ddddf7d1daa3/image.png" width="600"></p>
<p>특히 알고리즘 주간에 배운 다양한 문제 해결 전략들이 큰 도움이 되었어요. 완전탐색, 그리디, DFS/BFS 등 각각의 알고리즘이 어떤 상황에서 효과적인지 배우면서, 문제 해결 능력이 많이 향상되었어요. </p>
<p>실제로 입과 전에는 손도 못 대고 이틀간을 쩔쩔맸던 문제를 알고리즘 주간에 배우고 이제는 비슷한 유형은 자유자재로 응용하며 풀 수 있답니다✌🏻 입과 해서 처음으로 성장했다고 느낀 경험이었어요 ㅎㅎ</p>
<h2 id="html--css--django--javascript--vue">HTML &amp; CSS + Django + JavaScript + Vue</h2>
<p>이제 본격적으로 웹 개발을 배우게 됩니다. 처음에는 HTML과 CSS로 정적인 웹 페이지를 만드는 것부터 시작하게 됩니다.
<img src="https://velog.velcdn.com/images/king_kang/post/6957b8c1-068c-4023-b2d6-0ec0036cd17c/image.png" width="600"></p>
<p>Django를 통해 백엔드 개발을 배우면서는 서버가 어떻게 동작하는지, 데이터베이스는 어떻게 다루는지 등 웹 서비스의 뒷단에 대해 자세히 알게 되었어요. 특히 MTV(Model-Template-View) 패턴을 이해하고 실제로 적용해보면서, 웹 서비스의 구조에 대해 깊이 있게 이해할 수 있었어요.</p>
<p>JavaScript와 Vue를 배우면서는 컴포넌트 기반 개발, 상태 관리, 라우팅 등 모던 웹 개발의 핵심 개념들을 배울 수 있답니다⭐</p>
<h2 id="중간-중간-스터디👨👩👧👦">중간 중간 스터디👨‍👩‍👧‍👦</h2>
<p>일어나.. 스터디 해야지...
<img src="https://velog.velcdn.com/images/king_kang/post/a8239ca1-2dc2-4d54-a6e7-013b22d46ea3/image.png" width="600"></p>
<p>저는 일과 외에 알고리즘과 자바 스터디를 병행했습니다. 알고리즘은 스터디원들과 함께 공부하면서 서로의 코드를 리뷰하고, 더 나은 풀이 방법을 고민하는 시간을 가졌습니다. 그리고 매일 한 문제씩 풀면서 꾸준한 학습 습관을 기르고자 하였습니다!</p>
<p>자바 스터디는 2학기를 대비해서 시작하게 되었어요. 비전공반 친구들과 함께 힘을 모아 열심히 자바 공부를 하고 있답니다👊🏻</p>
<p>싸피에서는 이렇게 본인에게 부족한 부분, 예를 들어 CS 지식, 알고리즘, 자바 등 동기들끼리 스터디를 꾸려 함께 학습하며 성장해 나갑니다☺️</p>
<h2 id="1학기-관통-프로젝트">1학기 관통 프로젝트</h2>
<p>1학기의 꽃 관통 프로젝트입니다!! 관통 프로젝트는 1학기 동안 배운 내용을 토대로 영화 혹은 금융 서비스를 개발하는 것입니다.
<img src="https://velog.velcdn.com/images/king_kang/post/c84915d6-e382-4ba5-b248-3daf4f861bc2/image.png" width="600"></p>
<p>팀원과 함께 프로젝트 기획부터 구현까지 모든 과정을 스스로 해내면서 <strong>&quot;내가 정말 개발자가 될 수 있구나&quot;</strong>라는 느낌을 받았습니다.</p>
<p>그리고 프로젝트를 진행하면서 가장 크게 배운 점은 협업의 중요성이었요. Git을 통한 버전 관리, 기능 구현을 위한 역할 분담, 문제 상황에서의 의사소통 등 실제 개발 현장에서 필요한 많은 것들을 경험하게 되었습니다🤭</p>
<p>그리고 결과는
.
.
.</p>
<h1 id="🏆최우수상🏆">🏆최우수상🏆</h1>
<p><img src="https://velog.velcdn.com/images/king_kang/post/f02a6047-cd94-4640-a997-131e88575756/image.gif" alt="">
최우수상이라는 결과와 함께 1학기를 완벽하게 마무리할 수 있었습니다👍🏻👍🏻</p>
<h2 id="현재-저는">현재 저는...</h2>
<p>현재는 2학기를 위해 Java Spring과 React를 미리 공부하고 있습니다. </p>
<p>특히 2학기에는 세 번의 프로젝트가 기다리고 있는데요. 공통 프로젝트와 특화 프로젝트, 그리고 자율 프로젝트를 통해 더 큰 성장을 이루게 될 제 모습이 매우 기대가 됩니다🤩 1학기에서 배운 것들을 토대로, 더 멋지고 완성도 높은 서비스를 만들어보고 싶어요!!!</p>
<p>싸피 2학기도 저와 함께 달려보실까요~? 그럼 20000😎</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] 자주 쓰는 "GIT COMMAND" 정리👨‍👩‍👧‍👦 (협업편) ]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-GIT-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-GIT-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 06 Dec 2024 01:23:26 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>지난 시간에는 Git의 기본 명령어들을 알아보았는데요. 오늘은 <span style="background-color:#fff5b1"><strong>팀 프로젝트에서 꼭 필요한 Git 협업 명령어</strong></span>들을 소개해 드리려고 합니다. 성공적인 팀 프로젝트의 열쇠가 될 이 명령어들, 함께 알아볼까요? 💪</p>
<hr>
<h2 id="span-stylebackground-colorf5f0ff1-브랜치-관리-branch-operationsspan"><span style="background-color:#f5f0ff">1. 브랜치 관리: Branch Operations</span></h2>
<p>팀 프로젝트에서는 여러 개발자가 동시에 작업하기 때문에 브랜치 관리가 매우 중요합니다.</p>
<blockquote>
<h3 id="브랜치-생성-및-이동">브랜치 생성 및 이동</h3>
<p>새로운 기능 개발이나 버그 수정을 위한 브랜치를 만들고 관리합니다.</p>
</blockquote>
<pre><code class="language-bash"># 브랜치 목록 확인
git branch
&gt;
# 새 브랜치 생성 (현재 브랜치 기준)
git branch feature/login
&gt;
# 새 브랜치 생성 및 이동
git checkout -b feature/login  # 기존 방식
git switch -c feature/login    # 새 방식
&gt;
# 다른 브랜치로 이동
git checkout main  # 기존 방식
git switch main    # 새 방식</code></pre>
<h3 id="브랜치-삭제">브랜치 삭제</h3>
<p>작업이 완료된 브랜치는 깔끔하게 정리합니다.</p>
<pre><code class="language-bash"># 로컬 브랜치 삭제
git branch -d feature/login
&gt;
# 원격 브랜치 삭제
git push origin --delete feature/login</code></pre>
<h2 id="span-stylebackground-colorf5f0ff2-변경사항-추적과-저장-staging--committingspan"><span style="background-color:#f5f0ff">2. 변경사항 추적과 저장: Staging &amp; Committing</span></h2>
<p>Git의 가장 큰 특징은 변경사항을 단계적으로 추적하고 커밋할 수 있다는 점입니다. Git 2.23부터는 <code>restore</code> 명령어가 워킹 디렉토리 변경사항 관리를 위해 새롭게 도입되었습니다😮</p>
<blockquote>
<h3 id="변경사항-관리">변경사항 관리</h3>
</blockquote>
<pre><code class="language-bash"># 현재 상태 확인 (-s: 짧은 형식)
git status -s
&gt;
# 변경사항 자세히 보기
git diff           # 워킹 디렉토리와 스테이징 영역 비교
git diff --staged  # 스테이징 영역과 마지막 커밋 비교
&gt;
# 파일 스테이징 (. 은 모든 변경사항)
git add .
&gt;
# 스테이징된 파일 되돌리기
git reset HEAD &lt;file&gt;        # 기존 방식
git restore --staged &lt;file&gt;  # 새 방식
&gt;
# 변경사항 커밋
git commit -m &quot;feat: 로그인 기능 구현&quot;</code></pre>
<h2 id="span-stylebackground-colorf5f0ff3-원격-저장소-연동-remote-operationsspan"><span style="background-color:#f5f0ff">3. 원격 저장소 연동: Remote Operations</span></h2>
<p>팀 프로젝트에서는 원격 저장소와의 안정적인 동기화가 매우 중요합니다. <code>fetch</code>와 <code>pull</code>의 차이를 이해하고 적절히 사용해야 합니다🤓
<strong>fetch</strong>는 원격 변경사항을 로컬로 가져오기만 하는 반면, <strong>pull</strong>은 가져온 변경사항을 현재 브랜치에 자동으로 병합까지 수행합니다. 예를 들어 팀원 A가 작업한 내용을 살펴보기만 하고 싶다면 fetch를, 그 변경사항을 내 브랜치에 반영하고 싶다면 pull을 사용하면 됩니다.</p>
<blockquote>
</blockquote>
<pre><code class="language-bash"># 원격 저장소 정보 확인
git remote -v
&gt;
# 원격 브랜치 정보 가져오기 (병합하지 않음)
git fetch origin
git fetch --all  # 모든 원격 저장소에서 가져오기
&gt;
# 원격 변경사항 가져와서 현재 브랜치에 병합
git pull origin main
git pull --rebase origin main  # rebase 방식으로 병합
&gt;
# 로컬 변경사항 원격에 push
git push origin feature/login
git push -u origin feature/login  # 업스트림 브랜치 설정하며 push</code></pre>
<h2 id="span-stylebackground-colorf5f0ff4-브랜치-병합과-재배치-merge--rebasespan"><span style="background-color:#f5f0ff">4. 브랜치 병합과 재배치: Merge &amp; Rebase</span></h2>
<p>Git은 두 가지 주요 브랜치 통합 전략을 제공합니다. <code>merge</code>는 두 브랜치의 변경사항을 하나로 합치는 반면, <code>rebase</code>는 한 브랜치의 커밋들을 다른 브랜치 위로 재배치합니다.</p>
<blockquote>
</blockquote>
<pre><code class="language-bash"># 브랜치 병합
git switch main
git merge feature/login
git merge --no-ff feature/login  # fast-forward 하지 않고 병합
&gt;
# rebase로 커밋 재배치
git switch feature/login
git rebase main
&gt;
# 병합 충돌 발생 시
git status             # 충돌 파일 확인
&gt;
# 충돌 해결 후... 
git add .              # 해결된 파일 스테이징
git merge --continue   # 병합 계속
&gt;
# 또는
git rebase --continue  # rebase 계속</code></pre>
<h2 id="span-stylebackground-colorf5f0ff5-작업-임시-저장-stash-operationsspan"><span style="background-color:#f5f0ff">5. 작업 임시 저장: Stash Operations</span></h2>
<p>작업 중인 변경사항을 임시로 저장하고 나중에 복원할 수 있습니다. 브랜치 전환이 필요할 때 매우 유용합니다.</p>
<blockquote>
</blockquote>
<pre><code class="language-bash"># 현재 변경사항 임시 저장
git stash push -m &quot;로그인 페이지 작업 중&quot;
git stash  # 메시지 없이 저장
&gt;
# stash 목록 확인
git stash list
&gt;
# 임시 저장한 작업 복원
git stash pop                # 가장 최근 stash 복원 및 삭제
git stash apply stash@{0}    # 특정 stash 복원 (삭제 X)</code></pre>
<h2 id="span-stylebackground-colorf5f0ff6-커밋-관리와-수정-commit-managementspan"><span style="background-color:#f5f0ff">6. 커밋 관리와 수정: Commit Management</span></h2>
<p>실수로 잘못 커밋한 경우나 커밋 메시지를 수정해야 할 때 사용하는 명령어들입니다.</p>
<blockquote>
</blockquote>
<pre><code class="language-bash"># 마지막 커밋 수정
git commit --amend -m &quot;수정된 커밋 메시지&quot;
git commit --amend --no-edit   # 메시지는 유지하고 변경사항만 추가
&gt;
# 이전 커밋으로 되돌리기
git reset --soft HEAD~1    # 커밋만 취소 (변경사항은 스테이징 영역에 유지)
git reset --mixed HEAD~1   # 커밋과 스테이징 취소 (변경사항은 워킹 디렉토리에 유지)
git reset --hard HEAD~1    # 커밋, 스테이징, 워킹 디렉토리 모두 되돌리기 (주의!)</code></pre>
<p>출처 - <a href="https://git-scm.com/docs">GIT Reference</a></p>
<hr>
<p>이렇게 Git의 협업 명령어들을 알아보았습니다. 처음에는 어려워 보일 수 있지만, 실제 프로젝트에서 하나씩 사용해 보면서 익숙해지시면 됩니다. 특히 브랜치 관리와 충돌 해결은 처음에는 조심스럽게 접근하시되, 팀원들과 충분한 소통을 하면서 진행하시면 좋습니다👍🏻</p>
<p>여러분의 성공적인 팀 프로젝트를 응원합니다! 그럼 20000😎</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSAFYcial] 자주 쓰는 "GIT COMMAND" 정리✍🏻 (기본편)]]></title>
            <link>https://velog.io/@king_kang/SSAFYcial-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-GIT-COMMAND-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@king_kang/SSAFYcial-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-GIT-COMMAND-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sun, 27 Oct 2024 00:33:00 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 저는 싸피 공식 기자단 SSAFYcial 12기 강지민 기자입니다!</p>
<p>개발자라면 <strong>Git</strong> 사용이 필수죠! 팀 프로젝트부터 개인 연습까지 Git은 <span style="background-color:#fff5b1"><strong>코드 관리와 협업의 핵심 도구</strong></span>라고 할 수 있습니다. 그래서 오늘은 효율적인 Git 사용을 위해 꼭 알아두면 좋은 명령어들을 정리해보았습니다. 초보자도 쉽게 따라 할 수 있도록 준비했으니, 함께 차근차근 익혀보아요!🚀</p>
<hr>
<h2 id="span-stylebackground-colorf5f0ff1-git-초기-설정-setupspan"><span style="background-color:#f5f0ff">1. Git 초기 설정: Setup</span></h2>
<p>Git을 처음 설치했다면, 사용자 정보를 설정하는 것이 첫 단계입니다.</p>
<blockquote>
<h3 id="사용자-이름-및-email-설정">사용자 이름 및 Email 설정</h3>
<p>Git은 사용자를 식별하기 위해 이름과 이메일 주소가 필요합니다.</p>
</blockquote>
<pre><code class="language-bash">git config --global user.name &quot;[your name]&quot;
git config --global user.email &quot;[your email]&quot;</code></pre>
<blockquote>
<h3 id="사용자-정보-확인">사용자 정보 확인</h3>
<p>설정한 사용자 정보를 확인할 수 있습니다.</p>
</blockquote>
<pre><code class="language-bash">git config --global user.name
git config --global user.email</code></pre>
<h2 id="span-stylebackground-colorf5f0ff2-git-프로젝트-시작하기span"><span style="background-color:#f5f0ff">2. Git 프로젝트 시작하기</span></h2>
<p>Git으로 프로젝트를 관리하려면 프로젝트를 Git 저장소로 만들거나 이미 만들어진 저장소를 가져와야 합니다.</p>
<blockquote>
<h3 id="1-새-git-저장소-만들기">1) 새 Git 저장소 만들기</h3>
<p>프로젝트 폴더를 Git 저장소로 전환하고, 리모트 저장소에 연결합니다.</p>
</blockquote>
<pre><code class="language-bash"># 프로젝트 폴더로 이동
cd [my_project path]
&gt;
# README 파일 생성
echo &quot;# my_project&quot; &gt;&gt; README.md
&gt;
# Git 저장소로 초기화
git init
&gt;
# 파일을 Staging Area에 추가
git add README.md
&gt;
# 첫 커밋 생성
git commit -m &quot;first commit&quot;
&gt;
# master 대신 main 브랜치로 변경
git branch -M main
&gt;
# 원격 저장소 연결
git remote add origin [git URL]
&gt;
# 로컬 커밋을 리모트 저장소로 푸시
git push -u origin main</code></pre>
<blockquote>
<h3 id="2-기존-git-저장소-가져오기">2) 기존 Git 저장소 가져오기</h3>
<p>원격 저장소를 복제해 로컬에 다운로드합니다.</p>
</blockquote>
<pre><code class="language-bash">git clone [url]</code></pre>
<h2 id="span-stylebackground-colorf5f0ff3-git으로-코드-변경사항-관리하기-snapshotspan"><span style="background-color:#f5f0ff">3. Git으로 코드 변경사항 관리하기: Snapshot</span></h2>
<p>Git에서 코드 상태를 스냅샷 형태로 기록하고 관리하는 방법입니다.</p>
<blockquote>
<h3 id="git-add">git add</h3>
<p>작업 중인 파일을 Git의 Staging Area로 추가해 관리 대상으로 지정합니다.</p>
</blockquote>
<pre><code class="language-bash">git add [file]</code></pre>
<blockquote>
<h3 id="git-status">git status</h3>
<p>현재 Git 저장소의 상태를 확인합니다. Staging Area, Unstage Area에 있는 파일 및 Untracked 상태의 파일을 확인할 수 있습니다.</p>
</blockquote>
<pre><code class="language-bash">git status</code></pre>
<blockquote>
<h3 id="git-diff">git diff</h3>
<p>변경된 내용을 비교하고 싶을 때 사용합니다.</p>
</blockquote>
<pre><code class="language-bash"># Stage 되지 않은 변경 비교
git diff
&gt;
# Stage 되었지만 아직 commit 되지 않은 변경 비교
git diff --staged</code></pre>
<blockquote>
<h3 id="git-commit">git commit</h3>
<p>Staging Area의 모든 파일을 하나의 스냅샷으로 커밋합니다.</p>
</blockquote>
<pre><code class="language-bash">git commit -m &quot;commit message&quot;
&gt;
# 최근 커밋 재작성
git commit --amend</code></pre>
<blockquote>
<h3 id="git-reset">git reset</h3>
<p>한 번의 잘못된 커밋을 되돌리거나 수정할 때 사용합니다. 조심해서 사용하세요!!</p>
</blockquote>
<pre><code class="language-bash"># Staged Area에서 파일 제거 (Unstage)
git reset</code></pre>
<blockquote>
<h3 id="git-rm">git rm</h3>
<p>Git으로 관리되는 파일을 삭제합니다.</p>
</blockquote>
<pre><code class="language-bash">git rm [file]</code></pre>
<blockquote>
<h3 id="git-mv">git mv</h3>
<p>파일이나 폴더 이름을 변경할 때 사용합니다.</p>
</blockquote>
<pre><code class="language-bash">git mv [existing-path] [new-path]</code></pre>
<p>출처 - <a href="https://git-scm.com/docs">GIT Reference</a></p>
<hr>
<p>Git의 기본 명령어를 익히셨다면, 이제 협업에서 Git을 더욱 효율적으로 사용하는 방법을 알아볼 차례입니다! 다음에는 <strong>팀 프로젝트와 협업에서 유용한 Git 명령어</strong>들을 소개해 드릴 테니, 기대해 주세요. 그럼 20000😎</p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅
<img src="https://velog.velcdn.com/images/king_kang/post/fe7031bc-f4ad-4f3f-b2c1-0ddc8a1e2bb8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알쓸SSA잡] SSAFY 13기 주목 📢 로봇 트랙 교육생이 말하는 합.격. 후기😮]]></title>
            <link>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-SSAFY-13%EA%B8%B0-%EC%A3%BC%EB%AA%A9-%EB%A1%9C%EB%B4%87-%ED%8A%B8%EB%9E%99-%EA%B5%90%EC%9C%A1%EC%83%9D%EC%9D%B4-%EB%A7%90%ED%95%98%EB%8A%94-%ED%95%A9.%EA%B2%A9.-%EA%BF%80%ED%8C%81%EC%9D%80</link>
            <guid>https://velog.io/@king_kang/%EC%95%8C%EC%93%B8SSA%EC%9E%A1-SSAFY-13%EA%B8%B0-%EC%A3%BC%EB%AA%A9-%EB%A1%9C%EB%B4%87-%ED%8A%B8%EB%9E%99-%EA%B5%90%EC%9C%A1%EC%83%9D%EC%9D%B4-%EB%A7%90%ED%95%98%EB%8A%94-%ED%95%A9.%EA%B2%A9.-%EA%BF%80%ED%8C%81%EC%9D%80</guid>
            <pubDate>Sat, 26 Oct 2024 23:57:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/king_kang/post/043f4536-ff0b-4e8d-bf05-699a3323512d/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/king_kang/post/16dac497-c979-4235-b79b-10460022ae95/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/king_kang/post/a2a1eef5-24ea-4f99-9623-67a3ba36f81e/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/king_kang/post/3236ec40-015f-45ad-b09d-81cca564157a/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/king_kang/post/b5189603-fc4e-44b1-94b5-15b63bfe2e6a/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/king_kang/post/5731cff4-3083-47d8-8c58-94162fd872fa/image.jpg" alt=""></p>
<hr>
<p>SSAFY에 대해 더 알고 싶다면 <a href="https://www.instagram.com/hellossafycial/">Hellossafycial 인스타그램</a>과 <a href="https://www.ssafy.com/?utm_source=ssafycial_student&amp;utm_medium=affiliates&amp;utm_campaign=ssafycial_student_affiliates_none_all_pcmo">SSAFY 홈페이지</a> CLICK✅</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] 자바 정수형 int / long / BigInteger 비교🤔]]></title>
            <link>https://velog.io/@king_kang/Java-%EC%9E%90%EB%B0%94-%EC%A0%95%EC%88%98%ED%98%95-int-long-BigInteger-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@king_kang/Java-%EC%9E%90%EB%B0%94-%EC%A0%95%EC%88%98%ED%98%95-int-long-BigInteger-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Sat, 05 Oct 2024 12:31:53 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 자바 공부한지 2주 정도 되어가는 자린이입니다😎
오늘은 자바의 정수형 중 <span style="background-color:#f6f8fa"><strong>int, long, BigInteger</strong></span>에 대해 공부해 보겠습니다. 알고리즘 문제를 풀다 보면 상황에 따라 적절한 자료형 선택이 필요한데요?! 각 타입의 <strong>특징</strong>, <strong>사용법</strong>, 그리고 <strong>언제 어떤 것을 선택</strong>해야 하는지 자세히 알아보겠습니다🔍</p>
<hr>

<h2 id="span-stylebackground-colorfff5b1intspan"><span style="background-color:#fff5b1">int</span></h2>
<p>int는 자바에서 가장 일반적으로 사용되는 정수 타입입니다.</p>
<h3 id="특징">특징</h3>
<ul>
<li>기본 데이터 타입</li>
<li>32비트(4바이트) 크기</li>
<li><strong>범위 : -2,147,483,648 ~ 2,147,483,647</strong></li>
</ul>
<h3 id="사용법">사용법</h3>
<pre><code class="language-java">int num = 42;
int sum = num + 10;</code></pre>
<h3 id="장점">장점</h3>
<ul>
<li>메모리 사용이 적음</li>
<li>연산 속도가 빠름</li>
</ul>
<h3 id="단점">단점</h3>
<ul>
<li>큰 숫자를 다룰 때 오버플로우 발생 가능</li>
</ul>
<hr>

<h2 id="span-stylebackground-colorfff5b1longspan"><span style="background-color:#fff5b1">long</span></h2>
<p>long은 int보다 더 큰 범위의 정수를 다룰 때 사용합니다.</p>
<h3 id="특징-1">특징</h3>
<ul>
<li>기본 데이터 타입</li>
<li>64비트(8바이트) 크기</li>
<li><strong>범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807</strong></li>
</ul>
<h3 id="사용법-1">사용법</h3>
<pre><code class="language-java">long bigNum = 1234567890123L;  // 끝에 &#39;L&#39; 또는 &#39;l&#39;을 붙여야 함
long result = bigNum * 2L;</code></pre>
<h3 id="장점-1">장점</h3>
<ul>
<li>int보다 훨씬 큰 범위의 숫자 표현 가능</li>
<li>기본 연산자 사용 가능</li>
</ul>
<h3 id="단점-1">단점</h3>
<ul>
<li>int보다 메모리 사용량이 2배</li>
<li>int에 비해 연산 속도가 약간 느림</li>
</ul>
<hr>

<h2 id="span-stylebackground-colorfff5b1bigintegerspan"><span style="background-color:#fff5b1">BigInteger</span></h2>
<p>BigInteger는 이론상 무한대의 정수를 다룰 수 있는 클래스입니다.</p>
<h3 id="특징-2">특징</h3>
<ul>
<li>java.math 패키지의 클래스</li>
<li>객체 타입</li>
<li>메모리가 허용하는 한 무한대의 정수 표현 가능</li>
</ul>
<h3 id="사용법-2">사용법</h3>
<pre><code class="language-java">import java.math.BigInteger;

BigInteger hugeNum = new BigInteger(&quot;123456789012345678901234567890&quot;);
BigInteger result = hugeNum.add(BigInteger.valueOf(1000));</code></pre>
<h3 id="장점-2">장점</h3>
<ul>
<li>거의 무제한의 정수 표현 가능</li>
<li>오버플로우 걱정 없음</li>
<li>정밀한 수학 계산 가능</li>
</ul>
<h3 id="단점-2">단점</h3>
<ul>
<li>기본 타입보다 메모리 사용량이 많음</li>
<li>연산 속도가 상대적으로 느림</li>
<li>산술 연산에 메서드 호출 필요</li>
</ul>
<hr>

<h2 id="성능-비교">성능 비교</h2>
<blockquote>
<p><strong>속도</strong> : int &gt; long &gt; BigInteger
<strong>메모리 사용</strong> : int &lt; long &lt; BigInteger
<strong>표현 가능한 범위</strong> : int &lt; long &lt; BigInteger</p>
</blockquote>
<hr>

<h2 id="결론">결론</h2>
<blockquote>
<ol>
<li><span style="color:orange"><strong>int</strong></span>는 일반적인 정수 계산에 가장 적합하며 메모리 효율성과 연산 속도가 뛰어납니다.</li>
<li><span style="color:orange"><strong>long</strong></span>은 int로 표현하기에는 큰 숫자를 다룰 때 사용합니다.</li>
<li><span style="color:orange"><strong>BigInteger</strong></span>는 정밀도가 중요한 상황 혹은 매우 큰 숫자를 다룰 때 사용합니다. 성능은 위의 두 타입보다는 떨어지지만 정확성이 중요할 때 선택하시면 됩니다👍🏻</li>
</ol>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>