<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>UpDown Dev Story</title>
    <link>https://updown90.tistory.com/</link>
    <description>#프로그래밍 #개발 #Dev</description>
    <language>ko</language>
    <pubDate>Thu, 6 Aug 2026 14:28:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>updown</managingEditor>
    <image>
      <title>UpDown Dev Story</title>
      <url>https://tistory1.daumcdn.net/tistory/2894180/attach/c8b101e663884c25bc938258b9862a3a</url>
      <link>https://updown90.tistory.com</link>
    </image>
    <item>
      <title>Enum 클래스 사용 시 성능 향상 방법</title>
      <link>https://updown90.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[enum 클래스 사용 시 성능 향상 방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발하다 보면 enum 클래스를 사용할 일이 많은데요 현재 일반적으로 values() 사용해서 원하는 값을 매칭하게 구현되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(루프 돌면서 내가 원하는 값이랑 같아? 라고 다 확인하는 구조)&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;이렇게 사용하는 것보다 Map 자료 구조를 사용(캐싱 처리) 하면 약 &lt;b&gt;20배의 속도 차이&lt;/b&gt;를 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 예시입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기존 enum 클래스&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;public enum AccountStatus {
    INUSE(&quot;사용중&quot;),
    UNUSED(&quot;미사용&quot;),
    DELETED(&quot;삭제&quot;),
    UNKNOWN(&quot;알수없음&quot;);

    private final String description;

    AccountStatus(String description) {
        this.description = description;
    }

    public static AccountStatus find(String description) {
        return Arrays.stream(values())
            .filter(accountStatus -&amp;gt; accountStatus.description.equals(description))
            .findAny()
            .orElse(UNKNOWN);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Map 으로 캐싱하여 구현한 enum 클래스&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #eeeeee; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;public enum AccountStatus {
    INUSE(&quot;사용중&quot;),
    UNUSED(&quot;미사용&quot;),
    DELETED(&quot;삭제&quot;),
    UNKNOWN(&quot;알수없음&quot;);

    private final String description;

    AccountStatus(String description) {
        this.description = description;
    }

    private static final Map&amp;lt;String, AccountStatus2&amp;gt; descriptions =
        Collections.unmodifiableMap(Stream.of(values())
            .collect(Collectors.toMap(AccountStatus::getDescription, Function.identity())));

    public static AccountStatus find(String description) {
        return Optional.ofNullable(descriptions.get(description)).orElse(UNKNOWN);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Etc</category>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/114</guid>
      <comments>https://updown90.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 10 Jan 2024 10:41:50 +0900</pubDate>
    </item>
    <item>
      <title>IntelliJ 자동 import 정리 설정</title>
      <link>https://updown90.tistory.com/113</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;목적&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IntelliJ로 개발하다보면 의도치않게 불필요한 import들이나 정리돼지 않은 import들이 남아있게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;방법&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단축키를 사용하여 수동으로 정리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정리를 원하는 파일을 켠 후 option + cmd + o 단축키를 눌러 수동으로&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IntelliJ 설정을 변경하여 파일 편집 시 자동으로 정리되도록 세팅
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정 방법 참고 캡쳐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1838&quot; data-origin-height=&quot;1430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbFm7R/btsC1qBgcCE/SLwGKaTyjPzMkSX5aC10gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbFm7R/btsC1qBgcCE/SLwGKaTyjPzMkSX5aC10gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbFm7R/btsC1qBgcCE/SLwGKaTyjPzMkSX5aC10gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbFm7R%2FbtsC1qBgcCE%2FSLwGKaTyjPzMkSX5aC10gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;1430&quot; data-origin-width=&quot;1838&quot; data-origin-height=&quot;1430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Etc</category>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/113</guid>
      <comments>https://updown90.tistory.com/113#entry113comment</comments>
      <pubDate>Fri, 5 Jan 2024 15:53:48 +0900</pubDate>
    </item>
    <item>
      <title>모든 개발자를 위한 HTTP 웹 기본 지식 - 수강후기</title>
      <link>https://updown90.tistory.com/112</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c88yBT/btsCQ1HU1iR/loAkLeiAZH2ZB1zXBdbvK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c88yBT/btsCQ1HU1iR/loAkLeiAZH2ZB1zXBdbvK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c88yBT/btsCQ1HU1iR/loAkLeiAZH2ZB1zXBdbvK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc88yBT%2FbtsCQ1HU1iR%2FloAkLeiAZH2ZB1zXBdbvK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;548&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. HTTP에 특성에 대해 알게됐습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. HTTP에서 제공하는 기능들에 대해서 알게됐습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. HTTP의 동작방식에 대해서 알게됐습니다.&lt;/p&gt;</description>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/112</guid>
      <comments>https://updown90.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 1 Jan 2024 04:15:23 +0900</pubDate>
    </item>
    <item>
      <title>자바 ORM 표준 JPA 프로그래밍 - 기본편 수강후기</title>
      <link>https://updown90.tistory.com/111</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqUHIZ/btsCnIou7Se/GhqDtWSLkO2JtenipT89AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqUHIZ/btsCnIou7Se/GhqDtWSLkO2JtenipT89AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqUHIZ/btsCnIou7Se/GhqDtWSLkO2JtenipT89AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqUHIZ%2FbtsCnIou7Se%2FGhqDtWSLkO2JtenipT89AK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1140&quot; height=&quot;506&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. JPA를 왜 사용해야하는지 알게됐습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. JPA가 어떻게 동작하는지 알게됐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. JPA의 여러가지 기능들에 대해 알게 됐습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. JPA 를 잘 사용할 수 있게 됐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/111</guid>
      <comments>https://updown90.tistory.com/111#entry111comment</comments>
      <pubDate>Thu, 21 Dec 2023 09:16:35 +0900</pubDate>
    </item>
    <item>
      <title>[패스트캠퍼스] 스프링러너의 스프링 아카데미: Spring Boot Essential: 스프링 부트로 구현하는 실전 멀티 모듈 프로젝트 후기</title>
      <link>https://updown90.tistory.com/110</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EoWYe/btsCj1IML2Y/Nfkn0vWV55m66Gjus6gbn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EoWYe/btsCj1IML2Y/Nfkn0vWV55m66Gjus6gbn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EoWYe/btsCj1IML2Y/Nfkn0vWV55m66Gjus6gbn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoWYe%2FbtsCj1IML2Y%2FNfkn0vWV55m66Gjus6gbn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;635&quot; height=&quot;498&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 스프링 부트가 어떤식으로 작동되는지 알 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스프링 부트를 어떤식으로 운영하고 관리해야하는지 알 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 싱글모듈, 멀티모듈 설계법을 경험했습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 여러가지 노하우를 배웠습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무작정 스프링부트를 사용하니까 너무 편하다에서 이런식으로 작동하는구나 앞으로 이런문서들을 참고해서 이렇게 관리 해야겠다는 생각이 들었습니다! 추천합니다!&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;&amp;nbsp;&lt;/p&gt;</description>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/110</guid>
      <comments>https://updown90.tistory.com/110#entry110comment</comments>
      <pubDate>Wed, 20 Dec 2023 16:33:19 +0900</pubDate>
    </item>
    <item>
      <title>자료구조, 정렬 시뮬레이션으로 나타내주는 사이트</title>
      <link>https://updown90.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://visualgo.net/en/sorting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://visualgo.net/en/sorting&lt;/a&gt;&lt;/p&gt;</description>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/109</guid>
      <comments>https://updown90.tistory.com/109#entry109comment</comments>
      <pubDate>Tue, 7 Feb 2023 20:50:55 +0900</pubDate>
    </item>
    <item>
      <title>[백준 - 2920번] 음계</title>
      <link>https://updown90.tistory.com/108</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2920&quot;&gt;https://www.acmicpc.net/problem/2920&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1671112037714&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2920번: 음계&quot; data-og-description=&quot;다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2920&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2920&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDxGWz/hyQTEZO3Y2/pafXVB03nwnK0foE3j8pSk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2920&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDxGWz/hyQTEZO3Y2/pafXVB03nwnK0foE3j8pSk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2920번: 음계&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이과정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;8개의 숫자가 주어진다 이 숫자를 보고 아래의 조건을 대입하여 출력하면 되는 문제다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;순서대로 증가되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;ascending&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span&gt;순서대로 증감되면&lt;span&gt; &lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;descending&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span&gt;&lt;span&gt;뒤죽박죽이면 &lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;mixed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;코드&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1671152314999&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package baekjoon;

import java.util.Scanner;

public class Problem2920 {

//    8개의 숫자가 주어진다 이 숫자를 보고 아래의 조건을 대입하여 출력하면 되는 문제다
//    순서대로 증가되면 ascending
//    순서대로 증감되면 descending
//    뒤죽박죽이면 mixed
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 8개의 값을 배열에 담는다
        int[] inputArr = new int[8];
        for (int i = 0; i &amp;lt; 8; i++) {
            inputArr[i] = sc.nextInt();
        }

        boolean isAscending = true; // 초기 asc 값을 초기화한다
        boolean isDescending = true; // 초기 asc 값을 초기화한다
        for (int j = 0; j &amp;lt; inputArr.length - 1; j++) { // 0 ~ 7까지 배열을 돈다(8까지 돌면 +1 했을때 Exception 발생)
            if (inputArr[j] &amp;lt; inputArr[j + 1]) { // 현재 node의 값과 다음 node의 값을 비교해서 다음 node가 크면
                isDescending = false; // 내림차순이 아니다
            } else if (inputArr[j] &amp;gt; inputArr[j + 1]) { // 현재 node의 값과 다음 node의 값을 비교해서 현재 node가 크면
                isAscending = false; // 오름차순이 아니다
            }
        }

        // 위 기준값을 가지고 출력하는 로직
        if (isAscending) { // 오름차순이면
            System.out.println(&quot;ascending&quot;);
        } else if (isDescending) { // 내림차순이면
            System.out.println(&quot;descending&quot;);
        } else { // 오름차순도 내림차순도 아니면
            System.out.println(&quot;mixed&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/108</guid>
      <comments>https://updown90.tistory.com/108#entry108comment</comments>
      <pubDate>Fri, 16 Dec 2022 09:58:43 +0900</pubDate>
    </item>
    <item>
      <title>아파치 카프카 for beginners 수강후기</title>
      <link>https://updown90.tistory.com/107</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2314&quot; data-origin-height=&quot;1964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brclfN/btrOtIxwnfL/pkrKrC1e13VapTQFBFCe40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brclfN/btrOtIxwnfL/pkrKrC1e13VapTQFBFCe40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brclfN/btrOtIxwnfL/pkrKrC1e13VapTQFBFCe40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrclfN%2FbtrOtIxwnfL%2FpkrKrC1e13VapTQFBFCe40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2314&quot; height=&quot;1964&quot; data-origin-width=&quot;2314&quot; data-origin-height=&quot;1964&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1756&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYfenb/btrOwwwjjTb/jwK1HK5OIH75H8s3vGMFe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYfenb/btrOwwwjjTb/jwK1HK5OIH75H8s3vGMFe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYfenb/btrOwwwjjTb/jwK1HK5OIH75H8s3vGMFe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYfenb%2FbtrOwwwjjTb%2FjwK1HK5OIH75H8s3vGMFe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;672&quot; height=&quot;378&quot; data-origin-width=&quot;1756&quot; data-origin-height=&quot;988&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ScSqn/btrOtIdbIKN/fo19YANphl3okUDUm3MsPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ScSqn/btrOtIdbIKN/fo19YANphl3okUDUm3MsPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ScSqn/btrOtIdbIKN/fo19YANphl3okUDUm3MsPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FScSqn%2FbtrOtIdbIKN%2Ffo19YANphl3okUDUm3MsPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;317&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;카프카는 왜 만들어졌고 왜 사용되는가?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카는 링크드인에서 만들었다&lt;/li&gt;
&lt;li&gt;카프카는 데이터처리를 각각 다른 애플리케이션에서 하는게 아니고 카프카에 집결시켜서 사용할 수 있다&lt;/li&gt;
&lt;li&gt;카프카는 짧은 시간내에 많은양의 데이터를 처리 가능하다 (파티션을 나눠서 병렬처리를 더 빠르게 가능하다)&lt;/li&gt;
&lt;li&gt;카프카는 확장성이 뛰어나다 이미 사용하고 있는 브로커가 있더라도 운영중에 브로커를 늘려서 확장시킬수 있고 복제를 통해 고 가용성도 보장된다&lt;/li&gt;
&lt;li&gt;컨슈머가 데이터를 가져가더라도 데이터가 사라지지 않는다(여러 시스템에서 동일한 데이터를 다룰수 있다)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;카프카의 특징
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;낮은 지연과 높은 처리량을 가지고 있다&lt;/li&gt;
&lt;li&gt;데이터를 토픽에 보내는건 프로듀싱 받는건 컨슈밍이라고 한다&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;토픽이란?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;토픽은 여러개 생성 할 수 있다&lt;/li&gt;
&lt;li&gt;토픽안에 파티션에 데이터를 넣는건 프로듀서&lt;/li&gt;
&lt;li&gt;토픽안에 파티션에 데이터를 가져오는건 컨슈머라고한다&lt;/li&gt;
&lt;li&gt;하나의 토픽은 여러개의 파티션으로 구성될 수 있다&lt;/li&gt;
&lt;li&gt;파티션은 0번부터 시작하게된다&lt;/li&gt;
&lt;li&gt;컨슈밍을 하게되면 가장 오래된 순서부터 데이터를 가져오게된다&lt;/li&gt;
&lt;li&gt;컨슈머가 토픽에 데이터를 가져가도 데이터는 삭제되지 않음&lt;/li&gt;
&lt;li&gt;다른 컨슈머가 붙었을 경우 삭제되지 않은 데이터는 다시 0번부터 가져가서 사용할 수 있다&lt;br /&gt;(다만 auto.offset.reset=earliest 여야하고, 컨슈머 그룹이 달라야한다)&lt;/li&gt;
&lt;li&gt;이를 이용해 동일데이터를 두 번 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;파티션이 2개 이상인 경우 라운드로빈(하나씩 번갈아가며)으로 들어간다&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;브로커, 복제, ISR
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브로커란&lt;br /&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 카프카가 설치되어 있는 서버 단위를 말한다&lt;/li&gt;
&lt;li&gt;보통 3개 이상의 브로커로 구성하는것을 권장한다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;복제란
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고 가용성을 위해 사용(오랜기간 운영할 수 있는 성질)&lt;/li&gt;
&lt;li&gt;3개 중 하나는 리더파티션이고 나머지 2개는 팔로워 파티션이라고 한다&lt;/li&gt;
&lt;li&gt;이 3개를 합쳐서 ISR(In Sync Replica)라고 부를수 있다.&lt;/li&gt;
&lt;li&gt;프로듀서에는 ack라는 상세 옵션이 있다
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0 프로듀서는 리더 파티션에 데이터를 전송하고 응답값은 전달받지 않음(속도빠름)&lt;/li&gt;
&lt;li&gt;1 리더 파티션에 데이터를 전송하고 응답값도 전달받음 (복제까지 됐는지는 확인안함)&lt;/li&gt;
&lt;li&gt;all 리더파티션에 데이터를 전송하고 리더파티션과 팔로워 파티션에 복제까지 정상적으로 됐는지까지 확인(속도 느림)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;파티셔녀&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로듀서가 데이터를 보내면 파티셔너를 통해서 브로커로 데이터가 전송된다&lt;/li&gt;
&lt;li&gt;파티셔너는 데이터를 토픽에 어떤 파티션에 넣을지 결정하는 역할을 한다&lt;/li&gt;
&lt;li&gt;레코드에 포함된 메시지 키 또는 메시지 값에 따라서 파티션의 위치가 결정되게 된다&lt;/li&gt;
&lt;li&gt;프로듀서에 따로 파티셔너를 설정하지 않았으면 UniformStickyPartitioner로 설정이된다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지 키가 있을 때 와 없을때 다르게 동작한다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;있는경우 파티셔너에 의해서 키를가지고 해시값이 생성되게 된다 이 값을 가지고 어느 파티션에 들어갈지 결정되게 된다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 파티션이 중간에 추가되는경우 키 &amp;lt;-&amp;gt; 파티션의 일관성이 보장되지 않기 때문에 뒤죽박죽 될 수 있다 그렇기 때문에 키를 사용한다면 파티션을 중간에 추가하는건 고려를 많이 해봐야한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;없는경우 라운드 로빈 방식으로 돌아간다. 파티셔너가 모을수 있는 최대한의 데이터를 최대한 모아서 보낸다(배치방식)(파티션에 적절히 보낸다고 생각하면된다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xWvM5/btrOvcZwRCP/8cxTLyku8UG81QTOaKlcgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xWvM5/btrOvcZwRCP/8cxTLyku8UG81QTOaKlcgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xWvM5/btrOvcZwRCP/8cxTLyku8UG81QTOaKlcgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxWvM5%2FbtrOvcZwRCP%2F8cxTLyku8UG81QTOaKlcgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;543&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;카프카 컨슈머 Lag 이란?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오프셋
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로듀서는 토픽에 파티션에 데이터를 넣게된다 각 데이터에 붙는 번호가 오프셋이다&lt;/li&gt;
&lt;li&gt;데이터를 어디까지 읽었는지 확인하는 용도로 활용된다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;프로듀서가 데이터를 넣는 속도가 컨슈머가 데이터를 가져가는 속도보다 높게 된다면?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그러면 프로듀서가 마지막으로 넣은 오프셋 컨슈머가 마지막으로 가져간 오프셋의 차이가 발생한다 이것이 바로 컨슈머 Lag이다&lt;/li&gt;
&lt;li&gt;&amp;nbsp;이것으로 프로듀서와 컨슈머의 상태에 대해 체크가 가능하다&lt;/li&gt;
&lt;li&gt;파티션이 여러개 존재할 경우 Lag은 여러개 존재할 수 있다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Burrow(카프카 컨슈머 Lag을 모니터링을 도와주는 독립적인 애플리케이션)&lt;br /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멀티 카프카 클러스터 지원
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터가 여러개라도 한번에 lag을 모니터링 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;슬라이딩 왼도우를 이용한 컨슈머의 상태를 쉽게 확인가능&lt;/li&gt;
&lt;li&gt;HTTP API 제공
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확정성이 좋다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;카프카, MQ, 캐시서버 의 차이
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지 브로커&amp;nbsp;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지를 받아서 처리하고 나면 메시지는 삭제된다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;이벤트 브로커
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이벤트 또는 메시지라고도 불리는 레코드를 딱 하나만 보관하고 인덱스를 통해 개별 엑세스를 관리&lt;/li&gt;
&lt;li&gt;업무상 필요한 시간동안 이벤트를 보존할 수 있다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 살아있기 때문에 장애시 특정 시점부터 복구 가능&lt;/li&gt;
&lt;li&gt;데이터가 살아있기 때문에 MSA에서도 유용하게 쓰인다&lt;/li&gt;
&lt;li&gt;기타 확장성이 좋다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;주키퍼
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카 관련 정보를 저장하는 역할을 한다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;프로듀서
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 토픽안에 파티션에 프로듀싱 즉 생산하는 역할을한다&lt;/li&gt;
&lt;li&gt;전송 성공여부를 알 수 있고 재시도도 할 수 있다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;컨슈머
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 컨슈밍 즉 토픽안에 파티션에서 데이터를 가져오는 역할을한다&lt;/li&gt;
&lt;li&gt;오프셋 위치를 커밋 할 수 있다&amp;nbsp;&lt;/li&gt;
&lt;li&gt;컨슈머가 여러개일 경우 병렬처리 할 수 있다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨슈머 그룹 아이디를 지정해 컨슈머의 그룹을 만들수 있다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;컨슈머가 데이터를 읽기 시작하면 오프셋을 커밋하게 되는데 이 내용을 카프카 컨슈머 오프셋 토픽에 저장한다
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨슈머가 장애가 있을경우 어디서부터 읽어야 할지 모른다면 카프카 컨슈머 오프셋 토픽에 어디까지 읽었는지 알고 있으므로 복구 가능하다&lt;/li&gt;
&lt;li&gt;컨슈머 오프셋 토픽은 컨슈머 그룹별로 따로 관리하기 때문에 서로 다른 컨슈머 그룹에서 같은 토픽 파티션에 접근 가능하다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;하나의 토픽에 여러 컨슈머가 있는경우
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파티션과 같은 그룹의 컨슈머는 1:1 매칭됨으로 반드시 컨슈머의 개수는 파티션의 개수보다 적거나 같아야한다&lt;/li&gt;
&lt;li&gt;파티션과 서로 다른 그룹의 컨슈머는 동일한 토픽의 파티션에서 데이터를 가져 올 수 있따&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o78xS/btrOwxCZoXT/teNGQ0ftHikOVwATuA7b71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o78xS/btrOwxCZoXT/teNGQ0ftHikOVwATuA7b71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o78xS/btrOwxCZoXT/teNGQ0ftHikOVwATuA7b71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo78xS%2FbtrOwxCZoXT%2FteNGQ0ftHikOVwATuA7b71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;459&quot; height=&quot;244&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F7tML/btrOwwYqkwM/rTanLHFi1kHwfgTzD2efd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F7tML/btrOwwYqkwM/rTanLHFi1kHwfgTzD2efd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F7tML/btrOwwYqkwM/rTanLHFi1kHwfgTzD2efd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF7tML%2FbtrOwwYqkwM%2FrTanLHFi1kHwfgTzD2efd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;244&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;카프카 스트림즈
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카에서 공식적으로 제공하는 자바 라이브러리&lt;/li&gt;
&lt;li&gt;토픽에 있는 데이터를 낮은 지연과 함께 빠르게 처리 가능하다&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;카프카 커넥트
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카 데이터 파이프라인을 편하게 만들어주는 어플리케이션&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : 유튜브 데브원영&lt;/p&gt;</description>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/107</guid>
      <comments>https://updown90.tistory.com/107#entry107comment</comments>
      <pubDate>Thu, 13 Oct 2022 16:48:04 +0900</pubDate>
    </item>
    <item>
      <title>스프링 웹 MVC - 백기선 수강후기</title>
      <link>https://updown90.tistory.com/100</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;419&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0sLEa/btrcvyw6yls/XWpxpJTZGq2cl7vXzDMAF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0sLEa/btrcvyw6yls/XWpxpJTZGq2cl7vXzDMAF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0sLEa/btrcvyw6yls/XWpxpJTZGq2cl7vXzDMAF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0sLEa%2Fbtrcvyw6yls%2FXWpxpJTZGq2cl7vXzDMAF1%2Fimg.png&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;419&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;인프런에서&amp;nbsp;제공하고&amp;nbsp;있는&amp;nbsp;스프링&amp;nbsp;웹&amp;nbsp;MVC&amp;nbsp;-&amp;nbsp;백기선&amp;nbsp;님의&amp;nbsp;강의를&amp;nbsp;수강하고&amp;nbsp;기억하기&amp;nbsp;위해&amp;nbsp;후기를&amp;nbsp;기록하였습니다&lt;br /&gt;&lt;br /&gt;스프링 MVC 동작 원리에 대해 공부하고 실제 어떻게 동작하는지 디버깅해주시면서 강의해 주십니다 (하나씩 디버깅해 주면서 설명해주시니 이해하는데 많은 도움이 되었습니다) 스프링부트를 사용한 버전 사용 안 한 버전 둘 다 개발해보고 어떤 점이 스프링부트 자동설정으로 들어갔는지도 하나씩 디버깅하여 설명해주십니다. 마지막으로 스프링 MVC에 활용법에 대해 유용한 기능에 대해 하나씩 만들어보고 테스트해보면서 설명해주십니다. 이렇게 계속 반복하니 이해하는데 큰 도움이 되었습니다. 그러나 총 강의 시간이 11시간 이라는 점 참고 바랍니다&lt;/p&gt;</description>
      <category>Study</category>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/100</guid>
      <comments>https://updown90.tistory.com/100#entry100comment</comments>
      <pubDate>Wed, 18 Aug 2021 01:10:43 +0900</pubDate>
    </item>
    <item>
      <title>스프링 프레임워크 핵심 기술 - 백기선 수강후기</title>
      <link>https://updown90.tistory.com/99</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;788&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wcnnk/btrb5nqUbbA/TN9rKvvJ6aOZ4G3oDL6080/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wcnnk/btrb5nqUbbA/TN9rKvvJ6aOZ4G3oDL6080/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wcnnk/btrb5nqUbbA/TN9rKvvJ6aOZ4G3oDL6080/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwcnnk%2Fbtrb5nqUbbA%2FTN9rKvvJ6aOZ4G3oDL6080%2Fimg.png&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;788&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;인프런에서 제공하고 있는 스프링&amp;nbsp;프레임워크&amp;nbsp;핵심&amp;nbsp;기술&amp;nbsp;-&amp;nbsp;백기선 님의 강의를 듣고 기억하기 위해 후기를 기록하였습니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;IOC 컨테이너 와 빈 그리고 AOP에 대해 설명해주고 또한, Resource, Validation, 데이터 바인딩과 같은 스프링의 여러 추상 API와 Null 관련 유틸리티 에 대해서 직접 코딩해보고 눈으로 보면서 이해할수 있도록 도와줍니다. IOC와 DI AOP 가 어렵게 공부하려면 한없이 어려운 부분이지만 눈으로 보여주면서 최대한 쉽게 이해할수 있도록 하는 강의여서 좋았습니다. 그러나 초급-&amp;gt; 중급으로 넘어가는 과정의 강의이므로 디테일하게 들어가진 않으니 참고 바랍니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Study</category>
      <author>updown</author>
      <guid isPermaLink="true">https://updown90.tistory.com/99</guid>
      <comments>https://updown90.tistory.com/99#entry99comment</comments>
      <pubDate>Sat, 14 Aug 2021 12:58:20 +0900</pubDate>
    </item>
  </channel>
</rss>