본문 바로가기

전체 글97

[Spring] 템플릿 콜백 패턴 콜백이란? 프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. (위키백과 참고) 자바에서 콜백 자바 언어에서 콜백 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다. 자바8부터는 람다를 사용할 수 있다. 자바 8 이전에는 보통 하나의 메소드를 가진 인터페이스를 구현하고, 주로 익명 내부 클래스를 사용했다. 최근에는 주로 람다를 사용한다 템플릿 콜백 패턴 템플릿 콜백 패턴 스프링에서는 ContextV2 와 같은 방식의 전략 패턴을 템플릿 콜백 패턴이라 한다. 전략 패턴에서 Contex.. 2022. 11. 11.
데이터베이스별 랜덤으로 레코드 가져오기 쿼리 정리 Select a random row with MySQL:SELECT column FROM tableORDER BY RAND()LIMIT   Select a random row with PostgreSQL:SELECT column FROM tableORDER BY RANDOM()LIMIT 1 Select a random row with Microsoft SQL Server:SELECT TOP 1 column FROM tableORDER BY NEWID() Select a random row with IBM DB2SELECT column, RAND() as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLY Select a random record with Oracl.. 2022. 11. 9.
[MySql] 효과적인 인덱스 설계 인덱스(index)는 즉 색인이다테이블의 동작속도(조회를) 높여주는 자료구조이다. 인덱스로 데이터의 위치를 색인 처럼 빠르게 찾아주는 역할이다.select를 빠르게 하는 대신 update, delete, insert를 희생한다. 물론 update, delete 라고 다 희생되는게 아니라 update, delete를 하기 위해 해당 데이터를 조회하는 인덱스가 있으면 빠르게 된다.만약 인덱스를 사용하는 테이블에서는 update, delete를 하게 되면 가능한 인덱스로 지정된 컬럼을기준으로 진행하는게 좋다테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍.. 2022. 11. 7.
[Spring] 동시성 문제(쓰레드 로컬) 동시성 문제는 지역 변수에서는 발생하지 않는다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당된다. > 동시성 문제가 발생하는 곳은 같은 인스턴스의 필드(주로 싱글톤에서 자주 발생), 또는 static 같은 공용 필드에 접근할 때 발생한다. > 동시성 문제는 값을 읽기만 하면 발생하지 않는다. 어디선가 값을 변경하기 때문에 발생한다. 이럴 때 사용하는 것이 바로 쓰레드 로컬이다 ThreadLocal 예제 소스 @Slf4j public class ThreadLocalService { private ThreadLocal nameStore = new ThreadLocal(); public String logic(String name) { log.info("저장 name={} -> nameStore={}.. 2022. 11. 5.
PostgreSQL 배열 함수 array_agg, array_to_string, unnest, array_append 먼저 가상 테이블을 생성하겠습니다. with make_array as ( select unnest(array['고기', '고기', '고기', '채소', '채소']) as col1 , unnest(array['삼겹살', '항정살', '가브리살', '상추', '명이나물']) as col2 ) select col1 ,col2 from make_array; unnest -> 인수로 입력받은 array를 행집합으로 반환 이런 결과가 나온다. col1 col2 고기 삼겹살 고기 항정살 고기 가브리살 채소 상추 채소 명이나물 with make_array as ( select unnest(array['고기', '고기', '고기', '채소', '채소']) as col1 , unnest(array['삼겹살', '항정살',.. 2022. 11. 4.
자바스크립트 함수 선언 6가지 방법 1. named function declaration (명명 함수 선언) function hello() { // ... } 현재 내가 재직하는 회사에서 제일 많이 사용하는 방법이자 가장 대중적임 호이스팅이 되기 때문에 이 함수는 어느 스코프에서든 호출 할수 있음 2. anonymous function expression (익명 함수 표현) var hello = function () { //... } hello.name // > "hello" hello // > ƒ () { // //... // } 이름이 없는 함수를 변수에 담은 방식이다. 이름이 없는 함수긴 한데, 자바스크립트 엔진이 자동으로 이름을 변수명으로 추정하여 넣는다. 변수 할당은 호이스팅 되지 않으므로, 할당 된 이후에만 실행 가능하다. 3... 2022. 11. 2.