<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>저는 지금 이것을 공부 하고 있어요! | 정진영의 포트폴리오</title><link>https://wjdwlsdud.github.io/studying/</link><atom:link href="https://wjdwlsdud.github.io/studying/index.xml" rel="self" type="application/rss+xml"/><description>저는 지금 이것을 공부 하고 있어요!</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>ko</language><lastBuildDate>Mon, 13 Oct 2025 00:00:00 +0000</lastBuildDate><image><url>https://wjdwlsdud.github.io/media/sharing.jpg</url><title>저는 지금 이것을 공부 하고 있어요!</title><link>https://wjdwlsdud.github.io/studying/</link></image><item><title>Machine Learning</title><link>https://wjdwlsdud.github.io/studying/mr/</link><pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/studying/mr/</guid><description>&lt;h2 id="머신러닝-학습-일지-데이터로-컴퓨터를-가르치다"&gt;머신러닝 학습 일지: 데이터로 컴퓨터를 가르치다&lt;/h2&gt;
&lt;p&gt;3학년 2학기가 되면서 &lt;strong&gt;기계학습&lt;/strong&gt;이라는 교과목을 접하게 되었습니다. 매주 월, 수 16시에 공과대학 7호관 523호실에서 송현제 교수님의 수업을 듣고 있습니다. 위의 첨부되어 있는 링크에서 송현제 교수님 사이트에서 정보를 확인 하실 수 있습니다!&lt;/p&gt;
&lt;p&gt;&amp;lsquo;머신러닝&amp;rsquo;이라는 단어, 처음에는 왠지 어렵고 복잡하게만 느껴졌습니다. 하지만 막상 배워보니, 생각보다 우리 삶과 가까운, 흥미로운 기술이라는 것을 알게 되었습니다. 제가 배운 머신러닝의 기초적인 개념들을 쉬운 말로 한번 정리해 보았습니다.&lt;/p&gt;
&lt;p&gt;🧐 &lt;strong&gt;머신러닝, 그게 뭔데?&lt;/strong&gt;
제가 이해한 머신러닝은 아주 간단한 아이디어에서 시작합니다. 컴퓨터에게 &amp;lsquo;이건 사과야&amp;rsquo;, &amp;lsquo;이건 오렌지야&amp;rsquo;라고 하나하나 모든 규칙을 알려주는 대신, 수많은 데이터를 보여주고 컴퓨터가 스스로 패턴이나 규칙을 배우게 하는 기술입니다.&lt;/p&gt;
&lt;p&gt;마치 어린아이가 강아지 사진 수백 장을 보고 &amp;lsquo;아, 귀가 쫑긋하고 털이 북슬한 동물이 강아지구나!&amp;rsquo; 하고 스스로 깨닫는 것과 비슷하죠.&lt;/p&gt;
&lt;p&gt;📚 내가 배운 학습 방법 두 가지
머신러닝에는 여러 종류가 있지만, 저는 가장 대표적인 두 가지 방법에 대해 배웠습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;정답을 알려주며 가르치기: 지도 학습 (Supervised Learning)
지도 학습은 말 그대로 &amp;lsquo;정답(Label)&amp;lsquo;이 있는 데이터로 컴퓨터를 학습시키는 방법입니다. &amp;lsquo;문제&amp;rsquo;와 &amp;lsquo;정답&amp;rsquo;을 한 세트로 묶어서 계속 보여주는 거죠.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;스팸 메일 필터가 대표적인 예입니다. &amp;lsquo;이건 스팸 메일이야(정답)&amp;rsquo;, &amp;lsquo;이건 중요한 메일이야(정답)&amp;lsquo;라고 표시된 수많은 이메일(문제)을 학습시키면, 나중에는 새로운 메일이 왔을 때 스스로 스팸인지 아닌지 구분하게 됩니다.&lt;/p&gt;
&lt;p&gt;주택 가격 예측도 마찬가지입니다. &amp;lsquo;A 지역의 30평 아파트는 5억이야(정답)&amp;rsquo; 같은 수많은 집값 데이터(문제)를 학습하면, 새로운 아파트 정보를 주었을 때 가격을 예측할 수 있게 됩니다.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;정답 없이 스스로 배우게 하기: 비지도 학습 (Unsupervised Learning)
비지도 학습은 정답이 없는, 날것의 데이터를 던져주고 &amp;ldquo;이 안에서 뭔가 의미 있는 그룹이나 구조를 찾아봐!&amp;rdquo; 하고 시키는 것과 같습니다. 컴퓨터는 데이터의 특징을 분석해서 비슷한 것들끼리 스스로 묶어줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;고객 관리에 유용하게 쓰일 수 있습니다. 고객들의 구매 패턴 데이터를 주고 그룹으로 묶어보게 하면, &amp;lsquo;알뜰 구매 그룹&amp;rsquo;, &amp;lsquo;신제품 선호 그룹&amp;rsquo;처럼 숨겨진 고객 그룹을 찾아낼 수 있습니다.&lt;/p&gt;
&lt;p&gt;뉴스 기사 클러스터링도 좋은 예입니다. 수많은 뉴스 기사를 던져주면, 인공지능이 스스로 &amp;lsquo;정치&amp;rsquo;, &amp;lsquo;경제&amp;rsquo;, &amp;lsquo;스포츠&amp;rsquo; 등 비슷한 주제의 기사들끼리 묶어줍니다.&lt;/p&gt;
&lt;p&gt;✨ 마치며
직접 개념을 배우고 나니, 머신러닝이 막연한 기술이 아니라 문제를 해결하기 위한 아주 논리적인 도구라는 생각이 들었습니다. 물론 아직은 정말 기초적인 부분만 알고 있지만, 데이터 속에서 의미를 찾아내는 과정이 정말 매력적이라고 느꼈습니다. 앞으로 더 깊이 공부해 보고, 간단한 프로젝트도 직접 해보고 싶다는 목표가 생겼습니다.&lt;/p&gt;</description></item><item><title>JAVA</title><link>https://wjdwlsdud.github.io/studying/java/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/studying/java/</guid><description>&lt;p&gt;자바의 문법과 기능을 단순히 알기만 하는 것이 아니라, 그 기능이 왜 필요하고 어떻게 실무에 적용할 수 있는지에 대해 깊이 있게 탐구하기 위해 공부를 시작하였다.&lt;/p&gt;
&lt;p&gt;지금까지 공부한 내용은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Object 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Object 클래스는 모든 클래스의 최상위 부모이다.
Object 클래스가 필요한 이유와 Object 클래스가 제공하는 기능과 equals()를 통해 자바의 동일성과 동등성 개념도 함께 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;불변 객체&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;한번 생성하면 그 이후로 변하지 않는 객체를 불변 객체라 합니다.
String, 래퍼, 날짜와 시간을 포함해서 자바가 제공하는 많은 객체들은 불변 객체로 제공된다. 불변 객체가 왜 필요한지, 그리고 어떻게 불변 객체를 만드는지 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;String 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;String 클래스는 자바에서 문자열을 다룰 때 사용되는 클래스이다.
String 객체의 기본 기능 뿐만 아니라, StringBuilder와 String의 기능과 성능 차이, 또한 자바가 String 클래스를 어떻게 최적화하는지 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;래퍼, Class 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;자바 기본형의 한계를 알아보고 그 한계를 극복하기 위한 래퍼 클래스를 공부하였다.
추가로 클래스의 정보를 나타내는 Class 클래스, 시스템의 정보를 제공하는 System 클래스, 자주 사용하는 Math, Random 같은 클래스도 함께 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;열거형 - ENUM&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;열거형은 높은 타입 안전성을 제공하는 훌륭한 기능이다.
단순히 열거형의 문법을 배우는 것이 아니라 본질적으로 열거형이 왜 필요한지 공부하였다. 그리고 열거형이 없던 시절 직접 구현했던 타입 안전 열거형 패턴도 구현해보았다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;중첩 클래스, 내부 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;클래스 내부에 클래스를 두는 것을 중첩 클래스 또는 내부 클래스라 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예외 처리&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;자바에서 예외 처리 문법은 단순하지만 예외 처리가 왜 필요한지 공부하였다.&lt;/p&gt;</description></item><item><title>Spring MVC</title><link>https://wjdwlsdud.github.io/studying/spring/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/studying/spring/</guid><description>&lt;h2 id="서블릿에서-스프링-mvc까지-java-웹-개발의-흐름을-배우다"&gt;서블릿에서 스프링 MVC까지: Java 웹 개발의 흐름을 배우다&lt;/h2&gt;
&lt;p&gt;이번에는 Java 백엔드 개발의 핵심 기술이라 할 수 있는 웹 애플리케이션의 발전 과정을 되짚어보는 시간을 가졌습니다.&lt;/p&gt;
&lt;p&gt;왜 웹 애플리케이션인가?
현대의 애플리케이션은 대부분 웹 환경에서 동작합니다. 우리가 매일 사용하는 수많은 서비스가 바로 웹 애플리케이션이죠. Java 백엔드 개발자는 이러한 웹 애플리케이션의 서버 측 로직을 개발하는 중요한 역할을 담당하며, 이때 가장 강력한 도구로 사용되는 것이 바로 스프링 프레임워크, 특히 스프링 MVC입니다.&lt;/p&gt;
&lt;p&gt;이번 학습을 통해 복잡한 웹 애플리케이션을 쉽고 빠르게 개발할 수 있도록 도와주는 스프링 MVC를 깊이 이해하기 위해, 그 뿌리가 되는 기술부터 차근차근 공부했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Java 웹 기술의 시작, 서블릿(Servlet)
모든 것은 서블릿에서 시작되었습니다. 서블릿은 클라이언트의 요청을 받고, 비즈니스 로직을 처리한 후, 동적인 HTML 응답을 생성하는 순수 Java 코드입니다. 하지만 서블릿 코드 안에 HTML 코드를 문자열(out.println(&amp;quot;&lt;html&gt;&amp;hellip;&amp;quot;)) 형태로 작성해야 했기 때문에, 화면을 수정하기가 매우 번거롭고 가독성이 떨어지는 단점이 있었습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;화면을 분리하다, JSP(JavaServer Pages)
이러한 서블릿의 단점을 보완하기 위해 등장한 것이 JSP입니다. JSP는 HTML 문서 안에 Java 코드를 삽입하는 방식으로, 디자이너와 개발자의 협업을 더 쉽게 만들었습니다. 덕분에 화면(View)을 표현하는 작업이 훨씬 수월해졌습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;하지만 JSP만으로는 부족했습니다. 비즈니스 로직과 화면을 보여주는 코드가 하나의 파일에 뒤섞여, 프로젝트 규모가 커질수록 유지보수가 어려워지는 &amp;lsquo;스파게티 코드&amp;rsquo; 문제가 발생하기 시작했습니다.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;역할 분담의 시작, MVC 패턴
이 문제를 해결하기 위해 MVC(Model-View-Controller) 패턴이라는 설계 사상이 등장했습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Model: 데이터와 비즈니스 로직을 담당합니다.&lt;/p&gt;
&lt;p&gt;View: 사용자에게 보여지는 화면(UI)을 담당합니다. (JSP)&lt;/p&gt;
&lt;p&gt;Controller: 사용자의 요청을 받아 Model과 View를 연결해주는 중간 다리 역할을 합니다. (Servlet)&lt;/p&gt;
&lt;p&gt;이렇게 각자의 역할을 명확히 분리함으로써, 코드는 훨씬 더 체계적이고 재사용하기 쉬워졌습니다.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;스프링 MVC의 탄생과 실무 활용
MVC 패턴을 직접 구현하는 것은 여전히 반복적이고 번거로운 작업이 많았습니다. 개발자들은 이러한 MVC 패턴을 더 쉽고 편리하게 사용할 수 있도록 도와주는 MVC 프레임워크를 만들기 시작했고, 그중 가장 성공적이고 압도적인 인기를 얻게 된 것이 바로 스프링 MVC입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;스프링 MVC는 MVC 패턴 구현에 필요한 복잡한 처리 과정을 대신해주어, 개발자가 오직 비즈니스 로직에만 집중할 수 있는 환경을 제공합니다. 이번 학습을 통해 스프링 MVC의 탄생 배경부터 실무에서 주로 사용하는 최신 기술까지 익히며, 왜 수많은 기업이 스프링을 선택하는지 몸소 깨달을 수 있었습니다.&lt;/p&gt;
&lt;p&gt;앞으로 이 기술들을 활용하여 직접 프로젝트를 진행하며 겪는 경험들도 꾸준히 공유해 나가겠습니다. 감사합니다!&lt;/p&gt;
&lt;p&gt;위의 첨부된 링크에서 제가 지금까지 공부한 코드들을 확인 해볼 수 있습니다!&lt;/p&gt;</description></item></channel></rss>