전체 글 35

[이분탐색] java lower bound, upper bound

매번 lower bound, upper bound 생각하는게 헷갈려 정리해본다. 상황 다음과 같이 내림차순이 아닌(오름차순이거나 같은) 배열이 있다고 가정해보자. [1,2,2,2,2,3,4,5,6,7,8]이때 2 값을 갖는 가장 작은 인덱스와 가장 큰 인덱스를 어떻게 구할것인가? 여기서 lower bound, upper bound 개념이 나온다. lower bound : key 값 이상인 값들중 가장 작은 인덱스 upper bound : key 값 초과인 값들중 가장 작은 인덱스 // [1,2,2,2,2,3,4,5,6,7,8] // lower bound System.out.println(lowerBound(2)); // 1 System.out.println(lowerBound(1.5)); // 1 Sys..

Algorithm 2023.12.11

[소설] N을 위하여

어려운 책들 읽다가 100 페이지에서 매번 하차해서 소설류를 읽어보기로 했다. 찾아보니 드라마로도 나와서 믿고봤다. 흥미로운 미스테리 추리소설 정도로 생각하고 읽었는데 사뭇 달라서 오히려 좋았다. 이야기를 풀어나가는 방식이 흥미롭다. 시간 순서대로 사건을 발생하고 독자는 그대로 따라가기만 하는것이 아니고, 동일한 사건을 조금씩 디테일하게 반복해서 보여줘 스스로 생각할수 있게 도와준다. 다만 처음 읽었을때 화자가 누구인지가 헷갈려서 계속해서 앞장을 넘겨봤었다. 이후 중반부로 넘어가면 이러한 플롯에 익숙해지게된다. 인물들의 성격이 나약하지만 극복하는 모습이 인상적이다. 공통적으로 유년기 시절 아픈 상처를 갖고있다. 부모의 이혼, 잘못된 사랑의 방식 등. 학대를 받았다는 사실을 사랑으로 여겨 본인의 상처를 부..

독서 2023.12.07

[운영체제와 정보기술의 원리] 7장 메모리 관리

32bit vs 64 bit 32 bit 컴퓨터란 메모리를 테이블로 저장한느데 인덱스를 32 bit로 사용한다는 말. 메모리 주소는 1byte 단위로 구분하므로 2^32 개의 인덱스와 1byte의 항목값을 가진 테이블이 존재. 그래서 총 주소 공간은 2^32 * byte == 4 * 2^30 * byte 인데 2^10, 2^20, 2^30 은 각각 K,M,G 이므로, 4GB 만큼의 주소공간을 표현이 가능함. 그래서 32 bit 컴퓨터는 램 크기가 4GB를 넘을 수 없음. 같은 계산 방식으로 64bit는 2^64 * byte == 16 * 2^60 * byte == 16 * 10^9 GB 이다. 다시 32 bit 컴퓨터는 보통 4KB(2^12 byte)를 단위로 페이지라는 구역을 만들어 쓴다. 32bit ..

OS 2023.12.04

[운영체제와 정보기술의 원리] 6장 CPU 스케줄링

CPU 버스트, I/O 버스트 프로세스는 Load(메모리->CPU), Store(CPU->메모리), Add(두 레지스터의 합) 같이 CPU 내에서만 수행하는 작업과 디스크 입출력 같이 외부 장치를 이용하는 작업을 번갈아 동작함. 그래서 이 두가지 작업이 이루어지는 과정을 2가지로 분류함. CPU 버스트 : Load, Store, Add 처럼 CPU 내에서 이루어지는 작업들. 사용자 프로그램이 직접 CPU에 접근함. 굉장히 빠름. I/O 버스트 : CPU 가 아닌 외부 장치(입출력 장치)들과 데이터를 주고받는 과정. 사용자 프로그램이 아닌 커널이 대신 작업을 수행함. 매우 느림. 프로세스가 running state가 되면 이와같이 CPU 버스트와 I/O 버스트를 번갈아 진행함. 근데 프로그램마다 CPU 작..

OS 2023.11.16

[운영체제와 정보기술의 원리] 5장 프로세스 관리

프로세스 프로세스 : 실행중인 프로그램. 디스크에 존재하던 프로그램이 메모리에 올라와 실행상태가 됨. (프로세서는 CPU를 칭함.) CPU를 여러 프로세스가 점유했다가 뺐기므로 이전 프로세스를 복구할 수 있어야함. 이때 이전 프로세스를 복구하기위한 정보를 프로세스 문맥이라고함. 하드웨어 문맥 : CPU의 수행상태. PC(Program Counter), 각종 레지스터 값 프로세스의 주소공간 : Code,Data,Stack,... 같은 독자적인 주소공간 커널상의 문맥 : 프로세스가 되면 운영체제는 해당 프로세스를 위한 PCB와 커널스택을 생성함. PCB PCB는 프로세스를 저장 및 복구하기 위한 운영체제의 정보(자료구조)이다. CPU dispatcher가 다음 실행할 프로세스를 결정할때(문맥교환시) 해당 P..

OS 2023.11.15

[운영체제와 정보기술의 원리] 2,3,4장

운영체제란 탄생 배경 : 사용자가 하드웨어를 직접 운용하는것이 어렵기 때문에 대신해줄 소프트웨어가 필요했음. 운영체제 : 소프트웨어 계층과 하드웨어 계층 연결해주는 소프트웨어 커널 : 메모리에 항상 상주해있는 운영체제 코드 운영체제 역할 자원관리자 : 한정된 시스템 자원을 효율적으로 관리 (가장 중요) 인터페이스 : 사용자가 하드웨어를 직접 사용하지 않고 인터페이스로 쉽게 접근 보안 및 보호 : 여러 사용자 및 프로그램이 충돌하지 않게 관리, 악성프로그램 방지 자원관리기능 CPU 스케쥴링 : 어떤 프로세스에게 CPU를 할당할것인가 (FCFS, Round Robin, 우선순위, ...) 메모리 관리 : 한정된 메로리를 여러 프로세스가 어떻게 나눠 사용할것인가 (고정분할, 가변분할, 가상메모리, ...) 프..

OS 2023.11.14

[Spring Boot] Testing (Kotest + Mockk)

일반적으로 Java + Spring 에서 Test 코드 작성은 Junit + Mockito를 이용한다. Junit 은 Java로 Test를 수행할수있게 해주는 Framework고 Mockito 는 Unit Test 수행시 Mocking 작업을 수행해주는 라이브러리다. 해당 프로젝트는 Kotlin으로 작업이므로 Junit -> Kotest Mockito -> Mockk 변경하여 작업을 진행했다. (사실 Kotlin에서도 Junit과 Mockito를 그대로 사용해도 되지만 Kotlin의 장점을 살리기 위해 대체하였다.) 테스트 종류 토비의 스프링 Test 파트에서는 저자는 모든 코드는 테스트 가능하다고했다. 하지만 엄격한 TDD 스타일로 테스트를 다 만들수는 없기에 나는 내가 작성한 비지니스 로직을 중점적으..

[Spring Boot] Exception Handling

Java 에서 오류는 Error, Exception이 존재한다. Error 는 StackOverflow 같이 시스템적인 문제인데, 이는 예상할수도 막을수도 없는 것들을 말한다. 그래서 이는 우리의 관심사가 아니다. Exception 우리가 눈여겨 봐야할것들은 Exception 이다. Java 에서는 특정한 Exception을 특별 관리한다. 그게 Checked Exception이다. Checked Exception 은 시스템 외부에서 발생하는 Exception이다. IOException, SQLException 같이 프로그래머의 잘못인 아닌, 시스템 밖에서 무언가 잘못되었을때 발생한다. 그래서 반드시 try-catch 문을 사용하거나 throws하여 compile 단계에서 오류를 관리해야한다. 그러나 예..

[Spring Boot] Custom Response (Http, Restful API)

해당 포스팅에서는 Response를 어떻게 처리할지 관한 포스팅이다. 먼저 계락적인 Http, Restful 에 관한 설명이다. HTTP 해당 프로젝트에서 기본적으로 응답은 HTTP 프로토콜을 기반으로 응답한다. HTTP 는 기본적으로 Header, Body, Method(요청), Path(요청), Version(요청) Status Code(응답) 으로 이루어져 있다. HTTP 자체만으로도 훌륭한 프로토콜이지만 현재의 웹에서는 Restful 아키텍처를 추가로 사용하여 데이터를 주고받는다. Restful API Restful 의 핵심은 Resource(자원)이다. Resource를 Method(GET, POST, PUT, DELETE, OPTION), URL(id 기반) 만으로 표현하는 방식이다. 다음은 ..