분류 전체보기 70

Mac OS 에서 LaunchAgents 사용해보기

맥북에서 crontab을 통해 주기적으로 실행을 시켜보고싶은게 생겨서 crontab을 등록하여 테스트를 해보았더니 잘 작동이 되지않아서 찾아보니 macOS에서는 crontab 보다는 LaunchAgents를 통해 crontab의 역할을 한다고 한다. 하고싶었던 작업은 매일 오전10시에 어떤 작업을 수행할 것 * crontab 이라면 아마 이렇게 crontab -e 로 등록해서 사용했을 것 같다. 0 7 * * * cd 실행할위치 && 실행하고싶은 명령어 사용방법 앞서 말했든 macOS에서는 crontab 보다는 LaunchAgents를 권장하고 있고 해당 방법은 간단하다 1. .plist 파일 작성: ~/Library/LaunchAgents/${너가수행할이름}.plist라는 파일을 생성 2. plist ..

[Knowledge] Thread 병렬로 처리하는 방법

1. thread 를 병렬로 처리하는 방법 동기화 병렬로 실행되는 스레드가 공유 리소스에 동시에 접근하려고 할 때, 무결성을 보장하기 위해 동기화 기법을 사용합니다. 동기화는 뮤텍스, 세마포어, 모니터 등의 다양한 기법이 존재 뮤텍스 상호배제를 뜻하며, 한 번의 하나의 스레드만 공유 리소스에 접근할 수 있도록 제한합니다. 뮤텍스를 사용하여 공유 리소스에 접근하는 코드 영역을 임계 영역으로 지정하면, 동시에 여러 스레드가 해당 영역을 실행하지 못하게 됩니다. 세마포어 공유 리소스에 동시에 접근할 수 있는 스레드의 수를 제한하는 동기화 기법. 세마포어는 카운터를 사용하여 특정 시점에 동시에 실행할 수 있는 스레드 수를 제한합니다. 데드락 여러 스레드가 동시에 실행될 떄, 데드락이 발생. 데드락은 스레드들이 ..

[ SQL ] 004. INDEX가 동작을 제대로 안하는 경우 #2

3. 결합인덱스 사용 시, 인덱스 구성의 첫인덱스가 where절의 첫 조건에 적용하지 않았을 경우 두 개 이상의 컬럼을 합쳐서 인덱스를 만들 때 결합인덱스라고 한다. 결합인덱스 컬럼 선택의 기준점은 where 절에서 and 조건으로 자주 사용되며, 각각 사용할때보다 두 개 이상의 컬럼이 결합될 때 분포도가 좋아지는 컬럼 ※ 분포도(Cardinality) : 해당 컬럼의 중복도가 적을 경우 분포도가 높고, 중복도가 높을경우 분포도가 낮다 흔히, 우리가 Table의 ID 는 중복되는 값이 없으므로 분포도가 높다고 할 수 있고, Name 같은 컬럼은 ID에 비해 중복되는 값이 많으므로 분포도가 높다고 할 수 있다. 테이블 조인을 위한 연결고리로 사용되는게 빈번한 컬럼 자주 정렬되는 컬럼인지 고려 쿼리 작성시 ..

IT Diary/# SQL 2023.01.11

[ SQL ] 003. INDEX가 동작을 제대로 안하는 경우 #1

실무를 하다보면 요즘에는 NoSQL, QueryDSL 등의 좋은 기술들로 인해 직접 복잡한 쿼리를 짤 경우는 많지는 않지만 쿼리를 만들고 나서 실행계획을 보면 내가 의도했던 인덱스를 타지 않은 경우들이 종종있다. 실제 쿼리를 보면 잘 짠거같은데 인덱스를 제대로 타지않는 경우에 대해서 공부를 하다보니 내가 미처 몰랐던 부분들이 많았던 것 같다. 인덱스가 제대로 동작하지 않는 케이스 1. 조건문에서 인덱스의 컬럼을 변형시킨 경우 이 경우는 정말 실수하기 좋은 케이스이다. 만약 내가 생년월일(birth_date) 라는 char형 컬럼을 인덱스로 만들었다고 가정했을 때, 아래와 같이 쿼리문을 짜면 조건문의 값이 int형이기 때문에 Stirng으로 만든 인덱스가 타지 않는다. select * from test_t..

IT Diary/# SQL 2023.01.04

[Spring] @PostConstruct 와 @PreDestroy

호출순서 생성자 호출 -> 의존성 주입 완료(@Autowired , @RequiredArgsConstructor ) -> @PostConstruct 생성자가 호출되었을 때, bean은 초기화 전이다.(DI가 이루어 지기 전) bean lifeCycle에서 오직 한 번만 수행된다. (여러 번 초기화 방지) @PostConstruct - 객체의 초기화 부분 - 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언한다. - @PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다. @PreDestroy - 마지막 소멸 단계 - 스프링 컨테이너에서 객체(빈)를 제거하기 전에 해야할 작업이 있다면 메소드위에 사용하는 어노테이션. - close() 하기 직전에 ..

IT Diary/# JAVA 2022.09.23

Message Queue 와 ApacheKafka

Message Queue 의 정의 메시지 큐(Message Queue)는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미한다. 여기서 메시지란 요청, 응답, 오류 메시지 혹은 단순한 정보 등의 작은 데이터가 될 수 있다. 큐는 여러 컴포넌트들이 데이터를 생성하고 또 저장하고 사용하는 과정에서 일종의 버퍼 역할을 수행함. 큐가 있음으로 producer과 consumer간의 속도가 다를 때, 둘 중 어느 한 컴포넌트가 네트워크에 연결되지 못한 상황 등에 대응이 가능..

@Transactional 어노테이션

트랜잭션의 정의 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 예시) A라는 사람이 B라는 사람에게 사과 1개를 주고 B가 그 사과를 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다. 만약 A는 사과를 건네 주었으나 B는 사과를 받지 못했다면 그 거래는 성립되지 않는다. 이처럼 A가 사과를 주는 행위와 B가 사과를 받는 행위는 별개로 분리될 수 없으며 하나의 거래내역으로 처리되어야 하는 단일 거래이다. 이런 거래의 최소 단위를 트랜잭션이라고 한다. 트랜잭션의 4가지 특성 1. Atomicity (원자성) 트랜잭션의 연산은 반드시 모두 반영되..

IT Diary/# JPA 2022.07.27

WEB, WAS 그리고 Servlet

웹서버(Web Server)의 정의 web 과 was 를 설명하기에 앞서 알아두면 좋을 것은 동적 웹페이지(Dynamic Pages) 와 정적 웹페이지(Static Pages) 의 개념을 먼저 알아두면 도움이 된다. 정적 웹페이지(Static Pages) 데이터베이스에서 정보를 가져오거나 별도의 서버 처리가 없어도 사용자들에게 보여줄 수 있는 페이지 모든 사용자에게 항상 동일한 페이지를 보여줌 (정적인 데이터 : html, css , image 등등.. ) 동적 웹페이지(Dynamic Pages) 동적페이지란 요청에 대해서 각기 다른 내용을 보여준다. 사용자(클라이언트)가 URL 을 통해 서버에 웹 페이지를 요청했을 때, 서버는 사용자에 맞는 HTML 문서를 생성하여 사용자에게 응답 클라이언트에 요청에 ..

IT Diary/# JAVA 2022.05.25