소프트웨어

· Dev. Life
오늘은 오랜만에 내 이야기를 좀 해보려 한다. 나는 올 한 해동안 두 군데의 스타트업(상반기에 한 번, 하반기에 한 번)에서 각각 두 세달 정도씩 인턴을 했었다. 분야는 웹 프론트엔드 였으며 둘 다 지인을 통해 알게 되었고 들어가서 일을 하게 되었다. 참고로 스타트업에서 개발자 인턴을 하는 건 생각보다 그렇게 어렵지 않을 수 있다. 왜냐하면 99%의 스타트업은 개발자가 항상 부족한 상황이기 때문이다. ㅎㅎ 작년 여름 영국에서 돌아와서 국비 지원 과정을 시작하면서 코딩을 배우기 시작했다. 2018년 말, 나의 실력은 딱 국비 지원 3~4개월 받은 사람의 수준 그 이상도 그 이하도 아니었다. 관련 글에도 자세하게 적었지만 나는 국비 지원 과정에 불만이 많았고 회의감도 느꼈다. 그래서 언제 나올 수 있을지 계..
오늘은 프로세스에 대해서 공부해 본다. 프로그램과 프로세스 소스코드 (.c file) : 프로그램이 수행하고자 하는 작업이 프로그래밍 언어로 표현 컴파일러 (compiler) : 사람이 이해할 수 있는 프로그래밍 언어로 작성된 소스코드를 컴퓨터(CPU)가 이해할 수 있는 기계어로 표현된 오브젝트 파일로 변환 오브젝트 (.o file) : 컴퓨터가 이해할 수 있는 기계어로 구성된 파일. 자체로는 수행이 이루어지지 못함. 프로세스로 변환되기 위한 정보가 삽입되어야 함. 상대 주소로 표현 링커 (linker) : 관련된 여러 오브젝트 파일들과 라이브러리들을 연결하여 메모리로 로드될 수 있는 하나의 실행파일만 작성 실행파일 (.exe) : 특정한 환경(OS)에서 수행될 수 있는 파일. 프로세스로의 변환을 위한 ..
오늘도 운영체제 구조, 특히 그 중에서도 디자인 관점에서 공부를 해 보려고 한다. 프로세스 관리(Process Management) 프로세스는 실행중인 프로그램을 의미한다. 프로그램은 파일 형태로 존재하는 수동적 상태(Passive Entity)이며, 프로세스는 프로그램 카운터를 가지는 능동적 상태(Active Entity)이다. 싱글 스레드 프로세스는 1개의 프로그램 카운터를, 멀티 스레드 프로세스는 스레드당 1개의 카운터를 가진다. ※프로그램 카운터(Program Counter)란? 프로그램 카운터(Program counter, PC)는 마이크로프로세서(CPU) 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 때문에 명령어 포인터..
이번 포스팅 부터는 운영체제를 다루어 보려고 한다. 그 첫번째 순서는 운영체제의 구조이다. 운영체제란 무엇인가? 전 세계에서 가장 많이 쓰이는 운영체제 교과서인 Abraham Silberschatz의 교재에는 다음과 같이 운영체제를 설명하고 있다. An operating system is a program that manages a computer’s hardware. It also provides a basis for application programs and acts as an intermediary between the computer user and the computer hardware. 여기에 나와있는 것처럼 운영체제는 컴퓨터의 하드웨어를 관리하면서 하드웨어를 손쉽게 그리고 효율적으로 사용할..
이번 포스팅에서는 그래프 자료구조에 대해서 공부해 본다. 그래프 그래프(Graph)는 노드(node)와 그 노드를 연결하는 간선(edge)을 하나로 모아놓은 자료구조이다. 즉, 연결되어 있는 객체 간의 관계를 표현할 수 있다. 예를 들면 지하철에서 다른 역으로 가는 최단 경로를 찾아주는 서비스도 그래프 알고리즘을 사용한다. 그래프의 한 종류로 트리 자료구조가 있는데 그래프와 트리의 차이는 다음과 같다. 그래프 관련 용어를 정리하면 다음과 같다. 먼저 정점과 간선의 연결 관계에서 방향성을 가지는 지를 가지고 나누어 볼 수 있다. 방향성이 없는 그래프를 무향 그래프(Undirected Graph)라 하고, 방향성이 포함되어 있는 그래프를 유향 그래프(Directed Graph)라고 한다. 무향 그래프에서 각..
이번에 살펴볼 부분은 스택과 큐이다. 스택 스택(Stack)은 후입선출(Last In First Out: LIFO)의 선형 자료구조이다. 데이터를 쌓아 올린다는 의미에서 더미(stack)라는 이름이 붙었다. 입력은 push, 출력은 pop, 그리고 가장 위에 있는 데이터를 확인하는 방법은 peek라고 한다. 바닥이 막힌 상자라고 이해하면 쉬운데, 그렇기 때문에 나중에 넣은 물건이 위에 있으므로 먼저 꺼낼 수 밖에 없다. 스택을 구현하는 방법을 살펴보자. 스택에서 필요한 함수는 위에서 언급한 push, pop, peek 그리고 하나를 더 추가한다면 스택이 비었는지 아닌지를 확인하는 isEmpty 함수 정도가 될 것 같다. 배열과 다르게 스택은 한 번에 i(인덱스)번째 데이터에 접근할 수는 없다. 다만 삽입..
두 번째로 자료구조에서 살펴 볼 내용은 연결 리스트(LinkedList)이다. 연결 리스트 연결 리스트는 어떤 데이터 덩어리(이를 노드라고 표현)를 저장할 때, 그 다음 순서의 자료가 있는 위치를 데이터에 포함시키는 방식으로 자료를 저장하는 자료구조이다. 따라서 각각의 노드들은 자기 자신 다음에 어떤 노드가 오는지를 기억하고 있다. 배열이 가지고 있는 단점들을 해결하기 위해서 만든 자료구조이다. 예를 들면 배열에서는 하나의 값을 삭제하고 추가하는 데에 시간복잡도가 O(n)이었다면, 연결 리스트에서는 삭제시에 하나의 노드를 빼 주고 나서 삭제된 노드 이전의 노드가 삭제된 노드 이후의 노드를 바로 참조할 수 있게 연결해 주면 되기 때문에 시간복잡도가 O(1)이고 삽입도 비슷한 이유로 O(1)이다. 연결리스트..
소마에서의 생활도 이제 절반이 넘어갔다. 연수 생활을 하면서 계속 느끼는 거지만... 내가 어떻게 소프트웨어 마에스트로에 선발이 됬는지 의구심이 들 때가 참 많다. 정말 실력있고 인성이 좋은 분들이 많다. 멘토들도 그렇고 멘티들도 그렇고 그런 분들을 매일매일 만나고 연락하면서 끊임없이 나를 비춰보게 되는 점이 소마 기간동안 내가 발전하는 계기가 되는 것 같다. 8월에는 멘토 특강을 참 많이 들었다. S멘토님의 특강이 가장 기억에 남는다. 자신이 들어갔던 첫 회사에서 하루 16시간 이상씩 개발을 하면서 열악한 환경이었지만, 그렇게 개발을 해서 이루어낸 성과들을 이야기 해 주셨을 때 나는 넘사벽 같다는 생각이 종종 든다. 예를 들어 1000 만큼의 비용이 드는 문제를 본인의 경험과 지식으로 100까지 줄인 ..
DevOwen
'소프트웨어' 태그의 글 목록 (3 Page)