분류 전체보기53 [VEDA 1기 수강일지] 5일차 - C언어 기초 (5) : 파일입출력, 전처리, 비트연산, volatile 수강한 개념 파일입출력 - 문자 출력 -> 버퍼에 있다가 버퍼가 다 차거나 엔터를 치면 넘어감 - 바이너리 파일 - feof - fprintf 편하긴한데 용량 문제가 있음 (숫자를 문자로 변환하여 저장함) - fread, fwrite 위 문제를 해결 but 파일을 열어 확인해보기 어려움 전처리 - #define : 매크로 - 매크로 함수 : 함수는 아닌데 식이 대체되어 들어감 ㄴ 함수를 호출하면 비용이 좀 든다 -> 아주 가벼운 함수는 매크로로 쓸 수 있음. ㄴ 가독성은 좋다 ㄴ 주의 : 매크로 함수에서는 우선순위 연산자 주의해서 사용하기 비트연산- & | ^ ~ > - | : 세팅할때 사용#include #define bitSet(x, bit) ((x) |= (1이미 정의된 매크로 printf("fi.. 2024. 7. 19. [VEDA 1기 수강일지] 4일차 - C언어 기초 (4) : 구조체 포인터, 연결 리스트 수강한 개념 구조체 포인터 - 화살표 (->) 연산자 : 구조체 포인터의 멤버에게 접근할때 사용하는 연산자- 자기참조 구조체struct link { int id; char Bookname[30]; struct link* prev; //이전 노드 주소 struct link* next; //다음 노드 주소};- 링크드리스트 구현- 이중 링크드리스트 구현구조체 비트 필드 - 임베디드에서 가끔 사용됨. 알아보기 - 비트단위로 메모리 할당을 할 수도 있다 다양한 자료형- union 공용체- enum 열거형 ㄴ 코드의 가독성 상승- typedef ㄴ 타입 재정의 ㄴ 구조체에 많이 쓴다문제 구현 / 개선방안 1. 이중 연결 리스트 구현 1) DLLfx.h#pragma oncestruct link { int id.. 2024. 7. 18. [VEDA 1기 수강일지] 3일차 - C언어 기초 (3) : 포인터 응용, 동적 할당, 구조체 수강한 개념 변수 - static 변수 : 전역변수와 같은 영역에 저장되지만, 전역변수처럼 모든 곳에서 쓸 수는 없다 - static 전역변수 : 외부 파일과 중첩되지 않기 위해 사용 - 레지스터 변수 : 메모리 대신 CPU 레지스터를 사용함. 일반변수보다 속도가 빠르다.- main 함수 명령인수ㄴint argc : main 함수에 전달되는 정보의 개수ㄴchar * argv[] : 전달되는 실질적 정보, 문자열로 전달 (연산 시 형변환 필요함)#include #include //argc = 전달되는 인수 개수int main(int argc, char* argv[]){ printf("argc : %d\n", argc); printf("argv[0] : %s\n", argv[0]); printf("argv[.. 2024. 7. 17. [VEDA 1기 수강일지] 2일차 - C언어 기초 (2) : 함수, 배열, 포인터 수강한 개념 함수 - 가독성이 좋아짐 - 유지보수가 용이함 - 변수를 선언하듯 함수도 선언해야함 - 선언 > 정의 > 호출 - 헤더파일 -> 함수 선언부가 있음 - 함수선언은 헤더파일, 정의는 별도의 소스파일에, 메인은 메인대로 -> 습관들이기 재귀함수 - 잘못짜면 무한루프 엔딩 배열 - c에서는 배열의 크기가 정해져있어야한다 - 배열의 이름 = 배열의 시작주소 = 상수 - rank 알고리즘 문자배열 - scanf -> 공백문자를 구분자로 받음 - 표준입력 : gets( str ); puts( str ); -> 배열길이 넘어도 입력을 받음 (안전하지 않은 함수) - 파일입력 : fgets( str, 80(크기지정), stdin(파일포인터) ); - strcpy (to(주소), from(주소)); 문자열.. 2024. 7. 16. [VEDA 1기 수강일지] 1일차 - C언어 기초 (1) : 변수, 입출력, 제어문 한화비전에서 주최하는 부트캠프 VEDA에 참여하게 되었다.그날 배운 내용 중 기억해야하는 부분과 기타 특이사항 등을 기록하려고 한다.수강한 개념 변수 - 변수는 동적 바인딩- 'a' = a라는 문자 하나- "a" = a\0라는 문자열 (문자열에는 종료를 뜻하는 널문자 \0이 있다. - > 배열의 크기 = 문자열 길이 + 1) 자료형- 자료형의 크기는 아키텍쳐에 따라서 차이가 있을 수 있다. -> 장비를 새로 가져오면 확인해야함.- unsigned -> sign은 부호를 뜻함. unsigned는 양수와 0만 표현 가능 데이터 입출력- printf에 배열명을 넣으면 배열의 시작주소를 의미함- 변수명을 넣으면 변수의 값을 뜻함- C언어에서는 타 언어와 달리 배열 이름으로만 비교가 안됨 (ex. 배열 a가 있을.. 2024. 7. 15. [수강일지] 10일차 : 쿠버네티스 기초 (2) 쿠버네티스는 정말 공식문서를 족갓이 만들어 놨다 쿠버네티스 1.2버전 이상이면 c그룹이랑 머시기를 묶는 파일을 꼭 만들어 줘야함 파드 - 컨테이너 +볼륨. 보통은 1개 컨테이너지만 경우에따라 여러개일 수도 있음 레플리카 세트 - 파드의 개수관리(but 버전관리가 안됨) 디플로이먼트 - 파드의 버전관리 배포관리 - 레플리카세트를 작성할일은 잘 없다 -> 디플로이먼트와 크게 차이가 나지 않기 때문에 디플로이먼트를 작성 서비스 - 외부에서 파드에 접속하는 지점. 서비스를 통해서 컨테이너에 접근하면 컨테이너 주소가 바뀌어도 접근가능 서비스는 컨테이너가 삭제되고 재생성되면서 아이피가 바뀌어도 알아채기때문 매니페스트 : 파드나 서비스에 대한 설정 -> 을 담은 파일 = 매니페스트 파일 - yaml 문법으로 작성 파.. 2024. 1. 19. [수강일지] 9일차 : 쿠버네티스 기초 (1) 하나의 단일 시스템에서 컨테이너 관리 -> 도커 컴포즈 파일만으로는 여러 컨테이너를 관리하기도 힘들고 장애에 대비하기도 어렵다. -> 여러대의 물리적인 서버에 컨테이너를 나눠서 트래픽도 분산시키고 오류도 대비하자 2024. 1. 18. [수강일지] 8일차 : Docker (4) dockerfile 생성 방식 스텝이 넘어갈수록 로워레이어위에 어퍼레이어가 씌워지고 그다음 스텝에서 로워레이어가 되는 형태 -> 레이어가 많아진다 = 이미지 크기가 커진다 -> 레이어의 크기를 작게 만들어야한다 -> 레이어를 적게 하기 위해 명령어를 한줄에 다 이어서 작성 (논리 연산자 사용) -> 가독성이 떨어지니까 백슬래쉬 사용 도커파일 내 논리연산자 : && - AND 연산자 : 앞의 명령어가 참이면 뒤 명령어 실행 (ex. nginx 도커파일 참고) ; - 앞의 명령어의 결과에 상관없이 실행. 명령어의 나열 ;보다는 &&를 사용하는게 좋음 || - OR 연산자 : 앞의 명령어가 참이면 뒤 명령어 실행하지 않음 -> 도커파일에서는 거의 사용하지 않음 entrypoint = cmd but cmd : .. 2024. 1. 17. [수강일지] 7일차 : Docker (3) cgroup (컨트롤 그룹)을 이용한 컨테이너 자원 확보 /제한 사전 작업 : swap 생성, 커널 파라미터 설정 디스크 속도제한 컨테이너 이미지 생성 docker commit < 비추천 : 임시파일이나 필요없는 데이터들도 이미지에 포함되기 때문 Dockerfile FROM docker build -t(tag) 도커파일 이름이 Dockerfile이 아니면 이름을 다 적어줘야한다 2024. 1. 16. [수강일지] 5일차 : docker 컨테이너 : 격리되어있는 환경의 어플리케이션 그런데 혼자 자립해서 실행될 수 있도록 필요한것들을 다 때려박은 컨테이너 런타임 : 컨테이너를 작동시킬 수 있는 프로그램 ex) 도커, 파드맨 컨테이너 격리 기술 -> 리눅스 커널에서 제공 chroot : change root. 특정 디렉토리를 루트디렉토리처럼 만드는 명령 namespace : 이름공간. overlayfilesystem 도커 컨테이너 이미지 [레지스트리이름]/[레포지토리이름]/이름[:Tag] ex) docker.io/library/centos:latest 오피셜 이미지는 레포지토리가 전부 library로 동일 일반 유저가 제작한 이미지는 레포지토리 이름 == 유저 이름 tag : 버전 docker 0 의 ip -> 컨테이너와 연결 docker .. 2024. 1. 12. [수강일지] 4일차 : 리눅스 기초 (4) root 계정 활성화 sudo passwd root -> 일반유저 암호입력 -> root 계정에서 사용할 암호 입력 -> 한번 더 입력 SSH로 root 계정 로그인 허용 sudo vi /etc/ssh/sshd_config -> PermitRootLogin yes sudo systemctl restart sshd 디스크 관리 디스크 추가 - 추가전 스냅샷 찍어두기(문제생길시 롤백할 백업) lsblk : 디스크 정보 확인 sata/sas/scsi - /dev/sd IDE - /dev/hd virtual disk - /dev/vd LVM (logical volume manager) - 물리적으로 분리된 디스크를 논리적으로 하나의 파티션처럼 사용할 수 있도록 함 - PV(physical volume) - LV.. 2024. 1. 11. [수강일지] 3일차 : 리눅스 기초 (3) $PATH 변수 - 명령어 위치를 가지고 있는 환경변수 - 프로그램 설치 등으로 명령어 파일 추가 -> 환경변수 설정을 하지 않으면 명령어 인식 못할 수 도 있음 환경변수 편집 ex) 명령어 파일 위치가 /lib/dracut 이라면 PATH=$PATH:/lib/dracut 이렇게 수정 - 명령어 위치 확인 which [명령어] whereis [명령어] - 프롬프트에서만 실행하면 단발성 적용. - .profile에서 PATH=$PATH:/lib/dracut 이렇게 추가하고 싶은 경로 추가 + export PATH - 환경변수로 지정하고 싶은 변수도 같은 방식으로 추가 ex) DBNAME = aaa를 환경변수로 추가하고 싶다면 .profile을 편집기로 열어서 DBNAME = aaa export DBNAME.. 2024. 1. 10. 이전 1 2 3 4 5 다음