VEDA 주간 학습 정리
[1주차] VEDA 입과 및 컴퓨터 구조
이번 주 학습을 한 문장으로 정리하면: VEDA 입과, 컴퓨터 구조, C 언어 기초 학습
작성일: 2026.04.11
이번 주 학습 목표
- VEDA 입과 과정과 지원 프로세스 정리
- Visual Studio 설치 및 C 개발 환경 구축
- C언어 컴파일러의 빌드 과정 이해
- 컴퓨터가 프로그램(기계어 스크립트)을 실행하는 흐름 이해
- 정수, 실수, 문자를 이진수로 표현하는 방식 이해
1. VEDA 입과 과정
- 부트텐트에서 한화비전 VEDA 과정 발견!
- VEDA 홈페이지: https://www.vedacademy.co.kr/
- VEDA 지원자 단톡방 운영 (공지 및 질의응답, 누리집에서 카톡방 링크 찾을 수 있음)
- 지원 절차
- - 간단한 지원서 작성 (지원 동기)
- - 코딩 테스트
- - 3:3 면접 진행
- 코딩 테스트 팁
- - 완전 구현형 보다는 “빈칸 채우기” 스타일 문제
- - 스택, 버블 정렬 등 기초 알고리즘을 직접 구현해 보고 가면 도움 됨
- 지원서 유의사항
- - 제출 후에는 다시 확인 불가 → 꼭 별도 파일로 백업해 둘 것
- 면접 내용
- - 자기소개, 지원 동기
- - 지원서에 적은 프로젝트 관련 간단한 질문
2. 컴퓨터의 구조
- 구성 요소
- - 중앙처리장치(CPU)
- - 메인 메모리(RAM)
- - 보조 기억 장치(ROM, HDD, SSD 등)
- - 입출력 기기(키보드, 모니터 등)
- 부팅 흐름
- - 전원 ON
- - ROM에서 부트로더를 RAM으로 로드
- - 기본 하드웨어/입출력 장치 점검
- - OS 로딩 및 사용자 환경 준비
- 터미널 명령 처리
- - 내부 명령어(경로 변수에 있는 경로에서의 실행 파일)
- - 외부 명령어(실행 파일)
- - 배치 파일(.bat 등)
3. C언어 빌드 과정
- 3단계 빌드 파이프라인
- - 전처리: 전처리 지시자 처리, 헤더 포함, 매크로 치환 (text → text)
- - 컴파일: 전처리된 코드를 기계어(객체 파일)로 변환
- - 링크: 여러 객체 파일과 라이브러리, startup code를 결합해 실행 파일 생성
- 전처리기 특징
- - 텍스트 치환 과정
- -
#include는 “헤더 파일 내용 복붙”에 가깝다
- 링커 개념
- - 여러 .obj / .o 파일과 라이브러리들을 하나의 실행 파일로 묶는 단계
- - 선언만 있고 구현이 없는 외부 함수가 있으면 링커 에러 발생
4. 컴퓨터가 프로그램을 실행하는 방법
- 핵심 레지스터 3개
- - EIP(Instruction Pointer): 현재 실행할 기계어 명령의 주소
- - ESP(Stack Pointer): 현재 스택의 맨 위 주소
- - EBP(Base Pointer): 현재 함수(스택 프레임)의 기준점 주소
- 실행 흐름
- - 터미널에서 실행 파일 이름 입력
- - OS가 실행 파일을 메모리에 적재, EIP에 시작 주소 설정
- - main 함수 호출 → 새로운 스택 프레임 생성 (EBP, ESP 갱신)
- - printf 등 다른 함수 호출 시마다 새로운 스택 프레임 생성 및 소멸
- - 모든 함수가 종료되면 스택이 정리되고 프로그램 종료
5. 메모리 구조와 데이터 표현
메모리 영역
| 영역 | 저장되는 값 | 결정 시점 |
|---|---|---|
| 레지스터 | 현재 실행 위치(EIP), 스택 기준점(EBP), 연산용 임시 값 | 실시간(CPU 내부에서 계속 변화) |
| 스택(Stack) | 지역 변수, 매개변수, 리턴 주소, 힙 주소(포인터) | 함수 호출 시 |
| 힙(Heap) | 동적 할당 데이터, 객체, 동적 배열 | 실행 중 필요할 때 |
| 스크립트(Text) | 기계어로 변환된 프로그램 코드 | 컴파일 시 |
정수: 2의 보수
- MSB를 부호 비트로 사용 (1이면 음수, -2(n-1) 역할)
- 양수 → 음수 변환
- - 이진수 표현 작성
- - 모든 비트 반전
- - 결과에 1 더하기
- - 예) +5(0101) → 반전(1010) → +1 = 1011 → -5
- 음수 → 양수 변환도 “반전 후 +1”로 동일
실수: 부동소수점
- 형식: (−1)sign × 1.mantissa × 2exponent − bias
- 구성
- - 부호 비트(Sign): 양수(0) / 음수(1)
- - 지수부(Exponent): 소수점 위치 결정
- - 가수부(Mantissa): 실제 유효 숫자
- 대표 타입
- - float: 32비트, 약 7자리 정밀도
- - double: 64비트, 약 15~16자리 정밀도
- - long double: 환경에 따라 다름
- double(64비트) 구조
- - 부호 1비트, 지수 11비트, 가수 52비트
- 주의사항
- - 반올림 오차 때문에
a == b비교는 위험 - -
fabs(a - b) < ε형태로 비교 권장 - -
%f,%lf등 자료형에 맞는 포맷 지정자 사용
- - 반올림 오차 때문에
문자 인코딩과 개행 문자
- ASCII 계열
- - 7비트 ASCII: 알파벳·숫자·기본 특수문자(127개)
- - Extended ASCII: 7비트 ASCII + 추가 그래픽 문자
- - 유럽권 인코딩: 기본 ASCII + 각 언어 문자 추가
- 한글
- - 완성형 한글: 19(초성) × 21(중성) × 28(종성) = 11,172자, 2바이트 사용
- - 조합형(MS-949, EUC-KR 등): 초성·중성·종성 비트로 조합
- - UTF-8: 가장 널리 사용, 영어 1바이트, 한글 3바이트 등 가변 길이
- 개행 문자
- - CR(Carriage Return): 커서를 줄 맨 앞으로
- - LF(Line Feed): 커서를 다음 줄로
- - 윈도우: CRLF 사용
- - 유닉스/리눅스: LF 사용
- - 줄바꿈 차이로 Git diff가 크게 생길 수 있음
예제
주차 예제 풀이
브라우저 환경에 따라 예제가 로딩되지 않을 수 있습니다.
문제 및 해결 과정
문제 1
Visual Studio에서 한글이 깨져서 출력됨
원인 분석
에디터는 UTF-8로 스크립트를 저장하지만, 콘솔(명령 프롬프트)은 다른 코드페이지(예: CP949, EUC-KR 계열)로 출력하기 때문에 인코딩이 맞지 않았음.
해결 방법
Visual Studio 우측 하단의 “인코딩하여 저장” 메뉴에서 인코딩을 MS-949로 맞춰 저장해야 함.
문제 2 (잠재적 문제)
윈도우와 유닉스 줄바꿈 차이로 Git에서 불필요한 변경 사항 발생
원인 분석
윈도우는 CRLF, 유닉스/리눅스는 LF를 사용하기 때문에 같은 내용이라도 줄바꿈 바이트가 달라 Git이 다른 파일로 인식함.
해결 방법
Git의 core.autocrlf 설정을 확인하고,
에디터에서 저장 시 줄바꿈 문자를 통일하도록 설정해 윈도우를 사용하더라도 개행 문자로 관리하도록 함.
진행중인 프로젝트
프로젝트명: 원신 성유물 레진 계산기
프로젝트 블로그 페이지: 추후 별도 포스트 작성 후 링크 추가 예정
깃허브 링크
GitHub 저장소: 원신 성유물 레진 계산기