<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>TedDev</title>
    <link>https://teddev.tistory.com/</link>
    <description>일상, 책 그리고 IT, 개발 관련 내용을 남겨요</description>
    <language>ko</language>
    <pubDate>Sun, 31 May 2026 22:26:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>TedDev</managingEditor>
    <image>
      <title>TedDev</title>
      <url>https://tistory1.daumcdn.net/tistory/6258882/attach/855bd190a4c1482da89cf36577abd7e8</url>
      <link>https://teddev.tistory.com</link>
    </image>
    <item>
      <title>[리뷰] 일 잘하는 팀장 :IT 회사에서 살아남은 팀장의 41가지 리더십 기술 - 이재호</title>
      <link>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%9D%BC-%EC%9E%98%ED%95%98%EB%8A%94-%ED%8C%80%EC%9E%A5-IT-%ED%9A%8C%EC%82%AC%EC%97%90%EC%84%9C-%EC%82%B4%EC%95%84%EB%82%A8%EC%9D%80-%ED%8C%80%EC%9E%A5%EC%9D%98-41%EA%B0%80%EC%A7%80-%EB%A6%AC%EB%8D%94%EC%8B%AD-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%9E%AC%ED%98%B8</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pJx5Z/dJMcagdqT7F/kyka35eizMMolzg0wZ0ROk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pJx5Z/dJMcagdqT7F/kyka35eizMMolzg0wZ0ROk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pJx5Z/dJMcagdqT7F/kyka35eizMMolzg0wZ0ROk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpJx5Z%2FdJMcagdqT7F%2Fkyka35eizMMolzg0wZ0ROk%2Fimg.jpg&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;400&quot; height=&quot;553&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;553&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;div id=&quot;SE-9626d47d-3786-4667-92c1-8584323e65cd&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-75caeb90-8ea9-4178-ae86-aa1f89693b1d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;매니저 역할에 대한 고민은 계속 하게 되는 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1b574d90-3160-422f-9547-dd248af99b84&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;자연히 팀장, 관리자 역할과 관련된 책에 관심이 쏠릴 수 밖에 없는데 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-293319f5-24af-4d31-ae25-275d0b085b40&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 책은 관리자로서 생길 수 있는 상황, 고민 등을 개별 케이스와 주제로 나열해서 솔루션이나 접근하는 방향 등을 이해하기 쉽게 정리해 놓은 책이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-732e4055-8a2c-4b42-8e81-aef30810e57f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특정 상황에서 취할 수 있는 구체적인 행동이나 방법을 고민할 때 방향성을 먼저 정하고 꼭 염두에 두어야 하는 포인트 등을 확인할 수 있는 좋은 의견들이 많은 책이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-26ded1d9-9f26-4b72-aad8-2bf8ba64191d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6ba253ce-02c3-432e-a1dc-93cf5521703d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&quot;공감&quot;, &quot;구성원과의 잦은 소통을 통한 탐색&quot; 등이 언급되는데 리더로서의 본인만의 가치관이나 신념을 정립하는데도 도움이 될 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4442e975-fdff-40cd-8def-a5e27d94b102&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-30eeff3b-e68b-4f8d-90e0-91d1e473faab&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래는 리더의 역할에 대한 내용 위주로 정리해보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;div id=&quot;SE-4523318d-d45a-4e6a-8d8b-c09c59d1b9a9&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-102dde6e-da1f-4664-aa81-0889c960c641&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;리더의 역할&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;감독(director) : 방향(프로젝트, 구성원의 성장)을 제시하고 길을 잃지 않게 만드는 사람&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;관리자(manager) : 팀의 동력을 유지하고 프로젝트를 위기로부터 보호하는 사람&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;업무관리, 사람관리, 외부환경 관리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;팀이 목적을 이루도록 하는 것을 우선시 해야한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;리더가 자리를 비워도 좋은 성과를 낼 수 있는 팀을 만드는 것&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-84906042-9909-4b22-a83e-265d6380f513&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-84e8978c-80f9-4bde-8c8b-d83bd2e20b75&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;구성원으로부터 신뢰를 얻는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;구성원들과 팀과 프로젝트에 관해 많은 이야기를 나누는 것이 필요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;거짓말을 하지 말아야 한다. &lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;자신이 한 말을 행동으로 뒷받침해야 한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;가능한 숨기는 것이 없도록 노력해야 한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;평가에 대해 공정해야 한다. 그러기 위해서는 자신이 경험하지 못한 부분에 대해 이해의 폭을 넓혀야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-ae342bdf-2cf7-45a8-ab1e-967da7645269&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1d51dde3-d84d-4098-a742-34e525f92933&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;팀의 목표를 세우는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;모두가 동일하게 해석할 수 있도록 구체적이고 명확하게 설정해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;팀의 목표와 조직의 목표를 연결시키고 팀의 목표가 어떻게 조직의 성과에 공헌하는지 분명하게 선언&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;SMART기법&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Specific(구체적), Measurable(측정가능), Achievable(달성 가능), Relevant(장기적 비전과 연결), Time-bound(기한이 정해짐)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-82cf7891-2c75-4418-8295-fd84ffeef48f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-949de45d-6125-4459-9a3e-1d8185efa231&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;팀워크 형성할 때 중요한 점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;프로젝트가 갖는 의미와 그 안에서 각자가 수행하는 역할의 중요성을 마음속에 심어줄 필요가 있다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;조직을 구성하는 구성원들이 동일한 수준의 정보를 보유할 수 있도록 신경써야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;팀이 위기에 빠졌을 때도 긍정적인 분위기를 유지하기 위해 노력 필요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;성공적인 결과에 관한 메시지가 팀 안에서 계속 교환되도록 하는 것이 도움된다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-e23ba83a-34db-4163-ae98-34c316cacfb1&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fc3ebb60-1182-4ad7-bd4c-00648a749093&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;구성원 사이에 불화가 생겼다면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;불화가 발견되었을 때는 가장 먼저 당사자의 감정에 &lt;/span&gt;&lt;span&gt;&lt;b&gt;공감&lt;/b&gt;&lt;/span&gt;&lt;span&gt;해 주는 것 (마음을 진정시키는 것)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;특히 감정적인 문제의 해결은 언제나 공감에서부터 시작한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;사실에 기반하여 문제를 확인한다. (추론과 평가는 가급적 배제한다.)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;커뮤니케이션에 각별한 주의가 필요하다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-cc0288cd-a435-4a9e-b030-02c2035f303d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cc20351b-9422-4083-b5b2-db0c99f6a8d0&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;팀의 갈등을 관리하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;갈등을 예방한다 - 서로 다를 수 있다는 것을 받아들이기 위해서 서로를 이해할 필요가 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;사람들과 대화를 많이 나누고 행동을 관찰하면서 갈등을 탐색한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;갈등을 해소할 때는 이슈와 사람을 분리하는 것이 중요 - 절대 사람이 문제가 있다는 식으로 발전하면 안된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-2e953abf-71f9-4b9c-b8b8-a589e3e32363&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-77ad9c2a-0d8c-4aeb-841b-fe70c8dcad9a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;팀의 생산성을 관리하는 법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;가장 치명적으로 악영향을 끼치는 요소를 탐색 - 이를 위해서 구성원들과 커뮤니케이션 필요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;물리적인 환경, 잦은 업무 전환, 필요하지 않은 회의 등 몰입을 방해하는 요소 제거&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;명확하고 구체적인 소통&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-aebf09e2-1abb-42e5-8209-9bfa9e15f447&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-246f6340-6ea0-40a2-ae69-4565633492a6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;구성원에게 동기부여하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;각 구성원이 가진 동기를 이해한다. - 각자 중요하게 생각하는 요소 파악 필요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;자신감과 심어주고 실패에 따른 두려움이 생기지 않도록 격려&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;적절한 보상 - 경제적인 보상 뿐만 아니라 구성원의 노력을 인정하는 상징적인 행위 (칭찬, 박수, 선물 등)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-90a46837-d75e-4a59-9a0f-daed0c417d9b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ba98acae-9347-406b-bf49-823bf6942a4b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;팀이 성장하려면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;현재 상태를 알아야 한다 - 조직의 강점, 약점, 시장의 상황과 경쟁조건 등의 이해&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;성장을 위한 학습을 습관으로 만들도록 노력&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;새로운 것을 학습했다면 그것을 조직의 업무에 어떻게 적용할지 고민&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-3f11273f-ef15-46c7-ae72-9d2c750e4683&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-592eaf4b-d6eb-4f8f-8446-525fec129b72&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;실패를 대하는 자세&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;실패로부터 배우려는 행동에 보상한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;실패를 다루는 프로세스를 정비한다. - 실패 분석 담당자 지정, 히스토리 정리, 관련 사람들과 대화 등&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;실패에 대한 회고 내용을 모든 팀이 활용할 수 있도록 자료로 모아둔다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;실패는 묻어버리면 그냥 경험이 되지만 잘 활용하면 역량이 된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-12a0e47b-1b9d-49c8-bcf4-69bd948b6116&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-502211eb-d2d4-4e00-a2b1-24b5c1979757&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;코칭 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;코칭에 필요한 것 : 정확한 목표, 구성원의 성장에 시간을 투자할 의지, 상호작용&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;코칭이 이루어졌으면 그것을 실무에서 활용할 수 있게 해준다. 그에 따른 책임과 권한을 부여한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;코칭은 성장이 목적임을 잊지 않는다 - 구성원이 얼마나 빠르게 성장하고 있는지 확인 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-70ee23db-31af-4560-923a-3e67e17893cb&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7ebed77f-a79a-4bfc-93a1-37c6e07848d2&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;간과하지 말아야할 팀원 평가 기준&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;팀 분위기에 영향을 미치는 긍정적인 에너지&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;조율과 화합&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;불편한 얘기라도 솔직하게 의견을 주는 팀원 - 실수를 미연에 방지하는 기회를 얻게 됨&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;코드 재정리, 문서작업, 간식 주문이나 물품수령 등 누군가는 해야하는 잡일을 도맡아 해서 나머지 사람이 자기 작업에 집중할 수 있게 하는 팀원&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;엉뚱한 의견을 자주 제시해서 생각의 폭을 넓혀주는 팀원&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-11cf8974-4d29-45f4-bfee-1f75ff81666f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b44ee0fd-ff5f-4179-b00f-4b532e9a693a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;성과로 이어지는 평가 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;평가 기준이 명확하고 이해하기 쉬워야 하며 변하면 안된다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;현재 상태를 자주 확인시켜 주어야 한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;눈에 보이지 않는 성과가 확실하지 않은 작업을 정당하게 평가하려는 노력이 필요하다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;부당하게 좋은 평가를 받으려는 시도를 감지해야 한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;회사가 중요하게 생각하는 가치와 연결되어 있어야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>책</category>
      <category>리더십</category>
      <category>이재호</category>
      <category>일잘하는팀장</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/195</guid>
      <comments>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%9D%BC-%EC%9E%98%ED%95%98%EB%8A%94-%ED%8C%80%EC%9E%A5-IT-%ED%9A%8C%EC%82%AC%EC%97%90%EC%84%9C-%EC%82%B4%EC%95%84%EB%82%A8%EC%9D%80-%ED%8C%80%EC%9E%A5%EC%9D%98-41%EA%B0%80%EC%A7%80-%EB%A6%AC%EB%8D%94%EC%8B%AD-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%9E%AC%ED%98%B8#entry195comment</comments>
      <pubDate>Wed, 18 Feb 2026 20:00:43 +0900</pubDate>
    </item>
    <item>
      <title>아웃박스 패턴 (Outbox Pattern)</title>
      <link>https://teddev.tistory.com/entry/%EC%95%84%EC%9B%83%EB%B0%95%EC%8A%A4-%ED%8C%A8%ED%84%B4-Outbox-Pattern</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;분산 시스템을 구축할 때 가장 어려운 문제 중 하나는 데이터베이스 상태 변경과 이벤트 메시지 발행 사이의 일관성을 유지하는 것이다. 이를 도와줄 수 있는 것이 아웃박스 패턴(Outbox Pattern)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 아웃박스 패턴이 왜 필요할까&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로서비스 아키텍처에서 서비스들은 메시지 브로커(Kafka, RabbitMQ 등)를 통해 비동기적으로 통신하며 서로의 상태 변화를 전달한다.&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;&lt;b&gt;일반적인 문제 시나리오&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;데이터베이스 업데이트&lt;/b&gt; : 주문 서비스는 트랜잭션을 열고 주문 테이블에 새로운 주문 정보를 저장한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메시지 발행&lt;/b&gt; : 주문 서비스는 메시지 브로커로 주문 생성 이벤트를 발행하려 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 1번이 성공한 직후 네트워크 문제나 브로커 다운 등으로 메시지 발행에 실패한다면 데이터베이스에는 주문이 있지만 다른 서비스들은 이 주문 발생 사실은 알 수가 없게 된다.&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;아웃박스 패턴은 이 두 작업을 하나의 데이터베이스 트랜잭션 안에 묶어 이 문제를 원자적으로 해결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 아웃박스 패턴이 구조와 동작 원리&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;아웃박스 테이블 (Outbox Table)&lt;/h4&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;비즈니스 데이터 테이블(예: Order)과 아웃박스 테이블(Outbox)에 대한 쓰기 작업은 반드시 동일한 트랜잭션 내에서 이루어져야 한다.&lt;/li&gt;
&lt;li&gt;아웃박스 테이블 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 136px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;필드명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;타입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;id&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;UUID&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;고유 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;aggregate_id&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;이벤트가 발생한 엔티티의 ID&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;aggregate_type&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;엔티티의 타입 (예: Order)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;type&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;이벤트의 타입 (예: 주문 생성)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;payload&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;JSON&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;이벤트 내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;created_at&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;TIMESTAMP&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;발생일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;processed&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;BOOLEAN&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;메시지 브로커로 전송되었는지 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;애플리케이션 서비스 (Application Service)&lt;/h4&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;pre id=&quot;code_1765701545402&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BEGIN TRANSACTION;

-- 1. 비즈니스 데이터 업데이트
INSERT INTO Orders (id, user_id, status) VALUES ('123', 'userA', 'PENDING');

-- 2. 아웃박스 레코드 저장 (동일 트랜잭션 내)
INSERT INTO Outbox (aggregate_id, type, payload) 
VALUES ('123', 'OrderCreated', '{&quot;orderId&quot;: &quot;123&quot;, &quot;amount&quot;: 1000}');

COMMIT;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;릴레이 서비스 (Relay/Publisher Service)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아웃박스 테이블을 모니터링하고 저장된 이벤트를 메시지 브로커로 전송하는 독립적인 프로세스&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;구현 방식&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Polling (폴링)&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;릴레이 서비스가 주기적으로 Outbox 테이블을 쿼리하여 처리되지 않은 레코드를 찾아 메시지를 발행한 뒤 해당 레코드의 상태를 True로 업데이트 한다&lt;/li&gt;
&lt;li&gt;구현이 간단하지만 빈번한 쿼리로 인한 DB 부하가 발생할 수 있고 메시지 발행 지연 시간이 발생한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transaction Log Tailing (CDC - Change Data Capture)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Debezium과 같은 CDC 도구를 사용하여 DB의 트랜잭션 로그(Binlog, WAL)를 실시간으로 모니터링한다. Outbox 테이블에 INSERT 작업이 감지되면 해당 레코드를 즉시 메시지 브로커로 전송한다&lt;/li&gt;
&lt;li&gt;실시간에 가까운 이벤트 발행이 가능하며 DB에 추가적인 폴링 부하를 주지 않는다. 다만 별도의 CDC 도구를 도입해야 하므로 설정이 복잡해진다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Blank document - Page 1 (1).png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXlQ9/dJMcabJwki5/2sD871omOwOyrBNUMeqWN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXlQ9/dJMcabJwki5/2sD871omOwOyrBNUMeqWN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXlQ9/dJMcabJwki5/2sD871omOwOyrBNUMeqWN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXlQ9%2FdJMcabJwki5%2F2sD871omOwOyrBNUMeqWN0%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;738&quot; height=&quot;619&quot; data-filename=&quot;Blank document - Page 1 (1).png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1554&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;h3 data-ke-size=&quot;size23&quot;&gt;3. 아웃박스 패턴의 장점과 고려 사항&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;아웃박스 패턴의 주요 장점&lt;/h4&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; : 메시지 브로커가 다운되더라도 이벤트는 DB에 안전하게 저장되어 있으므로 브로커가 복구되면 릴레이 서비스가 전송을 재시도할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분산 트랜잭션 회피&lt;/b&gt; : 복잡하고 느린 2PC(2-Phase Commit) 방식이나 사가(Saga) 패턴의 복잡성을 로컬 트랜재션으로 단순화할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;고려 사항&lt;/h4&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; : 이 패턴은 로컬 트랜잭션의 성공을 보장할 뿐 메시지를 수신한 다른 서비스의 트랜잭션 성공까지 보장하지는 않는다. 수신 측 서비스는 멱등성(Idempotency)을 갖춰야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메시지 순서&lt;/b&gt; : 발행 시간을 기준으로 순서를 보장해야 한다. (CDC 방식에서는 DB로그의 순서가 보장되므로 유리하다)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관리 복잡성&lt;/b&gt; : 릴레이 서비스라는 별도의 프로세스를 운영하고 관리해야 하는 오버헤드가 추가된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아웃박스 패턴은 마이크로서비스 환경에서 이벤트 기반 통신의 신뢰성을 확보하기 위한 가장 강력하고 검증된 패턴 중 하나이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CDC 도구와 함께 사용한다면 효율성과 안정성 모두를 잡는 세련된 아키텍처를 구축할 수 있다.&lt;/p&gt;</description>
      <category>개발이론/Architecture</category>
      <category>마이크로서비스</category>
      <category>아웃박스패턴</category>
      <category>아키텍처</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/194</guid>
      <comments>https://teddev.tistory.com/entry/%EC%95%84%EC%9B%83%EB%B0%95%EC%8A%A4-%ED%8C%A8%ED%84%B4-Outbox-Pattern#entry194comment</comments>
      <pubDate>Sun, 14 Dec 2025 18:08:12 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 개발 7년차, 매니저 1일차 - 카미유 푸르니에</title>
      <link>https://teddev.tistory.com/entry/XFile</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1687&quot; data-origin-height=&quot;2449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ryDQm/dJMcadUNTyF/94k38dkHzJk9kzPYcLH4n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ryDQm/dJMcadUNTyF/94k38dkHzJk9kzPYcLH4n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ryDQm/dJMcadUNTyF/94k38dkHzJk9kzPYcLH4n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FryDQm%2FdJMcadUNTyF%2F94k38dkHzJk9kzPYcLH4n1%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;598&quot; height=&quot;868&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1687&quot; data-origin-height=&quot;2449&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;최근 이직을 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이직을 하면서 역할이 변경되었는데&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;개발자에서 엔지니어링 매니저로서 새로운 도전을 하게 된 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 막상 제대로 매니저 역할을 하려니 내가 당장 무엇을 해야할지 잘 모르겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;전혀 감도 안오고 그래서&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;우선 당장 내가 해볼 수 있는 구체적이고 명확한 액션 포인트가 무엇인지에 대한 도움이 필요했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사람관리&lt;/b&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;/li&gt;
&lt;li&gt;정기적으로 원온원 미팅하기&lt;/li&gt;
&lt;li&gt;경력 성장, 목표 달성, 개선된 영역 및 근거 있는 칭찬 등 정기적인 피드백 하기&lt;/li&gt;
&lt;li&gt;팀원이 학습할 영역을 찾고 프로젝트 업무, 외부 교육이나 멘토링 등을 통해 성장 돕기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;팀 관리&lt;/b&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;/li&gt;
&lt;li&gt;가치 있는 프로젝트를 선정하여 팀이 이에 집중할 수 있도록 한다.&lt;/li&gt;
&lt;li&gt;제품 리드와 긴밀한 협력 관계를 유지하고 프로젝트 번위를 관리하고 기술 산출물이 요구사항을 충족하도록 한다.&lt;/li&gt;
&lt;li&gt;팀의 필요 인원을 파악하고 이를 충원할 수 있는 계획을 세우고 채용을 할 수 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발 조직의 건강도 확인법&lt;/b&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;/li&gt;
&lt;li&gt;코드 체크인 빈도 : 진행 중인 작업을 작은 단위로 세분화 하고 정기적으로 확인할 수 있는 환경인지 체크한다.&lt;/li&gt;
&lt;li&gt;문제 발생 빈도 : 안정적인 시스템을 위해 문제 발생 빈도를 파악하고 이를 해결하거나 예방해야 한다. 하지만 문제 에방을 너무 강조하는 것도 팀이 낼 수 있는 생산성을 저하시키는 요인이 되므로 적절한 조절이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-28bbf6f4-f553-4051-a660-3aeffe0ad7f1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;거절 전략&lt;/b&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;단순히 &quot;아니요&quot; 라고 하는 것보다 &quot;네, 그리고&quot; 전략을 쓴다. (긍정적인 거절)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) &quot;네, 그 프로젝트 할 수 있어요. 현재 로드맵의 다른 프로젝트의 시작을 늦추면 돼요&quot;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;네&quot; 를 끌어내기 위해 필요한 요구사항과 결정을 고민할 때 참고할 몇 가지 가이드라인을 만든다. - 원칙을 만든다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) 새로운 언어나 기술을 반영하고 싶어 하는 팀원이 있는데 현재 상황에 대해 이해를 시키고 싶을 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;제가 '네' 라고 말할 수 있게 도와주세요&quot; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시간과 예산을 요청한다. 현재의 업무 부담을 쉽게 설명하고 왜 조정하기 어려운지 이해시키는 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아군을 만든다. 거절이 필요할 때 다른 팀의 도움을 받을 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;얼버무리지 않는다. 틀리더라도 위험도 낮고 영향력이 크지 않은 결정은 신속하게 거절한다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-910e83e0-1d3e-4c9c-b59a-b341f06800c2&quot; 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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;매니저는 경영층이 개발 팀에게 요구하는 사항과 개발팀의 현실을 조율하고&lt;br /&gt;소프트웨어 사용자의 목소리를 경청하고 채용과 비용 절감을 고민하고&lt;br /&gt;소프트웨어 제품의 출시 기간을 결정하고&lt;br /&gt;인사 부서와 함께 직원의 복지 문제를 논의하고&lt;br /&gt;평가를 통해 연봉과 보너스 수준을 결정하고&lt;br /&gt;개발자의 불만과 의견을 접수하고&lt;br /&gt;개발자 문화를 어떻게 개선할지 고민하는 일을 수행한다&lt;/blockquote&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;&amp;nbsp;&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책은 &quot;개발을 잘하던 사람&quot;이 &quot;사람과 일, 조직을 책임지는 매니저&quot;로 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;역할이 바뀌며 반드시 마주하는 관점의 변화에 집중하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 개발자에서 테크리드, 팀장, 여러 팀을 관리하는 CTO 등 각 단계별로 좋은 매니저의 모습을 설명하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해보면 당연한 얘기이긴 한데 &quot;정답&quot;, &quot;행동&quot;을 제시히기 보다는 매니저로서 어떤 고민을 해야하는지를 안내하는 듯하다.&amp;nbsp;&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;지금은 초보 매니저로서 조금 더 구체적이고 실행할 수 있는 내용이 더 담겨있었으면 했던 생각도 있었지만 분명 시간이 지나면서 생길 수 있는 고민에 도움이 될만한 내용과 노하우가 많이 담겨있는 것 같다는 느낌이었다.&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>
      <category>책</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/193</guid>
      <comments>https://teddev.tistory.com/entry/XFile#entry193comment</comments>
      <pubDate>Sat, 13 Dec 2025 18:39:00 +0900</pubDate>
    </item>
    <item>
      <title>Spring Cloud Data Flow (SCDF)</title>
      <link>https://teddev.tistory.com/entry/Spring-Cloud-Data-Flow-SCDF</link>
      <description>&lt;div id=&quot;SE-bd00d294-413b-49c5-8a33-b382378eadc3&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;SE-cc98fac9-5a13-405f-85c4-d0baaf7960a6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;Spring Cloud Data Flow 란?&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8948245f-185d-4b78-8ffb-599cfe3bcebb&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-1d45e8ed-0d1d-4f82-8ab9-d35f67c4c4be&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실시간 데이터 파이프라인(stream)과 배치(job)을 손쉽게 정의, 배포, 운영할 수 있게 해주는 오케스트레이션 플랫폼&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-089cdf10-bc6d-45bf-a595-8eb4bea9b565&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉, SCDF 자체는 데이터를 처리하지 않고 &quot;데이터를 처리하는 마이크로 서비스들을 조합, 배포, 관리하는 관리자&quot; 역할을 한다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0bac6e73-3b93-40d0-8166-0230f19af269&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e4809f03-cec4-4f66-baa6-d9614002b73f&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;SE-26435355-9432-4e10-910e-0185adcd2b5b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;핵심 구성요소&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7c531bd8-d666-44df-a14a-a3b19b556de0&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;Data Flow Server&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;SCDF의 두뇌 (컨트롤 플레인)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;사용자가 정의한 Stream/Task 정보를 저장하고 &quot;어떻게 배포할지&quot; Skipper에 명령을 내린다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Web Dashboard, CLI, REST API 모두 여기로 요청이 들어옴&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;Skipper Server&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;배포 관리자 (Deployment Manager)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;롤링 업데이트, Blue-Green 방식, 롤백 등을 지원&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Kubernetes, CloudFoundry, Local 등 다양한 플랫폼에 실제로 앱을 배포함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;Kubernetes Cluster&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Source/Processor/Sink 앱(스트림 구성요소)이 실제 배포되는 곳&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;배포된 앱들은 Kafka(or RabbitMQ) 기반으로 서로 이벤트 전달&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;Message Broker (Kafka or RabbitMQ)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Stream 앱 간의 연결 통로&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Source -&amp;gt; Processor -&amp;gt; Sink 데이터를 실시간으로 흘려보냄&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Kafka를 쓰면 대규모 스트리밍 처리에 적합함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;Dashboard (UI)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;스트림 DAG 구성&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;배포/모니터링&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;메트릭 확인(Prometheus 연동)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8415fe67-c839-48b2-938c-6a37c86c9d2f&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSQ4BX/dJMb99ZbQvE/LBUi97bCI1KGRryPy32Km1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSQ4BX/dJMb99ZbQvE/LBUi97bCI1KGRryPy32Km1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSQ4BX/dJMb99ZbQvE/LBUi97bCI1KGRryPy32Km1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSQ4BX%2FdJMb99ZbQvE%2FLBUi97bCI1KGRryPy32Km1%2Fimg.jpg&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;582&quot; height=&quot;310&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-232c6d8e-2e67-429e-8726-999ef6b955a4&quot; style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;a href=&quot;https://dataflow.spring.io/docs/concepts/architecture/&quot;&gt;https://dataflow.spring.io/docs/concepts/architecture/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7e328bcb-d1f0-4204-8f19-7ae150046368&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-7ef2f635-6f5c-42f1-8897-a8c4f0b78f59&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-30010bb7-30f4-4fad-bb05-57d4dbc65de7&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-ed2fe8d4-d20e-42f1-8532-d9bedcc0a81b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;Stream 구조 (Source -&amp;gt; Processor -&amp;gt; Sink)&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-02b33513-7b3e-48b4-945b-6739ece356a0&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-cf495f5b-2599-4976-8e6c-c0b5e01bd2e6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;스트림은 Source, Processor, Sink 의 파이프라인으로 구성된다&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Source : 외부 데이터(HTTP, MQTT, Kafka, S3 등) 수집&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Processor : 데이터 변환, 필터링, ML inference 등&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Sink : DB, Kafka, Elastisearch, S3 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-889b2a90-98ff-44fa-8f9f-8d4b7be8e0e6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3697d565-1e4f-4daf-a060-69730578756e&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-6135bae0-5d31-47c1-8edd-ef2ea0b9ddb8&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;배치(Task) 구조&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7d977068-69f5-4343-a8b3-3447a8de50b9&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-0bf9980b-1395-4f47-8238-8c2f52f86ab9&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Task는 Stream 과 달리 한 번 실행되는 Job (Spring Batch 기반)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c49f26fe-e293-4ed8-ac55-806f11e9d715&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Skipper가 Kubernetes Job으로 실행 -&amp;gt; 완료되면 Pod 종료&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-862de0f5-b495-41e4-af45-af0e6f8133aa&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7c789b97-9c9b-4895-ab20-3d39df15f1f4&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;SE-0ab0b795-c99a-49ad-8636-3b79b5ca5883&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;SCDF의 장점&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8012493d-20d2-4e10-a055-67597d63f0d0&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;&lt;span&gt;스트림을 코드 없이 GUI로 구성&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Kafka 기반 데이터 파이프라인을 개발자 없이 운영, 데이터팀이 직접 수정 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;&lt;span&gt;롤링 업데이트 + 롤백 기본 지원&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Pipeline을 수정해도 Skipper가 안전하게 배포&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;&lt;span&gt;Spring 생태계와 완전 호환&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Spring Cloud Stream, Spring Batch 기반 -&amp;gt; 기존 스프링 앱과 쉽게 통합됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;&lt;span&gt;Kubernetes 네이티브 실행&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;HPA&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Prometheus/Grafana 메트릭&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;ConfigMap + Secret 관리&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Blue/Green Deployment&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;&lt;span&gt;운영 안정성&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;Kafka 장애 감지, retry, DLQ 등 운영 기능 내장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>개발이론/Spring</category>
      <category>SCDF</category>
      <category>Spring</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/192</guid>
      <comments>https://teddev.tistory.com/entry/Spring-Cloud-Data-Flow-SCDF#entry192comment</comments>
      <pubDate>Mon, 8 Dec 2025 19:48:42 +0900</pubDate>
    </item>
    <item>
      <title>모듈러 모놀리식 아키텍처 (Modular Monolithic Architecture)</title>
      <link>https://teddev.tistory.com/entry/%EB%AA%A8%EB%93%88%EB%9F%AC-%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-Modular-Monolithic-Architecture</link>
      <description>&lt;div id=&quot;SE-68f6ea06-03d0-4081-955d-011ec9ccb80b&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-f5c32269-7f03-4576-9a68-134e435507f6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모듈러 모놀리식 아키텍처는 전통적인 모놀리식 아키텍처의 강점을 유지하면서 마이크로서비스의 모듈화 원칙을 적용한 아키텍처이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ae96e982-762f-4644-b5ac-0475c313cc8a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-d6b4f128-fc55-47fb-941a-fe7a5927a9eb&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-e0b9efdd-47a9-4259-a7fd-3dccb0a5975c&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;핵심 개념&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a3847293-332c-44b5-9172-c18f01b00bdb&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-1bc535ab-ac69-4cbd-9db2-acaebb4bff0a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;단일 배포 단위 + 높은 모듈화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;애플리케이션은 하나의 프로세스로 배포되지만 내부적으로는 명확히 분리된 모듈들로 구성된다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;각 모듈은 독립적인 도메인 책임을 가지며 명확한 인터페이스를 통해서만 통신한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-aec288d3-bee0-431e-b7e7-deb0d7525a5b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5aa05242-bd1d-465f-be48-c6adaa13ad12&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-308c9923-5b8c-470c-913b-e76a908e1803&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;주요 특정&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-cadbc2e1-d4f3-4a0e-ac64-d7684b4265aa&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;강한 모듈 경계&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;각 모듈은 자체 데이터베이스 스키마나 테이블을 가질 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;다른 모듈의 내부 구현에 직접 접근할 수 없다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;공개 API/인터페이스를 통해서만 상호작용한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;독립적인 개발&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;각 모듈은 독립적인 팀이 담당할 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;모듈 내부 변경이 다른 모듈에 영향을 주지 않는다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;단, 공개 인터페이스 변경 시에는 조율이 필요하다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;&lt;b&gt;단순한 운영&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;단일 배포로 전체 시스템이 업데이트 된다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;분산 시스템의 복잡성(네트워크 지연, 장애 처리 등)이 없다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;트랜잭션 관리가 단순하다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;SE-54f19249-b4fe-42e1-b5ed-ad073fbdf2d5&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-55083322-b21f-4462-ba95-4854d0e6617f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1f30aef6-5232-4c78-b4ea-80a5eda463a2&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-0c4471a3-f9d0-4e83-b782-8f203c2c33a6&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;예시&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0c366c65-1a4c-44af-bc2c-d726b34ef493&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RK7Y0/dJMb99ZbcCW/wGbMjmafU5Bd1IHiJGM1wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RK7Y0/dJMb99ZbcCW/wGbMjmafU5Bd1IHiJGM1wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RK7Y0/dJMb99ZbcCW/wGbMjmafU5Bd1IHiJGM1wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRK7Y0%2FdJMb99ZbcCW%2FwGbMjmafU5Bd1IHiJGM1wK%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;441&quot; height=&quot;532&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8a2fbbd9-0445-4771-9cb8-f0238c9ad20c&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-fc0e877a-a3c9-48ce-af0a-06e44d917171&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;모듈 간 통신 패턴&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-405e3f11-1a05-4ca7-9719-abc4594e69df&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;각 모듈의 공개된 인터페이스 호출&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;이벤트 기반 통신&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;SE-e5d052bb-372e-46dd-b229-0f48c9484fbd&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-23c21e6c-5e5c-4bd7-a278-c0ef8506f007&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e7066c30-2771-42ce-a843-2c5928de98f3&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-582f498d-b42b-4888-b54e-b512baca3157&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;장점&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-21b3c9c5-719f-40c6-a160-6f187f12b1ce&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;개발 단순성 : 마이크로서비스보다 훨씬 단순하다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;운영 용이성 : 배포, 모니터링, 디버깅이 쉽다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;성능 : 네트워크 오버헤드가 없고 트랜잭션 처리가 단순하다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;점진적 진화 : 필요시 특정 모듈을 마이크로서비스로 분리할 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;낮은 인프라 비용 : 단일 서버로 시작 가능하다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-ccb58806-2846-46f2-befe-ddb4ba4b9525&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-94fd84b9-8f4e-424e-a521-7e3434dc100e&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-f893c1ec-3a34-4d5f-bd57-344c9d753840&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;단점&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3b43143e-ad0b-4473-b4c8-4c7264d8e2f1&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;확장성 제약 : 전체를 함께 스케일링 해야 한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;배포 결합도 : 한 모듈의 변경이 전체 재배포를 요구한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;기술 스택 제약 : 모든 모듈이 같은 언어/프레임워크를 사용해야 한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-ddbdc60e-5e3c-4d31-ab08-6ddcc3ff4c20&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a4defb36-c65d-4105-b5e1-c827ccabaefe&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;SE-a24e6a6a-3256-4f81-8742-3b8fb26b282f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;언제 사용하는 것이 좋을까&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-41131ef5-d6f7-4ca5-a353-7ff1c8308149&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-84db496a-c7f6-4625-9680-323a53818c54&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;적합한 경우&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;중소규모의 팀과 서비스&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;명확한 도메인 경계가 있는 애플리케이션&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;마이크로서비스의 복잡성을 감당하기 어려운 경우&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;빠른 개발과 배포가 필요한 스타트업&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-95d9e8a3-240a-4f2c-9199-675562bab62a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-00f95163-4da6-4e53-be61-6252707fc4ca&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;부적합한 경우&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;매우 큰 규모의 독립적인 팀들&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;모듈별로 극단적으로 다른 확장 요구사항&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span&gt;다양한 기술 스택이 필수적인 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-ab88b7e9-e564-45ed-9ee5-9600ada66b6d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bf70901e-1697-4a4e-aeb3-afb840f4436d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a64a7002-ae32-4083-945a-0c9feea31b67&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모듈러 모놀리식은 많은 기업들이 마이크로서비스 전환하기 전 또는 대안으로 채택하고 있는 실용적인 아키텍처 이다&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>개발이론/Architecture</category>
      <category>마이크로서비스</category>
      <category>모듈러모놀리식</category>
      <category>아키텍처</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/191</guid>
      <comments>https://teddev.tistory.com/entry/%EB%AA%A8%EB%93%88%EB%9F%AC-%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-Modular-Monolithic-Architecture#entry191comment</comments>
      <pubDate>Sat, 6 Dec 2025 23:09:36 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 운명을 바꾸는 말하기 수업 - 이영선</title>
      <link>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%9A%B4%EB%AA%85%EC%9D%84-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%A7%90%ED%95%98%EA%B8%B0-%EC%88%98%EC%97%85-%EC%9D%B4%EC%98%81%EC%84%A0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9788901290669.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BmeJP/dJMb99LvKMc/FU14BKPArO9HArGf5wCE8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BmeJP/dJMb99LvKMc/FU14BKPArO9HArGf5wCE8K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BmeJP/dJMb99LvKMc/FU14BKPArO9HArGf5wCE8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmeJP%2FdJMb99LvKMc%2FFU14BKPArO9HArGf5wCE8K%2Fimg.jpg&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;458&quot; height=&quot;653&quot; data-filename=&quot;9788901290669.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;653&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;말하기, 커뮤니케이션, 프레젠테이션 등 AI시대가 도래함에 따라 이 스킬들은 굉장히 중요한 부분이 되어가는 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 말하는 방법에 대해 도움될 수 있는 어떤 중요한 포인트나 테크닉이 있을지 관심을 가지게 되는 것 같다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 책은 말하기나 프레젠테이션에서 간단하게 적용해 볼 수 있는 기술들을 소개하면서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;말하기를 할 때의 마음가짐이나 태도에 대해서도 많이 언급하고 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;완벽하지 않아도 괜찮다&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;말하기를 할 때 가장 어렵게 하는 부분이 완벽주의 때문이라는데 이 부분이 공감이 되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;남의 시선이나 평가 이런 것들을 두려워 하기 보다 스스로를 믿는 것이 가장 중요한 부분임이 맞는 것 같다. (사실 쉽지 않긴 하다)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 책에서 소개한 말하기에서 간단하게 적용해볼 수 있는 팁에 대해 간략하게 정리해 보았다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;면접 : 질문에 답변할 때에는 STAR(Situation - Task - Action - Result) 기술을 이용&lt;/li&gt;
&lt;li&gt;스피치 : 스크립트를 통째로 외우기 보다는 '키워드' 로 생각과 흐름을 정리&lt;/li&gt;
&lt;li&gt;피드백 : PIP(Positive-Improvement-Positive) 피드백을 사용. 잘한 부분을 언급하고 보완점을 제시, 이후 독려&lt;/li&gt;
&lt;li&gt;협상 : 상대방의 이익도 함께 고려해야하는 것&lt;/li&gt;
&lt;li&gt;프레젠테이션
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;오프닝 : 인용구, 간단한 일화, 질문으로 시작하면 청중의 관심, 이목, 상호작용을 높여주는 효과가 있다.&lt;/li&gt;
&lt;li&gt;두괄식 말하기는 다소 복잡한 주제를 전할 때 효과적&lt;/li&gt;
&lt;li&gt;주장을 논리적으로 만들기 위해서는 사실에 기반한 근거가 필요&lt;/li&gt;
&lt;li&gt;어려운 용어는 이해하기 쉬운 표현으로&amp;nbsp;&lt;/li&gt;
&lt;li&gt;MECE (Mutually Exclusive, Collectively Exhausted) 범주화된 내용이 겹치지 않으면서 큰 주제를 모두 포괄하고 있는지&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스피치는 우월함을 뽐내는 도구가 아니라 &lt;br /&gt;자신의 이야기를 사람들과 공감하고 연결하기 위해 &lt;br /&gt;세상에 꺼내는 용기와 자기다움의 과정&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;말하기의 본질에 대해 다시 보게 해주는 책이다. 자기다운 말하기, 내 생각, 내 이야기를 전달하는 것 임을 잊지말라고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실생활에 간단하게 적용 가능한 내용도 많아서 한번 읽어보고 연습해보는 것도 좋을 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>책</category>
      <category>말하기</category>
      <category>스피치</category>
      <category>운명을 바꾸는 말하기 수업</category>
      <category>이영선</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/190</guid>
      <comments>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%9A%B4%EB%AA%85%EC%9D%84-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%A7%90%ED%95%98%EA%B8%B0-%EC%88%98%EC%97%85-%EC%9D%B4%EC%98%81%EC%84%A0#entry190comment</comments>
      <pubDate>Sat, 15 Nov 2025 06:54:21 +0900</pubDate>
    </item>
    <item>
      <title>[Architecture] 애플리케이션 기반 구현</title>
      <link>https://teddev.tistory.com/entry/Architecture-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B8%B0%EB%B0%98-%EA%B5%AC%ED%98%84</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;애플리케이션 기반 공통 기능&lt;/h2&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;/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;보안 : 크로스 사이트 스크립틍(XSS), 크로스 사이트 요청 위조(CSRF) 등의 보안 조치&lt;/li&gt;
&lt;li&gt;트랜잭션 제어 : 주로 데이터베이스와 같은 시스팀 자원의 무결성과 일관성을 유지&lt;/li&gt;
&lt;li&gt;데이터베이스 접근 : 데이터베이스에 대한 접근 수단 제공&lt;/li&gt;
&lt;li&gt;국제화 : 사용자의 Locale에 따라 언어와 데이터 형식 전환&lt;/li&gt;
&lt;li&gt;문서 출력 : PDF 등의 형식으로 정형화된 문서 출력&lt;/li&gt;
&lt;li&gt;캐시 관리 : 취득한 데이터를 메모리에 저장하여 관린&lt;/li&gt;
&lt;li&gt;비동기 처리 : 시간이 많이 걸리는 처리를 백그라운드에서 실행하여 사용자가 기다리지 않도록 비동기적 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;인증&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속한 사용자가 시스템을 정상적으로 이용할 수 있는 사용자인지 확인하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 사용자ID와 비밀번호의 일치 여부를 확인하여 인증 수행. 과거에는 개별 시스템의 데이터베이스에서 사용자ID와 비밀번호를 관리하여 시스템 내에서 인증하는 방식이 주류였음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에는 IDP(Identity Provider)를 활용하여 인증 수행을 많이 함&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;&lt;b&gt;IDP 활용 장점&lt;/b&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;/li&gt;
&lt;li&gt;사용자 비밀번호를 관리하지 않아 보안이 강화&lt;/li&gt;
&lt;li&gt;MFA를 쉽게 구현하여 보안 강화 가능&lt;/li&gt;
&lt;li&gt;SSO를 통해 한 번의 로그인으로 다중 서비스 이용이 가능해 사용자 편의성 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 관련 기능은 표준 방식이나 모범 사례를 따르는 것이 안전하다. 다양한 인증 수단을 지원하는 프레인워크나 라이브러리가 존재하므로 충분한 조사 및 검증 진행 필요. (Spring 에서는 Spring Security를 통해 SAML, OpenID Connect 등을 이용할 수 있음)&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;&lt;b&gt;인증 관련 구현해야할 공통 기능들&lt;/b&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;/li&gt;
&lt;li&gt;인증 : 데이터베이스에 저장된 비밀번호 정보를 이용한 인증, IDP와 연계한 인증 등 사용자 인증 처리, 인증 성공 시 세션 정보에 인증 상태 저장/유지&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;인가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 시스템 내 리소스에 접근할 수 있도록 권한을 부여하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 기반 접근 제어(RBAC)를 따르는 것이 기본 원칙. 사용자 개별적으로 권한을 부여하는 것이 아니라 역할에 권한을 부여하고 그 역할을 사용자에게 할당.&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;&lt;b&gt;접근 권한 제어 리소스 예시&lt;/b&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;/li&gt;
&lt;li&gt;기능 실행 수준 : 역할에 따라 기능에서 수행할 수 있는 작업을 조정 (ADMIN 역할은 데이터 등록/수정, 다른 역할은 조회만 가능)&lt;/li&gt;
&lt;li&gt;화면 항목 : 특정 역할만 볼 수 있도록 화면의 일부 항목을 제어&lt;/li&gt;
&lt;li&gt;데이터 : 역할에 따라 데이터 열람 가능 범위를 조정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접근 제어 구현 방식&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URL 기반 접근 제어&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761469926502&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// SecurityConfig.java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
	
    http.authorizeHttpRequests(it -&amp;gt; 
    	it.requestMatchers(&quot;/admin&quot;).hasRole(&quot;ADMIN&quot;).anyRequest().permitAll()
    )
    .formLogin(Customizer.withDefaults())
    .exceptionHandling(it -&amp;gt; it.accessDeniedPage(&quot;/access-denied&quot;));
    
    return http.build();
}&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;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761470068260&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//SampleController.java
@PreAuthorize(&quot;hasAnyRole('ADMIN', 'EMPLOYEE')&quot;)
@GetMapping(&quot;/hello&quot;)
public String hello(Model model) {
    model.addAttribute(&quot;greeting&quot;, &quot;Hello&quot;);
    return &quot;hello&quot;;
}&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;승인된 API 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761470232604&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;h1 th:text=&quot;${greeting}&quot;&amp;gt;Hi&amp;lt;/h1&amp;gt;
    &amp;lt;div sec:authorize=&quot;hasRole('ADMIN')&quot;&amp;gt;
    	&amp;lt;p&amp;gt;이 메시지는 관리자만 볼 수 있습니다.&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;&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;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;세션 관리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 사용자와 애플리케이션 간의 일련의 상호 작용을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP는 무상태 특성이 있기 때문에 데이터베이스에 영구 저장되기 전의 처리 중인 상태는 세션 정보에 일시적 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 사용자마다 고유한 세션ID는 클라이언트 측에서 유지하며 세션 정보는 서버 측에서 관리한다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;고려해야할 사항&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 공통 정보에 대한 접근&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이후 인증 상태 확인 및 인가 검사를 위해 사용자 ID, 역할 등의 정보가 세션 정보에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 속성 정보(이름, 이메일 등)는 자주 참조되므로 인증 시점에 미리 가져와 세션에 보관해 두는 것이 일반적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션 기능에서 이런 정보들을 사용할 때는 세션 키로 직접 참조할 수도 있지만 공통 정보에 접근할 수 있는 API를 준비해서 제공하는 것이 편리하다&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;&lt;b&gt;2. 세션 객체 분리&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;/li&gt;
&lt;li&gt;세션 객체는 로그아웃, 타임아웃이 발생할 때 삭제되므로 기능이 늘어날수록 세션 객체의 크기가 커져 메모리 부담이 커질 수 있음&lt;/li&gt;
&lt;li&gt;브라우저에서 여러 탭을 열어 기능을 실행하면 세션 정보 충돌로 인해 예상치 못한 동작이 발생할 수 있음&lt;/li&gt;
&lt;/ul&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;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오류 처리&lt;/b&gt;&lt;/h3&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;table style=&quot;border-collapse: collapse; width: 100%; height: 71px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 7.55814%; height: 10px;&quot;&gt;&lt;b&gt;오류 수준&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 26.8605%; height: 10px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5116%; height: 10px;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.0698%; height: 10px;&quot;&gt;&lt;b&gt;알림&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 7.55814%; height: 10px;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;width: 26.8605%; height: 10px;&quot;&gt;- 사용자의 정상적인 사용 중 발생할 수 있는 오류&lt;br /&gt;- 사용자가 직접 복구 가능&lt;/td&gt;
&lt;td style=&quot;width: 21.5116%; height: 10px;&quot;&gt;- 주문 확정 시 재고 부족&lt;br /&gt;- 신용카드 한도 초과&lt;/td&gt;
&lt;td style=&quot;width: 24.0698%; height: 10px;&quot;&gt;- 사용자 : 해당 기능 화면에 오류 메시지 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.55814%; height: 17px;&quot;&gt;중요&lt;/td&gt;
&lt;td style=&quot;width: 26.8605%; height: 17px;&quot;&gt;- 자주 발생하지 않지만 시스템 이용에 있어 예상 가능한 오류&lt;br /&gt;- 서비스 운영 담당자의 복구 조치 필요&lt;/td&gt;
&lt;td style=&quot;width: 21.5116%; height: 17px;&quot;&gt;- 특정 지점의 캘린더 등록 누락&lt;br /&gt;- 워크플로우 경로 설정 오류로 승인자를 결정할 수 없음&lt;/td&gt;
&lt;td style=&quot;width: 24.0698%; height: 17px;&quot;&gt;- 사용자 : 해당 기능 화면에 오류메시지 표시&lt;br /&gt;- 운영자 : 오류에 해당하는 담당자가 있는 경우 이메일로 알림 발송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.55814%; height: 17px;&quot;&gt;심각&lt;/td&gt;
&lt;td style=&quot;width: 26.8605%; height: 17px;&quot;&gt;- 애플리케이션 버그, 미들웨어 또는 인프라 장애로 인해 발생&lt;br /&gt;- 시스템 운영자의 복구 조치 필요&lt;/td&gt;
&lt;td style=&quot;width: 21.5116%; height: 17px;&quot;&gt;- 디스크 공간 부족으로 파일 쓰기 실패&lt;br /&gt;- 연결된 시스템이 다운됨&lt;/td&gt;
&lt;td style=&quot;width: 24.0698%; height: 17px;&quot;&gt;- 사용자 : 시스템 오류 안내 화면을 표시&lt;br /&gt;- 운영자 : 운영담당자에게 이메일 발송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.55814%; height: 17px;&quot;&gt;치명적&lt;/td&gt;
&lt;td style=&quot;width: 26.8605%; height: 17px;&quot;&gt;- 시스템 전체가 중단되는 장애&lt;br /&gt;- 시스템 운영자의 복구 조치 필요&lt;/td&gt;
&lt;td style=&quot;width: 21.5116%; height: 17px;&quot;&gt;- 메모리 부족으로 애플리케이션 서버가 정지됨&lt;/td&gt;
&lt;td style=&quot;width: 24.0698%; height: 17px;&quot;&gt;- 애플리케이션에서 대응할 수 없으므로 별도의 운영 모니터링 실시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오류 처리 방법&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;컨트롤러 내부에서 오류 처리 (catch 블록을 활용한 예외 처리 방식)&lt;/li&gt;
&lt;li&gt;인터셉터를 이용한 오류 처리 (컨트롤러에 도달하기 전에 요청 흐름을 가로채 오류를 처리하는 방식) : 공통 로직(일괄 적용)으로 정리할 수 있으나 상황에 따른 대응은 어려울 수 있음&lt;/li&gt;
&lt;/ul&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;로깅&lt;/b&gt;&lt;/h3&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;table style=&quot;border-collapse: collapse; width: 100%; height: 123px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 21px;&quot;&gt;로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 21px;&quot;&gt;목적 및 용도&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 21px;&quot;&gt;개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;접속 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;감사, 장애 조사&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;사용자의 시스템 접속을 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;인증 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;감사&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;사용자 인증의 성공, 실패 내역을 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;작업 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;감사, 장애 조사&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;사용자가 시스템의 기능을 이용하여 수행한 작업을 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;오류 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;모니터링, 장애 조사&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;시스템에서 오류가 발생했을 때 상세 정보를 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;디버그 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;개발 시 디버깅&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;디비겅을 위해 변수 값 및 처리 진행 상황 등의 상세 정보 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.124%; height: 17px;&quot;&gt;성능 로그&lt;/td&gt;
&lt;td style=&quot;width: 21.2403%; height: 17px;&quot;&gt;성능 로그&lt;/td&gt;
&lt;td style=&quot;width: 67.6356%; height: 17px;&quot;&gt;배치 처리 시간, SQL 쿼리 응답 시간 등을 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 유형별로 출력 대상과 형식을 수립할 필요가 있다. 예를 들어 감사 목적의 로그는 데이터베이스에 저장하는 것이 적절할 수 있다. 이후 애플리케이션 기반에서 자동으로 출력할 수 있는 로그가 있는지 검토해야 한다. 예를 들어 AOP 기능이 있는 프레임워크/라이브러리 등을 얘기할 수 있다. 그렇지 않다면 로그는 직접 구현해야 하므로 출력 정책을 문서화하고 유틸리티와 같은 공통 기능으로 만들어 제공하면 효율적이다.&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;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;보안&lt;/b&gt;&lt;/h3&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4728%;&quot;&gt;위협&lt;/td&gt;
&lt;td style=&quot;width: 40.1938%;&quot;&gt;정의&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;주요 대책&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4728%;&quot;&gt;크로스 사이트 스크립팅(XSS)&lt;/td&gt;
&lt;td style=&quot;width: 40.1938%;&quot;&gt;공격자가 입력값에 삽입한 악성 스크립트가 사용자 브라우저에서 실행되도록 하는 공격&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- 사용자 입력값 검증&lt;br /&gt;- 사용자 입력 데이터를 화면에 출력할 때 HTML 이스케이프 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4728%;&quot;&gt;크로슷 사이트 요청 위조(CSRF)&lt;/td&gt;
&lt;td style=&quot;width: 40.1938%;&quot;&gt;공격자가 사용자의 세션을 이용해 악의적인 요청을 서버에 전송하도록 유도하는 공격&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- 서버가 임시 CSRF 토큰 발행하고 요청에 포함된 토큰의 유효성 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4728%;&quot;&gt;SQL 인젝션(SQLi)&lt;/td&gt;
&lt;td style=&quot;width: 40.1938%;&quot;&gt;공격자가 입력값에 악성SQL을 삽입해 데이터베이스에서 임의의 쿼리를 실행하는 공격&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- 사용자 입력값 검증&lt;br /&gt;- 데이터베이스 쿼리에 프리페어드 스테이트먼트(SQL 삽입 방지) 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;트랜잭션 제어&lt;/b&gt;&lt;/h3&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;&lt;b&gt;트랜잭션 제어 구현 방법&lt;/b&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;/li&gt;
&lt;li&gt;선언적 트랜잭션. 설정파일이나 어노테이션을 이용해 트랜잭션의 범위와 동작을 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;트랜잭션 경계 설정&lt;/b&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;HTTP는 무상태성 프로토콜이기 때문에 일반적으로 여러 요청에 걸쳐 트랜잭션이 발생하지 않음&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;/li&gt;
&lt;li&gt;선언적 트랜잭션은 컨트롤러가 호출하는 서비스에 어노테이션을 부여.&lt;/li&gt;
&lt;li&gt;하나의 요청에서 여러 서비스 호출이 필요한 경우 도메인 게층에 Facade역할을 하는 서비스를 배치하고 거기에 트랜잭션 경계로 정의&lt;/li&gt;
&lt;li&gt;하나의 요청에서 여러 트랜잭션을 사용해야 하는 상황. 로그 기록이나 오류알림 전송과 같은 경우. 트랜잭션 경계를 부분적으로 분리해 별도 처리가 필요&lt;/li&gt;
&lt;/ul&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터베이스 접근&lt;/b&gt;&lt;/h3&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;&lt;b&gt;ORM&lt;/b&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;Hibernate의 경우 개발자가 직접 SQL을 작성할 필요 없으며 ORM이 제공하는 자체 쿼리 언어를 사용할 수 있다. 다만, 복잡한 쿼리가 필요한 요구사항 구현이 쉽지 않고 성능 저하 우려도 있다. 이에 따라 이를 보완하는 기술도 등장하게 되었다.&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;&lt;b&gt;CQRS 패턴&amp;nbsp;&lt;/b&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;반면 읽기 중심 처리에서는 데이터베이스 쿼리는 복잡하지만 조회 결과를 DTO로 정리해 반환하는 등 비교적 단순한 형태로 처리 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기와 쓰기를 분리해 각각 최적화된 모델을 사용하는 것이 CQRS 패턴이다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cqrs.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEYIQ/dJMcabCzf3B/jPM9BJZIO7ogSYX7BxgB7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEYIQ/dJMcabCzf3B/jPM9BJZIO7ogSYX7BxgB7K/img.png&quot; data-alt=&quot;CQRS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEYIQ/dJMcabCzf3B/jPM9BJZIO7ogSYX7BxgB7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEYIQ%2FdJMcabCzf3B%2FjPM9BJZIO7ogSYX7BxgB7K%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;638&quot; height=&quot;577&quot; data-filename=&quot;cqrs.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CQRS&lt;/figcaption&gt;
&lt;/figure&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;&lt;b&gt;데이터베이스 접근 공통 기능&lt;/b&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;&amp;nbsp;&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;
&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;div&gt;
&lt;div id=&quot;SE-3f46d9c9-310e-4b05-b6ef-56d46972f1fc&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-d0cf69bb-014a-4934-b6d1-2c610e1894bb&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #ffffff; color: #333333;&quot;&gt;&lt;b&gt;참고서적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-284f8a4b-bceb-4519-a104-e63d5465813f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #ffffff; color: #333333;&quot;&gt;- 아키텍트 첫걸음 : 아키텍처 설계 기본 원칙부터 실무 적용까지, 한빛미디어&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>개발이론/Architecture</category>
      <category>애플리케이션 기반 구현</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/189</guid>
      <comments>https://teddev.tistory.com/entry/Architecture-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B8%B0%EB%B0%98-%EA%B5%AC%ED%98%84#entry189comment</comments>
      <pubDate>Sun, 26 Oct 2025 18:17:54 +0900</pubDate>
    </item>
    <item>
      <title>[Architecture] 개발 프로세스 표준화</title>
      <link>https://teddev.tistory.com/entry/Architecture-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%ED%91%9C%EC%A4%80%ED%99%94</link>
      <description>&lt;div id=&quot;SE-3b619fbf-61cb-4cd9-845f-8c496cdca19e&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;SE-13c46c40-83b2-4af7-bfa5-06364f1c5731&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기능 명세서 표준화&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-993fc49b-2af1-439b-9072-fc8045c3d8dc&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-1fbd23da-1581-4800-bfaa-804a42e5cbc8&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기능 명세서는 요구사항 분식이 마무리될 무렵 작성된다. 아래는 표준화하는 방법, 주의사항 등을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e9f58eca-a3f1-4a2b-9be0-9434d32e27d2&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ea43b49e-511d-47e8-9457-d0b8a6a4021a&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;SE-4f38b39a-724b-403d-8598-08f5258a391a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;유스케이스 다이어그램&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-70c6f5c2-be93-435b-8f2b-00fede3f9895&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-7ae5b294-5543-4dfb-8c83-9f1d55d0cd8a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유스케이스 다이어그램은 사용자와 유스케이스 간 관계를 시각적으로 파악하기 위해 작성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-076eb97a-ff4b-45f8-9c7f-8f2e11b9891d&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;UML이라는 표준화 기법이 있지만 작성자에 따라 다이어그램의 단위, 유스케이스 세분화 수준, 표현 방식이 달라질 수 있어 일정한 정책이 필요할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a8fc254f-ffaf-4f72-93db-ce774f249a33&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-80fc3540-3c66-45d4-8398-7fbb63be966a&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유스케이스 다이어그램은 요소 간 의존 관계를 나타내기 위해 아래 개념을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;일반화 관계&lt;/b&gt; : 공통된 동작을 가진 여러 유스케이스를 묶어 추상적인 부모 유스케이스와 구체적인 자식 유스케이스 간의 관계를 표현&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;포함 관계&lt;/b&gt; : 여러 유스케이스에서 반복되는 공통 기능을 하나의 유스케이스로 분리, 상위 유스케이스가 이를 호출하는 관계&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;확장 관계&lt;/b&gt; : 특정 유스케이스 내에서 인터럽트 조건을 확장점으로 정의하고 조건이 만족될 때 별도의 유스케이스가 실행되도록 정의되는 관계&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-0fe795e0-a73a-486d-b657-10ad0cd35759&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다만, 위의 개념은 객체지향 개념에 익숙하지 않는 담당자의 경우 작성이 어려울 수 있다. 그 때는 유스케이스 설명 안에 조건, 처리과정 등 설명이 명확히 정리되어 있다면 관계 다이어그램을 간소화 해서 작성하는 것도 충분하다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cdc36b94-436d-485b-b9e2-6f23bc9ad704&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a7dd4d2d-ee68-4fc8-89a4-7ae2d17342df&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;SE-559a3f40-c682-423b-93dc-db25c1a9f533&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;유스케이스 기술서&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3fe10335-1303-4377-b139-f55a292828b1&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-ea94332b-3be9-4d3b-a0ac-df19e866e017&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유스케이스 모델에서는 각 유스케이스의 동작 요구사항을 구체적으로 정리한 유스케이스 기술서가 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cb513c71-627e-47a7-92a5-084dd3e4532f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자는 시스템을 이용하여 특정 목적을 당성하기 위해 유스케이스를 실행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-134e4918-85cb-4bad-8878-3b1966bb53b2&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유스케이스는 사용자가 요청을 보내고 시스템이 응답하는 일련의 흐름으로 구성되며 이런 상호작용이 핵심이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e0d4de8a-bb29-47bd-a42f-a794cd8e40c8&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;성공 시나리오, 예외 시나리오 등 다양한 시나리오를 일정한 형식에 따라 정리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-5c408cd0-adba-403b-ba3c-e752f2773e2f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;유스케이스 기술서 구성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;유스케이스명&lt;/b&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;사용자&lt;/b&gt; : 유스케이스를 실행하고 상호작용을 시작하는 주 사용자와 관련 부 사용자&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;요약/설명&lt;/b&gt; : 업무적 목적, 처리 개요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;사전조건&lt;/b&gt; : 충족해야하는 조건&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;사후조건&lt;/b&gt; : 정상적으로 종료된 후 충족해야하는 조건&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;성공 시나리오&lt;/b&gt; : 정상적으로 실행되어 사용자가 목표를 달성하는 시나리오 (해피패스)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예외 시나리오&lt;/b&gt; : 각 단계에서 어떤 문제가 발생하여 유스케이스가 중단/종료되는 상황과 동작&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;대체 시나리오&lt;/b&gt; : 특정 상황에서 성공 시나리오와 다른 상호작용이 발생하는 경우&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;비즈니스 규칙&lt;/b&gt; : 유스케이스의 처리 절차에서 참조되는 비즈니스 규칙&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-8cbfdafa-94db-458d-9fac-7e6558f7dce4&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;유스케이스 기술서 작성 시 고려 사항&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;적절한 추상화 레벨에서 기술하는 것이 중요하다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유스케이스의 요약, 사용자 목표, 하위 기능 세 가지 목표 레벨 중 사용자 목표가 가장 중요&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자 목표의 적절한 크기 (작업 범위)는 '사용자가 이 작업을 수행한 뒤 만족하고 떠날 수 있는 적절한 분량인가?' 의 질문에 대응하는 것&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기타 추가 고려 사항&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사전 조건과 사후 조건은 시스템 외부에 있는 사용자가 인식할 수 있는 상태만 기술하고 시스템 내부 상태는 포함하지 않는다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자 인터페이스에 의존하는 표현은 피한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면의 개별 항목을 나열하지 않고 정보의 청크 형태로 기술&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비즈니스 규칙이나 로직 세부 사항은 기술하지 않는다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 직접 처리할 수 없는 시스템적 예외(DB장애, 서버 오류)는 기술하지 않지만 사용자가 개입할 수 있는 예외는 포함한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-6b9223fe-340b-4593-b046-b2472cdae6ee&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7f3f5f14-94c2-4a30-b6fc-69ead17afbfd&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;SE-1e205b95-492b-4310-8072-dad4d75af811&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능명세서&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c3a7f74a-f25a-4c39-800f-05169d74dfbc&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;p id=&quot;SE-093fd8a2-ab3f-4cc0-89ee-56ef6b335eeb&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자 인터페이스로 구현될 화면 구성은 기능 명세서를 통해 정의&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0f8f46a8-5010-4707-864b-ef740dedb39e&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f8168685-6081-45b0-a1f1-9dedd0a68dbb&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능명세서 구성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면 전환도&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면 레이아웃 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;항목 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면 이벤트 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;로직 정의&lt;/span&gt;​&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-d9d6819b-47c2-41b7-abf7-3f348698cfe4&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;로직 정의할 때는 개발자 관점의 내부 처리 절차가 아니라 외부 요구사항을 기술하는 문서라는 점을 염두에 두어야 한다. '어떻게 실현할지(How)'가 아니라 '무엇을 할지(What)'를 설명해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-151ad9d9-d5eb-468d-818e-6b7a6b00b116&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3ea3823c-b3d0-46b4-b2de-b47988ea2e08&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;SE-12adfb1c-1be3-4471-9b04-a1cc0b647153&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;설계서 표준화&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3f46d9c9-310e-4b05-b6ef-56d46972f1fc&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-b0c4b71a-122f-4963-a9e8-4271ad259a74&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클래스 다이어그램이나 협업 다이어그램등 설계서를 미리 작성하더라도 코드로 구현하는 과정에서 항상 일치하도록 관리하는 것은 쉽지 않은 일이다. 많은 경우 설계문서를 작성하고 구현이 끝나면 폐기하고 리버스 엔지니어링을 통해 역으로 설계 구조를 도출하여 다이어그램을 생성하여 관리하기도 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-21d7f6a6-5f5b-434d-b303-947a28ea9291&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;한편, 데이터베이스 관련 설계서(ERD, 테이블 정의서 등)등은 프로젝트를 수행하는 동안 계속 관리하기도 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7fa06cfa-99f8-4834-8bda-516259e37176&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이처럼 필요와 복잡성에 따라 기준을 정하여 적절한 합리적인 방법을 취하는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d7c48fda-d211-41b7-853d-1c2a357b06bf&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b1183e39-3036-41b2-bc2f-6dcea096b727&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d3682423-5fbc-4fa7-8dae-da8a362c4615&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d0cf69bb-014a-4934-b6d1-2c610e1894bb&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;참고서적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-284f8a4b-bceb-4519-a104-e63d5465813f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 아키텍트 첫걸음 : 아키텍처 설계 기본 원칙부터 실무 적용까지, 한빛미디어&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>개발이론/Architecture</category>
      <category>기능명세서</category>
      <category>아키텍처</category>
      <category>유스케이스</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/188</guid>
      <comments>https://teddev.tistory.com/entry/Architecture-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%ED%91%9C%EC%A4%80%ED%99%94#entry188comment</comments>
      <pubDate>Sun, 19 Oct 2025 18:41:47 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 대화의 정석 - 정흥수</title>
      <link>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8C%80%ED%99%94%EC%9D%98-%EC%A0%95%EC%84%9D-%EC%A0%95%ED%9D%A5%EC%88%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-e64bd3ee-bca0-47ff-9af3-0bbc68d97123&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-e64bd3ee-bca0-47ff-9af3-0bbc68d97123&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e64bd3ee-bca0-47ff-9af3-0bbc68d97123&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e64bd3ee-bca0-47ff-9af3-0bbc68d97123&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-e64bd3ee-bca0-47ff-9af3-0bbc68d97123&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7PcZa/dJMb9j1HMpT/juMT9IGxLGkUvk05SkeI9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7PcZa/dJMb9j1HMpT/juMT9IGxLGkUvk05SkeI9K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7PcZa/dJMb9j1HMpT/juMT9IGxLGkUvk05SkeI9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7PcZa%2FdJMb9j1HMpT%2FjuMT9IGxLGkUvk05SkeI9K%2Fimg.jpg&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;458&quot; height=&quot;633&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최근 말을 잘하는 법에 대한 중요성을 굉장히 많이 생각하게 되었다.&lt;br /&gt;많은 사람들 앞에서 발표를 해야한다던가 업무 관련 커뮤니케이션,&lt;br /&gt;그리고 최근 필요에 의해 이직을 위한 면접 기회를 자주 접하다 보니&amp;nbsp;&lt;br /&gt;말을&amp;nbsp;잘&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;방법에&amp;nbsp;대한&amp;nbsp;필요성을&amp;nbsp;느끼게&amp;nbsp;되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 우선 책을 통해 방법을 찾아보고자 했다. &lt;br /&gt;제일 먼저 눈에 띄었던 책이 '대화의 정석' 이라는 책이었고&amp;nbsp; &lt;br /&gt;이 책을 읽어보기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 책은 대화, 말을 잘 할 수있도록 스킬이나 기술, 방법 등을 알려주는 책인 줄 알았다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 천천히 읽어 나가다보니 그런 방법적인 부분 보다는 대화를 할 때 가져야하는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마음가짐, 태도, 자세 등에 더 많은 설명을 하고 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 더 나아가 누군가와 대화를 할 때는 마음가짐은 삶을 살아갈 때 가져야 하는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자세나 마음가짐과 크게 다르지 않다고 말하는 것 같았다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;생각했던 내용은 아니지만 그래도 나한테 필요로 하는 부분,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;대화할 때 어떤 질문을 할지, 적당한 주제가 있을지 고민할 필요가 없다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;그저 ' 사람'을 보면 된다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;'이 사람은 어떤 사람일까?', '평소에 어떻게 생활할까?',&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;'무엇에 관심을 둘까?', '왜 그럴까?', '언제부터 그랬을까?'&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;하고 호기심을 가지면 질문은 자연스럽게 나온다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;대화의 질을 높이고 싶다면 사람에게 관심을 갖자.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;그 사람의 생각과 기분, 마음을 궁금해하는 것이다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대화 뿐만아니라 관계에서도 해당되는 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 '사람'에게 집중하는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는 최근에 온갖 불필요한 고민과 생각으로 사람과 현재에 집중하지 못한 시간들을 보내온 것 같았다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 최근에는 편하고 의지할 만한 관계를 만들어 내지 못한 것 같다는 메시지를 주는 글이었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;세상이 옳다는 삶을 살 게 아니라&amp;nbsp; &lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;내가 옳다고 믿는 가치관으로 살 때 진짜 내 인생을 살 수 있다&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;알지만 어렵다. &lt;br /&gt;어떤 선택이든 후회는 있다. 모두가 옳다는 삶을 살면 그나마 후회를 덜하지 않을까 하는 생각, &lt;br /&gt;내가 옳다고 믿는 삶은 분명 힘들고 고생을 사서하는 삶일 수도 있다는 생각 &lt;br /&gt;이런 생각들 때문에 선택을 어렵게 한다. &lt;br /&gt;그런데 내가 옳다고 믿는 가치관으로 살아가지 않으면 행복할 순 없다는 것은 맞는 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대화의 기술과 방법에 대한 내용도 잘 설명되어져 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다만, 대화하는 상황을 통해 관계, 인생에 대한 생각도 하게되는 내용이었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;단순히 당장 적용할 수 있는 대화의 스킬이나 기술이 필요한 상황이라면 이 책은 적절하지 않을 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대화에 임하는 태도나 마음가짐을 살피고 이를 통해 관계에 대한 개선까지 고려한다면 이 책을 한번 읽어봐도 좋을 것 같다.&lt;/p&gt;</description>
      <category>책</category>
      <category>대화의정석</category>
      <category>정흥수</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/187</guid>
      <comments>https://teddev.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8C%80%ED%99%94%EC%9D%98-%EC%A0%95%EC%84%9D-%EC%A0%95%ED%9D%A5%EC%88%98#entry187comment</comments>
      <pubDate>Sun, 19 Oct 2025 00:31:28 +0900</pubDate>
    </item>
    <item>
      <title>[Architecture] 아키텍처 문서화</title>
      <link>https://teddev.tistory.com/entry/Archetecture-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%AC%B8%EC%84%9C%ED%99%94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-727c9cc5-57ce-48e4-8ec1-eae5ab286605&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-727c9cc5-57ce-48e4-8ec1-eae5ab286605&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-727c9cc5-57ce-48e4-8ec1-eae5ab286605&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-85ef781e-3afb-402e-b6f9-2f4270d5691b&quot;&gt;
&lt;h2 id=&quot;SE-bb7a70ca-2987-47e8-9e87-cba01d213f10&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;아키텍처 기술서&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-12659dce-0142-4822-8db7-6697e6c7fe8e&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-12659dce-0142-4822-8db7-6697e6c7fe8e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-12659dce-0142-4822-8db7-6697e6c7fe8e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-c571c1ee-45bb-45ec-9d31-cf2eacd0fb4f&quot;&gt;
&lt;p id=&quot;SE-bceb6999-c124-4f35-b004-310bdb94edf3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;아키텍처 기술서에 포함되는 항목&lt;/b&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;목적 : 개요, 문서의 목적, 대상 독자, 아키텍처의 목표 및 지향점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍처 드라이버 : 아키텍처 설계 시 고려해야할 요소 (제약, 품질속성, 영향을 미치는 기능 요구 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 시스템 구성 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자와 이해관계자 : 사용자 및 아키텍처가 영향을 주거나 받는 이해관계자 (PO, 개발자, QA엔지니어 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍처 모델 : 아키텍처를 다양한 관점에서 모델링하여 문서화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-280cdb23-ce02-4cb4-a152-0979b5609e50&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-83eba202-7ab1-416d-8811-d3d69e597f11&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-83eba202-7ab1-416d-8811-d3d69e597f11&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-83eba202-7ab1-416d-8811-d3d69e597f11&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-9d326821-8d13-4288-ad93-0e5a9162d0df&quot;&gt;
&lt;h2 id=&quot;SE-fb437dee-775d-4e7d-8fcb-b07ee10d739f&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;아키텍처 모델&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7e708969-82ec-4dc5-bcd1-14c7f30f3495&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-7e708969-82ec-4dc5-bcd1-14c7f30f3495&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-7e708969-82ec-4dc5-bcd1-14c7f30f3495&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-3cc61c90-52e9-4179-8957-2e5988212456&quot;&gt;
&lt;p id=&quot;SE-e434d6e8-5e6b-413f-a82c-15944ebbdd4b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이해관계자들은 관심사가 달라 아키텍처에서 알고 싶은 관점이 다르다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c9e6faf9-2195-4cac-a614-75fc10140978&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 관심사와 관점에 따라 아키텍처를 파악하는 방법을 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰포인트&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라 한다. 뷰포인트에 따라 실제로 아키텍처를 모델로 표현한 개별 도면을 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라 한다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5b26d60e-de70-4c35-9e27-547524fea23f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대표적인 뷰포인트 세트(여러 개의 뷰포인트를 체계적으로 정리하여 하나의 프레임워크 형태로 구성한 것)로 4+1 뷰와 C4 모델이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e481ede4-b6d3-4c26-af51-744695d23666&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b2199e1f-3244-4f6a-9219-dd734eb6f7df&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-b2199e1f-3244-4f6a-9219-dd734eb6f7df&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b2199e1f-3244-4f6a-9219-dd734eb6f7df&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-7cb6a57a-f49a-46b5-b8aa-919791ba348c&quot;&gt;
&lt;h4 id=&quot;SE-69fd9d27-d937-4533-b93f-7b1c28d35f38&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 4+1 뷰&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-76557732-52ce-41fe-8e10-dfb299722c64&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-76557732-52ce-41fe-8e10-dfb299722c64&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-76557732-52ce-41fe-8e10-dfb299722c64&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-2273ff75-1352-43dc-b431-8eb2474f40a0&quot;&gt;
&lt;p id=&quot;SE-484f7e66-7107-463f-97ae-7e459fe823d0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필립 크뤼슈텐이 1995년에 발표한 논문에서 제시한 내용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-44366aeb-a1b6-4b73-80af-e4709cc8c136&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4+1 뷰를 활용한 아키텍처 모델링에서는 여러 뷰포인트를 통해 다양한 이해 관계자의 관심사를 개별적으로 다룬다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9f783fbf-4c0a-457e-8675-1b8a1164d030&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;논리 뷰&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 소프트웨어의 논리적 구조를 나타내는 뷰포인트로 레이어 구조, 컴포넌트 구조, 클래스 구조 등 UML의 패키지 다이어그램이나 클래스 다이어그램 등으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;개발 뷰&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 소프트웨어의 구현 관점에서 구조를 나타내는 뷰포인트. 네임스페이스나 패키지를 활용해 계층화된 모듈 구조를 표현. 디렉토리 구조도나 UML 패키지 다이어그램 등으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로세스 뷰&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 시스템 실행 시의 프로세스 및 태스크의 병렬성과 동시성을 표현하는 뷰포인트. 예를 들어 마이크로서비스 아키텍처에서 여러 서비스가 협력하여 처리하는 흐름을 나타내는 것도 효과적. UML 시퀀스 다이어그램 등으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;물리 뷰&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 시스템의 각 모듈이 배치되는 환경을 표현하는 뷰포인트. 아키텍처 다이어그램과 같은 시스템 구성 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시나리오 뷰 (유즈케이스 뷰)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 핵심 유즈케이스 시나리오. 아키텍처 설계의 타당성을 검토하고 구현 초기에 사용할 유스케이스 후보 도출 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-59547563-6138-42f5-bc0c-8570a137f0ff&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-c2ee3cb6-f078-4338-b1e1-c0986722398b&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-c2ee3cb6-f078-4338-b1e1-c0986722398b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c2ee3cb6-f078-4338-b1e1-c0986722398b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-c54a7f41-a3ba-43a1-8e17-98b748b559c8&quot;&gt;
&lt;h4 id=&quot;SE-b0da1b71-cce2-4e53-b84d-40c68bf1e8e1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. C4 모델&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;사이먼 브라운이 고안한 모델.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;시스템을 4가지 서로 다른 추상화 레벨로 나누어 각 수준에 적합한 다이어그램을 사용해 아키텍처를 모델링한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;관심사를 효과적으로 분리하고 소프트웨어 개발 과정에서 원활한 커뮤니케이션을 돕는다.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;SE-13e51fbe-1839-4652-9dbb-e633f58413d6&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-13e51fbe-1839-4652-9dbb-e633f58413d6&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-13e51fbe-1839-4652-9dbb-e633f58413d6&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-13e51fbe-1839-4652-9dbb-e633f58413d6&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-13e51fbe-1839-4652-9dbb-e633f58413d6&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pEsrk/btsQHgkLQlm/Y8QUTDWZuDBXRXi8FMN0x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pEsrk/btsQHgkLQlm/Y8QUTDWZuDBXRXi8FMN0x0/img.png&quot; data-alt=&quot;C4 모델의 소프트웨어 시스템 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pEsrk/btsQHgkLQlm/Y8QUTDWZuDBXRXi8FMN0x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpEsrk%2FbtsQHgkLQlm%2FY8QUTDWZuDBXRXi8FMN0x0%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;693&quot; height=&quot;1080&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;C4 모델의 소프트웨어 시스템 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;SE-f24d2ab5-519d-4e5a-95c4-cc576dfc25ed&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-288d125b-9810-4f4b-b32e-d3abd44bcbf9&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-288d125b-9810-4f4b-b32e-d3abd44bcbf9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-288d125b-9810-4f4b-b32e-d3abd44bcbf9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-8ee410e0-5979-42f7-8679-a098cb31a97c&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;컨텍스트&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 가장 추상적인 레벨에서 소프트웨어 시스템과 외부 엔티티 간의 상호작용을 파악하여 구조화한 모델링 단위. 시스템 컨텍스트 다이어그램으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;컨테이너&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 시스템을 구성하는 요소로 독립적으로 배포 가능한 실행 단위 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;컴포넌트&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 컨테이너 내부 요소. 명확하게 정의된 인터페이스를 가지고 일관된 동작 제공. UML 클래스 다이어그램, 시퀀스 다이어그램 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; : 실제 구현 단계의 구성 단위. 클래스와 인터페이스가 이에 해당. 주로 중요한 컴포넌트나 복잡한 컴포넌트에 한해 필요한 때만 작성됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;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;p id=&quot;SE-81ad9032-2f08-46e0-bd6a-1704ccb1ddcf&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;참고서적&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-dee1bdb3-1276-465b-9eed-cf5766584766&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;- 아키텍트 첫걸음 : 아키텍처 설계 기본 원칙부터 실무 적용까지, 한빛미디어&lt;/span&gt; &lt;/p&gt;</description>
      <category>개발이론/Architecture</category>
      <category>아키텍처</category>
      <author>TedDev</author>
      <guid isPermaLink="true">https://teddev.tistory.com/186</guid>
      <comments>https://teddev.tistory.com/entry/Archetecture-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%AC%B8%EC%84%9C%ED%99%94#entry186comment</comments>
      <pubDate>Sat, 20 Sep 2025 23:30:56 +0900</pubDate>
    </item>
  </channel>
</rss>