개발일기
-
계획 학습한 내용 Red Black Tree vs Heap vs AVL Tree 알고리즘 문제를 풀면서 TreeMap을 사용한 일이 있었다. 내가 알기로 TreeMap은 Heap 꼴의 형태를 취하고 있고, 값을 넣으면 그때마다 element을 채워나가는 식이라고 알고 있었다. 그런데 내가 짜려는 알고리즘은 element를 모두 채운 후에 sort하는 작업이 들어가도 되는 것이라, 매번 값을 넣으면 그때마다 트리를 찾아 가는게 비효율적이라 생각했다. 따라서 HashMap으로 만든 다음에, putAll로 넣으면 한 번에 값을 넣고 sort하는게 아닐까? 하는 생각이 들어 메서드를 확인해 보았다. public void putAll(Map
Red Black Tree vs Heap vs AVL Tree계획 학습한 내용 Red Black Tree vs Heap vs AVL Tree 알고리즘 문제를 풀면서 TreeMap을 사용한 일이 있었다. 내가 알기로 TreeMap은 Heap 꼴의 형태를 취하고 있고, 값을 넣으면 그때마다 element을 채워나가는 식이라고 알고 있었다. 그런데 내가 짜려는 알고리즘은 element를 모두 채운 후에 sort하는 작업이 들어가도 되는 것이라, 매번 값을 넣으면 그때마다 트리를 찾아 가는게 비효율적이라 생각했다. 따라서 HashMap으로 만든 다음에, putAll로 넣으면 한 번에 값을 넣고 sort하는게 아닐까? 하는 생각이 들어 메서드를 확인해 보았다. public void putAll(Map
2023.08.17 -
계획 학습한 내용 입출력 장치와 Device Driver, Device Controller I/O 장치들은 다루기 어렵다. 그 이유들은 다음과 같다 입출력 장치 종류가 많아서 각자 언어가 다른 것과 같다. CPU와 메모리의 데이터 전송률에 비해 입출력 장치의 전송률이 낮다 이 문제를 해결하는 것이 Device Controller라는 HW이다. Device Controller는 I/O 장치에 붙어있다. Device Controller의 역할은 다음과 같다. CPU와 I/O 장치간 통신 중계 입출력 장치에 대한 오류 검증 데이터 버퍼링 여기서 버퍼링이란, 전송률이 높은 장치와 낮은 장치 사이에 buffer라는 임시 공간을 두어, 데이터를 조금씩 저장하다가 한 번에 내보내(flush) 전송률 차이를 해결하는 ..
입출력 장치와 Device Driver, Device Controller / 인터럽트계획 학습한 내용 입출력 장치와 Device Driver, Device Controller I/O 장치들은 다루기 어렵다. 그 이유들은 다음과 같다 입출력 장치 종류가 많아서 각자 언어가 다른 것과 같다. CPU와 메모리의 데이터 전송률에 비해 입출력 장치의 전송률이 낮다 이 문제를 해결하는 것이 Device Controller라는 HW이다. Device Controller는 I/O 장치에 붙어있다. Device Controller의 역할은 다음과 같다. CPU와 I/O 장치간 통신 중계 입출력 장치에 대한 오류 검증 데이터 버퍼링 여기서 버퍼링이란, 전송률이 높은 장치와 낮은 장치 사이에 buffer라는 임시 공간을 두어, 데이터를 조금씩 저장하다가 한 번에 내보내(flush) 전송률 차이를 해결하는 ..
2023.08.16 -
계획 오늘 익힌 내용 캐시와 레지스터 레지스터는 CPU 요청 처리에 있어 필요한 데이터를 임시 저장하는 기억장치다. CPU에서 연산할 때 메모리에서 읽어오면 느리기 때문에 메모리의 데이터를 레지스터에 올려놓고, CPU에서 사용한다. 위 그림에서 보다시피, 레지스터는 Level 0에 속하고, RAM보다도 훨씬 빠르다. 레지스터는 일종의 캐시기 때문에 메모리에서 값을 때 적중률(hit ratio)를 올리기 위해 데이터 지역성을 고려해 값을 읽는다. 데이터 지역성에는 3가지 종류가 있다. 공간적 지역성 : 데이터를 읽을 때 주변에 있는 데이터들이 참조될 가능성이 높다. 시간적 지역성 : 최근 사용된 데이터가 재사용될 가능성이 높다. 순차적 지역성 : 기억장치에 저장된 순서대로 읽힐 가능성이 높다. quick ..
캐시와 레지스터, 이벤트 루프계획 오늘 익힌 내용 캐시와 레지스터 레지스터는 CPU 요청 처리에 있어 필요한 데이터를 임시 저장하는 기억장치다. CPU에서 연산할 때 메모리에서 읽어오면 느리기 때문에 메모리의 데이터를 레지스터에 올려놓고, CPU에서 사용한다. 위 그림에서 보다시피, 레지스터는 Level 0에 속하고, RAM보다도 훨씬 빠르다. 레지스터는 일종의 캐시기 때문에 메모리에서 값을 때 적중률(hit ratio)를 올리기 위해 데이터 지역성을 고려해 값을 읽는다. 데이터 지역성에는 3가지 종류가 있다. 공간적 지역성 : 데이터를 읽을 때 주변에 있는 데이터들이 참조될 가능성이 높다. 시간적 지역성 : 최근 사용된 데이터가 재사용될 가능성이 높다. 순차적 지역성 : 기억장치에 저장된 순서대로 읽힐 가능성이 높다. quick ..
2023.08.10 -
계획 뭔가 오늘 밀도 높게 산건 아니고 평범한 하루였는데 작업들을 잘게 쪼개니까 많이 한 것 처럼 됐다. 오늘 익힌 내용 웹소켓과 폴링 https://www.youtube.com/watch?v=R_agd5qZ26Y 이 영상에 나오는 기능 중 하나에 쓰인다. 우버의 운전수가 탑승객에게 주기적으로 실시간 위치 정보를 쏴준다. 이때 사용자 수도 많고 실시간 데이터도 많다는 걸 고려해야 한다. 2초마다 폴링한다고 하면 1. 탑승객 API측 레이턴시, 2. 탑승객 API측 부하를 가진다고 한다. 만약 운전수가 위치 정보를 업데이트했을 때, 탑승객은 재수 없으면 2초 후에 받아보게 된다. 계속해서 API 서버에 질의하므로 부하가 발생한다. 이러한 이유로 웹소켓을 선택하는 편이 부하를 줄일 수 있다고 한다. 여기서 ..
웹소켓과 폴링계획 뭔가 오늘 밀도 높게 산건 아니고 평범한 하루였는데 작업들을 잘게 쪼개니까 많이 한 것 처럼 됐다. 오늘 익힌 내용 웹소켓과 폴링 https://www.youtube.com/watch?v=R_agd5qZ26Y 이 영상에 나오는 기능 중 하나에 쓰인다. 우버의 운전수가 탑승객에게 주기적으로 실시간 위치 정보를 쏴준다. 이때 사용자 수도 많고 실시간 데이터도 많다는 걸 고려해야 한다. 2초마다 폴링한다고 하면 1. 탑승객 API측 레이턴시, 2. 탑승객 API측 부하를 가진다고 한다. 만약 운전수가 위치 정보를 업데이트했을 때, 탑승객은 재수 없으면 2초 후에 받아보게 된다. 계속해서 API 서버에 질의하므로 부하가 발생한다. 이러한 이유로 웹소켓을 선택하는 편이 부하를 줄일 수 있다고 한다. 여기서 ..
2023.08.08 -
계획 오늘 익힌 내용 RAM에는 왜 Random이란 단어가 들어갈까? 일반적으로 보조기억 장치(HDD)는 헤더를 움직여서 원하는 부분을 읽는다. 따라서 이는 순차 접근 메모리라 부른다. 그러나, 메모리의 경우 원하는 데이터가 어디 있든 직접 접근할 수 있다. 따라서 랜덤 접근이라고 한다. +) RAM(Random Access Memory)는 전기 신호로 값을 저장한다. 위 그림은 1bit 메모리의 예시인데, 위처럼 전기 신호가 계속 돌면서 저장하는 구조이다. 만약 전기 신호가 끊어져 0 값이 계속 들어가게 되면 값이 휘발된다. +) ROM(Read Only Memory)은 바이너리 코드를 사용해 개별 셀에 써 비휘발성 메모리이다. 따라서 펌웨어 등 컴퓨터 부품에 사용된다. Hash 공부한 내용 해시의 성..
RAM에 Random이란 단어가 들어가는 이유 / Hash 공부(Java)계획 오늘 익힌 내용 RAM에는 왜 Random이란 단어가 들어갈까? 일반적으로 보조기억 장치(HDD)는 헤더를 움직여서 원하는 부분을 읽는다. 따라서 이는 순차 접근 메모리라 부른다. 그러나, 메모리의 경우 원하는 데이터가 어디 있든 직접 접근할 수 있다. 따라서 랜덤 접근이라고 한다. +) RAM(Random Access Memory)는 전기 신호로 값을 저장한다. 위 그림은 1bit 메모리의 예시인데, 위처럼 전기 신호가 계속 돌면서 저장하는 구조이다. 만약 전기 신호가 끊어져 0 값이 계속 들어가게 되면 값이 휘발된다. +) ROM(Read Only Memory)은 바이너리 코드를 사용해 개별 셀에 써 비휘발성 메모리이다. 따라서 펌웨어 등 컴퓨터 부품에 사용된다. Hash 공부한 내용 해시의 성..
2023.08.07 -
계획 오늘 한 일 영속성 전이 엔티티가 영속성 컨텍스트에 올라가는 순간 ATDD 미션을 하다가 Section에 대한 POST 요청에서 Location 헤더에 id 값이 null이 찍히는 현상이 발견되었다. 코드는 다음과 같다. 신기하게도 동작은 제대로 하고있고, db에도 엔티티가 제대로 들어가고 있었다. 따라서 이건 영속성 컨텍스트의 문제가 아닐까 하는 생각이 들었다. 여기서 Section은 Line에서 ManyToOne으로 가지고 있고, OrphanRemoval = true, CascadeType.ALL을 준 상황이었다. 서비스 레이어가 지저분해지는 것이 싫어 SectionRepository.save()와 같은 동작은 따로 안 하고 Line.addSection()에서 영속성 전이를 통해 레코드를 추가하..
영속성 전이 엔티티가 영속성 컨텍스트에 올라가는 순간 / lambda와 익명 객체와의 차이 / PO와 기획자의 차이계획 오늘 한 일 영속성 전이 엔티티가 영속성 컨텍스트에 올라가는 순간 ATDD 미션을 하다가 Section에 대한 POST 요청에서 Location 헤더에 id 값이 null이 찍히는 현상이 발견되었다. 코드는 다음과 같다. 신기하게도 동작은 제대로 하고있고, db에도 엔티티가 제대로 들어가고 있었다. 따라서 이건 영속성 컨텍스트의 문제가 아닐까 하는 생각이 들었다. 여기서 Section은 Line에서 ManyToOne으로 가지고 있고, OrphanRemoval = true, CascadeType.ALL을 준 상황이었다. 서비스 레이어가 지저분해지는 것이 싫어 SectionRepository.save()와 같은 동작은 따로 안 하고 Line.addSection()에서 영속성 전이를 통해 레코드를 추가하..
2023.08.03