메타코드 4강
4강 - 프로그래밍 언어 활용
◼️ 서버프로그램 구현
▪️ 개발 환경 구축
- 서버 소프트웨어 개발을 위해 필요한 도구, 소프트웨어, 라이브러리 등을 설치하고 설정하는 과정
▪️ 개발 환경 구축 도구
- 빌드 도구 : 소스 코드를 컴파일, 패키징, 배포하는 과정을 자동화하는 도구(Ant, Gradle)
- 구현 도구 : 개발자가 소스 코드를 작성하고 디버깅하는 도구(Visual Studio, Eclipse)
- 테스트 도구 : 작성된 코드가 요구사항에 맞게 동작하는지 확인 위해 사용(xUnit, Selenium)
- 형상 관리 도구 : 코드의 변경 이력을 추적하고 협업을 용이하게 하는 도구(Git, SVN)
▪️서버의 목적에 따른 분류
- 웹 서버 : 사용자가 웹 브라우저에서 요청한 웹 페이지를 제공
- 웹 애플리케이션 서버 : 동적인 웹페이지를 생성하고 비즈니스 로직을 처리하며 DB와 연동하여 사용자가 요청한 정보를 동적으로 제공
- DB 서버 : 데이터를 저장하고 관리하며 이를 필요로 하는 클라이언트에 데이터 제공
▪️ 배치 프로그램
- 한꺼번에 많은 데이터를 처리하거나 정해진 시간에 반복적인 작업을 실행해 주는 프로그램
- 대용량 : 데이터는 대용량의 데이터를 처리할 수 있어야 함.
- 자동화 : 심각한 오류 상황 외에는 사용자의 개입 없이 동작해야 함.
- 안정성 : 어떤 문제가 생겼는지, 언제 발생했는지 등을 추적할 수 있어야 함.
◼️ 프로그래밍 언어 활용
▪️ 프로그래밍 언어
- 컴퓨터 프로그램을 구동시키는 소프트웨어를 작성하기 위한 형식 언어
▪️변수
- 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간
- 변수를 선언하면 주기억 장치(메모리)에서 특정 위치와 공간을 할당받아 그 위치에 데이터를 저장할 수 있게 됨.
- 변수 설정에는 일반적인 규칙이 있음.
- 데이터 타입에 따라 할당받는 공간의 크기가 달라짐.
▪️변수 설정 규칙
- 사용 가능 문자 : 알파벳, 밑줄(_), 숫자 등
- 문자 배치 규칙 : 첫 자리에는 숫자 사용 불가, 띄어쓰기 불가(주로 _를 사용)
- 예약어 사용 금지
▪️ 데이터 타입(자료형)
- 정수형(integer) : 기본은 int(4 바이트)
- 부동 소수형(floating point) : 기본은 float(4 바이트)
- 문자형(character) : 단일 문자 저장
- 문자열(string) : 여러 문자 저장
▪️ 배열(array)
- 동일한 데이터 타입의 값들을 연속된 메모리 공간에 저장하는 데이터 구조
- 여러 개의 데이터를 하나의 변수로 관리할 수 있게 해 주는 장점이 있음.
- 배열의 각 요소는 인덱스를 사용해 접근할 수 있음 인덱스는 0부터 시작함.
- 위 예시는 4 크기의 정수형 배열 arr을 선언하고 배열의 네번째 요소에 접근하기 위해 arr[3]을 읽음.
▪️포인터(pointer)
- 변수의 메모리 주소를 저장하는 변수.
- 포인터를 통해 메모리를 직접 다룸으로써 효율적인 데이터 접근과 조작이 가능함.
- int*p : 변수명 앞에 *을 붙이면 포인터 변수를 선언하는 것. 변수값으로는 주소값이 와야 함.
- int*p = &x : 변수명 앞에 &을 붙이면 변수값이 주소값으로 변환됨.
- int*p = &arr[1] : 포인터 변수는 arr[1]의 주소를 직접 저장.
- int*p = arr : 배열명만 명시하는 경우 포인터 변수는 배열의 0번째 요수(arr[0])의 주소를 나타냄.
▪️구조체(struct)
- 여러 개의 변수들을 하나로 묶어 사용할 수 있게 해 주는 사용자 정의 자료형
- C 언어에서 주로 사용(C언어는 클래스 미지원)
- 'Struct 구조체명 변수명'의 형태로 변수를 선언하고 초기화.
- 구조체의 변수(멤버)에 접근할 때는 .을 활용
▪️클래스(class)
- 객체지향 프로그래밍의 핵심 요소로 데이터와 메서드를 하나의 단위로 묶음
▪️ 연산자
- 프로그래밍에서 특정 연산을 수행하는데 사용되는 기호
- 하나 이상의 피연산자를 대상으로 계산을 수행하고 그 결과를 반환
▪️산술 연산자
- 수학적 연산 수행
▪️비교 연산자
- 두 피연산자를 비교하고 그 결과를 참 또는 거짓으로 반환
▪️논리 연산자
- 주로 조건문에서 사용되며 참(1), 거짓값(0)을 결합하거나 반전시키는데 사용
▪️ 대입 연산자
- 변수에 값을 할당하는데 사용
▪️ 증감 연산자
- 변수의 값을 1씩 증가시키거나 감소시키는데 사용
- ++ : 변수의 갑을 1씩 증가, ++x는 x의 값을 1 증가 시킨 후 변경된 값 사용, x++는 현재의 x값을 사용 후 그 다음에 x 값을 1 증가 시킴.
- -- : 변수의 값을 1씩 감소
▪️비트 연산자
- 이진수 표현에서 비트 단위로 연산을 수행
- 10진수를 2로 나누는 과정을 바복하고 나머지를 기록하여 이진수로 변환할 수 있음
▪️ 삼항 연산자
- 세 개의 피연산자를 사용하는 유일한 연산자로 조건에 따라 다른 값을 반환하게 함
▪️연산자 우선순위
- 여러 연산자가 포함된 표현식을 계산할 때 어떤 연산자가 먼저 실행되는지를 결정하는 규칙
▪️ 조건문
- 주어진 조건이 참인지, 거짓인지에 따라 실행할 코드 결정
▪️반복문
- 조건이 만족되는 동안 특정 코드를 반복적으로 실행하는 구조
▪️ 절자적 프로그래밍 언어
- 코드가 순차적으로 실행되고 함수를 통해 문제를 해결하는 방식(C)
▪️ 객체지향 프로그래밍 언어
- 객체 개념을 중심으로 코드 재사용성과 유지보수성을 높이는 방식(java, C++)
▪️스크립트 언어
- 빠른 개발과 실행을 목적으로 하며 주로 자동화 및 웹 개발에 사용(python, savascript)
▪️ 라이브러리
- 특정 작업을 쉽게 할 수 있도록 미리 모듈화되어 제공되는 코드의 집합
- 재사용 가능한 함수, 모듈, 패키지 모음을 제공하여 개발자가 모든 코드를 작성할 필요가 없도록 함.
◼️ 응용 SW 기초기술 활용
▪️ CPU(Central Processing Unit)
- 중앙 처리 장치, 데이터를 처리하고 명령을 실행하는 역할
▪️RAM(Random Access Memory)
- 실행 중인 프로그램이 빠르게 접근할 수 있도록 데이터를 임시로 저장하는 공간
▪️ DISK
- 데이터를 장기적으로 저장하는 공간
▪️ I/O Device (Input / Output Device)
- 입출력 장치, 컴퓨터와 외부를 연결하는 모든 장치
▪️운영체제(Operating System)
- 컴퓨터 하드웨어와 소프트웨어 자원을 관리하고 사용자와 컴퓨터 간의 상호작용을 쉽게 해 주는 시스템 소프트웨어
- 프로세스 관리 : 자원의 상태를 파악하고 자원 분배를 위한 스케줄링 담당
- 자원 관리 : CPU, 메모리 공간, 기억장치, 입출력 장치 등의 자원을 효율적으로 관리하여 성능 최적화
▪️ 사용자 인터페이스 제공
- 사용자가 컴퓨터와 쉽게 상호작용 할 수 있는 인터페이스 제공
▪️커널(kernel)
- 운영체제의 핵심으로 하드웨어와 직접 상호작용하며 시스템의 모든 자원 관리
- 프로세스 생성과 종료 관리, 기억장치 자원을 할당하거나 회수하여 자원 관리
- 데이터를 저장하는 파일 시스템 관리
▪️쉘(shell)
- 사용자가 운영체제와 상호작용 할 수 있도록 하는 명령어 해석기이자 인터페이스
- 사용자가 명령어를 입력하면 이를 해석하고 실행하는 역할
▪️UNIX
- 1969년 AT&T Bell 연구소에서 개발, 멀티 태스킹과 다중 사용자 환경을 지원하도록 설계된 운영 체제
- 상용 운영 체제, 특정 하드웨어에 종속되는 경우가 많음
▪️ LINUX
- 1991년 리눅스 토발즈가 유닉스를 바탕으로 개발한 무료 운영 체제
- 대부분 부료 오픈 소스, 다양한 하드웨어 플랫폼에서 동작 가능
▪️ 메모리 자원 관리 기법
- 메모리를 효율적으로 사용하고 프로세스들이 필요한 메모리를 적절히 할당받아 실행될 수 있도록 관리
- 반입 기법(Fetching) : 프로세스를 언제 주기억장치에 적재할 것인지 결정
- 배치 기법(Placement) : 프로세스를 주기억장치의 어디에 배치할 것인지 결정
- 할당 기법(Allocation) : 프로세스를 주기억장치에 어떻게 할당시킬 것인지 결정
- 교체 기법(Replacement) : 주기억장치에 있는 프로세스 중 어떤 프로세스를 제거할 것인지 결정
▪️프로세스
- 실행 중인 프로그램의 동작 단위로 CPU, 메모리 등의 자원을 할당받아 작업을 수행
▪️ 프로세스 제어 블록(PCB, Process Control Block)
- 운영체제가 프로세스를 관리하기 위해 사용하는 자료 구조
- 프로세스 식별자, 프로세스 상태 등의 정보로 구성됨
- 프로세스의 상태를 관리하고 문맥 교환 시 프로세스의 상태를 저장하거나 복원하는 역할
▪️ 프로세스 상태
- 생성, 준비, 대기, 실행, 종료 5단계로 구성
- 프로세스가 준비 상태에서 자원이 할당되어 실행 상태로 변화하는 것을 디스패치라고 함
▪️ 스레드
- 프로세스 내에서 실행되는 가장 작은 실행 단위
- 한 개의 프로세스가 여러 스레드를 가질 수 있음
- 프로세스의 일부로서 한 프로세스의 자원을 공유하면서 동시에 여러 작업을 수행할 수 있음
- 생성 주체에 따라 커널 수준 스레드(운영체제에 의해 운용)와 사용자 수준 스레드(사용자가 만든 라이브러리 활용해 운용)로 구분됨
▪️ 지역성(Locality)
- 프로세스가 실행되는 동안 메모리 접근이 특정 부분에 집중되는 경향
- 시간 지역성(Temportal Locality) : 최근에 참조된 데이터나 명령어가 가까운 미래에 다시 참조될 가능성이 높은 경향
- 공간 지역성(Spatial Locality) : 하나의 기억장소가 참조되면 그 근처의 기억 장소가 계속 참조되는 경향
▪️ 선점형 스케쥴링(Preemptive Scheduling)
- 현재 실행 중인 프로세스가 강제 중단되고 다른 프로세스가 CPU를 차지하는 방식
- 우선순위가 높은 프로세스가 발생하면 실행 중인 프로세스가 CPU를 양보하고 대기 상태로 바뀜
- SRT(Shortest Remaining Time First) : 프로세스 중 남은 실행 시간이 가장 짧은 프로세스에 CPU 할당
- Round Robin : 각 프로세스가 동일한 우선순위를 가지고 일정 시간동안 번갈아 가며 CPU 할당
▪️비선점형 스케줄링(Non-Preemptive Scheduling)
- 한 번 CPU를 점유한 프로세스는 작업을 모두 끝낼 때까지 CPU를 독점하는 방식
- 다른 프로세스가 우선순위가 높아도 실행 중인 프로세스가 완료될 때까지 기다려야 함
- FCFS(FIFO) : 도착한 순서대로 프로세스를 처리
- SJF(Shortest Job First) : 실행 시간이 짧은 순서대로 CPU에 할당
- HRN(Highest Response Ratio next) : SJF 보완하기 위한 방식, 우선순위 = (대기시간 + 서비스 시간) / 서비스 시간
▪️교착 상태(Deadlock)
- 두 개 이상의 프로세스가 서로 점유한 자원을 무한정 기다리며 프로세스가 진행되지 못하는 상태
- 상호 배제(Mutual Exclusion) : 자원은 한 번에 한 프로세스만 사용 가능
- 점유와 대기(Hold and Wait) : 자원을 점유하고 있는 프로세스가 또 다른 자원을 기다리고 있음
- 환형 대기(Circular Wait) : 자원을 기다리는 프로세스 간에 순환적인 대기 관계가 형성됨
- 비선점(Non Preemption) : 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없음
▪️교착상태 해결법
- 예방 : 교착상태 발생 조건 중 하나 이상을 미리 차단
- 회피 : 시스템이 교착 상태에 빠질 위험이 있을 때 자원 할당을 회피하는 방법
- 탐지 : 주기적으로 시스템을 검사하여 교착 상태를 탐지하는 방법
- 회복 : 교착 상태가 발생하면 그 상태를 벗어나기 위해 조치를 취하는 방법
▪️ 네트워크
- 여러 장치들이 서로 데이터를 주고 받기 위해 연결된 시스템
- 망 구조의 기본 유형 : 버스형, 트리형, 링형, 그물형(mesh), 성형(star)
▪️ MAC(Media Access Control)
- 네트워크에서 여러 장치가 동일한 통신 매체를 공유할 때 데이터 충돌을 막고 효율적으로 통신하게끔 조정함
- 충돌을 탐지하는 CSMA/CD 방식가 충돌을 회피하는 CSMA/CA 방식이 있음
▪️ OSI(Open System Interconnection) 7계층
- 네트워크 통신을 여러 계층으로 나눠 설명하는 참조 모델
- 각 계층은 특정 기능을 담당하며 상위 계층은 하위 계층의 서비스를 사용해 통신 처리
▪️IP(Internet Protocol)
- 네트워크 상에서 데이터 패킷을 목적지로 전송하기 위한 규칙과 방법을 정의
- 에러 제어와 흐름 제어가 없음
▪️ IPv4
- 가장 널리 사용되는 IP version으로 32비트 주소 체계 사용
▪️서브넷 마스크(subnet mask)
- 네트워크 부분과 호스트 부분을 나누는데 사용하며 IP 주소와 같은 형식을 가짐
- 255.255.255.0 은 IP 주소의 첫 24비트가 네트워크 부분, 나머지 8비트가 호스트 부분이라는 걸 의미함
▪️ IPv6
- IP 주소 고갈 문제를 해결하기 위해 개발된 새로운 버전으로 128 비트 주소 체계 사용
- 멀티 캐스트 : 멀티 캐스트 그룹에 속하는 여러 호스트에게 데이터를 전송
- 유니 캐스트 : 한 호스트와의 1:1 통신
- 애니 캐스트 : 하나의 호스트에서 그룹 내의 가장 가까운 곳에 있는 수신자에게 데이터 전송
- 브로드 캐스트 : 동일 서브 네트워크 상의 모든 수신자에게 데이터 전송
▪️ 라우팅 프로토콜
- 네트워크에서 데이터 패킷이 목적지까지 효율적으로 전달될 수 있도록 설정하는 알고리즘
▪️ RIP (Routing Information Protocol)
- 최단 경로 탐색에 벨만-포드 알고리즘을 사용하는 IGP 프로토콜(Internal Gateway Routing Protocol)
- 경로 선택 매트릭은 홉(Hop) 카운트, 홉은 거쳐 가는 라우터의 수를 의미
- 최대 홉 카운트는 15개로 제한
▪️TCP(Transmission Control Protocol)
- 신뢰성 있는 전송 계층의 연결 지향 프로토콜로 데이터 전송의 순서와 정확성을 보강
- 스트림 전송 기능 제공, 순서제어, 오류제어, 흐름 제어 기능 제공
▪️UDP(User Datagram Protocol)
- 데이터 전송의 신뢰성 보장은 없지만 속도가 빠른 전송 계층의 프로토콜
- 흐름 제어나 순서 제어가 없어 전송 속도가 빠름
- 비연결형 서비스 제공
메타코드에서 정보처리기사 필기 강의 장학생으로 선발되어 앞으로 5주간 메타코드에서 정처기 필기 강의를 듣고 포스팅을 하게 되었다.
현재 메타코드에서는 정보처리기사 필기 환급 챌린지를 진행 중이며 합격 인증 시 100% 환급(제세공과금 22%, 교재비 3만원 제외)을 해 준다.
진도율을 100% 달성하고 시험 합격 후 합격 인증, 후기 작성 시 수강료를 100% 환불 (제세공과금 22%, 교재비 3만원 제외)을 해주기 때문에 수강료 부담없이 정처기 자격증을 따고 싶은 사람에게 좋은 강의이다.
https://metacodes.co.kr/edu/read2.nx?M2_IDX=31635&EP_IDX=15203&EM_IDX=15027