CS

    JSON_CONTAINS(), IN 절의 검색 대상을 여러 개로 확장하는 전략

    0. 글을 시작하며 현재 진행하는 프로젝트에는 해시태그 개념이 존재하고, 이 해시태그를 이용한 검색 기능을 제공하고 있었습니다. 기존에는 하나의 post는 하나의 해시태그만을 가질 수 있다는 정책을 설정하고 사용하고 있어서 데이터를 다음과 같은 형태로 저장하고 있었습니다. post_id post_name post_content ... hash_tag 1 석촌호수 벚꽃 석촌호수 벚꽃이 정말... ... 벚꽃 2 따뜻한 날씨 요즘 날씨가 많이 따뜻... ... 일상 ... ... 104 날씨 좋은 날 나들이 이렇게 날씨 좋은 날 ... ... 나들이 105 Querydsl 도입기 기존 프로젝트에서는... ... 기술 그래서 사용자가 "벚꽃" 또는 "나들이" 라는 해시태그가 포함된 글을 보고 싶다면 다음과 같..

    간단하게 살펴보는 빅데이터 분석과 관련 개념들

    0. 글을 시작하며 올해 2월 현재 회사에 서버개발자로 입사했지만 부가적인 업무로 빅데이터 분석을 통한 BI(Business Intelligence)를 지원하는 업무를 병행하게 되었습니다. 입사 초반에 모르는 기술 용어와 개념으로 가득한 회의에 들어가면서 어려움을 겪었던 기억이 있습니다. 물론 이 분야를 전문으로 하지 않는 상황에서 빅데이터 분석에 대한 전문적인 개념들을 모두 이해하고 업무를 하는 것은 불가능하지만 "해당 분야에 대한 큰 그림을 이해하고 접근하자"라는 관점이 업무를 진행하는 데 굉장히 큰 도움이 되었습니다. 이 글에서는 빅데이터 분석에서 사용하는 어떤 특정 기술에 대한 전문적인 내용을 다루는 것이 아니라 빅데이터 분석 분야에 대한 대략적인 큰 그림을 정리해보고자 합니다. 혹시 저처럼 본인..

    유클리드 호제법 (Euclidean-algorithm)

    0. 글을 시작하며 우리가 문제해결을 하다보면 최대 공약수를 구해야하는 경우가 있습니다. 우선 가장 쉽게 생각해볼 수 있는 것은 초등학교 때 배우는 두 수를 모두 소인수 분해 후 공약수를 찾아 모두 곱하는 방식입니다. 예를 들어 우리가 27과 45의 최대공약수를 구한다고 할 때 보통 이런 그림을 그려서 최대 공약수를 구하곤 합니다. 그래서 우리가 두 자연수의 최대 공약수를 구해야하는 문제를 코드로 작성해서 해결해야할 때 가장 먼저 쉽게 떠올리고 접근하게 되는 방식이 바로 위의 방식일 것 입니다. 이를 코드로 다음과 같이 옮겨서 문제해결을 할 수 있지만 이 방식에는 한 가지 문제점이 있습니다 (여기서는 numberA가 numberB보다 크거나 같은 수임을 전제로 합니다). private static int..

    [Google BigQuery] WITH문, 성능에 문제없을까?

    0. 배경 통계쿼리를 작성할 때 가독성을 고려하지 않고 작성하다보면 주요 지표들을 계산하는 복잡한 로직과 Table 간의 JOIN, 많은 서브쿼리들이 복잡하게 얽혀 매우 복잡한, 가독성을 사실상 거의 포기한 Query가 나오게 됩니다. 하지만 보통 데이터 분석에서 다루는 로그 성격의 정보를 저장하는 테이블들은 아무리 적절히 정제과정을 거처더라도 row수가 매우 많습니다 (1억건도 많지는 않은 편...). 그렇기 때문에 이렇게 거대한 Table들을 모두 JOIN해서 사용하는 것은 아무리 ON 조건을 적절히 잘 건다고 하더라도 상상 이상의 비용이 발생합니다. Google BigQuery 같이 수천대의 분산환경 컴퓨팅 성능을 활용할 수 있는 막강한 성능을 가진 플렛폼을 사용하더라도 분명 결과를 받기까지 상당히..

    [Google BigQuery] 1라인 쿼리에서 변수를 사용하고 싶을 때

    0. 배경 (문제 상황) 데이터 분석 프로젝트를 진행하면서 Google BigQuery로 구성된 DW에 저장된 전체 서비스 로그와 사용자 정보가 저장된 Table로부터 Mart Table을 생성하는 CTAS Query를 작성해야할 일이 있었습니다. 전체 서비스 로그가 하나의 Table로 모여 저장되고 있었기 때문에 내부적으로 이를 저장할 때에는 해당 로그가 어떤 서비스에 대한 로그인지를 식별하기 위한 식별자가 들어갔고, 이 식별자를 알고 있으면 특정 서비스에 대한 로그만을 필터링하여 이를 데이터 분석에 활용할 수 있었습니다. 하지만 통계쿼리의 특성 상 쿼리 길이가 굉장히 길고(수백라인...) 각 서비스들이 가지는 자신 만의 히스토리가 데이터에 스며있기 때문에 이 모든 맥락을 이해하며 데이터 분석에 활용할..

    [OS] 운영체제(OS) 란?

    운영체제 (Operating System) 프로그램을 실행할 수 있는 환경을 제공함으로써 사용자와 하드웨어 사이의 중재자 역할을 수행하는 특수한 소프트웨어 위의 정의처럼 운영체제가 제공하는 가장 중요한 역할은 "프로그램을 실행할 수 있는 환경을 제공한다"라는 점입니다. 프로그램을 실행할 수 있는 환경을 제공함은 응용프로그램을 개발하는 개발자가 CPU, 메모리, 기타 저장소 등 물리적인 컴퓨터 시스템을 구성하는 하드웨어를 직접 다루지 않고, 이를 인터페이스화된 형태로 사용할 수 있음을 의미합니다. 이는 "오디오 믹서"를 생각하면 이해할 수 있습니다. 이 오디오 믹서를 사용하면 특정 채널에 연결된 음향장비 (마이크, 컴퓨터, 악기 등등)의 볼륨, 이퀄라이져, 모니터 스피커 출력 유무 등 오디오 신호의 흐름과..

    Greedy Algorithm

    안녕하세요. 이번 포스팅에서는 Greedy Algorithm에 대해서 다뤄보도록 하겠습니다. 코딩테스트를 준비하는 입장에서 Greedy 알고리즘은 가장 기본이 되는 유형으로 여겨집니다. 난이도가 상대적으로 낮은 유형에 해당하며, 그렇기 때문에 가장 먼저 시작할 수 있는 유형으로 많이 추천됩니다. 하지만 가장 기본이 되는 유형이라고 해서 결코 쉬운 문제들만 있는 것은 아닙니다. 실제로 여러 문제들을 살펴보면 Greedy 유형이더라도 많이 어려운 문제들도 있습니다. 즉, 결코 만만하게 볼 유형은 아닙니다. 그렇다면 지금부터 Greedy 알고리즘이 무엇인지에 대해서 알아보도록 하겠습니다. Greedy Algorithm? 탐욕 알고리즘? 우선 알고리즘의 이름에 사용되는 "Greedy" 라는 단어의 사전적 정의를..

    15주차(2) - 강의내용 정리

    보호되어 있는 글입니다.

    15주차(1) - 강의내용 정리

    보호되어 있는 글입니다.

    POSIX condition variable functions

    보호되어 있는 글입니다.