전체 글

github: https://github.com/belljun3395 email: belljun3395@gmail.com
· 개발
블로킹과 논블로킹함수A가 함수B를 호출할 때, 함수B를 호출함과 동시에 운영 체제 함수A가 실행 중인 스레드나 프로세스를 일시 중지시킨다며 함수B에 대한 호출 방식은 블로킹 방식이며, 그렇지 않다면 논블로킹 방식이다. 블로킹의 핵심 문제: 입출력일반적으로 블로킹은 대부분 입출력과 관련이 있다. 프로그램, 스레드 또는 프로세스가 입출력 작업을 할 때는 우리 스레드에서 입출력 과정이 실행되는 동안 CPU 제어권을 다른 스레드에 넘겨 다른 작업을 할 수 있도록 해야 한다. 이후 입출력 작업이 완료되면 다시 CPU 제어권을 우리 스레드 또는 프로세스에 넘겨받아 계속 다음 작업을 실행할 수 있도록 한다. 이 CPU 제어권을 상실했다가 되찾는 시간 동안 스레드나 프로세스는 블로킹되어 일시 중지 된다. 논블로킹과 비..
· 자바
프로퍼티 테스트란?일반적으로 우리가 작성하는 테스트는 '예제 기반 테스트'입니다. "입력값으로 1과 2를 넣으면 결과값으로 3이 나와야 한다"처럼 특정 예시에 대한 결과만 확인하는 방식입니다. 하지만 이런 방식은 개발자가 미처 생각하지 못한 수많은 잠재적 입력값이나 엣지 케이스를 놓치기 쉽습니다. 프로퍼티 테스트는 이러한 문제를 해결하기 위해 등장했습니다. 개별 예제를 일일이 확인하는 대신, 어떤 입력값이든 항상 참이어야 하는 '속성(Property)' 또는 '규칙'을 정의합니다. 그러면 테스트 프레임워크가 수백, 수천 개의 무작위 데이터를 자동으로 생성하여 그 규칙을 깨뜨리는 예외 케이스를 찾으려고 시도합니다. 이를 통해 우리는 예상치 못한 버그를 발견하고 코드의 안정성을 크게 높일 수 있습니다. 기본..
· 스프링
문제 정의: O(n×m) 시간 복잡도의 매칭 로직TableMetaDataContext는 JDBC INSERT 구문을 간편하게 처리하도록 돕는 클래스입니다. 내부의 matchInParameterValuesWithInsertColumns() 메서드는 테이블 컬럼과 사용자가 전달한 파라미터 Map을 연결하는 역할을 수행합니다. 이 과정에서 대소문자를 구분하지 않는(case-insensitive) 매칭을 지원하기 위해 중첩된 반복문을 사용하는데, 이 부분이 성능 저하의 원인이 될 수 있다고 생각하였습니다. 기존 코드// n = 컬럼 수, m = 파라미터 수for (String column : this.tableColumns) { // O(n) Object value = inParameters.get(col..
· 자바
이슈 3848: Optional을 위한 hasValueMatching 메서드 추가ObjectAssert는 Predicate를 인자로 받는 matches() 메서드를 제공합니다. Optional 값에 대해서도 boolean을 반환하는 유사한 메서드가 있다면 유용할 것입니다. // ExampleOptional optional = …assertThat(optional).hasValueMatching(Person::isAdult);또한, 기존 matches() 메서드처럼 설명을 인자로 받는 오버로드 메서드를 추가하는 것도 좋은 개선점이 될 것입니다. ObjectAssert의 한계ObjectAssert의 matches() 메서드를 Optional에 사용하려면, 아래와 같이 isPresent()를 통해 값이 존재하..
· 개발
일반 함수에서 코루틴으로코루틴과 일반 함수에 형식적인 차이는 없다. 하지만 코루틴에는 스레드와 매우 유사한 기능인 일시 중지와 재개 기능이 있다. def func(): print("A") 일시 중지 및 반환 (멈춰라) print("B") 일시 중지 및 반환 (멈춰라) print("C")func 함수가 코루틴에서 실행 중이라면, func 함수는 print("A") 실행 후 '일시 중지 및 반환' 코드와 함께 호출한 함수로 반환된다. return 명령어를 작성해도 분명히 반환되기는 하지만 return 명령어 이후 코드를 실행할 방법이 없다.코루틴은 자신의 실행 상태를 저장할 수 있기 때문에 코루틴이 반환된 후에도 계속 호출이 가능하며, 더군다나 마지막으로 일시 중지된 지점에서 다시..
· 개발
스레드 전용 리소스상태 변화 관점에서 보면 스레드는 사실 함수 실행이다. CPU는 진입 함수에서 실행을 시작하여 하나의 실행 흐름을 생성하는데, 이 실행 흐름에 인위적으로 스레드라는 이름을 붙인 것에 불과하다. 함수의 실행 시간 정보는 스택 영역을 구성하는 스택 프레임에 저장된다. 이때 스택 프레임에는 함수의 반환값, 다른 함수를 호출할 때 전달되는 매개변수, 함수 내에서 사용되는 지역 변수와 레지스터 정보가 저장된다. 다음에 실행될 명령어 주소를 저장하는 PC 레지스터, 스레드 스택 영역에서 스택 상단 위치를 저장하는 스택 포인터 등 CPU가 기계 명령어를 실행할 때 내부 레지스터 값도 스레드의 현재 실행 상태에 속한다. 이런 레지스터 정보도 역시 스레드 전용으로, 다른 스레드에서 이런 레지스터 정보에..
belljun
belljundev