yunki Kim Blog

「Do What You Love」

Querydsl 구조와 mysql 무작위 데이터 조회하기

  프로젝트에서 홈 모듈 도메인을 맡아서 기능을 구현하던 도중 다음과 같이 native query를 사용한 코드를 발견했습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Query(value =      ...

Item 31. 한정적 와일드카드를 사용해 API 유연성을 높이라

  매개변수화 타입은 불공변(invariant)이다. 즉, 서로 다른 타입 Type1과 Type2가 있을 때 List <Type1>과 List <Type2>는 서로의 상위 타입도 하위 타입도 아니다. 예컨대 List <String>은 List <Object>의 하위 타입이 아니다. 이는 List &l...

Item 26. 로 타입은 사용하지 말라

  클래스와 인터페이스 선언에 타입 매개변수(type parameter)를 쓰면, 이를 각가 제네릭 클래스와 제네릭 인터페이스라 한다. 이 둘을 통틀어 제네릭 타입(generic type)이라 한다.   각 제네릭 타입은 매개변수화 타입(parameterized type)을 정의한다. 예컨대 List <String>은 원소...

Chapter3-1. 프로세스의 개요

  OS에서 프로세스는 하나의 작업 단위다. 사용자가 프로그램을 실행하면 프로세스가 된다. 폰노이만 구조에서 프로그램을 실행한다는 것은 해당 코드가 메모리에 올라와 작업이 진행된다는 의미다. 프로그램은 저장장치에 저장되어 있는 정적 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태다. 프로그램에서 프로세스로의 전환   프...

Chapter 3-2. 프로세스 제어 블록과 문맥 교환

프로세스 제어 블록   PCB는 다음과 같은 구조를 가진다. 포인터   PCB를 연결해 준비 상태나 대기 상태의 큐를 구현할 때 포인터를 사용한다. 대기 상태에서 빠르게 프로세스를 탐색하기 위해 같은 입출력을 요구하는 프로세스들끼리만 하나의 대기 큐에 모아놓는다. 이후에 입출력 매니저로 부터 인터럽트가 도착하면 PCB를 대기 큐에...

Chapter 8. 명명을 잘 하는 방법

  좋은 이름을 사용하면 LTM을 활성화하여 코드 도메인에 대해 이미 알고 있는 관련 정보를 찾을 수 있다. 반면, 나쁜 이름은 코드에 대한 잘못된 추측을 하게 하고 오개념을 유발한다. 이름이 중요한 이유   클래스나 자료구조가 수행하는 모든 작업을 모호하지 않은 하나의 단어로 표현하는 것은 쉽지 않은 일이다. 예루살렘 히브리 대학의...

Chapter 7. 생각의 버그

  버그는 오타와 같이 일을 엉성하게 처리했을 때 발생하기도 하지만, 많은 경우 생각의 착오로 인해 발생한다. 왜 두 번째 프로그래밍 언어가 첫 번째보다 쉬울까?   이미 배운 지식은 다른 영역에서도 유용하다. 이를 전이(transfer)라 한다. 지식 전달은 이미 알고 있는 정보가 새로운 것에 도움이 될 때 일어난다.  &...

Chapter 6. 코딩 문제 해결을 더 잘하려면

  문제에 대해 다양한 해결책을 고려할 때, 각각 저마다의 장점을 가지고 있기에 해결책을 결정하기 어렵다. 여러 소프트웨어 설계에 관한 결정을 할 때 도움이 되는 두 가지 프레임워크에 대해 다뤄보자.    먼저 문제 해결과 프로그래밍 작업 도중 두뇌가 생성하는 심적 표상(mental representation)을 살펴보자. ...

쿠버네티스 시작하기

  쿠버네티스를 검색하면 "쿠버네티스는 컨테이너를 오케스트레이션 하는 도구"라고 정의하고 있는 글을 심심치 않게 볼 수 있다. 하지만, 컨테이너가 뭔지, 오케스트레이션이 뭔지를 정확히 알지 못하기 때문에 저 문장 자체를 명확히 이해하지 못한다. 우선 저 문장을 이해하기 위해 필요한 개념들을 살펴보자.   쿠버네티스를 이해하는 대 필요...

JVM 겉핥기

  JVM의 기술 스택의 구조를 이해해 보자. JVM의 전반적인 구조는 다음과 같다. 인터프리팅과 클래스로딩   JVM은 스택 기반 해석 머신이다. 물리적인 레지스터는 없지만, 일부 결과를 실행 스택에 보관하고 맨 위의 값을 가져와 계산한다. JVM 인터프리터의 기본 로직은, 평가 스택을 이용해 중간값들을 담아두고, 가장 마지막에...