<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기술 메모장</title>
    <link>https://ksw0627.tistory.com/</link>
    <description>웹 개발 공부를 하면서 느낀점, 진행 과정, 배운 점 등을 메모하는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 3 Jun 2026 13:24:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ksw0627</managingEditor>
    <image>
      <title>기술 메모장</title>
      <url>https://tistory1.daumcdn.net/tistory/5571954/attach/7b0cf3c7a1b84e24a288df742c7c1074</url>
      <link>https://ksw0627.tistory.com</link>
    </image>
    <item>
      <title>enum, 함수, posional/optional/named parameter, Operation</title>
      <link>https://ksw0627.tistory.com/125</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;1. enum&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;열거형(enumerated type)을 정의하는데 사용되는 키워드&lt;/li&gt;
&lt;li&gt;서로 관련된 상수값을 하나의 타입으로 정의하고, 코드의 가독성을 높이고 실수를 줄이는 등의 장점을 가짐&lt;/li&gt;
&lt;li&gt;해당 열거형은 고정된 개수의 값을 가지며 이 값들은 각각 고유한 이름을 가짐&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678715732008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Status {
  approved, // 승인
  pending, // 대기
  rejected, // 거절
}

void main() {
  Status status = Status.pending;

  if (status == Status.approved) {
    print('승인입니다.');
  } else if (status == Status.pending) {
    print('대기입니다.');
  } else {
    print('거절입니다.');
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. Positional / Opentional / Named Parameter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Positional Parameter&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;/ul&gt;
&lt;pre id=&quot;code_1678716932165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// positional parameter - 순서가 중요한 파라미터
addNumbers(int x, int y, int z) {
  print('x : $x, y : $y, z : $z');
  int sum = x + y + z;
  print('sum = $sum');
  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
  return sum;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Optional Parameter&lt;/p&gt;
&lt;pre id=&quot;code_1678716973444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// optional parameter - 있어도 되고 없어도 되는 파라미터
addNumbersOptional(int x, [int y = 10, int z = 10]) {
  ...
  (위와 동일)
  ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Named Parameter&lt;/p&gt;
&lt;pre id=&quot;code_1678716994961&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.)
addNumbersNamed({
  required int x,
  required int y,
  int z = 10,
}) {
  ...
  (위와 동일)
  ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 화살표 함수(arrow function)&lt;/p&gt;
&lt;pre id=&quot;code_1678717312662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// before
addNumbers(int x, {
  required int y, 
  int z = 30
  }) {
  int sum = x + y + z;
  return sum;
}

// after
// before
addNumbers(int x, {
  required int y, 
  int z = 30
}) =&amp;gt; x + y + z;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 사용&lt;/p&gt;
&lt;pre id=&quot;code_1678717078427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  int result1 = addNumbers(10, 20, 30); // x = 10, y = 20, z = 30
  int result2 = addNumbersOptional(10);	// x = 10, y = 10, z = 10
  int result3 = addNumbersNamed(x: 10, y: 20);	// x = 10, y = 20, z = 10
  print('result1 : $result1, result2: $result2, result: $result3');	// 60 / 30 / 40
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. Operation&lt;/p&gt;
&lt;pre id=&quot;code_1678718466625&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  Operation operation = add;
  print(operation(10, 20)); // 10 + 20 = 30
  operation = subtract;
  print(operation(30, 20));	// 30 - 20 = 10
  print(calculate(5, 6, add));	// 5 + 6 = 11
  print(calculate(10, 5, subtract));	// 10 - 5 = 5
}

typedef Operation = int Function(int x, int y);

// 더하기
int add(int x, int y) =&amp;gt; x + y;
// 빼기
int subtract(int x, int y) =&amp;gt; x - y;
// 계산
int calculate(int x, int y, Operation operation) {
  return operation(x, y);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>앱 개발/dart</category>
      <category>enum</category>
      <category>named</category>
      <category>Operation</category>
      <category>optional</category>
      <category>positional</category>
      <category>함수</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/125</guid>
      <comments>https://ksw0627.tistory.com/125#entry125comment</comments>
      <pubDate>Mon, 13 Mar 2023 23:42:17 +0900</pubDate>
    </item>
    <item>
      <title>20230312 WIL</title>
      <link>https://ksw0627.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;티끌 모아 태산 프로젝트 리펙토링&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 비즈니스 로직 이관처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;controller, service의 역할에 맞게 관심사 분리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/TeamBudgetOverflow/backend/issues/63&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678714099963&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;비즈니스 로직 이관처리 &amp;middot; Issue #63 &amp;middot; TeamBudgetOverflow/backend&quot; data-og-description=&quot;controller의 비즈니스 로직을 service로 이관 처리 작업 내역 User 모듈 Goal 모듈 Report 모듈&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/63&quot; data-og-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/63&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xQKqg/hyRU60Y3tM/1EuIolsbKoKDgBP6Wa2Rg0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/63&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xQKqg/hyRU60Y3tM/1EuIolsbKoKDgBP6Wa2Rg0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;비즈니스 로직 이관처리 &amp;middot; Issue #63 &amp;middot; TeamBudgetOverflow/backend&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;controller의 비즈니스 로직을 service로 이관 처리 작업 내역 User 모듈 Goal 모듈 Report 모듈&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 메소드 분할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비즈니스 로직 이관 후 SRP 원칙을 따르도록 메소드 분할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/64&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/TeamBudgetOverflow/backend/issues/64&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678714186977&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;메소드 분할 &amp;middot; Issue #64 &amp;middot; TeamBudgetOverflow/backend&quot; data-og-description=&quot;User, Goal, Report 모듈에서 기본 비즈니스 로직을 분리했고(#63 ) 분리한 비즈니스 로직을 메소드 단위로 분리하고 코드 리펙토링을 하고자 함. 메소드는 최대한 하나의 역할만 하도록 분할하는 것&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/64&quot; data-og-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/64&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brSIr8/hyRVavxifc/OxfxKeWQ9hudFDNUKKZVOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/64&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/64&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brSIr8/hyRVavxifc/OxfxKeWQ9hudFDNUKKZVOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;메소드 분할 &amp;middot; Issue #64 &amp;middot; TeamBudgetOverflow/backend&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;User, Goal, Report 모듈에서 기본 비즈니스 로직을 분리했고(#63 ) 분리한 비즈니스 로직을 메소드 단위로 분리하고 코드 리펙토링을 하고자 함. 메소드는 최대한 하나의 역할만 하도록 분할하는 것&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 트렌젝션 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB의 상태를 생성, 수정, 삭제를 2개 이상 하는 메소드에 대해서 트렌젝션 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/61&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/TeamBudgetOverflow/backend/issues/61&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678714345936&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Transaction &amp;middot; Issue #61 &amp;middot; TeamBudgetOverflow/backend&quot; data-og-description=&quot;트랜젝션을 생성하기 위해 전제되는 내용 controller에서 순차적으로 진행했던 로직을 service로 이관 처리 #63 service의 비즈니스 로직을 메소드 분할하여 단일 책임 원칙(SRP)를 지키도록함 #64 DB의 상&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/61&quot; data-og-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/61&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/OMVId/hyRVaCjBLT/mcDwpl4Wv9Hk4qMx7KgnK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/TeamBudgetOverflow/backend/issues/61&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/TeamBudgetOverflow/backend/issues/61&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/OMVId/hyRVaCjBLT/mcDwpl4Wv9Hk4qMx7KgnK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Transaction &amp;middot; Issue #61 &amp;middot; TeamBudgetOverflow/backend&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;트랜젝션을 생성하기 위해 전제되는 내용 controller에서 순차적으로 진행했던 로직을 service로 이관 처리 #63 service의 비즈니스 로직을 메소드 분할하여 단일 책임 원칙(SRP)를 지키도록함 #64 DB의 상&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>TIL_WIL_MIL/WIL</category>
      <category>Wil</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/124</guid>
      <comments>https://ksw0627.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 13 Mar 2023 22:32:31 +0900</pubDate>
    </item>
    <item>
      <title>선언과 사용</title>
      <link>https://ksw0627.tistory.com/123</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;1. 정수 타입 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 실수 타입 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;double&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 문자열 타입 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String&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;문자열의 길이 - &amp;gt; length 속성 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변경 불가능&lt;/b&gt;한 타입&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678708197781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
	//  글자 타입 - String
    String name = &quot;John&quot;;
    name = &quot;David&quot; // 변수에 새로운 값을 할당함
    // String 타입 변수에 새로운 값을 할당하면 이전 값이 변경되는 것이 아니라
    // 새로운 String 객체가 생성되고 이를 참조함

	String name2 = &quot;Ann&quot;;
    print('$name $name2'); // David Ann
	print('${name} ${name2}'); // David Ann
    print('$name.runtimeType ${name2.runtimeType}');
    // David.runtimeType String
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. Boolean 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;bool&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ex) bool isSunny = true;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5. 변수 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. var&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;2. dynamic&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;보통 다른 언어에서의 Object 타입과 비슷한 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678710229786&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
    dynamic x = 10;
    print(x.runtimeType); // int
    x = &quot;hello&quot;;
    print(x.runtimeType); // String
    var y = 20;
    print(y.runtimeType); // int
    y = &quot;hi&quot;;
    // line.6에서 y의 타입이 int가 되었기 때문에
    // String Type &quot;hi&quot;를 할당하려고 하면 데이터 타입이 다르기 때문에 컴파일 에러 발생
    print(y.runtimeType);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. var와 dynamic의 차이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;var는 초기화 시 타입이 결정되며 다른 타입으로 재할당 시 컴파일 에러 발생(&lt;b&gt;같은 타입으로만 재할당 가능&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;dynamic은 런타임 시점에 데이터 타입이 결정되기 때문에 재할당 시에도 다른 데이터 타입으로 할당 가능함.&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;size18&quot;&gt;6. nullable / non-nullable&lt;/p&gt;
&lt;pre id=&quot;code_1678710818136&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
	// nullable - null이 될 수 있다.
    // non-nullable - null이 될 수 없다.
	// null - 아무런 값도 있지 않다.
    
    // non-nullable
    String name = &quot;John&quot;;
    print(name); // John
    
    // nullable - ?
    String? name2 = &quot;Ann&quot;;
    print(name2!); // 현재 이 값은 null이 아니다.
    name2 = null;
    print(name2); // null

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7. final / const&lt;/p&gt;
&lt;pre id=&quot;code_1678711517467&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  final String name = &quot;John&quot;;
  print(name);
  //name = &quot;David&quot;; // error
  const name2 = &quot;Ann&quot;;
  print(name2);
  //name2 = &quot;Jully&quot;; // error

  // 초기화 시 재할당 불가능
  // final과 const 모두 불변 변수를 선언할 때 사용됨
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 공통점&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 차이점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기화 시기&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;final : 런타임 시점에 초기화&lt;/li&gt;
&lt;li&gt;const: 컴파일 시점에 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;const는 컴파일 시점에 초기화 되기 때문에, 값으로 컴파일 타임 상수로만 사용할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) DateTime.now()와 같은 런타임 상수를 const로 사용할 수 없음&lt;/li&gt;
&lt;li&gt;const는 DateTime.now()가 &lt;b&gt;빌드되는 시점을 모르기 때문에&lt;/b&gt; 상수로 사용할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678711408783&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const DateTime x = DateTime.now();
// 컴파일 에러 발생 : DateTime.now()는 런타임 상수가 아닙니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;8. Assignment Operator&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #444654; color: #d1d5db; text-align: start;&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;%= : 왼쪽 변수를 오른쪽 피연산자로 나눈 나머지 값을 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;~/= : 왼쪽 변수를 오른쪽 피연산자로 나눈 몫 값을 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;&amp;lt;&amp;lt;= : 왼쪽 변수를 오른쪽으로 시프트한 값을 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;&amp;gt;&amp;gt;= : 왼쪽 변수를 오른쪽으로 시프트한 값을 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;&amp;amp;= : 왼쪽 변수와 오른쪽 변수를 비트 단위 AND 연산한 결과를 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;^= : 왼쪽 변수와 오른쪽 변수를 비트 단위 XOR 연산한 결과를 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;|= : 왼쪽 변수와 오른쪽 변수를 비트 단위 OR 연산한 결과를 왼쪽 변수에 할당합니다.&lt;/li&gt;
&lt;li&gt;??= 변수가 null인 경우에만 할당하고, 그렇지 않으면 그대로 둡니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678712155218&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
	double? number = 4.0;
    print(number); // 4
    number ??= 2.0;
	print(number); // 4
	number = null;
    number ??= 2.0;
    print(number); // 2
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9. 값 비교&lt;/p&gt;
&lt;pre id=&quot;code_1678712330765&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  int number = 1;
  print(number is int); // true
  print(number is String); // false
  print(number is! String); // true is! = is not
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;10. List / Set&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;List : 중복 가능&lt;/li&gt;
&lt;li&gt;Set : 중복 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678712539611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  // List - 리스트
  List&amp;lt;String&amp;gt; fruit = ['사과', '배', '귤', '수박'];
  List&amp;lt;int&amp;gt; numbers = [1, 2, 3, 4, 5];
  print(fruit); // [사과, 배, 귤, 수박]
  print(numbers); // [1, 2, 3, 4, 5]

  // index - 순서
  print(fruit[2]);  // '귤'
  print(numbers[1]);  // 2

  // 리스트의 길이
  print(fruit.length);  // 4
  print(numbers.length);  // 5

  // 리스트 속성 추가/제거
  numbers.add(6); // + 6
  fruit.remove('수박'); // - '수박'

  print(fruit); // [사과, 배, 감귤]
  print(numbers); // [1, 2, 3, 4, 5, 6]

  // 리스트의 값이 인덱스의 몇번째 인지 리턴
  print(fruit.indexOf('사과')); // 0
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1678713811694&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  // Set
  // 중복 삭제 처리
  final Set&amp;lt;String&amp;gt; names = {'John', 'David', 'Ann', 'Garry', 'John'};
  print(names); // {John, David, Ann, Garry}
  // 초기화 시 John이 두개 들어갔지만 print에서는 하나만 있음(중복 삭제)
  print(names.contains('Ann')); // 값이 존재하는지 확인하는 멤버 함수(constains) - true
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;11. Map&lt;/p&gt;
&lt;pre id=&quot;code_1678713546078&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void main() {
  // Map
  // Key / Value
  Map&amp;lt;String, bool&amp;gt; avengers = {'캡틴 아메리카': true, '아이언맨': true, '헐크': true};
  print(avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true}
  avengers.addAll({'토르': true, '배트맨': false}); // avengers에 추가
  print(
      avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true, 배트맨: false}
  avengers.remove('배트맨'); // avengers에서 삭제
  print(avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true}
  print(avengers['아이언맨']); // 키 값을 기반으로 value를 가져온다. true
  avengers['블랙 위도우'] = true; // == avengers.addAll({'블랙 위도우': true})
  print(
      avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true, 블랙 위도우: true}
  print(avengers.keys); // (캡틴 아메리카, 아이언맨, 헐크, 토르, 블랙 위도우)
  print(avengers.values); // (true, true, true, true, true)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>앱 개발/dart</category>
      <category>DART</category>
      <category>변수와 클래스 선언</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/123</guid>
      <comments>https://ksw0627.tistory.com/123#entry123comment</comments>
      <pubDate>Mon, 13 Mar 2023 22:26:43 +0900</pubDate>
    </item>
    <item>
      <title>면접 스터디(병렬 프로그래밍)</title>
      <link>https://ksw0627.tistory.com/122</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 병렬 프로그래밍에 대해 설명해주세요.&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;병렬 프로그래밍은 &lt;b&gt;하나의 프로그램이 동시에 여러 작업을 처리&lt;/b&gt;할 수 있도록 하는 것을 말합니다. 여러 개의 프로세서, 코어 또는 컴퓨팅 자원을 동시에 사용하여 작업을 처리하는 방식입니다.&lt;br /&gt;병렬 프로그래밍은 &lt;b&gt;빠른 연산&lt;/b&gt;, &lt;b&gt;대규모 데이터 처리&lt;/b&gt; 등의 작업에서 특히 효과적입니다.&lt;br /&gt;공유 메모리 방식과 분산 메모리 방식으로 나뉘어집니다.&lt;br /&gt;일반적인 순차적 프로그래밍보다 구현이 어렵고 복잡하며, 병렬화에 대한 성능 향상을 위해 데이터 분할, 동기화, 병목현상 등 다양한 고려 사항이 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 공유 메모리 방식&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;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 분산 메모리 방식&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;/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;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;</description>
      <category>스터디/면접</category>
      <category>병렬 프로그래밍</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/122</guid>
      <comments>https://ksw0627.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 3 Mar 2023 22:53:00 +0900</pubDate>
    </item>
    <item>
      <title>면접 스터디(오버로딩/오버라이딩, RDB/NoSQL)</title>
      <link>https://ksw0627.tistory.com/121</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 오버로딩과 오버라이딩의 차이점은 무엇인가요?&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;오버로딩은 &lt;b&gt;같은 이름의 메소드를 정의&lt;/b&gt;하되, &lt;b&gt;매개변수의 유형과 개수를 다르게&lt;/b&gt; 해서 여러 개의 메소드를 정의하는 것을 말합니다. 메소드의 다형성을 구현하는 방법 중 하나입니다.&lt;br /&gt;오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 &lt;b&gt;재정의&lt;/b&gt;하는 것을 말합니다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생깁니다.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 오버로딩&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;&quot;리턴 값만&quot; 다른 것은 오버로딩 할 수 없다.&lt;/li&gt;
&lt;li&gt;메소드의 다형성을 구현하는 방법 중 하나&lt;/li&gt;
&lt;li&gt;같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;메소드의 이름을 절약할 수 있다.&lt;/li&gt;
&lt;li&gt;ex) println : int, double, boolean, string 등 다양한 타입의 매개변수를 넣어도 출력이 잘 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 오버라이딩&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;size18&quot;&gt;즉, 오버로딩 - 기존에 없는 새로운 메소드 추가 / 오버라이딩 - 상속받은 메소드를 재정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요.&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;RDB(Relation Database)와 NoSQL(Not Only SQL)은 모두 테이터베이스의 한 종류입니다.&lt;br /&gt;RDB는 데이터 일관성을 보장하고, 복잡한 쿼리 처리가 가능하며, 안정성과 보안성이 높습니다.&lt;br /&gt;반면 NoSQL은 확장성과 유연성이 높고, 대량의 비정형 데이터를 처리하는데 더 효과적입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. RDB와 NoSQL&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;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 차이점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 저장 방식
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;RDB : 데이터를 테이블 형태로 저장. 테이블 간 관계를 정의하여 데이터를 저장&lt;/li&gt;
&lt;li&gt;NoSQL : 데이터를 컬렉션, Docu, 키-밸류 등의 형태로 저장합니다. 데이터 모델링이 더 자유롭고, 스키마가 유동적으로 변경될 수 있습니다.&lt;/li&gt;
&lt;/ul&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;RDB : 수직 확장만 가능합니다. 서버 성능을 높이는 방법으로는 메모리나 CPU 등의 스펙을 높이는 방법만 있습니다.&lt;/li&gt;
&lt;li&gt;NoSQL : 수평 확장이 가능합니다. 여러 대의 서버를 추가하거나, 클라우스 서비스를 이용하여 노드를 늘릴 수 있습니다.&lt;/li&gt;
&lt;/ul&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;RDB : 일관성 있는 데이터를 보장하는 ACID 트랜젝션을 지원.&lt;/li&gt;
&lt;li&gt;NoSQL : 데이터 일관성보다는 확장성, 유연성, 가용성을 중시하는 경우가 많음.&lt;/li&gt;
&lt;/ul&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;RDB : SQL을 사용하여 데이터를 조회하고 조작&lt;/li&gt;
&lt;li&gt;NoSQL : 자체 쿼리 언어를 사용하거나, 각 DB마다 제공하는 쿼리 API를 사용.&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;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;</description>
      <category>스터디/면접</category>
      <category>nosql</category>
      <category>RDB</category>
      <category>오버라이딩</category>
      <category>오버로딩</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/121</guid>
      <comments>https://ksw0627.tistory.com/121#entry121comment</comments>
      <pubDate>Thu, 2 Mar 2023 21:05:44 +0900</pubDate>
    </item>
    <item>
      <title>면접 스터디(절차지향/객체지향/함수형 프로그래밍, 시간복잡도/공간복잡도)</title>
      <link>https://ksw0627.tistory.com/120</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;절차지향, 객체지향, 함수형 프로그래밍은 각각 프로그래밍 패러다임입니다. 각 패러다임은 프로그래밍에서 문제를 해결하는 방식, 데이터의 구성 및 처리 방법 등에서 차이가 있습니다.&lt;br /&gt;절차지향 프로그래밍은 &lt;b&gt;순차적&lt;/b&gt;으로 처리되는 일련의 절차를 중심으로 프로그래밍하는 방식입니다. 프로그램을 실행하는 순서가 중요하며, 프로그램 내에서 데이터와 함수를 분리하여 관리합니다.&amp;nbsp;&lt;br /&gt;객체지향 프로그래밍은 &lt;b&gt;객체&lt;/b&gt;를 중심으로 프로그래밍하는 방식입니다. 객체는 데이터와 함수를 함께 묶어서 관리하는데, 이를 클래스라는 틀 안에 정의하여 사용합니다. &lt;b&gt;객체간의 상호작용&lt;/b&gt;을 통해 프로그램을 구성하며, 이러한 방식은 모듈화 및 재사용성을 높이고 유지보수를 용이하게 합니다.&lt;br /&gt;함수형 프로그래밍은 &lt;b&gt;함수&lt;/b&gt;를 중심으로 프로그래밍하는 방식입니다. 함수는 입력값을 받아 결과값을 반환하는데, 이를 이용하여 프로그램을 구성합니다. 병렬처리 및 추상화를 이용하여 프로그램의 가독성과 유지보수를 쉽게 합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 알고리즘에서 '시간 복잡도'와 '공간 복잡도'란 무엇인가? 그리고 이것들은 왜 중요한가?&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;시간 복잡도와 공간 복잡도는 알고리즘의 성능을 평가하는 데 사용되는 지표입니다.&lt;br /&gt;시간 복잡도는 알고리즘이 문제를 해결하는 데 걸리는 시간을 나타내는 지표입니다. 공간 복잡도는 알고리즘이 문제를 해결하는 데 필요한 메모리 공간의 크기를 나타내는 지표입니다.&lt;br /&gt;알고리즘의 시간 복잡도가 작으면 더 빠른 실행 시간을 가질 수 있으며, 공간 복잡도가 작으면 더 적은 메모리 공간을 사용할 수 있습니다.&lt;/blockquote&gt;</description>
      <category>스터디/면접</category>
      <category>객체지향</category>
      <category>공간 복잡도</category>
      <category>시간 복잡도</category>
      <category>절차지향</category>
      <category>함수형 프로그래밍</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/120</guid>
      <comments>https://ksw0627.tistory.com/120#entry120comment</comments>
      <pubDate>Wed, 1 Mar 2023 15:05:36 +0900</pubDate>
    </item>
    <item>
      <title>[면접 스터디]웹 서버와 WAS, Stack/Queue, Array/Linked List</title>
      <link>https://ksw0627.tistory.com/119</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 웹 서버와 WAS의 차이는?&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재합니다. Web Server는 &lt;b&gt;정적 컨텐츠&lt;/b&gt;만 처리하도록 기능을 분배하고, WAS는 &lt;b&gt;동적 컨텐츠&lt;/b&gt;를 제공하여 &lt;b&gt;서버의 부하를 방지&lt;/b&gt;합니다. 여러 대의 WAS를 연결 가능하고, 대용량 웹 어플리케이션의 경우 무중단 운영을 위한 &lt;b&gt;장애 극복&lt;/b&gt;에 쉽게 대응할 수 있습니다.&lt;br /&gt;즉, &lt;b&gt;Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능합니다&lt;/b&gt;.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRMz3R/btr0RKDEMtN/frOfA5nM5C0nZmCTGN6vqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRMz3R/btr0RKDEMtN/frOfA5nM5C0nZmCTGN6vqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRMz3R/btr0RKDEMtN/frOfA5nM5C0nZmCTGN6vqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRMz3R%2Fbtr0RKDEMtN%2FfrOfA5nM5C0nZmCTGN6vqk%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;1917&quot; height=&quot;607&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. Web Server&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;1) 하드웨어 : Web 서버가 설치되어 있는 컴퓨터&lt;/li&gt;
&lt;li&gt;2) 소프트웨어: 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 &lt;b&gt;정적 컨텐츠&lt;/b&gt;를 제공하는 컴퓨터 프로그램&lt;/li&gt;
&lt;/ul&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;HTTP 프로토콜 기반. 클라이언트의 요청을 서비스하는 기능 담당&lt;/li&gt;
&lt;/ul&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;Apache Server, Nginx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. WAS(Web Application Server)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;DB 조회나 다양한 로직 처리를 요구하는 &lt;b&gt;동적 컨텐츠&lt;/b&gt;를 제공하기 위해 만들어진 Application Server&lt;/li&gt;
&lt;li&gt;HTTP를 통해 컴퓨터나 장치에 Application을 수행하는 미들웨어(소프트웨어 엔진)&lt;/li&gt;
&lt;li&gt;Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말함.&lt;/li&gt;
&lt;/ul&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;WAS = Web Server + Web Container&lt;/li&gt;
&lt;li&gt;Web Server 기능들을 구조적으로 분리하여 처리하고자 하는 목적&lt;/li&gt;
&lt;/ul&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;프로그램 실행 환경과 DB 접속 기능 제공&lt;/li&gt;
&lt;li&gt;여러 개의 트랜젝션 관리 기능&lt;/li&gt;
&lt;li&gt;업무 처리하는 비즈니스 로직 수행&lt;/li&gt;
&lt;/ul&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;Tomcat, JBoss, Jeus, Web Sphere&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server와 WAS를 분리함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능함.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Reference&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677566485534&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog&quot; data-og-description=&quot;Step by step goes a long way.&quot; data-og-host=&quot;gmlwjd9405.github.io&quot; data-og-source-url=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; data-og-url=&quot;http://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MGJU1/hyRMtvGDpj/2LXl96UwmEJ1DtC93Ae0qk/img.png?width=3233&amp;amp;height=1262&amp;amp;face=0_0_3233_1262,https://scrap.kakaocdn.net/dn/bmd2N1/hyRMlxDIAA/4stU6jNSb7iOkf0FmMhPK0/img.png?width=3402&amp;amp;height=1166&amp;amp;face=0_0_3402_1166,https://scrap.kakaocdn.net/dn/tUJRD/hyRMvAexdp/1ZR6CmF4aavH89ckpmwTq0/img.png?width=2843&amp;amp;height=850&amp;amp;face=0_0_2843_850&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MGJU1/hyRMtvGDpj/2LXl96UwmEJ1DtC93Ae0qk/img.png?width=3233&amp;amp;height=1262&amp;amp;face=0_0_3233_1262,https://scrap.kakaocdn.net/dn/bmd2N1/hyRMlxDIAA/4stU6jNSb7iOkf0FmMhPK0/img.png?width=3402&amp;amp;height=1166&amp;amp;face=0_0_3402_1166,https://scrap.kakaocdn.net/dn/tUJRD/hyRMvAexdp/1ZR6CmF4aavH89ckpmwTq0/img.png?width=2843&amp;amp;height=850&amp;amp;face=0_0_2843_850');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Step by step goes a long way.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gmlwjd9405.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. Stack과 Queue 그리고 Array와 Linked List 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;Stack은 한쪽 끝에서만 요소를 추가하고 제거할 수 있는 &lt;b&gt;후입선출&lt;/b&gt;(&lt;b&gt;LIFO&lt;/b&gt;) 자료 구조입니다. Queue는 한쪽 끝에 요소를 추가하고 다른 쪽 끝에 요소를 제거할 수 있는 &lt;b&gt;선입선출&lt;/b&gt;(&lt;b&gt;FIFO&lt;/b&gt;) 자료 구조입니다. Stack과 Queue의 차이점은 요소가 추가되고 제거되는 순서입니다.&lt;br /&gt;Array는 동일한 데이터 유형의 요소 모음을 저장할 수 있는 &lt;b&gt;고정 크기의 연속 메모리 블록&lt;/b&gt;입니다. Linked List는 각 노드에 데이터와 다음 목록의 &lt;b&gt;다음 노드에 대한 참조가 포함&lt;/b&gt;된 노드 모음으로 구성된 &lt;b&gt;동적 데이터 구조&lt;/b&gt;입니다. Array와 Linked List의 차이점은 요소를 저장하고 액세스 하는 방식입니다. 배열은 인덱스를 사용하여 &lt;b&gt;모든 요소&lt;/b&gt;에 지속적으로 액세스할 수 있습니다. 반면 연결리스트는 참조를 통해 연결된 노드에 요소를 저장하므로 &lt;b&gt;원하는 요소를 찾을 때까지&lt;/b&gt; 한 노드에서 다른 노드로 List를 순회하며 요소에 간접적으로 액세스 합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. Stack&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ztI2Z/btr1nxhDKXz/c8cEepHy8otY6XEDU8UxR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ztI2Z/btr1nxhDKXz/c8cEepHy8otY6XEDU8UxR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ztI2Z/btr1nxhDKXz/c8cEepHy8otY6XEDU8UxR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FztI2Z%2Fbtr1nxhDKXz%2Fc8cEepHy8otY6XEDU8UxR0%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;814&quot; height=&quot;482&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;482&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;size18&quot;&gt;2. Queue&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYiZBe/btr0RKDFqjw/vRyhmmIRYpwgtf4BxuvCe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYiZBe/btr0RKDFqjw/vRyhmmIRYpwgtf4BxuvCe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYiZBe/btr0RKDFqjw/vRyhmmIRYpwgtf4BxuvCe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYiZBe%2Fbtr0RKDFqjw%2FvRyhmmIRYpwgtf4BxuvCe0%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;794&quot; height=&quot;301&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. Array&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pqcBX/btr1dloOF0J/0lBm9Wc2P8pBoHMLrnageK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pqcBX/btr1dloOF0J/0lBm9Wc2P8pBoHMLrnageK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pqcBX/btr1dloOF0J/0lBm9Wc2P8pBoHMLrnageK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpqcBX%2Fbtr1dloOF0J%2F0lBm9Wc2P8pBoHMLrnageK%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;429&quot; height=&quot;195&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;195&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;size18&quot;&gt;4. Linked List&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VPV01/btr1nCJ0oDk/qEvibktudSbqxOq2LPDNyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VPV01/btr1nCJ0oDk/qEvibktudSbqxOq2LPDNyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VPV01/btr1nCJ0oDk/qEvibktudSbqxOq2LPDNyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVPV01%2Fbtr1nCJ0oDk%2FqEvibktudSbqxOq2LPDNyk%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;759&quot; height=&quot;169&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>스터디/면접</category>
      <category>array</category>
      <category>linked list</category>
      <category>Queue</category>
      <category>Stack</category>
      <category>WAS</category>
      <category>연결 리스트</category>
      <category>웹서버</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/119</guid>
      <comments>https://ksw0627.tistory.com/119#entry119comment</comments>
      <pubDate>Tue, 28 Feb 2023 15:57:34 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 윈도우 Docker 실행 시 &amp;quot;Docker Desktop requires a newer WSL kernel version&amp;quot;</title>
      <link>https://ksw0627.tistory.com/118</link>
      <description>&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FqJAH/btr1dmVliHB/vNqY1wk00G2U4gpMjjAagK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FqJAH/btr1dmVliHB/vNqY1wk00G2U4gpMjjAagK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FqJAH/btr1dmVliHB/vNqY1wk00G2U4gpMjjAagK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFqJAH%2Fbtr1dmVliHB%2FvNqY1wk00G2U4gpMjjAagK%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;691&quot; height=&quot;254&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd 창에 들어가서 wsl --update 로 설치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XXqvG/btr1dmA3DTu/AhDCJcVIMJHUArRO5iX8h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XXqvG/btr1dmA3DTu/AhDCJcVIMJHUArRO5iX8h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XXqvG/btr1dmA3DTu/AhDCJcVIMJHUArRO5iX8h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXXqvG%2Fbtr1dmA3DTu%2FAhDCJcVIMJHUArRO5iX8h1%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;406&quot; height=&quot;139&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 도커를 종료하고 재실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt9jaj/btr0NHNP2dd/RSTlTwkIJp64FBh5iKj1ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt9jaj/btr0NHNP2dd/RSTlTwkIJp64FBh5iKj1ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt9jaj/btr0NHNP2dd/RSTlTwkIJp64FBh5iKj1ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt9jaj%2Fbtr0NHNP2dd%2FRSTlTwkIJp64FBh5iKj1ek%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;1271&quot; height=&quot;718&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짠!&lt;/p&gt;</description>
      <category>Error 모음</category>
      <category>Docker</category>
      <category>error</category>
      <category>WSL kernel</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/118</guid>
      <comments>https://ksw0627.tistory.com/118#entry118comment</comments>
      <pubDate>Tue, 28 Feb 2023 12:49:09 +0900</pubDate>
    </item>
    <item>
      <title>면접 스터디(트랜젝션, TCP&amp;amp;UDP)</title>
      <link>https://ksw0627.tistory.com/117</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 트랜젝션이 무엇인지 설명해주세요.&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;트랜젝션이란 &quot;&lt;b&gt;쪼갤 수 없는 업무 처리의 최소 단위&lt;/b&gt;&quot;를 말합니다. 영어로 간략하게 Tx라고 표기하기도 합니다. 1초당 처리할 수 있는 트랜젝션의 갯수를 TPS라고 합니다. &lt;br /&gt;일반적으로 데이터 읽기, 쓰기 및 업데이트와 같은 일련의 작업이 포함됩니다. 트랜젝션의 목적은 작업 실행 중에 발생하는 실패나 오류가 발생하더라도 시스템이 일관된 상태를 유지하도록 하는 것입니다.&lt;br /&gt;트랜젝션은 &lt;b&gt;원자성&lt;/b&gt;(Atomicity), &lt;b&gt;일관성&lt;/b&gt;(Consistency), &lt;b&gt;격리성&lt;/b&gt;(Isolation), &lt;b&gt;영속성&lt;/b&gt;(Durability)를 나타내는 ACID 속성을 따릅니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 트랜젝션(Transaction)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아놓은 하나의 작업 단위&lt;/li&gt;
&lt;li&gt;여러 개의 작업을 하나로 묶은 실행 유닛&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 목적&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업 실행 중에 실패나 오류가 발생하더라도 &lt;b&gt;시스템이 일관된 상태를 유지&lt;/b&gt;하도록 하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 성질 ( ACID )&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원자성(Atomicity) : 트랜젝션의 연산들이 모두 성공하거나, 반대로 모두 실패하는 성질, 트랜젝션의 &lt;b&gt;안전성 보장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;일관성(Consistency)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;DB의 상태가 일관&lt;/b&gt;되어야하는 성질&lt;/li&gt;
&lt;li&gt;트랜젝션의 이전과 이후, DB의 상태는 이전과 같이 유효해야 함&lt;/li&gt;
&lt;li&gt;즉, 트랜젝션이 일어난 이후 DB는 DB의 제약이나 규칙을 만족해야 한다는 뜻&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;격리성(Isolation) :여러 개의 트랜젝션들이 수행될 때, 각 트랜젝션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 나타냄&lt;/li&gt;
&lt;li&gt;지속성(Durability)&amp;nbsp;
&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;b&gt;기록은 영구적&lt;/b&gt;이어야함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Reference&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677502881790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬&quot; data-og-description=&quot;트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안&quot; data-og-host=&quot;hanamon.kr&quot; data-og-source-url=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; data-og-url=&quot;https://hanamon.kr/데이터베이스-트랜잭션의-acid-성질/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ia7rW/hyRMsQjROk/66x8g5q42wCA4zBaZ6pEr1/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/GbMGF/hyRMoAntDk/myqyFKhgWn0t0odqPKlrM0/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/AYggO/hyRMj0amS3/R7MSRhDI2OWvIlUXKaqiL0/img.png?width=660&amp;amp;height=440&amp;amp;face=0_0_660_440&quot;&gt;&lt;a href=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ia7rW/hyRMsQjROk/66x8g5q42wCA4zBaZ6pEr1/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/GbMGF/hyRMoAntDk/myqyFKhgWn0t0odqPKlrM0/img.png?width=930&amp;amp;height=620&amp;amp;face=0_0_930_620,https://scrap.kakaocdn.net/dn/AYggO/hyRMj0amS3/R7MSRhDI2OWvIlUXKaqiL0/img.png?width=660&amp;amp;height=440&amp;amp;face=0_0_660_440');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hanamon.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677502896764&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;트랜잭션 - 해시넷&quot; data-og-description=&quot;트랜잭션(transaction)이란 &amp;quot;쪼갤 수 없는 업무 처리의 최소 단위&amp;quot;를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다. &quot; data-og-host=&quot;wiki.hash.kr&quot; data-og-source-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; data-og-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uEq6t/hyRKJ7fvDH/FGoIndcEWvecjsjr2Z8gW1/img.png?width=800&amp;amp;height=410&amp;amp;face=0_0_800_410,https://scrap.kakaocdn.net/dn/QGGlm/hyRMkShYY9/cuPWaMy7PmycPfifhvJnYK/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uEq6t/hyRKJ7fvDH/FGoIndcEWvecjsjr2Z8gW1/img.png?width=800&amp;amp;height=410&amp;amp;face=0_0_800_410,https://scrap.kakaocdn.net/dn/QGGlm/hyRMkShYY9/cuPWaMy7PmycPfifhvJnYK/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션 - 해시넷&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션(transaction)이란 &quot;쪼갤 수 없는 업무 처리의 최소 단위&quot;를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wiki.hash.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q. TCP와 UDP의 공통점과 차이점을 설명해보세요.&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;TCP와 UDP 모두 OSI 모델의 &lt;b&gt;전송 계층&lt;/b&gt;에서 작동하며 IP 네트워크를 통해 데이터를 전송하는 데 사용됩니다. 두 프로토콜 모두 IP 주소 및 포트 번호와 같은 동일한 주소 지정 체계를 사용하여 데이터의 &lt;b&gt;발신자와 수신자를 식별&lt;/b&gt;합니다. 두 프로토콜 모두 &lt;b&gt;인터넷을 통해 데이터를 전송&lt;/b&gt;하는 데 사용할 수 있습니다.&lt;br /&gt;두 프로토콜의 차이점은 &lt;b&gt;연결성&lt;/b&gt; 및 &lt;b&gt;신뢰성&lt;/b&gt;이 보장되느냐 아니냐로 나눌 수 있습니다. TCP는 데이터를 전송하기 전에 발신자와 수신자 사이에 안정적인 &lt;b&gt;연결을 설정&lt;/b&gt;하고, &lt;b&gt;신뢰할 수 있는 데이터 전송&lt;/b&gt;을 제공하여 모든 데이터가 오류 없이 올바른 순서로 전달되도록 합니다. UDP는 &lt;b&gt;연결을 설정하지 않고&lt;/b&gt; 가능한 한 빨리 데이터를 보내며, &lt;b&gt;신뢰성을 보장하지 않고&lt;/b&gt; 패킷이 손실, 복제 또는 &lt;b&gt;잘못된 순서로 전달&lt;/b&gt;될 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. TCP (Transmission Control Protocol)&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;b&gt;연결지향&lt;/b&gt; 프로토콜&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연결성&lt;/b&gt;, &lt;b&gt;신뢰성&lt;/b&gt; 2가지 특징을 보유하고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. UDP (User Datagram Protocol)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP와 다르게 &lt;b&gt;연결성, 신뢰성을 보장하지 않음&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;연결지향 3 Way HandShake 방식이 아니다.&lt;/li&gt;
&lt;li&gt;데이터 전달 순서 보장과 전달 보증을 하지 않는다.&lt;/li&gt;
&lt;li&gt;TCP 방식에 비해 &lt;b&gt;순서 및 데이터 전달이 단순하고 빠르다&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Reference&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@sbi1024/%EA%B3%B5%EB%B6%80-TCPUDP%EC%9D%98-%EA%B3%B5%ED%86%B5%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@sbi1024/%EA%B3%B5%EB%B6%80-TCPUDP%EC%9D%98-%EA%B3%B5%ED%86%B5%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677504079548&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[공부] TCP/UDP의 공통점 및 차이점&quot; data-og-description=&quot;TCP (Transmission Control Protocol) 란 ? TPC는 인터넷 프로토콜 스택의 4계층 중 전송계층에 속하며 직역하면 전송 제어 프로토콜 이다.TPC는 어떠한 특징을 가지고 있는지 하기 아래와 같이 간략하게 정&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@sbi1024/%EA%B3%B5%EB%B6%80-TCPUDP%EC%9D%98-%EA%B3%B5%ED%86%B5%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; data-og-url=&quot;https://velog.io/@sbi1024/공부-TCPUDP의-공통점-및-차이점&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fafRp/hyRMthpZU2/FqTgS8f14ECabJjvn0fxW0/img.png?width=695&amp;amp;height=281&amp;amp;face=0_0_695_281,https://scrap.kakaocdn.net/dn/nrVPC/hyRKUgCcD8/KzLtgcsvmK7JQFxhkDEskk/img.png?width=695&amp;amp;height=281&amp;amp;face=0_0_695_281,https://scrap.kakaocdn.net/dn/bhRzq0/hyRMlp78uN/LGBrg5qr68BkBvLU7vq6lk/img.png?width=845&amp;amp;height=383&amp;amp;face=0_0_845_383&quot;&gt;&lt;a href=&quot;https://velog.io/@sbi1024/%EA%B3%B5%EB%B6%80-TCPUDP%EC%9D%98-%EA%B3%B5%ED%86%B5%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@sbi1024/%EA%B3%B5%EB%B6%80-TCPUDP%EC%9D%98-%EA%B3%B5%ED%86%B5%EC%A0%90-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fafRp/hyRMthpZU2/FqTgS8f14ECabJjvn0fxW0/img.png?width=695&amp;amp;height=281&amp;amp;face=0_0_695_281,https://scrap.kakaocdn.net/dn/nrVPC/hyRKUgCcD8/KzLtgcsvmK7JQFxhkDEskk/img.png?width=695&amp;amp;height=281&amp;amp;face=0_0_695_281,https://scrap.kakaocdn.net/dn/bhRzq0/hyRMlp78uN/LGBrg5qr68BkBvLU7vq6lk/img.png?width=845&amp;amp;height=383&amp;amp;face=0_0_845_383');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[공부] TCP/UDP의 공통점 및 차이점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TCP (Transmission Control Protocol) 란 ? TPC는 인터넷 프로토콜 스택의 4계층 중 전송계층에 속하며 직역하면 전송 제어 프로토콜 이다.TPC는 어떠한 특징을 가지고 있는지 하기 아래와 같이 간략하게 정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스터디/면접</category>
      <category>tcp</category>
      <category>udp</category>
      <category>트랜젝션</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/117</guid>
      <comments>https://ksw0627.tistory.com/117#entry117comment</comments>
      <pubDate>Mon, 27 Feb 2023 22:21:41 +0900</pubDate>
    </item>
    <item>
      <title>20230226 WIL</title>
      <link>https://ksw0627.tistory.com/116</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 면접 스터티 공부&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;OOP, Rest API&lt;/li&gt;
&lt;li&gt;DI, DB에서의 인덱싱&lt;/li&gt;
&lt;li&gt;MSA, 제네릭, List/Set, Map/HashMap&lt;/li&gt;
&lt;li&gt;Parameter/Argument, 프로세스/스레드&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 티끌 모아 태산 프로젝트 리펙토링&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;리스트 업&lt;/li&gt;
&lt;li&gt;Express 종속성 제거와 커스텀 데코레이터&lt;/li&gt;
&lt;li&gt;ConfigModule - process.env 교체&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>TIL_WIL_MIL/WIL</category>
      <category>Wil</category>
      <author>ksw0627</author>
      <guid isPermaLink="true">https://ksw0627.tistory.com/116</guid>
      <comments>https://ksw0627.tistory.com/116#entry116comment</comments>
      <pubDate>Sun, 26 Feb 2023 23:38:24 +0900</pubDate>
    </item>
  </channel>
</rss>