꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

분류 전체보기 199

자바의 신 1, 2

백엔드 개발 공부 시작 프론트엔드 개발자로 일을 하면서 백엔드 개발자들과 소통을 하는 일이 많았습니다. 그리고 혼자서 풀스택 개발자와 같이 프론트단과 백단 개발을 하다보니 조금씩 백엔드 개발에 대한 관심이 생겼고, 특히 객체지향 언어에 대해 큰 관심이 생겼습니다. 객체지향 언어 중 한국에서 Java를 많이 사용하였고, 그리고 특히나 Spring 프레임워크를 사용해보고자 공부를 시작했습니다. 그 첫번째로 Java에 대한 전체적인 개념과 문법을 알아야 했고, '자바의 신'으로 그 내용을 접했습니다. 간단 명료했지만, 확실히 초보자를 위한 개발서입니다. 코딩을 처음한다는 정의 하에 설명이 이어집니다. 그렇기 때문에 설명이 정말 간단하고 명료합니다. 이해하기 쉽고 키워드를 체크하기가 수월했습니다. 하지만 책만으..

IT book 2021.09.09

객체 지향 언어란? (Object Oriented Language)

1. 객체 지향 언어란 뭘까? 객체지향프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나입니다. 컴퓨터 프로그램의 명렁어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있습니다. 이러한 객체 지향 프로그래밍에서 사용하는 언어를 객체 지향 언어라 합니다. 2. 객체가 뭔데? 객체 지향 프로그래밍을 구성하기 위해서는 '객체'가 필수적입니다. 실제 세상에서 사물의 개념을 프로그램에서 객체라고 볼 수 있습니다. 사람을 예로 들면, 사람 한 명이 있습니다.. 그리고 그 사람은 이름 혹은 나이, 주민등록번호 등의 정보를 갖고 있고, 걷거나 뛸 수 있습니다. 이 예에서 사람 한 명이 하나의 객체가 됩니다..

JAVA 2021.06.17

컴퓨터의 이해

컴퓨터의 구성 하드웨어 -> 입력장치 -> 처리장치 (주기억장치, 중앙처리장치) -> 보조기억장치 / 출력장치 정보화 사회에 대한 이해 인류사회학적 측면에서 본다면! 신석기 시대의 농업혁명 -> 18세기 산업혁명 -> 2차 산업혁명 (전기와 생산라인) -> 3차 산업혁명(컴퓨터 통신) -> 21세기 4차 산업혁명(IOT, 공장 자동화, AI, Big data, Machine Learning, Deep Learning) 사회 발전적인 측면에서 본다면! 1. 필요한 재화, 서비스의 생산, 소비, 축척의 일정 수준 이상 도달 2. 주 평균 노동시간 35시간 이하, 주 2일의 휴무 제, 생애노동시간은 5만 시간 이내 3. 국민총생산고의 30% 이상이 정보산업의 총생산 4. 동일연령층의 30% 이상이 고등교육을 ..

컴퓨터 구조 2021.05.10

네트워크 용어 정리 (5)

응용 계층 OSI 모델의 최상위 계층입니다. 다양하게 존재하는 응용 환경에서 공통적으로 필요한 기능을 다룹니다. 시스템 간의 응용 처리는 상호 간에 통신하면서 일련의 업무를 처리할 수 있도록 필요한 서비스 기능을 제공합니다. 이메일, 파일 전송, 웹 사이트 조회 등 애플리케이션에 대한 서비스를 제공하는 계층입니다. WWW (World Wide Web) 거대한 통신망인 인터넷은 수많은 사이트, 데이터, 정보를 갖고 있으며, 통신 회선이 거미줄처럼 서로 연결되어 있어서 언제 어디서든 필요한 곳에 접근하거나 정보를 공유하고 주고 받을 수 있는 멀티미디어 인터넷 서버입니다. HTTP (HyperText Transfer Protocol) 웹 서비스에서 클라이언트와 웹 서버 간에 정보를 주고받기 위해 사용되는 네트..

네트워크 2021.05.10

모두의 네트워크

읽게 된 동기 면접을 보러 다니거나 회사에 취직하고 나서도 CS 지식이 중요하다는 것을 느끼고 있었습니다. 비전공자 출신 개발자로서, 4년동안 컴퓨터 관련 용어를 공부해 온 전공자들에게 당장의 실무에서는 밀리지 않겠지만 미래에 CS 부분에서 실력 격차가 생길거 같아 전공자들이 듣는 CS 지식들을 공부하기로 다짐했습니다. 그 중 네트워크 분야에 대해서 공부할 책을 찾았고 '모두의 네트워크'가 베스트셀러에 올라와 있어 읽어보며 공부했습니다. 장점 정말 읽기 쉽습니다. 네트워크 전공서를 읽기 전에 네트워크에 입문으로 보기 좋은 책입니다. 두 인물의 대화형으로 내용이 전개됩니다. 지루하게 늘어지는 부분도 없으며, 특히 그림을 많이 활용하고 있어서 용어를 쉽게 이해할 수 있었습니다. 단원이 끝날 때마다 용어에 대..

IT book 2021.05.08

메모리와 mmap

동적 메모리 생성 heap 영역에 생성 - malloc 함수 molloc 함수는 heap 영역에 동적으로 메모리를 생성하는 함수입니다. 프로세스 user space에서 heap 영역은 malloc 계열의 함수로 동적 메모리를 할당할 수 있습니다. free() 함수로는 해제할 수 있습니다. 파일 처리 성능 개선 기법 - 메모리에 파일 매핑 ex) void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) // [start+offset] ~ [start+offset+length]만큼의 물리 메모리 공간을 mapping할 것을 요청 // 보통 start: NULL 또는 0 사용, offset: mapping되기 원하는 물리..

스레드 관리

Pthread thread 표준 API입니다. POSIX 스레드 또는 Pthread(피-스레드)라고 부릅니다. 저수준 API로 100여개의 함수를 제공합니다. 복잡하긴 하지만, 유닉스 시스템 핵심 스레딩 라이브러리입니다. 다른 스레딩 솔루션도 결국 Pthread를 기반으로 구현되어 있기 때문에 익혀둘 가치가 있습니다. Pthread 라이브러리 헤더 파일에 정의되어 있습니다. 모든 함수는 pthread_로 시작합니다. 크게 두 가지 그룹으로 나뉘는데, 스레드 관리(생성, 종료, 조인, 디태치 함수 등), 동기화(뮤텍스 등 동기화 관련 함수)로 나뉘어집니다. 기본 라이브러리(glibc)와 분리된 libpthread 라이브러리에 pthread가 구현되어 있기 때문에 컴파일 시 명시적으로 -pthread 옵션이..

쉘 스크립트

쉘을 사용해서 프로그래밍을 할 수 있습니다. 서버 작업 자동화 및 운영을 위해 기본적으로는 익혀둘 필요가 있습니다. 쉘 명령어를 기본으로 하되, 몇가지 문법이 추가된 형태입니다. 기본문법 쉘 스크립트는 파일로 작성 후, 파일을 실행하는 형식입니다. 파일의 가장 위의 첫 라인은 '#!/bin/bash'로 시작합니다. 쉘 스크립트 파일은 실행 권한을 가지고 있어야 합니다. 일반적으로 '파일이름.sh'와 같은 형태로 파일 이름을 작성합니다. (bash 쉘에서 제공하는 echo 함수를 이용해서 화면에 'Hello bash!' 출력 예시) --> hello.sh 파일에 작성 #!/bin/bash echo 'Hello bash!' --> 실행이 안된다면 실행 권한을 확인해야 합니다. 변수 선언 방법은 띄어쓰기 없이..

시그널 (signal)

시그널은 IPC 기법 중 하나로 사용할 수 있습니다. 또한 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려주는 기법입니다. 예로 'ctrl + c'를 눌렀을 때 프로세스를 종료시키는 것이 시그널을 사용한 것입니다. 시그널 종류 SIGKILL 프로세스 죽임 SIGALARM 알람 발생 SIGSTP 프로세스 멈춤 SIGCONT 멈춘 프로세스 이어서 실행 SIGNT 프로세스에 인터럽트를 보내서 프로세스를 죽임 SIGSEGV 프로세스가 다른 메모리 영역 침범 시그널 동작 프로그램에서 특정 시그널의 기본 동작 대신 동작을 하도록 구현 가능합니다. 각 프로세스에서 시그널 처리에 대해 다음과 같은 동작 설정이 가능합니다. - 시그널 무시 - 시그널 블록 (블록을 푸는 순간, 해당 프로세스에서 ..

IPC 기법

파이프 (pipe) 기본 파이프는 단방향 통신입니다. fork()로 자식 프로세스를 만들었을 때, 부모 프로세스에서 자식 프로세스로만 데이터를 보낼 수 있습니다. 메시지 큐 (message queue) 기본은 FIFO 정책으로 데이터가 전송됩니다. 먼저 들어온 데이터가 먼저 꺼내집니다. 파이프와 메시지 큐는 모두 kernel 공간의 메모리를 사용합니다. 공유 메모리 (shared memory) kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식입니다. 메시지 큐처럼 FIFO 방식이 아닌 해당 메모리 주소를 마치 변수처럼 접근하는 방식입니다. 공유 메모리 key를 가지고, 여러 프로세스가 접근 가능합니다.