Sphinx 엔진의 한계스핑크스를 사용하면서 가장 중요한 한계점을 발견하였는데이미 인덱싱 처리가 되어있는 Sphinx 테이블간의 데이터 활용을 위한 Join / Subquery / Union 쿼리가 지원되지 않는다는 점이다.SphinxQL support for inner join on the same index with subquery[일부 쿼리를 지원하지 않는 근본적 이유]검색 엔진 최적화:Sphinx는 주로 텍스트 검색을 위해 최적화된 검색 엔진이며 복잡한 SQL 기능보다는 고속의 텍스트 검색 및 인덱싱이 목적이기 때문이다.데이터 저장 및 인덱싱Sphinx는 데이터를 자체적인 인덱스 파일 형식으로 저장하고 관리하며 인덱스 파일은 MySQL의 테이블 구조와 다르다.단일 테이블 기반 검색Sphinx는 단..
서비스별 STT 개발 요구사항 개요 정부 주관으로 청각 장애인 복지를 위해 영상 미디어 자료에 자막을 추가하는 사업을 수행하게 한다. 자막은 VTT 파일로 관리하며 아래 4가지 서비스 중에서 하나를 선택하여 개발한다. 서비스 선택은 API 지원 방식 / 문서화 / 비용 3가지를 중점으로 확인하며 확장자(.mp4)를 지원하는 서비스 위주로 선택된다. 결과 파일은 현재 사용중인 GS CDN에 저장하도록 하며 이후 파일을 관리할 수 있는 DB Table을 생성한다. 서비스별 요구사항 서비스 AWS Naver Clova AssemblyAI PHP 지원 방식 SDK cURL cURL 기타 언어 PHP / JAVA / Python PHP / JAVA / Python PHP / JAVA / Python 미디어 형식 ..
반복되는 컬럼을 한줄로 표현하여 개선 다수의 테이블은 어떻게 조합할 것인가? MySQL에서 테이블을 조합하는 과정은 크게 2가지 방법(UNION / JOIN)이 있다. 어느 함수가 더 뛰어나다 라는 것은 없으며 상황에 적합하도록 사용하면 된다. 나의 경우 3개의 테이블(PC / MA / MW)에서 동일 데이터 컬럼을 가져왔으며 UNION을 사용하는 것이 적합했기에 최종 select 에서는 UNION을 사용했으며 부가적으로 세부 컬럼을 가져와야 할 경우는 JOIN으로 획득하였다. 최초 작성 쿼리 문제 해당 쿼리가 작동하는데 있어서 문제는 없지만 해당 결과를 화면에 보여준다면 문제가 생기게 된다. 만일'집계'가 Daily, 하루 단위로 집계가 된다면 최대 12개월의 31일 그리고 해당 테이블의 컬럼 갯수 즉..
파일 저장소 마이그레이션 후기 사연 사실 이 이야기는 내가 입사하기전 22년 초부터 나온 이야기 일듯하다. 본래 우리 회사의 CDN관리를 한 기업에서 전담하여 관리해 왔고 해당 기업은 주로 FTP 방식으로 관리해온듯 하다. 그러나 뉴스회사가 그렇듯 방대한 이미지 데이터와 영상관리에 우리가 가용할 수 있는용량이 부족해지자 해당 기업은 2가지 선택지는 주었는데 하나는 비용 업그레이드이며 다른 하나는 Object Storage S3로 변경하여 관리하는 것이였다. 사실 이 두가지는 모두 사용해본 경험으로서는 S3가 다양한 이점을 가져다 주고 이러한 이점 때문인지 회사 또한 선택지에 대한 고민은 없었다고 했다. 변경 목적 첫 번째 가장 우선 순위는 Object storage가 가진 저장소의 특성일 것이다. 데이터..
@Configuration의 어노테이션은 SingleTon 이다. @Component 와 @Configuration 의 차이부터 알고 시작하자. @Component는 스프링이 가지는 특징인 DI의 특성을 보여주는 어노테이션 일것이다. 이전까지 XML 파일에 개발자가 클래스 혹은 메소드를 Bean으로서 직접 주입해 주었다면 @Component 어노테이션의 등장으로 개발자가 직접 XML파일에 직접 작성하는 과정을 생략할 수 있었다. 스프링2.5 버전에서 추가된 이 버전은 @Controller, @Service, @Repository 어노테이션에 기본 내장되어있어 우리가 위 3가지를 클래스 상단에 추가해주기 때문에 @Component 를 선언 없이도 Bean으로서 사용할 수 있었던 것이다. @Configura..
database 에서 두개의 테이블 사이에 데이터 검색 방법 쿼리를 다루다보면 두가지 테이블을 연관지어 데이터를 조회할 때가 있는데 PROGRAM_INFO 와 NEWS_01 테이블의 연관관계가 외래키 idx로 묶여있다면 프로그램이 가진 뉴스 콘텐츠를 쉽게 확인할 수 있을것이다. -- SUBQUERY 방식 select * from NEWS_01 a, PROGRAM_INFO b where (select count(join_key) from ATTACH where join_key=a.join_key)=0 -- JOIN 방식 select * from NEWS_01 a join PROGRAM_INFO b ON a.m_cd=b.m_cd where (SELECT COUNT(*) from NEWS_01 a right ..
AJAX vs CURL 원문 cURL is a server-side process. This means that it will be called before the page is rendered and has nothing to do with the client's capabilities. AJAX, however, is a client-side call. This means that it will not be executed until the client loads the page (or at least that piece of code is seen and executed, but this typically works on document.ready). If you're looking ..
검색엔진 변경 후기 ZOOM 검색 엔진의 계약이 종료되면서 자체 서버를 통해 검색엔진을 만들어낼 필요성이 생겼다. 목표 DataBase 프레임워크는 Mysql을 사용하며 서브 엔진으로는 SPINX 를 사용한다. 스핑크스 검색엔진에 적합하도록 쿼리를 변경하여 사용한다. 개선점 DB 접근 횟수 최소화 기존 검색 방식에서는 SQL에 접근횟수가 너무 많았다. 회면에는 5개의 테마가 있으며 각 테마별로 20개의 ROW를 가져와야했는데 사용자가 메인화면에 접속하면 6번의 DB접근을 필요로 한다는 것이다. 스핑크스 노이즈 문제 해결 스핑크스 엔진의 문제점은 검색 결과의 노이즈 문제이며 이를 해결하기 위해서는 2가지 방식이 존재했다. 1.N 의 수를 늘리자 2.TOKEN을 많이 가져가자 (검색 단어를 많이 입력하자) ..
카카오 모빌리티 뉴스 스크립트 변경 후기 기존 우리 회사에는 뉴스 및 날씨 정보를 API로 만들어 카카오 모빌리티에 정보를 보내주고 있었다. 그러나 하루 단위로 100개씩 보냈던 데이터가 가끔 1개 혹은 100개 이하가 되는 경우가 있었다고 하여 데이터 갯수를 유지하기 위해 기존 json 데이터의 구조를 바꿔야했다. 목표 DataBase로부터 일자별로 100개의 데이터를 수집하고 100개 미만일 경우 이전 데이터와 병합하여 100개를 채운다. 기존 날씨 데이터를 하나의 배열로 묶어 반환한다. 배운 것 데이터 형식만 변경하면 되는 쉬운 업무였지만 개발이라는 일의 흐름을 이해할 수 있던 좋은 기회였다. 돌아가게만 하자 라는 생각에서 예외사항을 고려하며 설계했고 난잡한 코드는 서버에 부담을 줄이기 위해 많은 ..
- Total
- Today
- Yesterday
- OOP
- 자바
- 백준
- Solid
- ajax
- java
- 매트랩
- security
- 스프링부트
- 수학
- 디자인패턴
- 릿코드
- interview
- 그래프
- C언어
- nginx
- 프로그래머스
- CS
- 면접
- Algorithm
- spring-cloud
- 알고리즘
- JPA
- docker
- 자격증
- Matlab
- 스프링
- kakao
- springboot
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |