전체 글
Happy Hacking!
-
계획 학습한 내용 입출력 장치와 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 -
이 게시물은 단순히 제가 저는 이렇게 테스팅 한다는 걸 정리한 문서입니다. 따라서 정답이 아니며, 동의하기 어려운 부분이 많을 수 있습니다. 이 글 내용을 참고하시더라도, 팀 컨벤션이 존재한다면 그 내용을 따르길 바랍니다. 1. 프로그램 작성시 인수테스트를 먼저 작성합니다 인수테스트를 작성하기 전에는 BDD형식으로 Given / When / Then으로 명시합니다. BDD 형식이란 다음과 같습니다. Given : 주어진 상황 When : 원하는 행동 Then : 원하는 행동 후에 얻은 결과 인수테스트는 시나리오 테스트입니다. 어떠한 상황에서 어떤 행동을 하면 어떤 결과를 얻을 것이다라는 시나리오를 테스트하는 것입니다. 인수테스트를 작성하게 되면 개발하려는 기능에 대해 이해를 더 잘 할수 있고, 개발 전에..
Soko는 이렇게 테스팅합니다이 게시물은 단순히 제가 저는 이렇게 테스팅 한다는 걸 정리한 문서입니다. 따라서 정답이 아니며, 동의하기 어려운 부분이 많을 수 있습니다. 이 글 내용을 참고하시더라도, 팀 컨벤션이 존재한다면 그 내용을 따르길 바랍니다. 1. 프로그램 작성시 인수테스트를 먼저 작성합니다 인수테스트를 작성하기 전에는 BDD형식으로 Given / When / Then으로 명시합니다. BDD 형식이란 다음과 같습니다. Given : 주어진 상황 When : 원하는 행동 Then : 원하는 행동 후에 얻은 결과 인수테스트는 시나리오 테스트입니다. 어떠한 상황에서 어떤 행동을 하면 어떤 결과를 얻을 것이다라는 시나리오를 테스트하는 것입니다. 인수테스트를 작성하게 되면 개발하려는 기능에 대해 이해를 더 잘 할수 있고, 개발 전에..
2023.08.11 -
계획 오늘 익힌 내용 캐시와 레지스터 레지스터는 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