728x90

전체 글 428

[RAG] PostgreSQL 한국어 전문검색 MeCab 형태소 분석

부제: "약"을 검색하면 "약을"이 안 걸리던 문제한국어 문서 검색을 붙이는데, 기본 전문검색이 영 엉뚱하게 걸렸다.결국 언어 특성에 맞는 토크나이저를 고르는 게 일의 절반이었다.문제PostgreSQL 기본 전문검색(tsvector, simple 토크나이저)은 공백으로 단어를 나눈다.영어는 단어 사이가 공백이라 이게 통하는데, 한국어는 다르다."오늘 약을 먹었어요"공백 토큰화 → ["오늘", "약을", "먹었어요"]사용자가 "약"을 검색하면 약을이라는 덩어리와는 안 맞는다.한국어는 어근에 조사·어미가 달라붙는 구조라 공백으로 자르면 "약 + 을"이 통째로 하나가 돼버린다.영어식 어근 추출(stemming)도 답이 아니다. 그건 접사가 떨어지는 영어 형태에나 맞는 방식이라 결합형인 한국어엔 형태소 분석이 ..

AI 2026.07.08

[리눅스] 2> 2>&1 에러 출력 리다이렉션

부제: 에러 출력을 따로 저장하거나 버리기cmd 2> err.txt # 에러만 파일로cmd > out.txt 2>&1 # 정상+에러를 같은 파일로cmd 2>/dev/null # 에러 버리기$ ls 없는파일 2> err.txt$ cat err.txtls: cannot access '없는파일': No such file or directory명령어의 정상 출력(1번)과 에러 출력(2번)은 흐르는 통로가 다르다.2>는 에러만 따로 보내고, 2>&1은 에러를 정상 출력 쪽으로 합친다. 2>/dev/null은 에러를 아예 버릴 때 쓴다.순서가 중요하다. > out.txt 2>&1처럼 >가 먼저 와야 둘 다 파일로 가고, 순서를 바꾸면 에러는 터미널에 남는다.이렇게도 쓴다권한 ..

명령어/Linux 2026.07.08

[리눅스] < 입력 리다이렉션 파일을 입력으로

부제: 파일을 명령어의 입력으로 넣기sort $ sort >가 명령어의 출력을 파일로 보냈다면, 는 반대로 파일을 명령어의 입력으로 넣는다.사실 sort names.txt처럼 파일명을 바로 줘도 되는 명령어가 많아서, 는 파일명 인자를 안 받는 명령어에서 특히 쓸모가 있다.이렇게도 쓴다SQL 덤프 파일을 DB에 그대로 흘려넣는다.psql mydb 파일을 한 줄씩 읽어 반복 처리한다.while read h; do ping -c1 "$h"; done 파일명 인자를 안 받는 tr 같은 필터에 파일을 먹인다.tr 'a-z' 'A-Z' 명령 출력 두 개를 파일처럼 만들어 비교한다( 입력 치환 — 의 확장형).diff

명령어/Linux 2026.07.08

[리눅스] grep 문자열 검색

부제: 파일에서 원하는 문자열이 든 줄만 찾기grep error app.log # 'error'가 든 줄만grep -i error app.log # 대소문자 무시grep -rn error . # 현재 폴더 전체 재귀 + 줄번호$ grep -n error app.log14:2026-06-26 error: connection refused88:2026-06-26 error: timeout-i는 대소문자 무시, -n은 줄 번호, -r은 하위 폴더까지 재귀, -v는 그 단어가 없는 줄만.파이프와도 단짝이다. ps aux | grep nginx처럼 다른 명령어 출력에서 원하는 줄만 뽑을 때 많이 쓴다.이렇게도 쓴다매칭된 줄의 앞뒤 문맥까지 같이 본다(앞 2줄, 뒤 2줄).grep -..

명령어/Linux 2026.07.08

[리눅스] chmod 파일 권한 변경

부제: 파일 권한을 숫자·기호로 바꾸기chmod 755 script.sh # 숫자 방식chmod +x script.sh # 실행 권한만 추가$ ls -l script.sh-rw-r--r-- 1 user user 120 Jun 26 14:00 script.sh$ chmod +x script.sh$ ls -l script.sh-rwxr-xr-x 1 user user 120 Jun 26 14:00 script.sh숫자는 읽기 r=4, 쓰기 w=2, 실행 x=1을 더한 값이다. 755면 소유자 rwx(7), 그룹·기타 r-x(5).실행 권한만 붙이고 싶을 땐 +x가 간편하다. 스크립트를 만들고 나서 자주 하는 작업이다.이렇게도 쓴다폴더 아래 전부에 재귀로 적용한다.chmod -R 755 publ..

명령어/Linux 2026.07.08

[리눅스] cat 파일 내용 출력

부제: 파일 내용을 화면에 뿌리기cat file.txt # 파일 내용 출력cat a.txt b.txt # 여러 파일 이어서$ cat hello.txt첫 번째 줄두 번째 줄짧은 파일을 빠르게 확인할 때 쓴다.긴 파일은 화면을 순식간에 지나가버리니 그럴 땐 less가 낫다. 파일을 이어 붙여 출력하거나, >와 함께 새 파일로 합칠 때도 쓴다.이렇게도 쓴다줄 번호를 붙여서 본다.cat -n app.py 두 파일을 합쳐 새 파일로 만든다.cat part1.txt part2.txt > all.txt 탭(^I)·줄끝($) 같은 안 보이는 문자를 드러낸다. 설정 파일이 이상하게 안 먹힐 때 쓴다.cat -A config.yaml 에디터 없이 터미널에서 즉석으로 파일을 만든다. 입력 끝나면 Ct..

명령어/Linux 2026.07.08

[리눅스] mkdir 디렉터리 생성

부제: 폴더 만들기, 중간 경로까지 한 번에mkdir logs # 디렉터리 생성mkdir -p a/b/c # 중간 경로까지 한 번에$ mkdir -p a/b/c$ find aaa/ba/b/c-p는 중간 디렉터리(a, a/b)가 없어도 한 번에 다 만들어준다.이미 있는 디렉터리를 다시 만들어도 -p면 에러 없이 넘어간다. 스크립트에서 자주 쓰는 이유다.이렇게도 쓴다프로젝트 뼈대를 한 번에 만든다(중괄호 확장).mkdir -p app/{src,tests,docs} 만들면서 권한까지 정한다.mkdir -m 700 private 뭘 만들었는지 확인하면서 만든다.mkdir -pv a/b/c 오늘 날짜 이름의 백업 폴더를 만든다(date 조합).mkdir -p backup/$(date +%F)..

명령어/Linux 2026.07.08

[리눅스] rm 파일 디렉터리 삭제

부제: 파일과 폴더를 지우기rm file.txt # 파일 삭제rm -r dir/ # 디렉터리 통째로$ lsdata file.txt notes.md$ rm file.txt$ lsdata notes.md휴지통이 없다. 지우면 끝이다.디렉터리는 -r을 붙인다. 확인받고 지우려면 -i. rm -rf는 되묻지 않고 다 지워버리니, 경로를 꼭 확인하고 쓴다.이렇게도 쓴다하나씩 물어보면서 지운다.rm -i *.txt -로 시작하는 이상한 파일명을 지운다(-- 뒤는 옵션으로 안 읽는다).rm -- -tmp.txt 뭘 지웠는지 목록을 보면서 지운다.rm -v old/*.log 30일 넘게 안 바뀐 로그만 골라서 지운다(find 조합 — 로그 청소 단골).find . -name "*.log..

명령어/Linux 2026.07.08

[리눅스] mv 파일 이동 이름 변경

부제: 파일을 옮기거나 이름을 바꾸기mv old.txt new.txt # 이름 변경mv file.txt logs/ # 다른 폴더로 이동$ mv old.txt new.txt$ lsnew.txt같은 폴더 안에서 쓰면 이름 변경, 다른 폴더를 대상으로 하면 이동이다.cp와 달리 원본이 남지 않는다. 옮기면서 이름까지 한 번에 바꿀 수도 있다.이렇게도 쓴다파일명 뒤에 .old만 붙여 치워둔다(중괄호 확장).mv app.log{,.old} 대상에 같은 이름이 있으면 덮어쓰지 않는다.mv -n file.txt dir/ 로그 파일만 한꺼번에 몰아넣는다.mv *.log logs/ 덮어쓰게 되는 파일은 이름 뒤에 ~를 붙여 백업해 두고 옮긴다.mv -b new.conf /etc/app/ 폴더 자체가 ..

명령어/Linux 2026.07.08

[리눅스] cp 파일 디렉터리 복사

부제: 파일과 폴더를 복사하기cp file.txt backup.txt # 파일 복사cp -r src/ dest/ # 디렉터리 통째로$ cp file.txt backup.txt$ lsbackup.txt file.txt성공하면 아무 말도 없다. 잘됐나 궁금하면 ls로 확인한다.디렉터리는 -r(재귀)을 붙여야 한다. 덮어쓰기 전에 물어보게 하려면 -i를 쓴다.이렇게도 쓴다설정 파일을 고치기 전에 같은 이름에 .bak만 붙여 백업한다(중괄호 확장).cp nginx.conf{,.bak} 권한·수정시간을 그대로 보존해 복사한다. 그냥 복사하면 수정시간이 지금으로 바뀐다.cp -p config.env dest/ 디렉터리 통째로, 권한·시간·심볼릭 링크까지 전부 보존한다. -a가 -r과 ..

명령어/Linux 2026.07.08
728x90