[Linux] 심볼릭 링크 (Symbolic link) 설정하기

1. 심볼릭 링크 (Symbolic link)란? 링크를 걸어 원본 파일을 직접 사용하는 것과 같은 효과를 낸다. 특정 폴더에 링크를 걸어 NAS, library 원본 파일을 사용하거나 톰캣 빌듯이 상위경로의 파일을 사용하고자 할 때 사용한다. 심볼릭 링크는 단순히 원본파일을 가리키도록 링크만 연결시켜둔 것으로 원본파일을 가리키기만 하고 있으므로 원본파일의 크기와 무관하며 원본파일이 삭제되어 존재하지 않을 경우에 빨간색으로 링크파일의 원본파일이 없다는 것을 알려준다. 2. 심볼릭 링크 설정하기 ln -s [대상 원본 파일] [새로 만들 파일 이름] -- 파일을 생성 후 링크를 거는 것이 아니라 새로 만들 파일/directory가 없는 채로 링크를 생성을 해야한다. 2-1. ln 옵션 s : 심볼릭링크 생성한다. b : 링크파일 생성 시에 대상파일이 이미 존재하면 백업파일을 만든 후에 링크파일을 생성한다. d : 디렉토리에 대한 하드링크파일생성을 가능하게 한다. f : 대상파일이 존재할 경우에 대상파일을 지우고 링크파일을 생성한다. i : 대상파일이 존재할 경우에 대상파일을 지울건인가를 확인요청한다. t : 링크파일을 생성할 디렉토리를 지정한다. 2-2. 심볼릭 링크 생성(directory) ...

10월 9, 2023 · Jun Kang

[PostgreSQL] MVCC (Multi-Version Concurrency Control)

1. MVCC란? 동시성 제어를 위해 lock을 사용하는 대부분의 다른 데이터베이스 시스템과 달리 Postgres는 다중 버전 모델(multiversion model)을 사용하여 데이터 일관성을 유지한다. 각 트랜잭션이 데이터베이스를 쿼리 하는 동안 데이터의 현재 상태에 관계없이 얼마 전의 데이터 스냅샷을 볼 수 있음을 의미한다. 데이터를 쿼리 하기 위해 트랜잭션을 만들었다면 해당 Transaction은 데이터의 스냅샷을 보고 있는 것이다. 동일한 행에 서로 다른 트랜잭션이 동시에 업데이트를 시도할 때, 일관성 없는 데이터가 조회되지 않도록 트랜잭션을 보호하여 각 데이터베이스 세션에 대한 트랜잭션 격리를 제공한다. Multiversion과 Lock model의 주요 차이점은 MVCC에서 데이터 read를 위해 획득한 lock과 데이터 쓰기를 위해 획득한 lock이 충돌하지 않는다는 것이다. (따라서 read와 write는 서로 block 하지 않는다.) 이러한 방식을 통해서 Reading 하는 작업에 대해서 Lock을 걸지 않기에 높은 성능을 얻을 수 있게 된다. ...

10월 6, 2023 · Jun Kang

[PostgreSQL] 미사용 인덱스(INDEX) 찾기 및 삭제, 성능향상

1. 인덱스(INDEX) 상세 개념 Postgresql 인덱스(INDEX)개념 및 생성, 삭제, 분석, 설계 방법 2. 미사용 인덱스 간단히 말해, 인덱스는 지정 컬럼에 매핑된 정보를 별도로 저장하고 있다. 보통 플랜 확인을 통해 효율적으로 인덱스를 추가하여 쿼리 최적화를 진행하게 된다. 오래되고 변경이 잦은 어플리케이션일수록 미사용 인덱스는 늘어나고, 인덱스가 사용되지 않는 경우를 매번 모니터링하여 삭제하는 것은 힘든 일이다. 하지만 불필요 인덱스는 디비 성능저하 및 vacuum 코스트를 증가시키기에, 최적화된 인덱스 생성만큼 최적화된 인덱스 삭제도 중요하다. ...

10월 6, 2023 · Jun Kang

ERROR: text search configuration name \"english\" must be schema-qualified

1. 발생 해당 에러는 Postgresql에서 Full Text Search를 위해 tsvector 컬럼을 업데이트할 때 발생한다. -- 특정 컬럼을 ts_vector로 변경하여 업데이트 UPDATE TABLE SET tsvec_words = to_tsvector('english',COLUMN); 2. 원인 해당 컬럼 (혹은 다른 컬럼) 에 테이블 row 업데이트/인서트 시 ts_vector를 자동으로 업데이트하는 trigger가 걸려 있기 때문에 업데이트 간 충돌이 생겨 발생한다. 3. 해결 트러거를 삭제 후 데이터 업데이트 후에 트리거를 재설정하면 해결된다. 3-1. 트리거 삭제 drop trigger TABLE_TRGGER on TABLE; 3-2. 트리거 생성 CREATE TRIGGER TABLE_TRIGGER BEFORE INSERT OR UPDATE ON TABLE FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(tsvec_words, 'english',COLUMN);

10월 5, 2023 · Jun Kang

[PostgreSQL] 문자열내 중복 공백, 단어 제거

1. 중복 공백 제거 특정 문자열에 대해서 중복 공백 제거를 하고 싶다면 postgresql 정규식을 사용해서 가능하다. (공백 외에 단일 문자에 대한 중복제거도 동일한 방법으로 가능하다.) select regexp_replace(name, ' +', ' ', 'g') from TABLE; -- 'g' 옵션을 제거할 경우 최초 건에 대에서만 변경 2. 중복 단어 제거 컬럼 단위 중복제거는 distinct, group by를 통해 쉽게 가능하지만, 컬럼 내 문자열의 중복 단어 제거의 경우 다음과 같다. (쉼표 기준으로 컬럼을 분리, 중복을 제거한 후 다시 연결) ...

10월 4, 2023 · Jun Kang