<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>VictorGoodDays 님의 블로그</title>
    <link>https://victorgooddays.tistory.com/</link>
    <description>victorgooddays 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 13 Apr 2026 00:28:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>VictorGoodDays</managingEditor>
    <image>
      <title>VictorGoodDays 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7562141/attach/19f7ec239cc94c7a9ad4bc4e8ae2e227</url>
      <link>https://victorgooddays.tistory.com</link>
    </image>
    <item>
      <title>가변데이터 처리가 가능하도록 개발하는 방법은?</title>
      <link>https://victorgooddays.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;가변 데이터를 처리할 수 있도록 개발하려면, 데이터의 동적 성격을 고려하고 확장 가능하며 유연한 구조를 채택해야 합니다. 아래는 가변 데이터를 처리하기 위한 주요 방법과 접근 방식을 정리한 내용입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;데이터 모델링&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;JSON 또는 YAML 사용&lt;/b&gt;: 가변적이고 계층적인 데이터를 표현하기 위해 JSON이나 YAML 같은 구조화된 형식을 사용합니다. 예:
&lt;div&gt;
&lt;div&gt;json&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;복사&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;편집&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;{&lt;/span&gt; &lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;&quot;John Doe&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&quot;attributes&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt; &lt;span&gt;&quot;height&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;180&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&quot;skills&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;Python&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&quot;JavaScript&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt; &lt;span&gt;}&lt;/span&gt; &lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스키마 유효성 검사&lt;/b&gt;: JSON Schema 또는 Protobuf를 사용하여 유효한 데이터 구조를 정의하고 필요에 따라 확장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;유연한 데이터베이스 설계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NoSQL 데이터베이스&lt;/b&gt;: MongoDB, DynamoDB와 같은 NoSQL 데이터베이스는 스키마가 고정되지 않아 가변 데이터를 쉽게 저장하고 쿼리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Relational DB + JSON 컬럼&lt;/b&gt;: PostgreSQL이나 MySQL 같은 RDBMS에서 JSON 데이터를 저장하여 가변적인 필드를 처리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;코드 설계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동적 데이터 구조 사용&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python: dict, list 같은 동적 자료 구조 활용.&lt;/li&gt;
&lt;li&gt;JavaScript: 객체와 배열을 동적으로 구성.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;타입 추론 및 유효성 검사&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python: pydantic, marshmallow를 이용해 데이터 유효성 검사.&lt;/li&gt;
&lt;li&gt;TypeScript: 인터페이스와 제네릭 타입 정의로 가변성을 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 변환 및 매핑&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;map, reduce와 같은 고차 함수로 데이터 처리.&lt;/li&gt;
&lt;li&gt;데이터가 다양한 형태로 들어올 경우 이를 표준화하는 데이터 매퍼를 작성.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;API 설계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;REST API&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동적 필터링 및 정렬 지원 (GET /items?sort=name&amp;amp;filter=status:active).&lt;/li&gt;
&lt;li&gt;가변 필드 반환 (fields=name,price를 사용해 필요한 데이터만 반환).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GraphQL&lt;/b&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;div&gt;
&lt;div&gt;graphql&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;복사&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;편집&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;query&lt;/span&gt; &lt;span&gt;{&lt;/span&gt; user &lt;span&gt;{&lt;/span&gt; name attributes &lt;span&gt;{&lt;/span&gt; key value &lt;span&gt;}&lt;/span&gt; &lt;span&gt;}&lt;/span&gt; &lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;가변 데이터 처리 도구&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 직렬화 및 역직렬화&lt;/b&gt;: 데이터를 동적으로 로드하고 저장할 때 사용하는 라이브러리.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python: json, yaml, pickle.&lt;/li&gt;
&lt;li&gt;JavaScript: JSON.parse(), JSON.stringify().&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ETL 파이프라인 설계&lt;/b&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;Apache Kafka 또는 Apache Spark를 사용하여 실시간으로 가변 데이터를 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. &lt;b&gt;확장 가능한 시스템 설계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이벤트 기반 아키텍처&lt;/b&gt;: 메시지 큐나 이벤트 스트림 (예: RabbitMQ, Kafka)을 사용하여 동적인 데이터 흐름 처리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이크로서비스&lt;/b&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;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. &lt;b&gt;예외 처리 및 로깅&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가변 데이터를 처리할 때 예상치 못한 데이터가 들어올 가능성을 고려하여 예외 처리를 철저히 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Python&lt;/b&gt;: try-except 블록.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JavaScript&lt;/b&gt;: try-catch.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로깅&lt;/b&gt;: 데이터의 형태와 처리 상태를 기록하여 디버깅과 추적을 용이하게 만듦.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. &lt;b&gt;테스트 및 검증&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동적 데이터 테스트&lt;/b&gt;:
&lt;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;Fuzz Testing을 도입하여 예상치 못한 데이터를 처리 가능 여부 점검.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Mock 데이터&lt;/b&gt;: 가변 데이터를 시뮬레이션하기 위한 샘플 데이터 생성 도구 사용 (e.g., Faker).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 방법들을 상황에 맞게 조합하면 가변 데이터를 효율적으로 처리할 수 있는 시스템을 설계하고 개발할 수 있습니다. 어떤 도구와 설계 방식을 채택할지 구체적인 요구 사항에 따라 결정하면 됩니다.  &lt;/p&gt;</description>
      <category>개발노하우</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/9</guid>
      <comments>https://victorgooddays.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 19 Jan 2025 04:31:36 +0900</pubDate>
    </item>
    <item>
      <title>스택(stack)과 힙(heap)의 차이점</title>
      <link>https://victorgooddays.tistory.com/7</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;d5dfd2c0-decd-469e-83d0-20c4aecb1d31&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택(stack)과 힙(heap)은 프로그램 실행 중 메모리를 관리하는 주요 방식입니다. 이 둘의 차이점을 이해하면 효율적인 메모리 사용과 디버깅에 도움이 됩니다.&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&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 스택 (Stack)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;메모리 구조&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LIFO (Last In, First Out) 방식으로 데이터를 관리.&lt;/li&gt;
&lt;li&gt;메모리가 연속적으로 할당됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;속도&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;범위&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;생명 주기&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;크기 제한&lt;/b&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;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;/li&gt;
&lt;li&gt;빠른 메모리 접근 속도.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;/li&gt;
&lt;li&gt;데이터 크기와 생명 주기가 제한적(블록 범위 내).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용 예&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;c&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;코드 복사&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;void&lt;/span&gt; &lt;span&gt;example&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; { &lt;span&gt;int&lt;/span&gt; x = &lt;span&gt;10&lt;/span&gt;; &lt;span&gt;// x는 스택에 저장&lt;/span&gt; &lt;span&gt;int&lt;/span&gt; y = &lt;span&gt;20&lt;/span&gt;; &lt;span&gt;printf&lt;/span&gt;(&lt;span&gt;&quot;%d, %d\n&quot;&lt;/span&gt;, x, y); }&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&gt;x와 y는 함수 실행 중 스택에 저장되며, 함수가 끝나면 메모리가 해제됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 힙 (Heap)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;메모리 구조&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;속도&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;범위&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발자가 명시적으로 메모리를 할당(malloc)하고 해제(free)해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;생명 주기&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;크기 제한&lt;/b&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;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;/li&gt;
&lt;li&gt;메모리 크기와 생명 주기를 개발자가 제어 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;/li&gt;
&lt;li&gt;동적 할당은 시간이 더 걸림.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용 예&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;c&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;코드 복사&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#&lt;span&gt;include&lt;/span&gt; &lt;span&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span&gt;#&lt;span&gt;include&lt;/span&gt; &lt;span&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; &lt;span&gt;example&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; { &lt;span&gt;int&lt;/span&gt; *ptr = (&lt;span&gt;int&lt;/span&gt; *)&lt;span&gt;malloc&lt;/span&gt;(&lt;span&gt;sizeof&lt;/span&gt;(&lt;span&gt;int&lt;/span&gt;)); &lt;span&gt;// 힙에 메모리 할당&lt;/span&gt; &lt;span&gt;if&lt;/span&gt; (ptr == &lt;span&gt;NULL&lt;/span&gt;) { &lt;span&gt;printf&lt;/span&gt;(&lt;span&gt;&quot;Memory allocation failed\n&quot;&lt;/span&gt;); &lt;span&gt;return&lt;/span&gt;; } *ptr = &lt;span&gt;42&lt;/span&gt;; &lt;span&gt;// 힙 메모리에 값 저장&lt;/span&gt; &lt;span&gt;printf&lt;/span&gt;(&lt;span&gt;&quot;%d\n&quot;&lt;/span&gt;, *ptr); &lt;span&gt;free&lt;/span&gt;(ptr); &lt;span&gt;// 메모리 해제&lt;/span&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&gt;ptr이 가리키는 메모리는 힙에 위치하며, free로 해제하지 않으면 메모리 누수가 발생.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 차이점 비교&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징스택(Stack)힙(Heap)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;할당 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;컴파일러에 의해 자동 할당&lt;/td&gt;
&lt;td&gt;명시적으로 malloc/free 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;속도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;빠름&lt;/td&gt;
&lt;td&gt;느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;생명 주기&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;함수 블록 내에서만 유지&lt;/td&gt;
&lt;td&gt;개발자가 직접 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;크기 제한&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;상대적으로 작음&lt;/td&gt;
&lt;td&gt;상대적으로 큼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;관리 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;시스템 자동 관리&lt;/td&gt;
&lt;td&gt;개발자 수동 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;사용 용도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;지역 변수, 함수 호출 정보&lt;/td&gt;
&lt;td&gt;동적 데이터 구조, 큰 크기의 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;에러 가능성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;스택 오버플로우(Stack Overflow)&lt;/td&gt;
&lt;td&gt;메모리 누수(Memory Leak)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 요약&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스택&lt;/b&gt;은 고속, 제한된 메모리 크기, 자동 관리가 필요한 지역 변수에 적합.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;힙&lt;/b&gt;은 유연성, 큰 데이터 관리, 동적 메모리 할당이 필요한 경우에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율적인 메모리 관리를 위해 각 상황에 맞는 적절한 메모리 사용 방식을 선택하세요!&lt;/p&gt;</description>
      <category>개발노하우</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/7</guid>
      <comments>https://victorgooddays.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 14 Jan 2025 13:49:11 +0900</pubDate>
    </item>
    <item>
      <title>C개발을 효과적으로 잘하려면?</title>
      <link>https://victorgooddays.tistory.com/6</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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 기본기 다지기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;문법과 기초 개념&lt;/b&gt;: 변수, 데이터 타입, 연산자, 조건문, 반복문, 함수 등 기본 문법을 완벽히 익히세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포인터와 메모리 관리&lt;/b&gt;: 포인터, 메모리 할당(malloc, free), 배열과 포인터의 관계, 구조체와 포인터의 활용 등을 숙달하세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C 표준 라이브러리&lt;/b&gt;: stdio.h, stdlib.h, string.h 등의 기본 라이브러리 함수들을 익히고 활용법을 연습하세요&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;2. &lt;b&gt;실전 경험 쌓기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작은 프로젝트부터 시작&lt;/b&gt;: 간단한 프로그램(계산기, 파일 입출력 프로그램 등)을 작성하며 실습하세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오픈소스 참여&lt;/b&gt;: GitHub의 C 프로젝트를 분석하고 기여하면서 실제 프로젝트 환경을 경험하세요.&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;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;심화 학습&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;메모리 관리&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스택(stack)과 힙(heap)의 차이점.&lt;/li&gt;
&lt;li&gt;메모리 누수 문제를 찾아내고 해결하는 방법.&lt;/li&gt;
&lt;li&gt;Valgrind 같은 도구로 메모리 문제를 디버깅하는 연습.&lt;/li&gt;
&lt;/ul&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;: POSIX Threads(Pthreads)를 이용한 병렬 프로그래밍.&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;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;도구와 환경 익히기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;컴파일러&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gcc, clang과 같은 컴파일러를 사용하고 최적화 옵션(-O2, -O3)을 이해하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디버거&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gdb와 같은 디버거 사용법을 익혀 문제를 분석하고 해결하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;빌드 시스템&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Makefile, CMake 등 빌드 도구를 사용해 프로젝트를 관리하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드 분석 도구&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Valgrind, AddressSanitizer, cppcheck 등을 활용해 코드 품질을 높이세요.&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;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;코드 품질 향상&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;읽기 쉬운 코드 작성&lt;/b&gt;:
&lt;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;/li&gt;
&lt;li&gt;&lt;b&gt;에러 처리&lt;/b&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;errno를 활용하거나 반환값을 통해 예외 상황을 관리하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리팩토링&lt;/b&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;/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;6. &lt;b&gt;문제 해결 능력 강화&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;디버깅 능력&lt;/b&gt;: Segmentation Fault 같은 일반적인 오류를 분석하고 해결하는 연습.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제 해결 패턴 학습&lt;/b&gt;: 동적 할당, 이중 포인터, 함수 포인터 등의 활용 사례를 익히세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;효율적인 코드 작성&lt;/b&gt;: 시간 복잡도와 공간 복잡도를 고려한 알고리즘을 설계하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. &lt;b&gt;지속적인 학습&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;좋은 책 읽기&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;The C Programming Language (K&amp;amp;R) by Kernighan and Ritchie.&lt;/li&gt;
&lt;li&gt;Expert C Programming by Peter van der Linden.&lt;/li&gt;
&lt;li&gt;C Primer Plus by Stephen Prata.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;온라인 강의&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Coursera, Udemy, edX 등에서 제공하는 C 언어 강의를 수강하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티 활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Stack Overflow, Reddit, GitHub 등에서 질문하고 답변하며 배워보세요.&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;내 생각에 가장 중요한 능력은 로직을 구현하는 것과 디버깅기술이다.&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;또한 디버깅기술은 코드의 실수를 최소한으로 줄여주는 가장 강력한 방법이다.&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;</description>
      <category>개발노하우</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/6</guid>
      <comments>https://victorgooddays.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 14 Jan 2025 13:09:26 +0900</pubDate>
    </item>
    <item>
      <title>오라클 컴파일 환경 만들기</title>
      <link>https://victorgooddays.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 하려니 왜케 안되는건지~&lt;br /&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;instantclient-precomp-linux.x64-23.6.0.24.10.zip 이 파일을 설치해주고 나니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sqlca.h 가 생성되는 것을 확인했다&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;</description>
      <category>개발자경험담</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/5</guid>
      <comments>https://victorgooddays.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 13 Jan 2025 18:00:23 +0900</pubDate>
    </item>
    <item>
      <title>세금을 아껴야... 연말정산 잘받는 방법</title>
      <link>https://victorgooddays.tistory.com/4</link>
      <description>&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;카드도 마찬가지~&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 style=&quot;background-color: #ffffff; color: #213989; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;◇ 소비 지출 많을수록 환급액도 크다?&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연말정산과 관련한 흔한 오해들이 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;대표적으로 신용&amp;middot;체크카드 소비액이 크면 클수록 환급액이 커진다는 설이다. 이는 사용액 소득공제에서 생기는 오해 때문이다. 모든 공제에는 '공제율'과 '한도'가 있기 때문에 사용액 소득공제라 할지라도 '많이 쓰면 쓸수록' 세금을 줄여주지는 않는다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용액 공제는 총급여액의 25%를 초과하는 금액부터 적용되고 각 결제 수단별 공제율은 신용카드는 사용 금액의 15%, 체크&amp;middot;선불카드는 사용 금액의 30%, 현금영수증은 사용 금액의 30% 등으로 다르다. 여기에 전통시장, 대중교통, 도서&amp;middot;신문&amp;middot;공연&amp;middot;박물관&amp;middot;미술관 등 사용처에 따른 공제도 적용되고 다르고, 급여에 따라 공제 한도액도 차이가 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다만 한 해에 지출한 금액이 총급여의 25%를 넘어 공제 대상이 되면 그 이후부터는 공제율이 낮은 신용카드보다 체크카드를 쓰는 게 연말정산에 유리하다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;또 공제 항목은 회사가 알아서 챙겨준다고 생각하기 쉽지만 그렇지 않다. 회사는 연말정산 서류를 정리해 국세청에 제출하는 역할만 할 뿐 의료비, 교육비, 기부금 등은 본인이 직접 서류를 제출하거나 국세청 연말정산 간소화 서비스를 활용해야 한다.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;국세청은 예년과 마찬가지로 오는 15일 연말정산 간소화 서비스를 개통한다. 올해 연말정산부터는 결혼세액공제가 신설되고 자녀 세액공제 공제금액이 늘어나는 등 결혼과 양육 지원을 위한 세제 지원이 많아진다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주택 청약저축 공제 납입액 한도도 연 240만원에서 300만원으로 확대되고 신용&amp;middot;체크카드, 현금영수증 사용 금액이 전년보다 5%를 초과해 늘어나면 소비 증가 금액의 10%를 추가로 100만원 한도에서 소득 공제되기도 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미리미리 기부금 영수증도 챙겨서 연말정산을 잘 받아보자.&lt;/p&gt;</description>
      <category>삶의노하우공유</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/4</guid>
      <comments>https://victorgooddays.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 9 Jan 2025 12:56:53 +0900</pubDate>
    </item>
    <item>
      <title>30년차 여개발자 이야기</title>
      <link>https://victorgooddays.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;저는 증권, 은행의 프로그램을 개발해주는 중소기업의 개발자로 첫개발을 시작했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;금융쪽 프로그램을 개발 시 유의사항은 안정성입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;장애발생 시 담당자들이 헐크로 변하는 상황을 목격하려면, 테스트를 조금 덜해도 괜찮겠지요? ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;96년도부터 직장생활을 시작했는데, 여개발자가 거의 없는 환경이었어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;홍일점이 좋은점도 있지만, 성향상 소통이 가장 어려운 점이라는 것은 지금도 변함이 없네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제가 개발을 시작한 파트는 서버입니다. 3-Tier구성에서 백단을 주로 개발한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고로, 3-Tier구성은&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; font-family: 'Noto Sans Light'; letter-spacing: 0px;&quot;&gt;데이터를 저장하고 읽는 데이터 계층, 데이터를 처리하는 어플리케이션 계층, 그리고 데이터를 표현해주는 클라이언트(프레젠테이션) 계층과 같이 각각 3계층으로 나누어 각각의 기능으로 별도의 논리적/물리적인 장치에서 운영하는 방식이라고 이해하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-Tier 구성의 장점은 각 계층이 분리되어 있어 업부 분담이 가능해지므로 업무 효율성이 증가할 수 있고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;여러 대의 서버로 나누어 각 계층이 동작하므로 서버의 부하를 줄여줄 수도 있으며, 경우에 따라 서버의 성능 업그레이드가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;단점은 1계층으로만 사용하는 것 대비 관리가 더 필요하고, 장애가 발생하는 포인트가 더 늘어날 수 있다는 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;많은 사용자를 고려할 시 전체 시스템 구성에 꼭 필요한 사항이므로 참고하시면 될 듯 싶습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;서버파트를 개발하다보니, 네트웍프로그램과 데이터를 저장하는 DB프로그램을 주로 많이 개발하게 되더군요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;많은 미들웨어(Middleware)를 사용해보고, 플랫폼기능을 가진 프로그램도 개발해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제 개발경험이 도움이 되었으면 하는 바램으로 글을 적어보려고 하는데, 어렵네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;일단, 어떻게 정리해서 나열해야할 지 대략난감입니다. ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;프로그램을 짤때는 요건이 있어서 그것에 맞춘 로직을 세우고 개발하면 되는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;글쓰기는 제가 요건을 만들어야하는군요^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;어떤 일이든지, 전체설계가 참 중요하다는 생각입니다.&lt;/p&gt;</description>
      <category>개발자경험담</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/3</guid>
      <comments>https://victorgooddays.tistory.com/3#entry3comment</comments>
      <pubDate>Wed, 8 Jan 2025 09:52:00 +0900</pubDate>
    </item>
    <item>
      <title>개발을 잘하는 방법</title>
      <link>https://victorgooddays.tistory.com/2</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;ce647e29-1038-4d66-b788-61178bb376cb&quot; data-message-author-role=&quot;assistant&quot;&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;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1. &lt;/span&gt;&lt;b&gt;기초를 탄탄히 하기&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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&gt;&lt;b&gt;자료구조와 알고리즘:&lt;/b&gt; 효율적인 코드 작성을 위해 필수적입니다. 예를 들어, 배열, 링크드 리스트, 트리, 해시맵 등을 이해하고 사용법을 익히세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;언어 기본기:&lt;/b&gt; 사용하는 언어의 문법과 주요 특징을 깊이 이해하세요. 특히 메모리 관리, 비동기 처리, 객체지향/함수형 프로그래밍 등의 개념을 익히세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &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;깃허브(GitHub)나 포트폴리오를 만들어 자신의 프로젝트를 정리하세요.&lt;/li&gt;
&lt;li&gt;오픈소스 프로젝트에 기여하거나 해커톤에 참가해 협업 경험을 얻으세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &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;b&gt;디버깅 능력:&lt;/b&gt; 오류를 탐지하고 수정하는 과정을 통해 문제 해결 능력을 키우세요.&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;코딩을 하는 과정에서 문제가 무엇인지 인지하는 것부터가 시작입니다.&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;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>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/2</guid>
      <comments>https://victorgooddays.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 8 Jan 2025 05:23:31 +0900</pubDate>
    </item>
    <item>
      <title>경험을 나누는 공간</title>
      <link>https://victorgooddays.tistory.com/1</link>
      <description></description>
      <category>개발자경험담</category>
      <author>VictorGoodDays</author>
      <guid isPermaLink="true">https://victorgooddays.tistory.com/1</guid>
      <comments>https://victorgooddays.tistory.com/1#entry1comment</comments>
      <pubDate>Tue, 7 Jan 2025 22:20:16 +0900</pubDate>
    </item>
  </channel>
</rss>