<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://rhyskim.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rhyskim.github.io/" rel="alternate" type="text/html" /><updated>2026-04-08T05:03:29+00:00</updated><id>https://rhyskim.github.io/feed.xml</id><title type="html">Devlog</title><subtitle>개발하는 개발자가 되자 정진하는 사람이 되자</subtitle><entry><title type="html">기계학습의 분류</title><link href="https://rhyskim.github.io/machine-learning-type/" rel="alternate" type="text/html" title="기계학습의 분류" /><published>2025-10-12T15:00:00+00:00</published><updated>2025-10-12T15:00:00+00:00</updated><id>https://rhyskim.github.io/%EA%B8%B0%EA%B3%84%ED%95%99%EC%8A%B5%EC%9D%98-%EB%B6%84%EB%A5%98</id><content type="html" xml:base="https://rhyskim.github.io/machine-learning-type/"><![CDATA[<p>기계 학습에는 크게 4가지 유형이 있다.
그 4가지 유형은 각각</p>
<ol>
  <li>지도 학습</li>
  <li>비지도 학습</li>
  <li>준지도 학습</li>
  <li>강화 학습
이다.</li>
</ol>

<p>지도 학습(Supervised Learning)이란, 데이터와 정답의 역할을 하는 레이블을 제공받아 컴퓨터가 학습하는 것이다. 답이 주어진 데이터를 활용하여 학습하므로, 입력을 출력에 매핑하는 일반적인 규칙을 학습하는 것이다. 
 대표적인 지도 학습으로는 classification과 regression을 꼽을 수 있다.</p>

<p>비지도 학습(Unsupervised Learning)이란, 지도 학습과 달리 외부에서 정답이 주어지지 않고 학습 알고리즘이 스스로 입력으로부터 어떤 구조나 규칙을 발견하는 학습이다. 
 대표적인 비지도 학습으로는 clustering을 꼽을 수 있다. clustering은 주어진 데이터를 특성에 따라 둘 이상의 그룹으로 나누는 것이다.</p>

<p>준지도 학습(Semi-supervised Learning)이란, 일부 데이터에만 레이블을 부여하여 학습시키는 방법이다. 보통 우리가 실제로 구하는 데이터에는 레이블(정답)이 없는 경우가 많다. 레이블은 일반적으로 사람이 부여한다. 
 대규모 데이터에 일일이 레이블을 부여하는 것은 매우 어려운 일이다. 이런 경우, 일부의 데이터에만 레이블을 부여하는 것만으로도 전체적인 학습의 정확도를 높일 수 있다. 즉, 레이블 정보를 가진 소수의 데이터와, 레이블 정보가 없는 다수의 데이터를 함께 이용하여 학습을 수행하는 것이다.</p>

<p>강화 학습(Reinforcement Learning)이란, 보상 및 처벌의 형태로 학습 데이터를 주어 학습하는 형태를 말한다. 주로 차량 운전이나 바둑, 체스와 같은 상대방과의 동적인 경기 상황에서 프로그램의 행동에 따른 피드백을 보상, 처벌의 형태로 제공하는 것이다. 
 어떤 환경 안에서 정의된 에이전트가 현재의 상태를 인식하여 선택 가능한 행동들 중 보상을 최대화 하는 행동 혹은 순서를 선택하는 정책을 만들어 가는 방식이다.</p>

<p>위의 4가지 유형은 모델을 학습시키는 방법에 따른 분류였다. 이외에도, 다양한 기준에 따라 유형을 분류하기도 한다.
 예시로, 오프라인/온라인 학습, 분별/생성 모델이라는 분류도 있다. 특히 분별 모델은 부류 예측에만 관심이 있는 모델이다. 즉, P(y|x) - x가 주어지면 y에 속할 확률의 추정에만 관심이 있는 것이다. 생성 모델은 P(x), P(x|y)를 추정한다. 즉, 생성 모델은 새로운 샘플을 생성할 수 있다. 대표적인 생성 모델로 GAN을 꼽을 수 있다.</p>]]></content><author><name></name></author><category term="ms" /><category term="기계 학습" /><category term="머신 러닝" /><category term="유형" /><category term="차이" /><summary type="html"><![CDATA[기계 학습에는 크게 4가지 유형이 있다. 그 4가지 유형은 각각 지도 학습 비지도 학습 준지도 학습 강화 학습 이다.]]></summary></entry><entry><title type="html">데이터 전처리 - 정규화와 표준화 방법과 계산식</title><link href="https://rhyskim.github.io/machine-learning-data-mining/" rel="alternate" type="text/html" title="데이터 전처리 - 정규화와 표준화 방법과 계산식" /><published>2025-10-12T15:00:00+00:00</published><updated>2025-10-12T15:00:00+00:00</updated><id>https://rhyskim.github.io/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC</id><content type="html" xml:base="https://rhyskim.github.io/machine-learning-data-mining/"><![CDATA[<정규화와 표준화=""> - 데이터 전처리를 통한 분석 성능 개선

기계 학습에서 사용하는 데이터 값 중에서 특성에 따라 규모가 크게 다른(=균일하지 않은 축적(scale)을 갖는) 값을 흔히 볼 수 있다. 
예를 들자면, 나이와 재산의 상관 관계를 보고자 할 때, 나이는 보통 1~80 사이에 분포하는 반면, 재산은 -수십억 ~ +수십억 까지 넓고 큰 규모로 분포한다.

이런 경우에, 데이터 전처리를 통해 입력 속성값의 범위를 비슷하게 만들어 줄 수 있으며 이를 정규화, 표준화라고 한다.

[데이터 정규화] - normalization

최대 최소 스케일러는 다음의 식을 통해 데이터의 값을 0~1사이로 조정한다.
 

[데이터 표준화] - standardization

표준화는 데이터를 정제할 때 전체의 평균과 분산을 사용한다.

 

이러한 표준화 과정을 거치면, X는 평균이 0이고 분산이 1인 데이터가 된다.
</정규화와>]]></content><author><name></name></author><category term="ms" /><category term="기계 학습" /><category term="머신 러닝" /><category term="유형" /><category term="차이" /><summary type="html"><![CDATA[- 데이터 전처리를 통한 분석 성능 개선]]></summary></entry><entry><title type="html">지도 학습(Supervised Learning)</title><link href="https://rhyskim.github.io/machine-learning-supervised-learning/" rel="alternate" type="text/html" title="지도 학습(Supervised Learning)" /><published>2025-10-12T15:00:00+00:00</published><updated>2025-10-12T15:00:00+00:00</updated><id>https://rhyskim.github.io/%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5</id><content type="html" xml:base="https://rhyskim.github.io/machine-learning-supervised-learning/"><![CDATA[<p>supervised learning
지도 학습에는 분류와 회귀가 있다.</p>

<p>classification
분류: 미리 정의된, 가능성 있는 여러 클래스 레이블 중 하나를 예측하는 것
정답이 데이터와 함께 주어지며, 정답으로 해당 데이터의 class가 주어짐</p>

<p>K-nearest neighbors 알고리즘
K-nearest neighbors 알고리즘은 학습 단계를 거치지 않는 알고리즘이다.(lazy classifier라고도 한다.) 새로운 데이터 샘플을 분류하기 위해 답을 도출할 때 가장 가까운 k개의 레이블을 확인하여 majority voting을 통해 새로운 데이터의 class를 예측한다.
k-NN 방법은 특징 공간에 있는 모든 데이터에 대한 정보가 필요하다. 데이터 인스턴스, 특징 요소들의 개수가 많다면 많은 메모리 공간과 계산 시간이 필요하다는 단점이 있다. 
알고리즘이 매우 단순하고 직관적이며 사전 학습이나 특별한 준비 시간이 필요 없다는 장점이 있다. 
k와 데이터 사이의 거리를 계산하는 방식은 사람이 제공한다.</p>

<p>regression
회귀: 연속적인 숫자, 또는 프로그래밍 용어로 말하면 부동소수점수(실수)를 예측하는 것
정답이 데이터와 함께 주어지며, 정답으로 실수가 주어짐</p>]]></content><author><name></name></author><category term="ms" /><category term="기계 학습" /><category term="머신 러닝" /><category term="유형" /><category term="차이" /><summary type="html"><![CDATA[supervised learning 지도 학습에는 분류와 회귀가 있다.]]></summary></entry><entry><title type="html">빌드 관리 도구 : Maven과 Gradle</title><link href="https://rhyskim.github.io/build-tools-maven-gradle/" rel="alternate" type="text/html" title="빌드 관리 도구 : Maven과 Gradle" /><published>2025-08-11T11:00:00+00:00</published><updated>2025-08-11T11:00:00+00:00</updated><id>https://rhyskim.github.io/%EC%9E%90%EB%B0%94-%EB%8C%80%ED%91%9C%EC%A0%81%EC%9D%B8-%EB%B9%8C%EB%93%9C-%EA%B4%80%EB%A6%AC-%ED%88%B4-Maven-Gradle</id><content type="html" xml:base="https://rhyskim.github.io/build-tools-maven-gradle/"><![CDATA[<h1 id="빌드-관리-도구란">빌드 관리 도구란?</h1>

<p><strong>빌드 도구</strong> : 프로젝트에서 필요한 <strong><em>xml, properties, jar</em></strong> 파일들을 자동으로 인식하여 빌드해주는 도구</p>

<p><strong><em>XML</em></strong>은 <strong><em>데이터를 저장하고 전송하기 위해 설계된 언어</em></strong>이다. 무엇이 어디에 있는지 명확하게 적어둔 문서라고 생각하면 이해가 빠르다.</p>

<사람>
    <이름>김민재</이름>
    <나이>25</나이>
</사람>

<p>이렇게 태그(&lt; &gt;)로 감싸서 데이터 구조를 표현하고, 기계도, 사람도 편하게 읽을 수 있다는 장점이 있다.</p>

<p><strong><em>properties</em></strong>는 <strong><em>프로그램의 설정값을 저장하는 단순한 키-값 쌍의 파일</em></strong>이다.
게임 설정창에서 배경음악을 On/Off로 간단히 설정하거나, 난이도를 Easy/Hard 등으로 설정한 내용을 기록한 파일이라고 생각하면 이해가 빠르다.</p>

<p>username=minjae
language=ko
music=true</p>

<p>이렇게 단순하게 표현되며 가볍게 읽고 쓸 수 있다는 장점이 있다.</p>

<p><strong><em>jar</em></strong>은 Java Archive의 준말로, java 프로그램을 실행하기 위한 파일(클래스, 이미지 설정 등)을 하나로 묶은 압축 파일이다. 
우리에게 친숙한 .zip과 비슷하지만, java에서 실행 가능한 형태를 담고 있다는 점에서 차이가 있다. 
java 프로그램을 배포할 때 주로 사용한다.</p>

<p>다시 돌아와서, 빌드 관리 도구란 소스 코드를 컴파일, 테스트, 정적 분석 등을 하여 실행 가능한 앱으로 빌드해 주는 도구이다. 
비유하자면 코드, 리소스, 라이브러리는 식재료이고 빌드 관리 도구는 훌륭한 자동 요리 기계인 셈이다.</p>

<p>빌드 관리 도구는</p>

<ol>
  <li>
    <p>컴파일 → Java 파일을 .class로 변환</p>
  </li>
  <li>
    <p>패키징 → 결과물을 .jar나 .war로 묶음</p>
  </li>
  <li>
    <p>의존성 관리 → 프로그램에서 쓰는 외부 라이브러리를 자동으로 다운로드/추가</p>
  </li>
  <li>
    <p>테스트 실행 → 자동으로 테스트 코드 실행</p>
  </li>
  <li>
    <p>배포 준비 → 서버에 올릴 수 있는 형태로 결과물 생성</p>
  </li>
</ol>

<p>의 주요 기능을 수행한다. 
대표적인 자바의 빌드 관리 도구로는 Ant, Maven, Gradle이 있으며 근래에는 Maven과 Gradle이 가장 널리 사용된다.</p>

<p><strong><em>Ant</em></strong> : XML로 빌드 과정을 직접 순서대로 적어야 함</p>

<p><strong><em>Maven</em></strong> : XML(pom.xml)로 설정, 표준화된 구조, 의존성 관리 편리</p>

<p><strong><em>Gradle</em></strong> : Groovy/Kotlin 스크립트로 설정, 속도 빠름, 유연함</p>

<h2 id="maven메이븐이란">Maven(메이븐)이란?</h2>

<p>자바의 대표적인 빌드 관리 도구였던 Ant를 대체하기 위해 개발됨</p>

<p>프로젝트의 외부 라이브러리를 쉽게 참조할 수 있게 <strong><em>pom.xml</em></strong> 파일을 사용했다. 
참조한 외부 라이브러리에 연관된 다른 라이브러리들도 자동으로 관리되는 것이 편리성을 크게 높여주었다.</p>

<p>maven에는 ant와 달리 <strong><em>라이프 사이클</em></strong>이라는 기능이 추가되었다.
ant의 경우 xml 파일에 어떤 작업을 어떤 순서로 할 지 직접 적어야 했다면, 
maven의 경우 표준 라이프 사이클이 정해져 있어 Maven이 알아서 compile → test → package → deploy까지 실행해준다. 
즉, Maven의 라이프 사이클은 빌드 과정을 표준 단계로 나눠서, 명령어 하나로 전체 과정을 자동 실행해주는 시스템이다.
Ant는 사용자가 빌드 순서를 전부 적어야 하지만, Maven은 순서가 이미 내장돼 있어서 훨씬 간편하다.</p>

<h2 id="gradle그래들이란">Gradle(그래들)이란?</h2>

<p>Groovy 또는 Kotlin 스크립트를 활용한 빌드 관리 도구이다. 
Groovy는 JVM(Java Virtual Machine)에서 동작하는 스크립트/프로그래밍 언어이고, 
Java 문법을 거의 그대로 사용 가능하다는 것이 큰 장점이다.</p>

<p>돌아와서, Gradle은 xml 대신 스크립트를 활용하여 작성함으로써 더 간결한 프로그래밍을 가능하게 한다. 
안드로이드의 표준 빌드 시스템으로 채택되어 사용 중이다. 
멀티 프로젝트의 빌드에 최적화하여 설계되고 있고, Maven에 비해 더 빠른 처리 속도를 가지고 있다. 
Maven은 라이프 사이클에 의해 표준화되어 유연성이 낮다고 할 수 있다. 
그에 비해 Gradle은 빌드 단계 순서와 연결 방식을 <strong><em>사용자가 직접 정의</em></strong>함으로써 유연성이 높다고 할 수 있다.</p>

<h2 id="maven-vs-gradle">Maven VS Gradle</h2>

<p>성능 : Gradle &gt; Maven : Gradle이 Maven보다 최대 100배 정도 빠를 수 있다. 또한, 대규모 프로젝트에서 Gradle이 더 좋은 모습을 보인다.</p>

<p>점유율 : Maven &gt; Gradle : Gradle의 점유율이 꾸준히 오르고 있다.</p>

<table>
  <tbody>
    <tr>
      <td>Maven : pom.xml</td>
      <td>Gradle : build.gradle</td>
    </tr>
  </tbody>
</table>

<p>Gradle은 설치 없이 사용이 가능하다.</p>]]></content><author><name></name></author><category term="Spring" /><category term="Maven" /><category term="Gradle" /><category term="빌드 관리 도구" /><category term="장단점" /><category term="차이" /><summary type="html"><![CDATA[빌드 관리 도구란?]]></summary></entry><entry><title type="html">하드 코딩? 소프트 코딩?</title><link href="https://rhyskim.github.io/hard-coding-vs-soft-coding/" rel="alternate" type="text/html" title="하드 코딩? 소프트 코딩?" /><published>2025-08-08T08:00:00+00:00</published><updated>2025-08-08T08:00:00+00:00</updated><id>https://rhyskim.github.io/%ED%95%98%EB%93%9C%EC%BD%94%EB%94%A9vs%EC%86%8C%ED%94%84%ED%8A%B8%EC%BD%94%EB%94%A9</id><content type="html" xml:base="https://rhyskim.github.io/hard-coding-vs-soft-coding/"><![CDATA[<h2 id="하드-코딩이란-무엇인가">하드 코딩이란 무엇인가?</h2>

<p><strong>하드 코딩(Hard Coding)</strong>은 프로그램의 소스 코드 안에 데이터를 직접적으로 삽입하는 프로그래밍 방식을 말합니다. 변경될 가능성이 있는 값, 설정 정보, 파일 경로 등을 변수나 외부 파일로 분리하지 않고 코드에 그대로 박아 넣는 것입니다. 이렇게 작성된 코드는 실행될 때마다 동일한 값을 사용하게 되며, 값을 변경하려면 소스 코드를 직접 수정하고 다시 컴파일해야 합니다.</p>

<h2 id="소프트-코딩이란-무엇인가">소프트 코딩이란 무엇인가?</h2>

<p><strong>소프트 코딩(Soft Coding)</strong>은 프로그램의 소스 코드에서 변경 가능성이 있는 데이터를 분리하여 외부 설정 파일, 데이터베이스, 환경 변수 등에 저장하는 프로그래밍 방식입니다. 프로그램은 실행 시점에 이 외부 자원에서 필요한 값을 읽어와 사용합니다. 이 방식은 코드 변경 없이 데이터만 수정하면 되므로, 유연성과 재사용성이 높습니다.</p>

<h2 id="하드-코딩과-소프트-코딩의-장단점-비교">하드 코딩과 소프트 코딩의 장단점 비교</h2>

<h3 id="하드-코딩의-장단점">하드 코딩의 장단점</h3>

<p><strong><em>장점</em></strong>: 간단한 시스템을 빠르게 만들 때 유리합니다. 예를 들어, 소규모 은행에서 이자율이 거의 변하지 않는다면, 코드를 직접 수정하는 것이 더 빠를 수 있습니다.</p>

<p><strong><em>단점</em></strong>: 유지보수가 매우 어렵습니다. 이자율, 수수료, 송금 한도 등 많은 설정값이 코드에 박혀 있다면, 정책이 변경될 때마다 수많은 코드를 찾아 일일이 수정해야 합니다. 이는 오류를 유발할 가능성이 매우 큽니다.</p>

<p>만약 이자율을 변경해야 할 때, 개발자가 실수로 일부 코드만 수정하고 다른 부분은 놓치면, 고객에 따라 다른 이자율이 적용되는 심각한 문제가 발생할 수 있습니다.</p>

<h3 id="소프트-코딩의-장단점">소프트 코딩의 장단점</h3>

<p><strong><em>장점</em></strong>: 유지보수가 훨씬 쉽습니다. 은행 정책(이자율, 수수료 등)이 변경될 때, 데이터베이스의 값을 변경하는 것만으로 모든 시스템에 즉시 반영됩니다.</p>

<p><strong><em>단점</em></strong>: 초기 개발 시간이 조금 더 걸립니다. 데이터베이스 테이블을 설계하고, 데이터를 읽어오는 로직을 만들어야 하기 때문입니다. 하지만 장기적으로 보면 이 초기 비용보다 유지보수 비용 절감 효과가 훨씬 큽니다.</p>

<p>이자율, 송금 수수료, 고객 등급별 혜택 등을 모두 데이터베이스에 저장해두면, 은행 정책이 바뀌어도 개발자가 코드를 수정할 필요 없이 관리자가 설정값만 바꾸면 됩니다. 이는 오류 발생 가능성을 줄이고, 시스템의 유연성을 극대화합니다.</p>]]></content><author><name></name></author><category term="기타" /><category term="하드 코딩" /><category term="소프트 코딩" /><category term="장단점" /><category term="차이" /><summary type="html"><![CDATA[하드 코딩이란 무엇인가?]]></summary></entry><entry><title type="html">자료구조와 복잡도</title><link href="https://rhyskim.github.io/data-structure/" rel="alternate" type="text/html" title="자료구조와 복잡도" /><published>2025-07-04T04:00:00+00:00</published><updated>2025-07-04T04:00:00+00:00</updated><id>https://rhyskim.github.io/ds</id><content type="html" xml:base="https://rhyskim.github.io/data-structure/"><![CDATA[<h2 id="자료구조란-무엇인가">자료구조란 무엇인가?</h2>

<p>자료구조란 데이터를 정돈하여 저장한 구성체이다.</p>

<p>데이터에 편리하게, 빠르게, 효율적으로 접근, 탐색, 삽입, 삭제 등의 연산을 하기 위해 데이터를 조직하는 방법을 자료구조라고 일컫는다.</p>

<p>그러므로 자료구조를 설계할 때에는 데이터와 데이터에 관련된 연산들을 함께 고려하는 것이 필수적이다.</p>

<h2 id="자료구조의-효율성">자료구조의 효율성</h2>

<p>앞서 자료구조란 편리하고 빠르게, 효율적으로 연산을 하는 방법이라고 말했 듯이, 상황에 따라 선호되는 연산이 다르고, 각 연산마다 효율성 또한 다르다.</p>

<p>자료구조의 성능은 <strong>시간 복잡도</strong>와 <strong>공간 복잡도</strong>로 평가된다.</p>

<p>시간 복잡도는 단순히 연산의 수행 시간이라고 이해할 수 있다.</p>

<p>공간 복잡도는 알고리즘이 수행되는 동안 사용되는 <em>메모리의 크기</em>이다.</p>

<p>하지만 같은 문제 해결을 위한 자료구조 연산이라면 대부분 비슷한 크기의 메모리 공간을 사용</p>

<p>즉, 무시 가능한 차이의 공간 복잡도를 보이기 때문에 대부분의 경우 자료구조의 성능을 분석하기 위해</p>

<p><em>시간 복잡도만을 사용</em>한다.</p>

<h2 id="수행-시간">수행 시간</h2>

<ul>
  <li>최악 경우 분석(Worst-case Analysis)</li>
  <li>평균 경우 분석(Average-case Analysis)</li>
  <li>최선 경우 분석(Best-case Analysis)</li>
  <li>상각 분석(Amortized Analysis)</li>
</ul>

<p>일반적으로 수행 시간은 <strong>최악 경우</strong>로 표현한다.</p>

<p>최악 경우로 분석할 경우 알고리즘이 수행될 때 <em>‘어떤 입력이 주어지더라도 수행 시간이 얼마 이상은 초과하지 않는다.’</em> 라는 상한의 의미를 갖기 때문이다.</p>

<h2 id="자료구조의-종류">자료구조의 종류</h2>

<p><img src="https://www.hanbit.co.kr/data/editor/20220729155328_vhdglugy.png" alt="자료구조의 분류" /></p>

<ul>
  <li>
    <p>단순 데이터 구조</p>

    <p>프로그래밍 언어에서 통상적으로 제공하는 기본 데이터 형식을 말한다.</p>
  </li>
  <li>
    <p>복합 데이터 구조</p>

    <ul>
      <li>
        <p>선형 데이터 구조</p>

        <p><em>데이터들이 순차적으로 나열</em>되어 있는 구조이다. 각각의 데이터가 단 하나의 선행 데이터와 후행</p>

        <p>데이터를 갖는다.</p>

        <p>순차적인 접근으로 데이터에 접근하며, 일렬로 나열되는 데이터을 관리하는데 용이하다.</p>

        <p>복잡한 관계를 표현하기에는 한계가 있는 경우가 많다.</p>

        <p>배열, 연결 리스트, 스택, 큐, 힙이 선형적 자료 구조이다.</p>
      </li>
      <li>
        <p>비선형 데이터 구조</p>

        <p><em>데이터가 계층적이거나 네트워크 형태</em>로 구성되어 있는 구조이다.</p>

        <p>복잡하거나 계층적인 관계를 모델링할 때 용이하다.</p>

        <p>트리와 그래프가 비선형적 자료 구조이다.</p>
      </li>
    </ul>
  </li>
</ul>

<p>사진 출처 : <a href="https://www.hanbit.co.kr/channel/view.html?cmscode=CMS8073601837">한빛+</a></p>]]></content><author><name></name></author><category term="자료구조" /><category term="자료구조" /><category term="시간 복잡도" /><category term="공간 복잡도" /><summary type="html"><![CDATA[자료구조란 무엇인가?]]></summary></entry><entry><title type="html">자료구조/알고리즘 - ai 시대에서도 여전히 자료구조와 알고리즘은 중요한가</title><link href="https://rhyskim.github.io/ds-ai-is-still-relevant/" rel="alternate" type="text/html" title="자료구조/알고리즘 - ai 시대에서도 여전히 자료구조와 알고리즘은 중요한가" /><published>2025-07-01T07:00:00+00:00</published><updated>2025-07-01T07:00:00+00:00</updated><id>https://rhyskim.github.io/ds-ai</id><content type="html" xml:base="https://rhyskim.github.io/ds-ai-is-still-relevant/"><![CDATA[<h2 id="자료구조는-왜-중요한가">자료구조는 왜 중요한가?</h2>

<p>요즘은 많은 사람들이 ChatGPT나 Copilot 같은 AI 도구에 익숙해져서<br />
“굳이 자료구조를 깊게 배워야 하나?”라는 의문을 가지곤 합니다.</p>

<p>하지만 결국 <strong>AI도 데이터를 다루는 도구</strong>이고,<br />
그 데이터가 어떻게 저장되고, 어떻게 효율적으로 접근되는지가 성능의 핵심을 좌우합니다.</p>

<h3 id="예시-트리와-해시테이블">예시: 트리와 해시테이블</h3>

<ul>
  <li><strong>트리(Tree)</strong>는 계층적 구조를 빠르게 탐색할 수 있어 검색 엔진, 파일 시스템 등에서 핵심 역할을 합니다.</li>
  <li><strong>해시테이블(Hash Table)</strong>은 평균적으로 O(1)에 가까운 탐색 속도를 제공하며, 딕셔너리 기반 AI 파이프라인에서도 자주 쓰입니다.</li>
</ul>

<p>이런 자료구조를 이해하고 잘 활용할 줄 아는 사람은<br />
AI 코드의 효율을 높이고, 병목 구간을 정확히 파악할 수 있습니다.</p>

<hr />

<h2 id="알고리즘의-중요성">알고리즘의 중요성</h2>

<p>AI는 모든 걸 자동으로 처리해줄 것 같지만,<br />
결국 그 내부에는 <strong>사람이 설계한 알고리즘</strong>이 존재합니다.</p>

<p>예를 들어,</p>

<ul>
  <li><strong>최적 경로를 찾는 문제</strong>는 딥러닝 이전에도 다익스트라 알고리즘으로 풀렸고, 지금도 사용됩니다.</li>
  <li><strong>추천 시스템</strong>에서 유저 선호도를 분석하는 데도 정렬, 분류, 그래프 기반 알고리즘이 동원됩니다.</li>
</ul>

<p>또한, AI 모델을 학습시키는 과정 자체가<br />
수많은 <strong>행렬 연산 알고리즘, 경사 하강법(Gradient Descent)</strong> 등의 최적화 알고리즘에 기반합니다.</p>

<hr />

<h2 id="결론">결론</h2>

<p>AI가 발전할수록 “겉모습은 쉬워 보이지만”<br />
<strong>그 뒷단에 있는 시스템은 점점 더 복잡하고 정교해지고 있습니다.</strong></p>

<p>이럴수록 기초가 더 중요합니다.<br />
<strong>자료구조와 알고리즘을 제대로 이해하고 응용할 수 있는 개발자</strong>는<br />
AI 시대에도 도구를 단순히 “쓰는 사람”이 아니라 <strong>만드는 사람</strong>이 될 수 있습니다.</p>]]></content><author><name></name></author><category term="자료구조" /><category term="알고리즘" /><category term="자료구조" /><category term="알고리즘" /><category term="ai" /><summary type="html"><![CDATA[자료구조는 왜 중요한가?]]></summary></entry><entry><title type="html">demo-첫 글 작성</title><link href="https://rhyskim.github.io/os/2025/06/30/demo-%EC%B2%AB-%EA%B8%80-%EC%9E%91%EC%84%B1.html" rel="alternate" type="text/html" title="demo-첫 글 작성" /><published>2025-06-30T08:18:00+00:00</published><updated>2025-06-30T08:18:00+00:00</updated><id>https://rhyskim.github.io/os/2025/06/30/demo-%EC%B2%AB-%EA%B8%80-%EC%9E%91%EC%84%B1</id><content type="html" xml:base="https://rhyskim.github.io/os/2025/06/30/demo-%EC%B2%AB-%EA%B8%80-%EC%9E%91%EC%84%B1.html"><![CDATA[<h1 id="첫-글을-작성해보자-이게-제목인가">첫 글을 작성해보자. 이게 제목인가..?</h1>

<p>첫 글을 작성해보자</p>

<p>아직 어떻게 하는 건지 잘 모르겠다.</p>

<p>#을 꼭 넣고 문장을 써야 하나?</p>

<h2 id="2개-넣으면-어떻게-되지">2개 넣으면 어떻게 되지?</h2>

<h3 id="아하-이렇게-되는구나">아하 이렇게 되는구나</h3>

<p>문장의 크기가 달라지나 보다.</p>

<p>####을 단순히 넣으면 크게 달라지는 건 없지만</p>

<h4 id="을-넣고-space-bar를-누르면-문장이-굵음-처리와-사이즈-조절이-되는군">을 넣고 space bar를 누르면 문장이 굵음 처리와 사이즈 조절이 되는군</h4>]]></content><author><name></name></author><category term="os" /><summary type="html"><![CDATA[첫 글을 작성해보자. 이게 제목인가..?]]></summary></entry><entry><title type="html">Welcome to Jekyll!</title><link href="https://rhyskim.github.io/jekyll/update/2025/06/29/welcome-to-jekyll.html" rel="alternate" type="text/html" title="Welcome to Jekyll!" /><published>2025-06-29T14:45:52+00:00</published><updated>2025-06-29T14:45:52+00:00</updated><id>https://rhyskim.github.io/jekyll/update/2025/06/29/welcome-to-jekyll</id><content type="html" xml:base="https://rhyskim.github.io/jekyll/update/2025/06/29/welcome-to-jekyll.html"><![CDATA[<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>

<p>Jekyll requires blog post files to be named according to the following format:</p>

<p><code class="language-plaintext highlighter-rouge">YEAR-MONTH-DAY-title.MARKUP</code></p>

<p>Where <code class="language-plaintext highlighter-rouge">YEAR</code> is a four-digit number, <code class="language-plaintext highlighter-rouge">MONTH</code> and <code class="language-plaintext highlighter-rouge">DAY</code> are both two-digit numbers, and <code class="language-plaintext highlighter-rouge">MARKUP</code> is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>

<p>Check out the <a href="https://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>]]></content><author><name></name></author><category term="jekyll" /><category term="update" /><summary type="html"><![CDATA[You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.]]></summary></entry></feed>