# reading

2. [OS] Bus란?
0. 목차 Computer H/W 구성 Bus란? System Bus란? I/O Bus란? Bus의 종류 Bus 사용 예시 1. Computer H/W 구성 Computer System 구조 (Computer System 구조에 대해 모른다면...) 우리는 앞서서 Computer System이 계층 구조로 되어 있다는 것을 알아 보았으며 그 중 Computer H/W 구성에 대해 알아보려고 한다. 2. Bus란? Computer H/W 구성에 대해 잘 모

생각이 너무 많은 서른살에게
구글 ux 수석 디자이너 김은주님의 '생각이 너무 많은 서른살에게' 대학을 졸업하고 첫 회사에서 일한지 2년이 넘어가면서 여러 고민이 생겼다. 지금 하는 일이 더이상 재미가 없고 일하기 싫다는 생각만 늘어갔다. 늘 비슷한 난이도의 비슷한 업무가 지속되니까 내 커리어에 대해 걱정이 되었고, 이 팀에서는 내가 개발자로써 더이상 기대되는 일이 없고 오히려 도태 되는 것 같이 느껴졌다. 개인적인 공부를 하고 있지 않아서 그런지 더욱 걱정은 커졌다. 그러던 중, 이 책을 알게되었고 이 책을 읽으면서 퇴사할 용기도 생기고 내 삶에 대해 돌아보게 되었다. 나에게는 지금 삶에서의 리프레쉬가 필요하다. 전반적으로 내용이 커리어 중심으로 전개되기 때문에 커리어에 대해 고민하고 있는 사람들이 읽으면 심적으로나 실천적인 측면으로나 도움을 받을 수 있는 이야기인 것 같다. 김은주님의 커리어가 워낙 글로벌하고 범접할 수 없는 대단한 커리어여서 그런지 나와는 너무 멀게 느껴지는 이야기들

이게 무슨 일이야!(4-마지막)
chapter5 - 일에 대한 거의 모든 질문 마지막 챕터는 우아한 형제들의 ceo 김범준님께서 직장생활 하면서의 여러가지 질문에 대해 본인의 생각을 답변해주는 내용이다. 개발자로 오랜시간 일을 하신 분이여서 그런지, 개발자인 내가 공감할 수 있는 내용들이 참 많았다. 코딩 잘하는게 일을 잘하는게 아닐 수 있는 것 개발자는 코딩을 잘 하는게 제일 중요하고, 코딩을 잘하는게 일을 잘하는거라 생각했다. 입사 후 한 1년은 그렇게 생각했던 것 같다. 그런데 일을 잘 한다는 것과 코딩을 잘 하는 것은 다르다는 것을 어느 순간부터 확 체감하게 되는 것 같다. 전 회사를 생각해보면, 코딩 능력은 어느정도 이상은 필요하지 않았고, 개발건을 받았을 때 업무를 파악하는 것, 적용 가능한 기획인지 아닌지 분별하는 것, 영향도를 파악하며 분석하는 것, 등 개발 이외에 다른 업무적인 능력이 더 필요로 하고 그걸 잘하면 일을 잘한다고 봤던 것 같다. 이 챕터의 시작부분부터 그

이게 무슨 일이야!(3)
chapter4 - 평생 잊지 못할 결정적 순간을 만드는 일 우아한 형제들이 사람중심의 문화를 갖고 있다는 것이 이 챕터에서 많이 드러난다. 우아한 형제들은 정말 사람을 소중히 여기는 회사이고, 일하면서 행복을 느낄 수 있게 해주는, 그것을 위해 실제로 적용하고 노력하는 진짜 좋은 회사라는 것을 한번 더 쐐기가 박혔다! 사람을 챙기는 회사 안연주 피플실 실장님의 이야기를 읽으면서, 나는 개발자이지만 저 피플실에서 일해보고 싶다는 생각이 들었다. 나는 돈을 벌게 되면서 친구들에게 밥을 사줄 수 있다는게 좋았고, 학생 때는 마음이 있어도 돈이 부족해서 할 수 없는, 금액의 제한 없이 내가 주고싶은 선물을 골라서 할 수 있다는게 뜻 깊었다. 나도 친구들 챙기는거 좋아하는데 이 피플실이 딱 직원들을 위해 그런 일을 하고 있는 것 같았다. 정말 그분들이 직원들에게 행복을 주고 챙겨주는 것에 진심인게 느껴지고, 챙기는게 그들의 '일'이겠지만 '일'로 느끼는 것 같지 않았

이게 무슨 일이야!(2)
Chaper 2, 3 - 싫어하는 사람과 일하는 방법 / 일잘하는 척 하는 방법 챕터 1에서도 느꼈는데 챕터 2,3 또한 내용이 정말 실제적이다. 허황되고 나와는 다른 세계 사람의 내용이 아닌 나도 너무나 공감되는, 나도 많이 느낀 것에 대한 이야기이면서 해결책이라고 느꼈다. 기업문화가 좋은회사에 간다! 퇴사를 결심하고 이행하는 과정에서 내가 가장 많이 했던 생각이 '행복하게 일하고 싶다'였다. 비현실적인 바람인가라는 생각도 잠시 했지만, 내가 내린 결론은 인생도 그렇듯이 회사생활도 때로는 힘들때가 있겠지만 많은 나날들이 내가 행복하게 일할 수 있는, 그런 환경과 사람들이 모인 회사는 있다 였다. 그게 뭘까 찾아가는 과정이 지금 내가 퇴사하고 공부하며 쉬는 이 시간인데, 이 책에서 방향성을 잡아준 것 같다. 내가 행복하게 일 할수 있는 회사는 기업문화가 좋은 회사인 것 같다. 기업문화가 좋은 회사는 어떤 회사일까? 책에 기업문화가 좋은 회사라

이게 무슨 일이야!(1)
퇴사를 했다. 별다른 계기가 없는 이상, 앞으로 10년 이상은 회사를 다녀야 하는데, 지금 다니는 회사에서는 더이상 개발이 즐겁지 않았고, 사람들과 소통하는게 행복하지 않았다. 늘 비슷비슷한 내용과 난이도의 개발건들의 연속에 성취감이 사라졌고, 업무형 개발자가 되는건 내키지 않았다. 하루의 3분의 1 이상의 시간을 회사에서 보내며 살아가야 하는데, 행복하게 다니고 싶다는 생각이 들었다. 이런 마음이 이상적인 바람이라고 생각하지 않았고, 분명 열심히 준비하고 기도하면 때로는 힘들지라도 행복하게 다닐 수 있는 회사를 만날거라 기대하는 마음으로 퇴사를 했다. 오늘 읽은 챕터 : 송파구에서 일을 더 잘하는 11가지 방법 평소에 우아한형제들 김영한님을 존경하는 개발자라고 말하곤 했는데, 그걸 알고 있던 친구가 생일선물로 우아한형제들의 이게무슨일이야 라는 책을 주었다. 퇴사후 첫날인 오늘 읽기시작했다. 김봉진 설립자의 회사에 대한 마인드 읽으면서 많이

The Definition of Cloud Computing
The Definition Of Cloud Computing Recommendations of the National Institute of Standards and Technology Peter Mell / Timothy Grance NIST.pdf Summary 비용효율적인 보안과 사용자에게 따른 민감 정보에 대한 사생활 보장에 관한 문제에 대해 산업, 정부, 학술계의 협업적인 ITL의 연구, 가이드라인, 노력에 대한 보고서이다. Cloud Computing: 어디에나 존재하고, 편리하고, 소비자가 필요한 곳에 존재하는 것을 가능하게 하는 네트워크 모델이다. 네트워크, 서버, 저장소, 앱 등으로 구성될 수 있는데, 이러한 요소들은 작은 단위의

[도널드노먼의 UX 디자인 특강] 복잡한 세상의 디자인
읽게 된 이유 디자인 전공이라 그런지 프론트엔드 개발 공부를 하며 UI/UX 디자인에도 관심이 많았다. 하지만 제대로 알고 있지는 못했고, 어디서부터 알아가면 좋을지도 고민이었다. 그렇게 생각해낸 것은 바로 책! '도널드노먼의 UX 디자인 특강'의 저자인 도널드 노먼은 UX의 창시자라고 한다. 그래서 이 책은 UX 디자인의 바이블과도 같다고...! 그래서 다른 최신책들보다도 이 책을 먼저 읽어보고 싶었다. 책만 읽고 모든 것을 알아가리란 안일한 생각은 하지 않는다. 그저 이 책을 통해 👀나의 시야를 확장👀시켜 더 넓은 시야로 세상을 바라보고 싶다. 
[Clean Code] 깨끗한 코드
🌱 코드가 존재하리라 >기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이 프로그래밍이고, 이렇게 명시한 결과가 바로 코드이다. 따라서 코드가 사라질 가망은 전혀 없다! 궁극적으로 코드는 요구사항을 표현하는 언어이기 때문이다. 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세하게 표현하는 것은 불가능하다. 🙅🏻♀️ 나쁜 코드 가지각색의 이유로 누구나 대충 프로그램을 짠 경험이 있다. 대충 짰어도 프로그램이 돌아간다는 사실에 안도감을 느끼곤 하는데. 다시 돌아와 나중에 정리하겠다고 다짐하곤 한다. 하지만 나중은 결코 오지 않는다. ⏳ 나쁜 코드로 치르는 대가 >나쁜 코드는 결국 나쁜 코드를 더 많이 양산한다. 이에 따라 개발 속도를 크게 떨어뜨려 생산성은 점점 0에 수렴한다. 태도 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따
8장 프로그래밍 언어 처리
📖 8장 keywords 어셈블리 언어 / 어셈블러 부트스트랩 고수준 언어 / 컴파일러 Fortran, 정수 변수 이름의 유래 구조적 프로그래밍 어휘 분석 (정규식 패턴 매칭), 문법 파싱, 파스 트리 컴파일러와 인터프리터 최적화 "프로그램을 기계에서 실행하기 위해 변환하는 방법" "프로그램을 컴파일하거나 인터프리트 하는 과정" 어셈블리 언어 복잡한 비트 조합으로 명령어를 입력하는 대신 이해하기 쉬운 니모닉(mnemonics)을 통해 명령어를 입력할 수 있다. 주소에 레이블(label)을 붙일 수 있고, 코드에 주석을 달 수도 있다. 어셈블리 언어로 작성된 코드를 기계어 코드로 변환하는 프로그램을 어셈블러라고 한다. 어셈블러는 변환 과정에서 레이블이나 심볼의 값을 결정해 채워 넣는다. 컴퓨터의 발전 과정에서 프로그래머들은 어셈블러를 만들어 보다 나은 작업 환경을 구축할 수 있었고, 어셈블러에서
7장 데이터 구조와 처리 (2)
📖 7장 keywords 데이터를 조직화 하는 방법 아이노드 벡터 (수집/분산) 객체 지향 데이터 정렬 효율과 성능 대용량 저장장치 블록: 디스크 드라이브의 기본 단위 클러스터: 연속적인 블록 데이터를 디스크에 저장하는 방법은 파일 이름을 디스크에 저장하고, 파일 이름과 데이터가 저장된 디스크 블록을 연결한다. 연결하는 방법은, 블록 중 일부를 아이노드로 지정한다. 아이노드란 디스크 블록에 대한 index + node를 합친 단어다 아이노드는 파일 이름, 데이터가 들어 있는 블록에 대한 인덱스 등 파일의 여러 정보를 포함한다. 벡터를 사용한 I/O 벡터: 같은 데이터가 연속적으로 모여 있는 고정된 크기의 데이터 구조 mp3 형식의 오디오 데이터를 오디오 장치에 전달한다면? mp3 파일은 여러 프레임으로 이루어졌다. 운영체제에 프레임 각 부분을 가리키는 포인터의 집합(벡터)를 전달하는 것이 효율적이
7장 데이터 구조와 처리 (1)
📖 7장 Keywords 데이터 구조 배열, 문자열, 연결리스트, 트리 가비지 컬렉션 참조 지역성: 필요한 데이터를 서로 가까이 유지하라 기본 데이터 타입 C언어의 포인터는 메모리 주소로 해석된다. 일부 언어는 레퍼런스라는 더 추상적인 개념을 사용한다. 자바는 포인터가 없는 언어이다. 배열 각각의 인덱스가 있는 요소를 갖는다. 상대 주소 지정: 0번째 요소의 주소인 기저주소로부터 얼마나 멀리 떨어져 있는지를 나타내는 offset으로 지정하는 것 비트맵 : 비트의 배열 비트맵에서는 비트 설정하기, 비트 지우기, 비트가 1인지 검사하기, 비트가 0인지 검사하기 등의 기본 연산을 수행할 수 있다. 특정 비트가 들어있는 바이트를 찾고, 자원이 사용 가능하거나 사용 중인지 여부를 표현할 때도 용이하다. 문자열 : 여러 문자로 이루어진 시퀀스 문자열을 연산할 때에는 그 길이를 알아야 한다. 문자열 안에 길이를 저장하여
6장 입출력과 네트워킹
📖 6장 keywords 네트워킹 샘플링 "컴퓨터는 외부와 어떻게 상호작용하는가" 네트워킹 인터넷은 inter + net의 합성어로, net(네트워크)의 inter(사이)라는 뜻이다. 즉, 인터넷은 여러 LAN을 하나로 연결해주는 WAN이다. TCP/IP (전송 제어 프로토콜/인터넷 프로토콜) TCP/IP는 인터넷이 사용하는 두 가지 프로토콜이다. IP는 패킷을 전달하고, TCP는 패킷의 정확한 전달을 보장해준다. IP 주소 인터넷상의 모든 컴퓨터는 각각의 유일한 IP주소를 갖는다. DNS (도메인 이름 시스템) 도메인 이름을 현재의 IP 주소로 변경해준다. WWW TCP/IP 위에 만들어진 여러 프로토콜이 있고, 그 중 HTTP를 가장 많이 사용한다. HTTP 표준은 웹 브라우저가 웹 서버와 상호작용 하는 방법을 정의한다. WWW이란 인터넷을 통해 접근 가능한, 수 많은 웹 페이지의 상호연결 시스템을 의

5장 컴퓨터 아키텍처와 운영체제 (2)
📖 5장 keywords 멀티태스킹 메모리 관리 장치, 가상 메모리 시스템 시스템 공간과 사용자 공간 메모리 메모리 관리 장치 멀티태스킹이 필수가 된 오늘날 대부분의 마이크로프로세서에는 메모리 관리 장치(MMU, Memory Management Unit)가 들어있다. 프로그램은 가상 주소를 사용해 작성되고, MMU는 가상 주소를 물리 주소로 변환해 준다. 메모리는 이를 사용하게 된다. MMU로 인해 폰 노이만 구조와 하버드 구조의 구분이 의미 없어졌다. 단일 메모리 버스만 사용하는 폰 노이만 구조의 시스템도 명령어 메모리와 데이터 메모리를 분리해 제공할 수 있다. 운영체제(OS)는 MMU를 사용해 사용자 프로그램에게 가상 메모리를 제공한다. 가상 메모리 시스템 요청받은 메모리가 사용 가능한 물리적 메모리의 크기보다 크면, OS는 현재 필요하지 않은 메모리 페이지를 디스크로 옮긴다. 이를 스왑 아웃이라고 한다.
5장 컴퓨터 아키텍처와 운영체제 (1)
📖 5장 keywords 컴퓨터 아키텍처: 컴퓨터의 여러 구성요소를 배치하는 방법 함수 / 스택 멀티 태스킹 운영 체제: 멀티 태스킹을 하기 위한, 프로그램 실행 제어 프로그램 기본적인 구조 요소들 가장 흔한 컴퓨터 구조 2가지는 폰 노이만 구조와 하버드 구조다. 두 구조는 메모리 배열 방식에서 차이가 있다. 폰 노이만 구조는 데이터 버스와 주소 버스가 1개 뿐이라 명령어와 데이터를 동시에 가져올 수 없고, 하버드 구조는 각각의 메모리에서 동시에 가져올 수 있어서 비교적 빠르지만, 메모리를 처리하기 위한 버스가 더 필요하다. 프로세서 코어 단일 CPU보다 훨씬 더 좋은 성능을 얻기 위해 1980년대 멀티프로세서 시스템이 등장한다. 기계가 빨라지면서 전력을 더 많이 소모하고, 단위 면적당 열 발생은 더 많아졌다. 그리하여 2000년경 프로세서는 전력 장벽에 부딪힌다. 열 발생을 낮추면서 회로를 소형화

4장 컴퓨터 내부 구조
📖 4장 keywords 컴퓨터 내부 구조 메모리, I/O, CPU 명령어 집합 RISC / CISC 컴퓨터는 전자 부품을 다양하게 조합해 비트를 조작하는 회로를 만든 것이다. 컴퓨터 설계 방법은 다양하며, 복잡한 동작을 수행하도록 만들수록 복잡한 구조를 추가하게 된다. 컴퓨터는 크게 메모리(기억장치), 입력과 출력(I/O), CPU(중앙처리장치)로 나뉜다. 📌 메모리 메모리 = 비트 저장소 = 기본 단위 1Byte (= 8bit) 32비트 컴퓨터는 보통 메모리를 4바이트 단위로 읽고, 64비트 컴퓨터는 8바이트 단위로 읽는다. 데이터를 읽기 위해 연속되는 바이트를 순서대로 저장해야 하며, 이것을* 바이트 순서*라고 한다. 사용하는 프로세서에 따라 엔디안(컴퓨터 메모리의 배열 방식)이 다르다. >리틀 엔디안 배열: 0번 바이트가 가장 오른쪽 자리에 간다. 빅 엔디안 배열: 0번

3장 메모리와 디스크의 핵심: 순차 논리
📖 3장 keywords 시간 표현과 상태 기억 메모리 회로, 메모리 칩 RAM, ROM 블록 장치 플래시 메모리, SSD 오류 감지와 정정 조합 논리는 입력에 따라서 출력이 결정된다. -> 입력의 현재 상태만을 다룬다. 순차 논리는 입력의 현재와 과거 상태를 기억한다. 시간 표현과 상태 기억 컴퓨터는 주기적인 전기 신호가 필요하다. 컴퓨터 외에도 우리는 주기 함수를 통해 시간을 측정할 수 있고, 진자가 오가는 시간(=주기)을 주기 함수로 사용할 수 있다. 안정적인 주파수로 진동하는 발진자일수록 더 정확히 시간을 측정할 수 있다. ➞ 크리스탈을 이용한 발진자 crystal 전극(전선)을 크리스탈에 연결하고 크리스탈을 압축하면 크리스탈이 전기를 만들어낸다. 그리고 전극에 전기를 가하면 크리스탈은 구부러진다. ➞ 피에조 전기 효과 (=압전 효과)
2장 전자 회로의 조합 논리
2장 keywords 아날로그와 디지털 하드웨어의 크기와 디지털 회로 컴퓨터와 전기 기술 현대 컴퓨터는 전기를 통해 작동된다. 2장에서는 주로 컴퓨터 하드웨어에서 전기를 사용하는 방법이 나온다. 비트에 대해 동작하는 장치를 포함해 모든 물리적인 장치를 하드웨어라고 부른다. 전자 기술에서 아날로그는 연속적인 것을 뜻하며, 디지털은 이산적인 것을 뜻한다. 연속적인 것은 실수를 표현할 수 있는 것이고, 이산적인 것은 정수만 표현할 수 있다. 전기는 빛의 속도로 움직이며 전자가 빠르게 움직이기 위해서는 부품을 최대한 가깝게, 작게 만들어야 한다. 따라서 하드웨어는 작게 만들면 더 높은 성능을 달성하게 된다. 하드웨어를 작게 만들면 저전력 소모, 열발생 감소 등의 이점이 있다. 하지만 작게 만들다 보면 물체가 서로 간섭하기 아주 쉬워진다는 문제점이 생긴다. 컴퓨터 CPU의 신호 간섭의 효과를 떨어뜨리기 위해 **판정 기준에 의해
1장 컴퓨터 내부의 언어 체계
📖 1장 keywords 여는 글 비트 2진수 8진 표현법, 16진 표현법 아스키 문자, 인코딩 색을 숫자로 표현하기 RGB, RGBA, 16진 트리플렛 ⭐️ 내가 책을 읽는 자세 그렇다~고 설명해주는 것에 왜? 하고 꼬리를 무는 언어적 이해를 원하기 보다 그냥 그렇구나~하고 현상을 이해하는 게 좋을 것 같다고 생각했다. 꼬리에 꼬리를 물면 끝이 없고 다 어려워진다... 일단 넓게 이해하고 나중에 지식이 늘면 깊게 배워보자 지금 다 알고자 하면 과식한다 참고로 책에는 더 자세한 내용이 들어있고 나는 내가 받아들일 수 있는 것만 정리해본다! 이 책은 컴퓨터 하드웨어를 탐구하기 시작해서, 하드웨어에서 소프트웨어가 어떻게 작동하는지 살펴보고, 프로그래밍 기술과 협력 스킬에 대해서 설명해준다. 들어가기에 앞서, 컴퓨터는 비트를 가지고 노는 기계라고 표현한다. 비트가 뭐지? 얼마 전 배운 내용에서 "IPv4의

[독서] 한 권으로 읽는 컴퓨터 구조와 프로그래밍
자바스크립트 공부를 시작한지 6주차, 그동안 CS에 대한 근본적인 공부가 절실하다고 느꼈다. 아~ 그래서 그렇구나~ 하고 더 와닿는 공부를 하고 싶다. 이 공부를 완전히 내 것으로 만들고 싶다(!) 컴퓨터랑 좀 더 친해지면, 컴퓨터의 매커니즘을 어느정도 알고나면 지금 공부하는 프로그래밍 언어를 이해하는 데 도움이 되지 않을까 싶었다. 개발자 필독서라는 '클린코드', '커리어스킬' 등 여러 좋은 책이 있었지만 현재 내가 가장 알고 싶어하는 내용을 담고 있을 것 같은 이라는 책을 선택했다. "비전공자도 재미있게 읽는"이라는 문구도 한 몫 했다. (믿으면 안 될 것 같지만) 이렇게 글을 쓰는 이유는... 총 페이지가 636쪽이다..! 블로그에 독서 내용을 기록하며 8월이 지나기 전까지 완독하는 게 목표다. 같이 읽어요