- AI와 빅데이터로 건설업계의 디지털 혁신을 이끄는 (주)산군의 Jun Kang입니다. 대규모 데이터 처리, DB 최적화, 확장 가능한 시스템 구축에 관심이 많으며, 개발팀의 건강하고 지속 가능한 성장 문화를 문화를 만들어가고 있습니다.
- 주요 관심사: Backend Development, Cloud Computing, DevOps, Database, AI, 개발 문화 형성
PostgreSQL POSITION 함수로 문자열 내 위치 찾기
PostgreSQL에서 문자열 처리 작업을 하다 보면, 특정 단어가 문자열 안에 포함되어 있는지 또는 어느 위치에 있는지를 알아야 할 때가 있습니다. 이럴 때 유용하게 쓸 수 있는 함수가 바로 POSITION() 입니다. 1. POSITION 함수란? POSITION() 함수는 문자열 안에서 부분 문자열(substring)의 첫 번째 위치를 반환합니다. MySQL의 LOCATE(), Oracle의 INSTR()와 비슷한 역할을 합니다. `POSITION(substring IN string)` 리턴값: 부분 문자열이 시작하는 위치 (1부터 시작) 찾지 못하면: 0 반환 2. 기본 예제 SELECT POSITION('abc' IN '123abc456'); -- 4 SELECT POSITION('zzz' IN '123abc456'); -- 0 'abc'는 네 번째 문자에서 시작하므로 4를 반환합니다. 'zzz'는 존재하지 않기 때문에 0이 나옵니다. ...
[Spring] 스프링부트와 HikariCP를 활용한 Connection Pool 설정 및 최적화
몇 년 전 운영 프로젝트 설정 시 자세하게 봤던 내용이지만, 트래픽이 대폭 증가하고, DBMS에 연결된 프로젝트와 모듈이 늘어남에 따라 재설정을 위해 개념을 다시 정리하게 되었다. 1. 기본적인 데이터베이스 연결과정 DB Connection 열기- 데이터베이스 드라이버를 사용하여 데이터베이스 서버와의 연결 TCP 소켓 열기 - 데이터베이스 전송을 위해 TCP 소켓을 생성하고 데이터베이스 서버와 통신채널을 설정 데이터 통신 수행 - 생성된 소켓을 통해 SQL 쿼리를 전송하고 데이터를 Read / Write DB연결 닫기 - 데이터 통신이 완료되면 데이터베이스와의 연결을 종료 TCP 소켓 닫기 - 사용한 TCP 소켓을 닫아 통신 채널 해제 웹 어플리케이션은 클라이언트의 HTTP 요청이 들어오면 스레드를 생성한다. 각 요청 시 DB서버로부터 데이터를 얻기 위해서 DB에 지속적으로 접근하는 작업이 필요하다. 스프링부트를 예로 들면, DB에 직접 연결하는 경우, JDBC 드라이버는 애플리케이션 시작 시 한번 로드되고, 사용자 요청 시마다 새로운 connection 객체 생성하여 데이터베이스에 연결한 후 종료되어야 한다. 이렇게 사용자 요청 시 매번 connection 객체를 생성/연결/종료해야 한다면 굉장히 비효율적이다. ...
[LINUX] SFTP 초기화 오류 : Failed to connect and initialize SSH connection. Message: [Failed to connect SFTP channel
jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect SFTP channel. Message [4: Received message is too long: 458961709]] 1. 문제상황 기존에 잘 작동하던 SFTP를 활용한 CI/CD가 갑자기 작동하지 않는다. 에러 메시지에 따르면 약 438mb의 메시지를 받은 상황인데, 파일을 실제로 업로드하는 시점이 아닌 SFTP연결 시도를 하는 순간(SSH연결을 설정하고 초기화하는 부분)에도 이렇게 큰 응답을 받는 상황이었다. 2. 원인파악 SSH 접속시, 서버 간 구분을 주기 위해 ~/. bashrc의 설정을 통해 웰컴메시지를 출력하는 부분이 문제였다. (다음 포스트에서 진행한 서버별 웰컴 메시지 등록 부분에서 작업과정 확인 가능) ...
[AWS] Bastion 서버 설정 및 서버 접속 상태 한눈에 구분하기
1. Bastion 서버란? Bastion 서버란 클라우드 환경, 네트워크 환경에서 보안 게이트웨이 역할을 하는 서버로, 외부 네트워크에서 private 서버로 접속할 때 보안을 강화해 주고 접근제어를 구현해 준다. 외부 사용자가 특정 IP에서만 Bastion 서버에 접속하도록 설정할 수 있으며, private 서버들은 Bastion 서버를 통해서 트래픽을 철저하게 관리할 수 있다. 이번 포스트에선 Bastion서버의 설정 방법과, 다중 서버를 Bastion 서버에서 관리할 시 접속상태를 한눈에 구분할 수 있는 방법에 대해 알아보자. 2. Bastion 서버 설정 방법 2-1.aws 인스턴스 생성 t2 micro~t3 micro - 소규모 개발팀 t3 small - 중간 규모팀 T3.medium, M5.large - 대규모팀 (다수 개발자, 운영팀) ...
[LLM] Quota discoveryengine.googleapis.com/documents exceeded.
1. 문제 발생 Quota discoveryengine.googleapis.com/documents exceeded. GCP에서 MLOps를 구축 중, RAG를 위한 Discovery engine의 데이터 최대 수량이 초과되었다는 경고를 받게 되었다. 기본 리밋은 100만건이지만 더 많은 데이터를 저장하기 위해서는 할당량 수정 요청이 필요하다. 2. 할당량 수정 요청 2-1. IAM & 관리자 -> 할당량 및 시스템 한도 2-2. 초과된 항목 선택 할당량 수정을 원하는 항목의 맨 오른쪽 메뉴 탭에서 할당량 변경을 선택할 수 있다. ...