<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Simple in Complex with Simple</title>
    <link>https://makefortune2.tistory.com/</link>
    <description>Simple한 것들이 모여 이룬 복잡함 속의 Simple</description>
    <language>ko</language>
    <pubDate>Tue, 28 Jul 2026 03:45:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>포츈맨</managingEditor>
    <image>
      <title>Simple in Complex with Simple</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2578233E57EDFDD602</url>
      <link>https://makefortune2.tistory.com</link>
    </image>
    <item>
      <title>7. CodeSignal Course Certificate Advanced Built-In Data Structures and their Usage in C++</title>
      <link>https://makefortune2.tistory.com/302</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573?utm_source=linkedin&amp;amp;utm_medium=social&amp;amp;utm_campaign=certificate&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573?utm_source=linkedin&amp;amp;utm_medium=social&amp;amp;utm_campaign=certificate&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733061923638&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;Course certificate for Advanced Built-In Data Structures and their Usage in C++&quot; data-og-description=&quot;Embark on your journey of mastering advanced built-in data structures such as sorted maps, linked lists/queues, and stacks. This course will lay the foundational knowledge required to effectively manipulate these advanced data structures.&quot; data-og-host=&quot;learn.codesignal.com&quot; data-og-source-url=&quot;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573?utm_source=linkedin&amp;amp;utm_medium=social&amp;amp;utm_campaign=certificate&quot; data-og-url=&quot;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ij9bC/hyXGKR1nFS/M8BkQK0E7aFtW9ElNRgd91/img.png?width=2672&amp;amp;height=2004&amp;amp;face=0_0_2672_2004,https://scrap.kakaocdn.net/dn/QQWcg/hyXGCGrsfM/FRLANw8qs9mh7lUrTkgwKk/img.png?width=2672&amp;amp;height=2004&amp;amp;face=0_0_2672_2004,https://scrap.kakaocdn.net/dn/buAbWn/hyXGIfBXbv/hQ3z5KPKVO9qRqTK8ui0h0/img.png?width=1920&amp;amp;height=1440&amp;amp;face=0_0_1920_1440&quot;&gt;&lt;a href=&quot;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573?utm_source=linkedin&amp;amp;utm_medium=social&amp;amp;utm_campaign=certificate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.codesignal.com/certificates/cm3pl1qya0061qqpgr069mcz9/courses/573?utm_source=linkedin&amp;amp;utm_medium=social&amp;amp;utm_campaign=certificate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ij9bC/hyXGKR1nFS/M8BkQK0E7aFtW9ElNRgd91/img.png?width=2672&amp;amp;height=2004&amp;amp;face=0_0_2672_2004,https://scrap.kakaocdn.net/dn/QQWcg/hyXGCGrsfM/FRLANw8qs9mh7lUrTkgwKk/img.png?width=2672&amp;amp;height=2004&amp;amp;face=0_0_2672_2004,https://scrap.kakaocdn.net/dn/buAbWn/hyXGIfBXbv/hQ3z5KPKVO9qRqTK8ui0h0/img.png?width=1920&amp;amp;height=1440&amp;amp;face=0_0_1920_1440');&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;Course certificate for Advanced Built-In Data Structures and their Usage in C++&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Embark on your journey of mastering advanced built-in data structures such as sorted maps, linked lists/queues, and stacks. This course will lay the foundational knowledge required to effectively manipulate these advanced data structures.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.codesignal.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckHNa7/btsK4dzdInJ/3Jvb5m5KMalgKOYwHMJin0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckHNa7/btsK4dzdInJ/3Jvb5m5KMalgKOYwHMJin0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckHNa7/btsK4dzdInJ/3Jvb5m5KMalgKOYwHMJin0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckHNa7%2FbtsK4dzdInJ%2F3Jvb5m5KMalgKOYwHMJin0%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;1316&quot; height=&quot;615&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/302</guid>
      <comments>https://makefortune2.tistory.com/302#entry302comment</comments>
      <pubDate>Sun, 1 Dec 2024 23:05:25 +0900</pubDate>
    </item>
    <item>
      <title>6. Browsing system for Deque</title>
      <link>https://makefortune2.tistory.com/301</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Point&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Browsing system 알고리즘 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Deque의 주요 함수 (push_back, push_front, pop_back, pop_front, front, back)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Problem&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1732977276770&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;With what you've learned about deques, it's time to apply your knowledge to create a more advanced data structure &amp;mdash; a BrowserHistory management system. This system will enable users to visit new URLs, navigate backward and forward through their browsing history, and efficiently manage these operations using deques to handle past and future navigations. Your challenge is to implement the three methods that drive this functionality:

void visit(const std::string&amp;amp; url) &amp;mdash; Adds a new URL to the browsing history and clears any forward history.
std::string back(int steps) &amp;mdash; Moves back in history by the specified number of steps, if possible, and updates the forward history. Returns the current URL after the update.
std::string forward(int steps) &amp;mdash; Moves forward in history by the specified number of steps, if possible, and updates the current browsing history. Returns the current URL after the update.
Example:

visit(&quot;codesignal.com&quot;) - Visits codesignal.com; current history: [&quot;codesignal.com&quot;].
visit(&quot;learn.codesignal.com&quot;) - Visits learn.codesignal.com; current history: [&quot;codesignal.com&quot;, &quot;learn.codesignal.com&quot;].
visit(&quot;learn.codesignal.com/course-paths&quot;) - Visits learn.codesignal.com/course-paths; current history: [&quot;codesignal.com&quot;, &quot;learn.codesignal.com&quot;, &quot;learn.codesignal.com/course-paths&quot;].
back(2) - Moves back 2 steps; current history: [&quot;codesignal.com&quot;]. Returns codesignal.com.
forward(1) - Moves forward 1 step; current history: [&quot;codesignal.com&quot;, &quot;learn.codesignal.com&quot;]. Returns learn.codesignal.com.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732977289079&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;
#include &amp;lt;algorithm&amp;gt;

void BrowserHistory::visit(const std::string &amp;amp;url) {
    // TODO: Add the visited URL to the history and clear the future
    history_.push_back(url);
    future_.clear();
}

std::string BrowserHistory::back(int steps) {
    // TODO: Move the specified number of steps back in the history, if possible, and update the future accordingly
    // std::rotate(history_.rbegin(), history_.rbegin()+steps, history_.rend());
    // Return the current URL after updating
    
    if (history_.empty()) {
        return &quot;No back&quot;;
    }
    
    for (int index = 0; index &amp;lt; steps; ++index) {
        std::string current = history_.back();
        future_.push_front(current);
        history_.pop_back();
        
        if (history_.empty()) {
            return &quot;No back&quot;;
        }
    }
    
    return history_.front();
}

std::string BrowserHistory::forward(int steps) {
    // TODO: Move the specified number of steps forward in the history, if possible, and update the history accordingly
    // Return the current URL after updating
    if (future_.empty()) {
        return &quot;No back&quot;;
    }

    for (int index = 0; index &amp;lt; steps; ++index) {
        std::string current = future_.front();
        history_.push_back(current);
        future_.pop_back();
        
        if (future_.empty()) {
            return &quot;No back&quot;;
        }
    }
    
    return history_.back();
}

int main() {
    BrowserHistory browser;

    // TODO: Use the BrowserHistory class to simulate visiting some URLs, then going back and forward in the history, printing the resulting URL after each move
    
    browser.visit(&quot;codesignal.com&quot;);
    browser.visit(&quot;learn.codesignal.com&quot;);
    browser.visit(&quot;learn.codesignal.com/course-paths&quot;);
    
    std::cout &amp;lt;&amp;lt; browser.back(2) &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; browser.forward(1) &amp;lt;&amp;lt; std::endl;
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/301</guid>
      <comments>https://makefortune2.tistory.com/301#entry301comment</comments>
      <pubDate>Sat, 30 Nov 2024 23:34:58 +0900</pubDate>
    </item>
    <item>
      <title>5. Map using custom object key</title>
      <link>https://makefortune2.tistory.com/300</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Point&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. operator&amp;lt; 오버로딩&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전역으로는 두 객체를 받아 비교하지만 클래스 내부에서는 첫 번째 멤버는 this로 고정이므로 하나의 매개변수를 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 범위형 반복문에서 객체를 const로 선언한다면 getter도 const 선언이 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 비교 연산이 &amp;lt; 일 경우 오름차순, &amp;gt; 일 경우 내림차순이다. STD 컨테이너는 기본적으로 오름차순이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Problem&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1732888512995&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;In this exercise, you will implement a small inventory management system using C++ with Product objects as keys in a std::map. Each Product should have an id (integer) and a name (string). The std::map should automatically sort Product objects by their id using custom sorting logic by overloading the &amp;lt; operator.

Here's what you need to accomplish:

Define the Product class: Include id and name attributes, and overload &amp;lt; to enable sorting by id.

Create and populate the inventory: Define a std::map&amp;lt;Product, int&amp;gt; named inventory where the key is a Product and the value is the stock quantity. Add several Product objects with different id and name values and their respective stock quantities.

Implement product search: Write a findProductById function to search for a Product by id in the inventory. It should find the first product with an id not less than the specified search value and return its name and stock quantity. If no match is found, return a message indicating that the product was not found.

Display the result: Use findProductById to find and print a product by id without removing it from the map.

This task combines object-oriented programming with sorted data structures in C++, focusing on custom sorting and efficient map search. Follow the steps and structure your code accordingly.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732888523162&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;

// TODO: Define a Product class with attributes id (integer) and name (string). 
// Implement operator&amp;lt; for sorting by id.
class Product {
  
private:
    int id;
    std::string name;
    
public:
    Product(int id, std::string name) {
        this-&amp;gt;id = id;
        this-&amp;gt;name = name;
    }

    bool operator&amp;lt;(const Product&amp;amp; other) const {
        return this-&amp;gt;id &amp;lt; other.id;
    }
    
    int getId() const {
        return this-&amp;gt;id;
    }
    
    std::string getName() const {
        return this-&amp;gt;name;
    }
};

std::string findProductById(const std::map&amp;lt;Product, int&amp;gt;&amp;amp; inventory, int id) {
    std::string result;
    
    for (const auto&amp;amp; pair : inventory) {
        if (pair.first.getId() &amp;gt;= id) {
            result = pair.first.getName() + &quot;, &quot; + std::to_string(pair.second);
        }
    }
    
    if (result.empty()) {
        return &quot;The product was not found&quot;;    
    } else {
        return result;   
    }
}

int main() {
    // TODO: Create an instance of std::map named inventory.
    std::map&amp;lt;Product, int&amp;gt; inventory;

    // TODO: Add some Product objects to inventory with different ids and names,
    // associating each Product with an integer stock quantity.
    inventory.insert(std::make_pair(Product(1, &quot;Ice&quot;), 5));
    inventory.insert(std::make_pair(Product(2, &quot;Cream&quot;), 3));
    inventory.insert(std::make_pair(Product(3, &quot;Cookie&quot;), 7));
    inventory.insert(std::make_pair(Product(6, &quot;Snack&quot;), 4));

    // TODO: Implement and use a function to find the first Product object with 
    // an id not less than a specified value, then print it without removing.
    std::cout &amp;lt;&amp;lt; findProductById(inventory, 5) &amp;lt;&amp;lt; std::endl;

    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/300</guid>
      <comments>https://makefortune2.tistory.com/300#entry300comment</comments>
      <pubDate>Fri, 29 Nov 2024 22:55:29 +0900</pubDate>
    </item>
    <item>
      <title>4. Multimap to Map</title>
      <link>https://makefortune2.tistory.com/299</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Point&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. return {};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 Modern C++의 추세.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기화된 객체를 반환.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환 타입에 따라 빈 컨테이너, 기본값, 기본 생성자 호출이 이뤄짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. .find()는 기본적으로 iterator를 반환하며 iterator는 기본적으로 const&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Problem&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1732802832560&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Your journey with std::multimap in C++ has equipped you with the skills to manipulate and traverse multiple key-value pairs efficiently. It's time to apply this knowledge! Imagine you're keeping track of participants' scores in a riveting quiz competition. Your task is to create a std::multimap in C++ to record these scores, possibly with multiple entries per participant. Then, write a function that aggregates all scores for each participant into a std::map, where each participant maps to a vector of scores they received. Your goal is to transform this multimap into a map, encapsulating all scores in a single vector for each participant.

For example, given the input multimap:

Copy to clipboard
{
    {&quot;Olivia&quot;, 85},
    {&quot;Liam&quot;, 92},
    {&quot;Emma&quot;, 95},
    {&quot;Noah&quot;, 90},
    {&quot;Olivia&quot;, 88},
    {&quot;Liam&quot;, 75},
    {&quot;Emma&quot;, 89}
}
The output map should be:

Copy to clipboard
{
    {&quot;Olivia&quot;, [85, 88]},
    {&quot;Liam&quot;, [92, 75]},
    {&quot;Emma&quot;, [95, 89]},
    {&quot;Noah&quot;, [90]}
}
Embark on this challenge and effectively utilize std::multimap and std::map!&lt;/code&gt;&lt;/pre&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;
&lt;pre id=&quot;code_1732802842047&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;

std::map&amp;lt;std::string, std::vector&amp;lt;int&amp;gt;&amp;gt; aggregateScores(const std::multimap&amp;lt;std::string, int&amp;gt;&amp;amp; scores) {
    // TODO: Implement the aggregateScores function which takes a multimap of participant names (string) to scores (int)
    // and returns a map where each participant maps to a vector of their scores.
    
    std::map&amp;lt;std::string, std::vector&amp;lt;int&amp;gt;&amp;gt; map;
    
    for (const auto&amp;amp; score : scores) {
        // IsExist?
        auto it = map.find(score.first);
        if (it != map.end()) {
            // Exist
            it-&amp;gt;second.push_back(score.second);
        } else {
            // Not Exist
            std::vector&amp;lt;int&amp;gt; number;
            number.push_back(score.second);
            map.emplace(std::make_pair(score.first, number));
        }
    }
    
    //return {};
    return map;
}

int main() {
    std::multimap&amp;lt;std::string, int&amp;gt; participantScores = {
        {&quot;Olivia&quot;, 85},
        {&quot;Liam&quot;, 92},
        {&quot;Emma&quot;, 95},
        {&quot;Noah&quot;, 90},
        {&quot;Olivia&quot;, 88},
        {&quot;Liam&quot;, 75},
        {&quot;Emma&quot;, 89}
    };

    std::map&amp;lt;std::string, std::vector&amp;lt;int&amp;gt;&amp;gt; aggregatedScores = aggregateScores(participantScores);
    
    for (const auto&amp;amp; entry : aggregatedScores) {
        std::cout &amp;lt;&amp;lt; &quot;Participant: &quot; &amp;lt;&amp;lt; entry.first &amp;lt;&amp;lt; &quot; - Scores: &quot;;
        for (int score : entry.second) {
            std::cout &amp;lt;&amp;lt; score &amp;lt;&amp;lt; &quot; &quot;;
        }
        std::cout &amp;lt;&amp;lt; std::endl;
    }

    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <category>c++</category>
      <category>Modern C++</category>
      <category>std::map</category>
      <category>std::multimap</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/299</guid>
      <comments>https://makefortune2.tistory.com/299#entry299comment</comments>
      <pubDate>Thu, 28 Nov 2024 23:07:55 +0900</pubDate>
    </item>
    <item>
      <title>1. 왜 우리 회사에 지원했니?</title>
      <link>https://makefortune2.tistory.com/298</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Q:&amp;nbsp;Why&amp;nbsp;do&amp;nbsp;you&amp;nbsp;want&amp;nbsp;to&amp;nbsp;work&amp;nbsp;as&amp;nbsp;a&amp;nbsp;software&amp;nbsp;engineer&amp;nbsp;at&amp;nbsp;our&amp;nbsp;company? &lt;br /&gt;&lt;br /&gt;A:&amp;nbsp;I&amp;nbsp;admire&amp;nbsp;your&amp;nbsp;innovative&amp;nbsp;tech&amp;nbsp;solutions&amp;nbsp;and&amp;nbsp;collaborative&amp;nbsp;culture.&amp;nbsp;My&amp;nbsp;skills&amp;nbsp;in&amp;nbsp;software&amp;nbsp;development&amp;nbsp;and&amp;nbsp;passion&amp;nbsp;for&amp;nbsp;creating&amp;nbsp;efficient&amp;nbsp;code&amp;nbsp;align&amp;nbsp;perfectly&amp;nbsp;with&amp;nbsp;your&amp;nbsp;company&amp;rsquo;s&amp;nbsp;mission,&amp;nbsp;and&amp;nbsp;I&amp;rsquo;m&amp;nbsp;eager&amp;nbsp;to&amp;nbsp;contribute&amp;nbsp;to&amp;nbsp;your&amp;nbsp;team&amp;rsquo;s&amp;nbsp;success. &lt;br /&gt;&lt;br /&gt;Q:&amp;nbsp;Can&amp;nbsp;you&amp;nbsp;describe&amp;nbsp;your&amp;nbsp;software&amp;nbsp;development&amp;nbsp;process? &lt;br /&gt;&lt;br /&gt;A:&amp;nbsp;I&amp;nbsp;gather&amp;nbsp;requirements,&amp;nbsp;design&amp;nbsp;architecture,&amp;nbsp;develop,&amp;nbsp;test,&amp;nbsp;iterate&amp;nbsp;based&amp;nbsp;on&amp;nbsp;feedback,&amp;nbsp;and&amp;nbsp;ensure&amp;nbsp;high-quality&amp;nbsp;deliverables&amp;nbsp;through&amp;nbsp;reviews&amp;nbsp;and&amp;nbsp;testing.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>테크/영어 면접</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/298</guid>
      <comments>https://makefortune2.tistory.com/298#entry298comment</comments>
      <pubDate>Tue, 26 Nov 2024 23:37:21 +0900</pubDate>
    </item>
    <item>
      <title>3. Map &amp;amp; Multimap</title>
      <link>https://makefortune2.tistory.com/297</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Principle: Red-Black Tree&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Header: #include &amp;lt;map&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Methods: find(), count(), empty(), equal_rage()&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Associated: std::next(), std::prev(), std::distance()&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Feature: Map's key must be unique, multimap's key can be duplicated.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Code example:&lt;/p&gt;
&lt;pre id=&quot;code_1732627363640&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;map&amp;gt;

bool checkMultipleOccurrences(const std::string&amp;amp; fruit) {
    // Create a multimap with fruits as keys and their counts as values
    std::multimap&amp;lt;std::string, int&amp;gt; fruitMap = {
        {&quot;apple&quot;, 5},
        {&quot;banana&quot;, 2},
        {&quot;apple&quot;, 3},
        {&quot;orange&quot;, 4},
        {&quot;apple&quot;, 4}
    };

    // TODO: Determine if the given fruit has multiple values and return true or false
    /*
    if (fruitMap.count(fruit) &amp;gt; 1) {
        return true;
    } else {
        return false;
    }
    */
    
    auto range = fruitMap.equal_range(fruit);
    if (std::distance(range.first, range.second) &amp;gt; 1) {
        return true;
    } else {
        return false;
    }
}

int main() {
    bool result = checkMultipleOccurrences(&quot;apple&quot;);
    if (result) {
        std::cout &amp;lt;&amp;lt; &quot;Multiple occurrences found.&quot; &amp;lt;&amp;lt; std::endl;
    } else {
        std::cout &amp;lt;&amp;lt; &quot;No multiple occurrences.&quot; &amp;lt;&amp;lt; std::endl;
    }
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732628073031&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;

std::map&amp;lt;std::string, int&amp;gt; count_event_frequency(const std::multimap&amp;lt;std::string, std::string&amp;gt;&amp;amp; events) {
    // TODO: Implement logic to return the frequency count of each date in the multimap.
    std::map&amp;lt;std::string, int&amp;gt; map;
    
    // multimap에서 꺼내서 map의 키를 검사 후 넣어
    for (const auto&amp;amp; event : events) {
        int count = map.count(event.first);
        if (map.count(event.first) != 0) {
            map.erase(event.first);
        }
        
        map.insert({event.first, count+1});   
    }
    
    return map;
}

int main() {
    // Create a multimap containing dates and their respective events
    std::multimap&amp;lt;std::string, std::string&amp;gt; events = {
        {&quot;2023-06-11&quot;, &quot;Seminar&quot;},
        {&quot;2023-06-11&quot;, &quot;Workshop&quot;},
        {&quot;2023-06-21&quot;, &quot;Concert&quot;},
        {&quot;2023-07-12&quot;, &quot;Conference&quot;},
        {&quot;2023-07-12&quot;, &quot;Meeting&quot;}
    };

    // Get the frequency count of events on each date
    std::map&amp;lt;std::string, int&amp;gt; frequency_count = count_event_frequency(events);

    // Display the frequency count of events
    for (const auto&amp;amp; date : frequency_count) {
        std::cout &amp;lt;&amp;lt; date.first &amp;lt;&amp;lt; &quot;: &quot; &amp;lt;&amp;lt; date.second &amp;lt;&amp;lt; std::endl;
    }
    
    return 0;
}&lt;/code&gt;&lt;/pre&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>
      <category>테크/CodeSignal-C++</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/297</guid>
      <comments>https://makefortune2.tistory.com/297#entry297comment</comments>
      <pubDate>Tue, 26 Nov 2024 22:23:50 +0900</pubDate>
    </item>
    <item>
      <title>기술 스택 점검</title>
      <link>https://makefortune2.tistory.com/296</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;경력: 8년&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어: C++(중급-고급), C# 4년(초급-중급), JAVA 1년(중급), JAVA Script 6개월(초급-중급), Shell Script 2년(초급-중급)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크: WPF (중급), Spring Boot (초급 - 중급)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS: Windows, Ubuntu22.04, CentOS7, Rockylinux8.9&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB: Oracle11g -&amp;gt; 19c, PostgreSQL14&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도구: Visual Studio, Visual Code, Git, GitLab, Jenkins, DBeaver, WSL, Docker + ELK or PG&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenSource: ARIA, JSON&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프라 경험: AWS에 컨테이너 서비스 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행 프로젝트: 인증 시스템 설계 및 개발, OOXML, WPF View, MachineID, ARIA, SentinelSDK DLL&lt;/p&gt;</description>
      <category>테크/기타</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/296</guid>
      <comments>https://makefortune2.tistory.com/296#entry296comment</comments>
      <pubDate>Sat, 23 Nov 2024 23:43:28 +0900</pubDate>
    </item>
    <item>
      <title>2. Queue and Deque</title>
      <link>https://makefortune2.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Principle: FIFO (First In First Out)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Header: &amp;lt;queue&amp;gt;, &amp;lt;deque&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Methods: push(), pop(), front(), empty(), push_front(), push_back(), pop_front(), pop_back(), end(), rend()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Associated: std::rotate() - deque&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Example:&lt;/p&gt;
&lt;pre id=&quot;code_1732628692133&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;In this exercise, you will develop a simple coffee shop order management system using a deque in C++. You will perform the following tasks:

Initialize a deque to manage coffee shop orders with initial drinks: 'Latte', 'Espresso', and 'Cappuccino'.
Add a new order 'Mocha' to the end of the deque.
Simulate a customer's change of mind by moving 'Latte' from the front to the back of the deque.
Serve (remove and print) the first order in the deque, which should be 'Espresso'.
Your goal is to demonstrate effective use of deque operations to simulate line management in a coffee shop.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732628710165&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;

int main() {
    // TODO: Create a deque for coffee shop orders with initial orders 'Latte', 'Espresso', 'Cappuccino'
    std::deque&amp;lt;std::string&amp;gt; orders = {&quot;Latte&quot;, &quot;Espresso&quot;, &quot;Cappuccino&quot;};

    // TODO: A new customer orders a 'Mocha', add it to the end of the deque
    orders.push_back(&quot;Mocha&quot;);

    // TODO: A customer wants their 'Latte' order moved to the end of the deque. Implement it.
    std::rotate(orders.rbegin(), orders.rbegin()+1, orders.rend());

    // TODO: Process (remove and print) the first order in the deque. Which drink is it?
    std::string order = orders.front();
    orders.pop_front();
    std::cout &amp;lt;&amp;lt; order &amp;lt;&amp;lt; std::endl;
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/295</guid>
      <comments>https://makefortune2.tistory.com/295#entry295comment</comments>
      <pubDate>Sat, 23 Nov 2024 23:21:11 +0900</pubDate>
    </item>
    <item>
      <title>1. Stack</title>
      <link>https://makefortune2.tistory.com/294</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Principle: LIFO (First In First Out)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Header: &amp;lt;stack&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Methods: push(), pop(), top()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Examples: Check balance for Parenthesis (), Braces {}, Brackets []&lt;/p&gt;
&lt;pre id=&quot;code_1732631242772&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;You've learned how to use stacks in C++ for various applications. Now, put your knowledge to the test by evaluating an expression in Reverse Polish Notation (also known as postfix notation), where operands precede the operator. In other words, the operator comes after the two numbers on which it is supposed to operate.

Your task is to write a function that processes such an expression and returns the result. Remember, in a Reverse Polish Notation expression like &quot;1 2 + 4 -&quot;, the operation is performed from left to right. This means you first add 1 and 2, and then subtract 4 from the result, getting -1 as a final result.

Assume the expression only includes + and - operators. Hint: you can use std::stoi to convert a (numeric) string into an integer value.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732631254810&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;solution.hpp&quot;

#include &amp;lt;climits&amp;gt;

int evaluate_reverse_polish_notation(const std::string &amp;amp;expression) {
    // TODO: processe a RPN expression and return the result
    std::stack&amp;lt;int&amp;gt; value;
    
    for (const auto&amp;amp; ch : expression) {
        if (ch != ' ') {
            if (ch == '+') {
                if (value.size() &amp;lt; 2) {
                    return INT_MIN;
                }
                
                int back = value.top();
                value.pop();
                int front = value.top();
                value.pop();
                
                value.push(back+front);
            } else if (ch == '-') {
                if (value.size() &amp;lt; 2) {
                    return INT_MIN;
                }
                
                int back = value.top();
                value.pop();
                int front = value.top();
                value.pop();
                
                value.push(front - back);
            } else {
                value.push(ch - '0');
            }
        }
    }
    
    if (value.size() == 1) {
        return value.top();
    } else {
        return INT_MIN;
    }
}


int main() {
    // The expression &quot;1 2 + 4 -&quot; is &quot;(1 + 2) - 4&quot;
    std::cout &amp;lt;&amp;lt; evaluate_reverse_polish_notation(&quot;1 2 + 4 -&quot;) &amp;lt;&amp;lt; std::endl; // Expected output: -1
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>테크/CodeSignal-C++</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/294</guid>
      <comments>https://makefortune2.tistory.com/294#entry294comment</comments>
      <pubDate>Sat, 23 Nov 2024 22:44:04 +0900</pubDate>
    </item>
    <item>
      <title>AWS에서 EC2, Docker(ECS), EKS 비교</title>
      <link>https://makefortune2.tistory.com/293</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;최근 특정 기업의 채용 공고를 보는데 EC2에서 EKS로 넘어갔다고 했다. 나는 오래 전 AWS에서 EC2를 받아서 사용은 해봤지만 EKS는 처음 들었던 단어였기에 생소해서 AI에게 물어보았다. Docker는 조금 다른 개념이긴 하지만 그래도 내 생각으로는 EC는 클라우드 VM과 같은 존재여서 같이 껴넣어서 비교해달라고 했다. 답변을 보고 EKS로 넘어갔다는 것은 그 기업은 EC2를 활용한 인프라에서 쿠버네티스 위에 인프라를 구축했다는 의미라는 것을 알게 되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. EC2 (Elastic Compute Cloud)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS가 제공하는 가상 서버.&lt;/li&gt;
&lt;li&gt;사용자가 OS, 소프트웨어, 네트워크 등 모든 것을 직접 설정 및 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유연성&lt;/b&gt;: 완전한 서버 접근 권한. 원하는 대로 OS와 애플리케이션 설치 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관리 부담&lt;/b&gt;: 패치, 스케일링, 장애 복구 등 모든 관리를 직접 해야 함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;운영 방식&lt;/b&gt;: 전통적인 서버 기반으로, 애플리케이션이 컨테이너화되지 않아도 동작.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;높은 커스터마이징 가능성.&lt;/li&gt;
&lt;li&gt;다양한 워크로드 처리 가능 (웹 서버, DB 서버 등).&lt;/li&gt;
&lt;li&gt;간단한 소규모 프로젝트에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리 복잡도 증가.&lt;/li&gt;
&lt;li&gt;리소스 활용 비효율 가능 (서버 과잉 또는 부족).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Docker&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;컨테이너화 기술&lt;/b&gt;로, 애플리케이션과 필요한 환경을 패키징하여 독립적으로 실행.&lt;/li&gt;
&lt;li&gt;Docker 자체는 AWS 서비스가 아니라 컨테이너화 도구이며, AWS에서는 EC2나 EKS 같은 서비스를 통해 실행.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이식성&lt;/b&gt;: 컨테이너는 어디서나 동일하게 실행.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경량화&lt;/b&gt;: 가상머신(VM)보다 리소스 사용이 적음.&lt;/li&gt;
&lt;li&gt;EC2, ECS, EKS 같은 서비스에서 컨테이너를 실행할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너 환경 관리 필요.&lt;/li&gt;
&lt;li&gt;단독으로는 클러스터링이나 확장 기능 부족 (ECS/EKS와 결합 필요).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. EKS (Elastic Kubernetes Service)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS의 &lt;b&gt;쿠버네티스(Kubernetes)&lt;/b&gt; 관리 서비스.&lt;/li&gt;
&lt;li&gt;컨테이너화된 애플리케이션을 관리하고 확장하며 배포하는 데 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자동화&lt;/b&gt;: 스케일링, 배포, 로드 밸런싱 등 컨테이너 클러스터 관리 자동화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡성&lt;/b&gt;: EC2나 Docker보다 초기 설정과 운영이 복잡할 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관리형 서비스&lt;/b&gt;: AWS가 쿠버네티스의 제어 플레인을 관리하므로 일부 부담 완화.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;러닝 커브가 있음 (쿠버네티스 이해 필요).&lt;/li&gt;
&lt;li&gt;소규모 프로젝트에는 과도한 솔루션일 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 주요 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능/특징EC2Docker (단독)EKS&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;운영 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;전통적인 서버 기반&lt;/td&gt;
&lt;td&gt;컨테이너 기반&lt;/td&gt;
&lt;td&gt;컨테이너 클러스터 기반&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;관리 범위&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;사용자 전담 (OS, 서버 등)&lt;/td&gt;
&lt;td&gt;컨테이너 이미지 관리 필요&lt;/td&gt;
&lt;td&gt;AWS가 제어 플레인 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;자동화 수준&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;제한적 (컨테이너 스케줄링 없음)&lt;/td&gt;
&lt;td&gt;높음 (스케일링, 로드 밸런싱 자동화)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스케일링&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;수동&lt;/td&gt;
&lt;td&gt;제한적&lt;/td&gt;
&lt;td&gt;자동 (노드/컨테이너 수준)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;복잡성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;중간&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;적합한 환경&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;소규모/전통적 애플리케이션&lt;/td&gt;
&lt;td&gt;컨테이너화된 애플리케이션&lt;/td&gt;
&lt;td&gt;대규모 분산 애플리케이션&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 결론&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;EC2&lt;/b&gt;: 서버를 완전히 관리해야 하는 상황에서 사용. 소규모 애플리케이션이나 초기 단계에서 적합.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Docker&lt;/b&gt;: 애플리케이션을 컨테이너화하여 이식성을 높이고 싶을 때 사용. 단일 Docker 실행은 EC2나 ECS에서.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EKS&lt;/b&gt;: 대규모, 복잡한 컨테이너화 애플리케이션을 효율적으로 관리하고 자동화하려면 사용.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>테크/ChatGPT</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>포츈맨</author>
      <guid isPermaLink="true">https://makefortune2.tistory.com/293</guid>
      <comments>https://makefortune2.tistory.com/293#entry293comment</comments>
      <pubDate>Thu, 21 Nov 2024 21:38:12 +0900</pubDate>
    </item>
  </channel>
</rss>