포트폴리오/[IoT 기반 피지컬 AI 교육일지]

[ 9일차 기록 ] C언어 프로젝트 발표 Q&A 정리 & 재고관리 프로그램 개발 시작

개발자혜콩 2026. 2. 19. 16:28

1-1. 오늘 학습내용

① 프로젝트 발표 내용 정리 & 궁금증 정리

 (1) 스트리밍 기반 로그데이터 분석 시스템

  • 스트리밍 기반 = 데이터를 한 번에 모아서 처리하는 게 아니라
    → 실시간으로 들어오는 데이터를 즉시 분석하는 방식
  • 예: 서버 접속 로그, 채팅 로그, 사용자 행동 기록

✔ 만드는 이유??

  • 실시간 이상 탐지
  • 트래픽 분석
  • 시스템 모니터링

 (2) B-Tree가 빠른 이유

  • 다진 트리 (자식이 여러 개)
  • 디스크 접근 횟수 감소
  • 높이가 낮아서 탐색 깊이가 얕음
  • 대량 데이터 검색에 최적화

✔ 핵심

“한 번에 많이 비교해서 깊이를 줄인다”


 (3) 시간 가변형 네트워크 재고관리

  • 시간에 따라 재고 수요/공급이 변함
  • 예: 특정 시간대 판매량 증가
  • 정적 모델이 아닌 동적 모델

✔ “시간 가변형”이 붙는 이유
→ 재고량이 시간 흐름에 따라 변화하기 때문


 (4) SDL2란?

  • Simple DirectMedia Layer 2
  • C/C++ 기반 멀티미디어 라이브러리
  • 게임 제작용
  • 그래픽, 입력, 사운드 처리 가능

 (5) 트리 + 리스트 혼합이 어려운 이유

  • 서로 구조가 다름
    • 트리: 계층 구조
    • 리스트: 선형 구조
  • 연결 관계 설계가 복잡

✔ 구현 시 장점

  • 빠른 검색(트리)
  • 순차 처리(리스트)
  • 기능 분리 가능

 (6) AVL 트리를 쓰는 이유

  • 항상 균형 유지
  • 탐색 O(log n)
  • 회원 수 많아도 속도 일정

✔ 회원 검색이 빠름
✔ 삽입/삭제 후에도 성능 유지


 (7) 힙 기반 패킷 스케줄링 시뮬레이터

  • 힙(Heap) → 우선순위 큐 구현
  • 패킷을 우선순위 순서대로 처리

✔ 패킷 역전 현상
    → 먼저 보낸 데이터가 나중에 도착하는 현상

 

✔ 네트워크 지연
   → 응답이 늦어짐

 

✔ 게임에서 치명적인 이유
   → 입력과 화면 반응이 어긋남

 


1-2. C언어 프로젝트 개발 1일차 정리

① GitHub 실습

  • hello.c push
  • 수정 후 재업로드
  • 버전관리 흐름 이해

② 구조체 상품 선언 실습

  • struct Product 정의
  • 값 입력 후 출력

③ 연결리스트로 상품 추가

궁금점 1

free(newNode);
free(head);

꼭 역순이어야 하나?

 

✔ 정답
→ “연결 관계를 끊고 난 뒤” 해제해야 함
→ 보통 리스트는 앞에서부터 하나씩 해제

예:

Node* temp;
while(head != NULL){
    temp = head;
    head = head->next;
    free(temp);
}

 

👉 무조건 역순이 중요한 게 아니라
     “참조가 남아있지 않게 해제”가 핵심


④ 헤더파일 #ifndef INVENTORY_H

#ifndef INVENTORY_H
#define INVENTORY_H
...
#endif

 

✔ 이유
→ 중복 포함 방지
→ 헤더가 여러 번 include 되어도 한 번만 컴파일되도록 함


⑤ return이 왜 다 다름?

형태의미
return 0 정상 종료
return 1 오류 발생
return; void 함수 종료
return head; 리스트의 시작 주소 반환

✔ head는?
→ 함수의 매개변수로 전달된 포인터
→ 연결리스트의 시작점

 

예:

Node* addNode(Node* head)

 

 → head는 기존 리스트 시작 주소


⑥ 데이터 복사를 왜 하나?

 
strcpy(newNode->name, name);
newNode->price = price;
newNode->quantity = quantity;

 

✔ 이유
    → 매개변수로 받은 데이터를
    → 새로 만든 노드 안에 저장해야 하기 때문

 

✔ 만약 복사 안 하면?
    → 함수 종료 후 값 사라질 수 있음


2. 오늘 헷갈렸던 것

  • free 순서
  • return 형태 차이
  • head의 개념
  • 헤더 가드(#ifndef)
  • 왜 데이터 복사가 필요한지

3. 나중에 다시 볼 키워드

  • B-Tree
  • AVL Tree
  • Heap
  • SDL2
  • 헤더 가드
  • 연결리스트 메모리 해제
  • 포인터 반환 함수