Computer는 H/W와 S/W로 구성된다. S/W는 Application과 System S/W로 구분된다. 가장 대표적인 System S/W는 OS(Operation System)이다. 프로그램, 프로세스, 스레드 프로그램은 설치하는 것이다. 설치된 프로그램을 실행하면 프로세스(PID)가 생성된다. 스레드는 프로세스 속에 존재하는 실행(연산)단위이다. 스레드는 프로세스에게 할당된 자원(메모리)을 공유한다. 내 컴퓨터에 실행중인 프로그램 -> 프로세스 프로세스 안에 스레드라는 단위가 있음. 프로세스는 적어도 하나의 스레드를 가진다. 실행의 다른 이름은 연산이다.(메모리도 쓰고 CPU도 쓰고~) 프로세스에게 할당된 자원 -> 메모리 기억공간(메모리)의 구분 HEAP : Process 전체가 쓴다 - 공용..
CS지식들
원자성 소프트웨어 실행의 관점에서, 연산이 단일하고 분할할 수 없을 때 이 연산을 원자적(atomic)이라고 한다. 동기화 lock, unlock을 통해 자원을 점유하고 있어야 한다.(OS가 제공) 신호등과 잠금장치의 필요성과 유지하다. 교착상태(Deadlock) 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황 교착상태의 발생 조건 1. 상호 배재 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해재될 때까지 기다려야 한다. 2. 점유 대기 자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다. 3. 비 선점 이미 할당된 자원을 강제..
동시성 (Concurrency) : 여러 가지 일이 동시에 진행되는 것 TV를 보는 일과 라면을 먹는 일을 개별 사건의 독립적 사건으로 보는데 그것이 동시에 일어날 수 있는 걸까? 가능하다. -> 동시성이 있는 것. 내가 컴퓨터에서 크롬 브라우저를 실행시켜서 유튜브를 열고 뭘 보고 있다. 다른 한 쪽으로는 어떤 프로그램을 실행해서 뭔가를 다운로드 받고 있을 수 있다. 이때 동시성이 있을까? 있다. 문제될 경우가 없기 때문이다. 병렬성 (Parallelism) : 같은 일을 여러 주체가 함께 동시에 진행하는 것 한명이 하나의 일을 하는 것보다 여러명이 하나의 일을 같이 하는게 더 효율이 높다. 병렬성도 동시성 범주에 들어가는 개념이다. 병렬적이라는 것을 언제 많이 할까? 코인 + 채굴(해시 연산) 그 연산..
Register는 이름이 있다. 주 기억장치는 '일련번호'로 관리한다. 보조 기억장치(HDD의 논리적 구조) 암이 왔다갔다 하면서 디스크에다가 정보를 쓰기도 하고 읽기도 하는 것. 중앙에 스핀들모터가 고속으로 회전. HDD 스펙을 이야기 할 때 디스크 회전 속도를 기준으로 삼는다. 빠를 수록 성능이 높다. 관리체계 : Track Sector로 나뉜다. ex) 아파트 '~동 ~호' 랑 비슷 읽는 것은 상관 없는데, 쓰는 것은 한 파일이 저장되어 있는 공간에 또 덮어쓰기하면(Overwrite) sector 하나 하나에 쓰기 기능이 몇 십만번 하면 망가져서 못 쓰게 된다.(Bad sector) HDD는 그래서 빈 공간을 위주로 쓴다. 512bytes -> sector 하나 RAM에서는 일련번호 찾으면 찾아졌는..
RAM -> 1차 메모리(Internal) HDD, SSD, USB disk(File system), Backup device -> 2차 메모리(Storage) CPU가 연산을 할 때 메모리 중의 핵심 -> Register까지 정보를 가지고 와야 그 때부터 연산을 할 수 있게 된다 문제는? - CPU가 제일 빠르다. (속도 4.xGHz 단위 등등) - RAM은 속도가 느리다. (1.xGHz) - 더 큰 속도 차이는? - 1차 메모리 -> 2차 메모리 넘어갈 때이다. ex) CPU가 연산을 하는데 CPU 자체의 속도: A 2차 메모리에서 작동하는 속도 : B A하고 B하고 속도 차가 얼마나 나는 걸까? A가 비행기로 날아가는 속도라면 B는 사람이 엎드려서 기어가는 속도(비유) 너무 GAP이 크다. 그래서 ..
페이징 처리와 정렬은 전통적으로 SQL을 공부하는데 반드시 필요한 부분이다. 오라클은 '인라인 뷰(inline view)'를 알아야만 하고, MySQL은 limit를 알아야만 했다. JPA는 내부적으로 이런 처리를 'Dialect'라는 존재를 이용해서 처리한다. 그래서 개발자들은 SQL이 아닌 API의 객체와 메서드를 사용하는 형태로 페이징 처리를 할 수 있게 된다. Spring Data JPA에서 페이징 처리와 정렬은 특이하게도 findAll()이라는 메서드를 사용한다. findAll()는 JpaRepository 인터페이스의 상위인 PagingAndSortRepository의 메서드로 파라미터로 전달되는 Pageable이라는 타입의 객체에 의해서 실행되는 쿼리를 결정하게 된다. 주의할 점은 리턴 타입..