[OS] User Thread vs Kernel Thread
·
Low Level/OS
User Thread 사용자 영역의 스레드로 개발자가 API를 사용하여 직접 관리할 수 있는 쓰레드다. 대표적인 예로는 다음과 같은 것들이 있다. Java의 Virtual Thread C의 Pthread Go의 goroutine Kernel Thread 운영체제에서 관리하는 쓰레드로 OS Thread 라고도 한다. Relatinship between User thread and Kernel Thread User thread - OS thread 는 Many-to-One, One-to-One, Many-to-Many 로 나뉜다. Many-to-One 장점 User thread 생성을 개발자가 원하는 만큼 값싼 비용으로 할 수 있다. User thread 간 Kernel 레벨의 Context Switchin..
[Java] Generic vs WildCard
·
JVM/Java
🎯 Goals WildCard 가 왜 필요한지 안다. 언제 Generic 을 쓸지 안다. 언제 wildcard 를 쓸지 안다. Java 의 다양한 컬렉션을 사용하거나 라이브러리를 만들다보면 제네릭을 자주 사용하게 된다. 이 때 `?` 로 표현되는 와일드카드도 심심치 않게 보게 되는데, 이 두녀석의 역할과 용례를 알아보자. WildCard 예제: 와일드 카드는 왜 나왔나? class ShapeTest { void drawAll(List shapeList) { for (Shape shape : shapeList) { shape.draw(); } } @DisplayName("Could not print all shapes with collection type hierarchy") @Test void drawA..
curl 파일 다운로드시 Zero bytes (빈 파일) 생성 이슈
·
기타
문제 상황 (1) Can't be opened becaues Apple cannot check it for malicious software. 웹브라우저로 protobuffer binary 파일을 다운받는다. https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protoc-25.1-osx-universal_binary.zip Can't be opened becaues Apple cannot check it for malicious software. 웹 브라우저로 다운로드 받은 Binary 실행 파일은 그냥 열 수 없다. Apple 은 어떤 실행파일이든 Notarization 이라고하는 과정을 거친 파일만 웹에 게시되고, 다운로드하여 실..
[객체지향] 잘못된 DRY 원칙 적용
·
JVM/Java
거짓 중복 발생 사례 상품의 정가를 나타내는 Regular Price 를 정의해봅시다. public class RegularPrice { private static final int MIN_AMOUNT = 0; private final int value; RegularPrice(final int amount) { if (amount < MIN_AMOUNT) throw new IllegalArgumentException("가격은 0원 이상이어야 합니다."); this.value = amount; } } 일반 할인, 여름 할인을 책임지는 클래스를 정의해봅시다. @Getter public class RegularDiscountedPrice { private static final int MIN_AMOUNT =..
[Redis] CROSSSLOT Keys in request don't hash to the same slot
·
DataBase/Error
환경 Redis Master 3대 + Slave 3대 클러스터 모드 문제 상황 특정 클러스터 노드에 multi key 명령어 사용시 에러 발생 DEL id:1 id:2 id:3 id:4 id:5 특정 노드에서 id:1 ~ id:5 에 해당하는 슬롯을 가지고 있다 하더라도 '슬롯'까지 같아야만함. 해결책 tag 사용 key에 {} 로 태그를 지정하면 특정 슬롯에 저장됨을 보장할 수 있다. group by slot slot 별로 키를 담아서 해당 슬롯을 가지고있는 노드로부터 multi key 연산을 실행한다. tistory 테마 적용이 깨짐에 따라 medium 에 글을 기고했다. https://medium.com/@mbh023/redis-multi-key-command-in-cluster-mode-feat-..
소프트웨어 '설계'는 왜 해야하는가
·
생각 뭉치
좋은 코드란? 변경 용이성, 유지 보수성을 갖춘 코드다. 읽기 좋은 코드가 성능 개선된 코드보다 낫다. Legacy 코드는 곧 변경이 어려운, 유지 보수하기 어려운 코드다. 응집도 클래스의 응집도가 낮으면 API 변경 시 수정 누락으로 버그가 발생할 수 있다. (거대한 클래스를 만들고 그 클래스의 메소드 변경시 해당 클래스에 의존하는 다른 모듈에서 에러가 발생할 수 있다.) 가독성 개발자는 코드를 짜는 시간보다 읽는 시간이 길다. 가독성이 떨어진단 얘기는 많은 시간을 이해하는데 소모하게 한다는 것이다. 즉, 생산성 저하가 발생한다. 나무꾼의 딜레마 한 나무꾼이 나무를 베느라 낑낑대고 있었다. 지나가는 행인이 말했다. "도끼를 좀 갈고 베야하지 않을까요?" 나무꾼은 대답했다. "급해서 도끼를 갈 시간이 없..