<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Code Repository</title>
    <link>https://eecsjlee.tistory.com/</link>
    <description>Technical Insights and Practical Experiments From a Software Engineer's Learning Journey.</description>
    <language>ko</language>
    <pubDate>Sun, 19 Jul 2026 18:17:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Junyoung Lee</managingEditor>
    <image>
      <title>Code Repository</title>
      <url>https://tistory1.daumcdn.net/tistory/8271531/attach/32f6c2d89f2c425096104c98db6fe67f</url>
      <link>https://eecsjlee.tistory.com</link>
    </image>
    <item>
      <title>어노테이션 정리</title>
      <link>https://eecsjlee.tistory.com/122</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;import org.springframework.stereotype.Controller;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Controller&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;import org.springframework.web.bind.annotation.ResponseBody;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@ResponseBody&lt;/p&gt;</description>
      <category>Computer Languages/Spring Boot</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/122</guid>
      <comments>https://eecsjlee.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 22 Oct 2025 08:59:05 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot MVC 모델과 폴더 구조</title>
      <link>https://eecsjlee.tistory.com/121</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;MVC 모델&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVC는 Model, View, Controller 세 요소로 이루어진 구조다.&lt;br /&gt;역할을 분리해서 코드가 커져도 유지보수가 가능하도록 하는 핵심 개념이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Model&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터와 그 데이터가 지켜야 하는 규칙을 담는 부분이다.&lt;br /&gt;예를 들어 Member라는 객체는 이름을 반드시 가져야 하고, 가격은 음수가 될 수 없다는 식의 규칙이 여기 들어간다.&lt;br /&gt;스프링에서는 주로 Entity(도메인 모델) 형태로 등장하고, 외부 전송용으로는 DTO 형태로 따로 나눠지기도 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;View&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자에게 보여지는 결과물이다.&lt;br /&gt;과거에는 HTML 템플릿이 View 역할을 했지만, 지금은 REST API 개발이 많기 때문에 JSON 응답이 사실상 View 역할을 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Controller&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트의 요청을 받고, 어떤 작업을 수행할지 결정하는 입구다.&lt;br /&gt;Controller는 일을 &amp;ldquo;직접&amp;rdquo; 하지 않고, 적절한 Service에게 일을 시킨다.&lt;br /&gt;흐름을 조율하는 조정자 역할이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스프링에서의 확장된 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 MVC를 한 단계 더 확장해서 다음과 같은 구조로 사용한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Controller
&amp;darr;
Service
&amp;darr;
Repository&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Controller에서 로직까지 다 처리하면 코드가 바로 비대해진다.&lt;br /&gt;그래서 실제 작업은 Service에서 처리하고, 데이터베이스와의 대화는 Repository에서 맡는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비즈니스 로직이 들어가는 곳이다.&lt;br /&gt;Controller는 Service에게 &amp;ldquo;회원 가입 처리해줘&amp;rdquo; 같은 식으로 요청하고, Service가 실제 로직을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Repository&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB와 통신한다.&lt;br /&gt;Service는 Repository에게 &amp;ldquo;이 정보 저장해줘&amp;rdquo; 또는 &amp;ldquo;이 데이터 가져와줘&amp;rdquo; 라고 요청한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Domain(Entity)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트가 다루는 개념 그 자체.&lt;br /&gt;Member, Order, Product와 같은 실제 존재하는 개념이 여기에 위치한다.&lt;br /&gt;프로젝트의 세계관을 구성하는 핵심 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DTO&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청과 응답 시 사용하는 데이터 전달용 객체다.&lt;br /&gt;Entity를 그대로 외부에 내보내면 내부 설계가 그대로 노출되기 때문에, 외부로 주고받는 데이터는 DTO라는 택배 상자를 통해 전달하는 방식으로 분리한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;폴더구조&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;src
 └─ main
     ├─ java
     │   └─ com.eecsjlee.springbootintro
     │        ├─ controller
     │        ├─ service
     │        ├─ repository
     │        ├─ domain
     │        ├─ dto
     │        ├─ config
     │        ├─ handler
     │        ├─ filter
     │        └─ util
     └─ resources
         ├─ application.yml
         ├─ static
         └─ templates&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;controller&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 들어오는 입구. HTTP 요청 파싱하고, 응답 만들어서 내보낸다. 여기서 로직 하면 안 된다. 여기서 로직하면 100% 프로젝트 성장할 때 폭발한다. controller는 사람이 들어오면 안내 데스크에서 어디 가라고 보내주는 역할이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;service&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기가 로직의 집. &amp;ldquo;이 기능은 이렇게 흘러가야 한다&amp;rdquo;라는 규칙, 비즈니스 처리, 트랜잭션 관리 같은 것들. controller는 손님 안내하고, service는 실제 일 한다. controller에다가 로직 넣기 시작하면 프로젝트가 6개월 후 곰이 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;repository&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 접근하는 애들. select, insert 등 영속성 처리. service는 repository를 부른다. 마치 &amp;ldquo;야 DB야 이것 좀 가져와봐&amp;rdquo; 같은 느낌. 여기서 데이터 처리 직접 하면 controller, service가 더러워진다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;domain&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Entity가 여기에 있다. 실제 프로그램이 표현하는 핵심 모델. 진짜 주인공.&lt;br /&gt;예: Member, Order, Product&lt;br /&gt;도메인은 그 프로젝트 자체의 개념 세계관이다.&lt;br /&gt;&amp;ldquo;세상에 Member라는 존재가 있고, 그 Member는 이름을 가진다.&amp;rdquo; 이런 것.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;dto&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 전달용. 요청/응답 전송.&lt;br /&gt;도메인 객체 그대로 밖으로 노출하면 나중에 구조 바꿀 때 바로 레이저빔 사망이다. dto는 말 그대로 courier(택배 상자)다.&lt;br /&gt;controller &amp;harr; service 사이에서 왔다갔다하는 택배 박스.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;config&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 설정. 빈 설정, Swagger 설정, CORS 설정, Jackson 설정 등.&lt;br /&gt;이거 안 보이면 오히려 이상하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;handler&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외 처리 모아두는 곳. @RestControllerAdvice 같은 글로벌 예외 처리.&lt;br /&gt;이거 안 해두면 에러 메시지가 우주 끝까지 날아간다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;filter&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Servlet 레벨에서 동작하는 요청 가로채기. 로깅, 인증 토큰 검사 같은 것들. controller보다 더 밖에서 동작한다.&lt;br /&gt;근데 처음엔 빈칸으로 놔둬도 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;util&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디에도 넣기 애매한 공통 함수.&lt;br /&gt;근데 여기 남용하면 &quot;모든 걸 util에 넣는 괴물&quot;이 된다. 여기다 무의식적으로 다 넣기 시작하면 공부 망함. 진짜 공통인 것만.&lt;/p&gt;</description>
      <category>Computer Languages/Spring Boot</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/121</guid>
      <comments>https://eecsjlee.tistory.com/121#entry121comment</comments>
      <pubDate>Wed, 22 Oct 2025 08:58:39 +0900</pubDate>
    </item>
    <item>
      <title>INDEX Spring Boot</title>
      <link>https://eecsjlee.tistory.com/120</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot 3는 2022년 11월에 등장&lt;br /&gt;이번 버전부터는 &lt;b&gt;Java 17 이상&lt;/b&gt;을 필수로 요구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jakarta EE 전환 기존의 javax.* 패키지가 jakarta.*로 변경되면서, 라이브러리 호환성에 큰 영향을 미쳤습니다. 이는 기존 코드와 외부 라이브러리들을 업데이트해야 하는 중요한 전환점이 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 측면에서는 &lt;b&gt;Spring Framework 6&lt;/b&gt;를 기반으로 전반적인 최적화가 이루어졌으며, &lt;b&gt;GraalVM Native Image 지원&lt;/b&gt;이 강화되어 자바 애플리케이션을 네이티브 실행 파일로 빌드할 수 있게 되었습니다. 그 결과, 실행 속도와 메모리 효율이 크게 개선되었습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;목차&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/wzVYg&quot;&gt;Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기&lt;/a&gt;&lt;br /&gt;이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/HdVWH&quot;&gt;자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!&lt;/a&gt;&lt;br /&gt;이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/AcbN2&quot;&gt;토비의 스프링 부트 - 이해와 원리&lt;/a&gt;&lt;br /&gt;이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/WYRGQ&quot;&gt;토비의 스프링 6 - 이해와 원리&lt;/a&gt;&lt;br /&gt;이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요.&lt;/p&gt;</description>
      <category>Computer Languages/Spring Boot</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/120</guid>
      <comments>https://eecsjlee.tistory.com/120#entry120comment</comments>
      <pubDate>Wed, 22 Oct 2025 08:58:18 +0900</pubDate>
    </item>
    <item>
      <title>수강 후기 비전공자도 이해할 수 있는 쿠버네티스 입문/실전</title>
      <link>https://eecsjlee.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 쿠버네티스를 공부하다가 설치 단계에서부터 막혀서 강의를 듣게 되었습니다. 강의를 따라하면서 공부를 하니 혼자 책을 읽으며 공부하는 것보다 수월하게 쿠버네티스에 입문할 수 있었습니다. 주신 강의 자료도 복습하기 좋았습니다. 비전공자인 저도 이해할 수 있을 정도로 설명이 부드럽고, 실전에서 바로 따라 해볼 수 있는 내용이라 특히 도움이 됐습니다.&lt;/p&gt;</description>
      <category>MOC</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/63</guid>
      <comments>https://eecsjlee.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 16 Oct 2025 13:55:48 +0900</pubDate>
    </item>
    <item>
      <title>수강 후기 비전공자도 이해할 수 있는 Docker 입문/실전</title>
      <link>https://eecsjlee.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Docker에 호기심은 있었는데, 어디서부터 어떻게 시작해야 할지 막막했습니다. 유튜브도 보고 블로그도 찾아봤지만 명령어만 외우는 느낌이고, 실제로 어떻게 쓰는 지에 대한 설명이 부족해서 강의를 찾게 되었고, 이 강의를 듣게 되었습니다. 이 강의는 Docker를 왜 쓰는지, 어떤 상황에서 어떻게 적용하는지를 직접 예제로 계속 보여주고 따라 하다 보면 자연스럽게 이해가 됩니다. 강의자료도 좋았습니다. 수업을 듣다보면, 이래서 Docker가 필요했구나 하고 납득됐습니다.&lt;/p&gt;</description>
      <category>MOC</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/62</guid>
      <comments>https://eecsjlee.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 16 Oct 2025 13:55:43 +0900</pubDate>
    </item>
    <item>
      <title>수강 후기 비전공자도 합격하는 개발자 이력서/포트폴리오 작성법</title>
      <link>https://eecsjlee.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;비전공자로서 이력서와 포트폴리오를 어떻게 준비해야 할지 막막했는데, 이 강의를 통해 구체적인 방향을 잡을 수 있었습니다. 단순한 이론이 아니라 실제 합격 사례를 토대로 한 원칙을 배울 수 있어 신뢰가 갔고, 면접관의 시각을 이해할 수 있다는 점이 특히 도움이 되었습니다. 강의에서 제공해 주신 템플릿과 샘플 피드백 과정을 보며 제 이력서를 객관적으로 점검할 수 있었고, 그 과정에서 부족한 부분을 보완할 수 있었습니다. 덕분에 불안했던 마음이 사라지고 자신 있게 지원 준비를 할 수 있게 되었습니다. 비전공자에게 꼭 필요한 실질적인 강의라고 생각합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>MOC</category>
      <author>Junyoung Lee</author>
      <guid isPermaLink="true">https://eecsjlee.tistory.com/61</guid>
      <comments>https://eecsjlee.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 16 Oct 2025 13:55:36 +0900</pubDate>
    </item>
  </channel>
</rss>