전체 글 206

SQL 기반 데이터 결합과 특성 엔지니어링: Apache Spark 활용 가이드

1. 개요데이터 분석과 머신러닝에서 다양한 데이터 소스를 결합하고 유의미한 특성을 발굴하는 과정은 매우 중요하다. 특히 대규모 데이터를 다룰 때 SQL을 통한 데이터 결합과 특성 엔지니어링(Feature Engineering)은 성능 최적화와 예측력 향상에 필수적인 작업이다. Spark는 SQL 구문과 고급 데이터 처리 도구를 제공해 방대한 데이터를 효율적으로 결합하고 가공할 수 있는 환경을 제공한다. 이번 글에서는 Spark SQL을 활용해 데이터 결합과 특성 엔지니어링 기법을 구현하는 방법을 다루어 실무에서 유용하게 적용할 수 있는 인사이트를 제공하고자 한다.2. Spark SQL을 활용한 데이터 결합Temporary View와 SQL 쿼리Spark에서는 DataFrame을 SQL 쿼리처럼 사용할 수..

Apache Spark 머신러닝 분류 및 회귀 모델 - 다양한 모델 학습과 활용

1. Spark의 분류 모델(Classification)Spark MLlib은 다양한 분류 모델을 제공하여, 여러 가지 문제에 적합한 모델을 선택할 수 있다. 대표적으로 DecisionTreeClassifier, RandomForestClassifier, GBTClassifier 등이 있으며, 데이터 특성에 따라 모델을 결정할 수 있다.주요 분류 모델과 하이퍼 파라미터 설정Spark의 분류 모델은 각각 고유의 학습 방식과 하이퍼 파라미터를 가진다. 예를 들어, RandomForestClassifier는 여러 개의 결정 트리를 결합해 예측의 안정성을 높인다.from pyspark.ml.classification import RandomForestClassifier# 랜덤 포레스트 분류 모델 설정rf = R..

Apache Spark ML 파이프라인과 하이퍼 파라미터 튜닝 - 모델 학습 최적화

1. Spark의 머신러닝 파이프라인 구축Spark MLlib은 대규모 데이터 환경에서의 머신러닝 모델 구축을 돕는 도구로, 데이터 전처리부터 모델 학습과 평가까지 일관성 있는 파이프라인을 구성할 수 있다. 파이프라인을 사용하면 데이터 전처리와 학습 단계를 통합하여 관리하기 편리하다.파이프라인(Pipeline) 설정과 구성 요소파이프라인은 여러 단계로 구성되어 있으며, 각 단계에서 데이터 전처리, 피처 엔지니어링, 모델 학습을 순차적으로 수행할 수 있다. Spark에서는 Pipeline 객체에 각 작업 단계를 정의하고 이를 순차적으로 연결한다.from pyspark.ml import Pipelinefrom pyspark.ml.feature import StringIndexer, StandardScaler..

Apache Spark 데이터 변형 및 집계 기능 - 대규모 데이터 효율화

1. Spark 데이터 변형 및 집계 최적화Spark는 데이터를 변형하고 요약하는 데 특화된 기능을 제공하며, 대규모 데이터 처리에서 효율적으로 동작한다. 특히 groupBy()와 같은 집계 메서드와 윈도우 함수(Window Function)를 통해 데이터를 그룹화하고 누적 계산할 수 있어, 대용량 데이터 분석에 유용하다.groupBy()와 집계 함수groupBy()는 특정 컬럼을 기준으로 데이터를 그룹화해 집계할 때 사용하는 메서드다. Spark는 다양한 집계 함수를 제공하여 대규모 데이터에서도 성능 저하 없이 통계 계산을 가능하게 한다. Pandas에서는 groupby()와 agg()로 유사한 작업을 수행한다.예를 들어, 특정 연령별 데이터 개수를 집계해보자.# Pandas에서 groupby와 집계 ..

Google C++ Style Guide(2024) - 12장 규칙 예외(Exceptions to the Rules)

12장 규칙 예외(Exceptions to the Rules)위에서 설명한 코딩 규칙들은 반드시 따라야 하는 필수 사항이다. 그러나 모든 좋은 규칙에 예외가 있듯이, 일부 경우에는 이러한 규칙에서 벗어날 수 있는 예외 상황이 있다. 여기서는 이러한 예외 사항에 대해 다룬다.12.1 기존의 스타일을 따르지 않는 코드 (Existing Non-conformant Code)이 스타일 가이드에 맞지 않는 기존 코드를 다룰 때는 규칙에서 벗어날 수 있다.가이드와 다른 방식으로 작성된 코드를 수정할 경우, 해당 코드의 로컬 규칙에 일관성을 맞추기 위해 이 가이드의 규칙에서 다소 벗어날 수 있다. 어떻게 해야 할지 확신이 서지 않을 때는 원 작성자나 현재 코드의 책임자에게 문의하는 것이 좋다. 일관성은 전체 코드뿐만..

Google C++ Style Guide(2024) - 11장 코드 형식 (Formatting)

11장 코드 형식 (Formatting)코딩 스타일과 형식은 다소 임의적일 수 있지만, 모든 사람이 같은 스타일을 사용하면 프로젝트를 훨씬 쉽게 이해할 수 있다. 개개인은 모든 형식 규칙에 동의하지 않을 수도 있고, 일부 규칙이 익숙해지는 데 시간이 걸릴 수 있지만, 모든 프로젝트 기여자가 규칙을 준수해야 서로의 코드를 읽고 이해하기 쉬워진다.코드를 올바르게 형식화하는 데 도움이 되도록, emacs 설정 파일을 제공하고 있다.프로젝트의 일관된 형식을 유지함으로써, 가독성이 향상되고 협업이 원활해진다.11.1 줄 길이 (Line Length)코드의 각 줄은 최대 80자를 초과하지 않도록 한다.이 규칙은 논란이 있을 수 있으나, 많은 기존 코드가 이미 이를 준수하고 있으며, 일관성을 유지하는 것이 중요하다...

Google C++ Style Guide(2024) - 10장 주석(Comments)

10장 주석(Comments)주석은 코드 가독성을 유지하는 데 매우 중요하다. 다음 규칙들은 주석을 어디에 어떻게 작성해야 하는지를 설명한다. 하지만 항상 기억해야 할 점은, 최상의 코드는 주석이 필요 없는 코드, 즉 스스로를 설명할 수 있는 코드다. 변수와 타입에 명확하고 의미 있는 이름을 부여하는 것이, 이해하기 어려운 이름을 사용하고 그 의미를 주석으로 설명하는 것보다 훨씬 좋다.주석을 작성할 때에는 다음에 코드를 이해해야 할 독자를 염두에 두어야 한다. 후속 작업자가 당신의 코드를 쉽게 이해할 수 있도록 친절하게 작성하라. 그 독자가 나중에 바로 당신이 될지도 모른다.10.1 주석 스타일 (Comment Style)주석에는 // 또는 /* */ 구문을 사용할 수 있다. 단, 일관성을 유지해야 한다..

Google C++ Style Guide(2024) - 9장 명명 규칙(Naming)

9장 명명 규칙(Naming)네이밍 규칙에서 가장 중요한 일관성 규칙은 이름을 통해 즉시 그 이름이 어떤 종류의 엔티티인지 알 수 있게 하는 것이다. 네이밍 스타일을 통해 타입인지, 변수인지, 함수인지, 상수인지, 매크로인지 등을 선언을 따로 확인하지 않고도 쉽게 알 수 있어야 한다. 우리 두뇌의 패턴 매칭 엔진은 이러한 네이밍 규칙에 크게 의존한다.네이밍 규칙은 다소 임의적일 수 있지만, 이 영역에서는 개인의 선호보다는 일관성이 더 중요하다. 규칙이 합리적이라고 느끼지 않더라도, 규칙은 규칙이므로 따라야 한다.주요 원칙타입명일반적으로 PascalCase 사용 (예: MyClass, AnotherType).변수명 및 함수명소문자로 시작하고 단어마다 대문자로 표기하는 camelCase 사용 (예: myVa..

Google C++ Style Guide(2024) - 8장 포괄적 언어(Inclusive Language)

8장 포괄적 언어(Inclusive Language)모든 코드에서, 네이밍 및 주석을 포함하여, 다른 프로그래머가 불쾌하거나 모욕적으로 느낄 수 있는 용어 사용을 피하고 포괄적 언어를 사용해야 한다. 예를 들어, "master"와 "slave", "blacklist"와 "whitelist", "redline" 등의 용어는 겉보기에는 중립적인 의미를 가질 수 있지만, 특정 집단에게는 불쾌하게 다가올 수 있으므로 사용하지 않는다.또한, 특정인을 지칭하지 않는 한 성 중립적인 언어를 사용해야 한다. 예를 들어, 성별이 지정되지 않은 사람을 지칭할 때는 "they"/"them"/"their"와 같은 단수형을 사용하며, 소프트웨어, 컴퓨터, 기타 사람이 아닌 것을 지칭할 때는 "it"/"its"를 사용한다.권장 ..

Google C++ Style Guide(2024) - 7장 기타 C++ 기능(Other C++ Features)

7장 기타 C++ 기능(Other C++ Features)7.1 Rvalue 참조 (Rvalue References)Rvalue 참조는 임시 객체에만 바인딩될 수 있는 참조 타입으로, && 구문을 사용한다. 예를 들어, void f(std::string&& s);는 std::string 타입의 rvalue 참조를 받는 함수를 선언한다. Rvalue 참조는 객체의 이동과 완벽한 전달을 가능하게 하여 성능 최적화에 유용하다.Rvalue 참조의 주요 사용 사례이동 생성자와 이동 할당연산자std::move를 이용해 rvalue 참조를 전달하면 복사 대신 값을 이동할 수 있어 성능을 크게 향상시킨다. 예를 들어, std::vector v1이 있을 때, auto v2(std::move(v1));는 대량의 데이터를 ..

Google C++ Style Guide(2024) - 6장 Google 특유의 테크닉(Google-Specific Magic)

6장 Google 특유의 테크닉(Google-Specific Magic)Google에서는 C++ 코드를 더욱 견고하게 만들기 위한 다양한 트릭과 유틸리티를 사용하며, 일반적인 C++ 관행과는 약간 다르게 코딩하는 방식도 있다. 이러한 기술들은 코드의 안정성과 유지보수성을 높이기 위한 목적으로 사용된다.Google이 사용하는 주요 기술과 관행유틸리티와 도구Google은 코드 품질을 높이기 위해 특정 유틸리티 라이브러리와 도구들을 사용한다. 예를 들어, Google Test와 Abseil 같은 라이브러리는 코드의 테스트와 유틸리티 기능을 추가하여 코드의 안정성을 높인다.모범 사례와 일관성Google은 모든 코드가 일관된 스타일과 규칙을 따르도록 함으로써, 팀의 규모와 관계없이 유지보수가 용이한 코드를 유지한..

Google C++ Style Guide(2024) - 5장 함수 (Functions)

5장 함수 (Functions)5.1 입력과 출력 (Inputs and Outputs)C++ 함수에서 출력을 제공하는 방식으로 반환값을 선호하는 것이 좋다. 반환값은 가독성을 높이며 성능도 유리한 경우가 많다. 다음은 함수의 입력과 출력에 관한 권장 사항이다.반환값과 출력 매개변수의 사용반환값출력을 제공할 때는 반환값을 우선으로 사용한다. 성능과 가독성이 좋다.출력 매개변수반환값 대신 출력 매개변수를 사용할 경우, 가능하면 참조를 사용하고 널이 될 수 있는 경우에만 포인터를 사용한다.함수 매개변수의 종류와 권장 사용 방식입력 매개변수보통 값 타입이나 const 참조로 전달한다.출력 및 입출력 매개변수비널(non-null)인 경우 참조로 전달하는 것이 좋다.선택적 매개변수:선택적 입력 매개변수는 std::..

Google C++ Style Guide(2024) - 4장 클래스 (Classes)

4장 클래스 (Classes)클래스는 C++에서 코드의 기본 단위로, 광범위하게 사용된다. 클래스 작성 시 따라야 할 주요 권장사항과 피해야 할 점은 다음과 같다.4.1 생성자에서 작업하기 (Doing Work in Constructors)생성자에서는 몇 가지 중요한 사항을 주의해야 한다. 특히, 가상 메서드 호출과 에러를 신호할 수 없는 초기화를 피하는 것이 권장된다.가상 메서드 호출 피하기생성자에서 가상 함수가 호출되면, 이 호출이 파생 클래스의 구현으로 디스패치되지 않는다. 현재 클래스가 파생되지 않았다 하더라도, 향후 파생 클래스가 생길 경우 문제가 발생할 수 있어 혼란을 초래할 수 있다.에러 신호의 어려움생성자에서 발생한 오류를 신호하기가 쉽지 않다. 프로그램을 종료하는 방법은 모든 상황에서 적..

Google C++ Style Guide(2024) - 3장 스코핑 (Scoping)

3장 스코핑 (Scoping)3.1 네임스페이스 (Namespaces)대부분의 코드에는 네임스페이스를 사용해야 하며, 네임스페이스 이름은 프로젝트 이름과 경로에 따라 고유해야 한다. using 지시문(e.g., using namespace foo)과 인라인 네임스페이스는 사용하지 않으며, 무명 네임스페이스는 내부 연결에서 다룬다.네임스페이스는 글로벌 스코프를 독립적이고 이름이 지정된 스코프로 분할해 이름 충돌을 방지하는 역할을 한다. 예를 들어, 두 프로젝트가 모두 전역 범위에서 Foo라는 클래스를 정의할 경우, 컴파일 또는 런타임에 충돌할 수 있다. 그러나 각 프로젝트가 네임스페이스를 사용하여 project1::Foo와 project2::Foo로 구분한다면, 충돌을 방지하면서 각 프로젝트 내부에서는 F..

Google C++ Style Guide(2024) - 2장 헤더 파일 (Header File)

2장 헤더 파일 (Header File)일반적으로, 모든 .cc 파일에는 관련된 .h 파일이 있어야 한다. 다만, 단위 테스트 파일이나 main() 함수만 포함하는 작은 .cc 파일 등은 예외로 인정된다.헤더 파일을 올바르게 사용하는 것은 코드의 가독성, 크기, 성능에 큰 영향을 미친다. 이 가이드에서는 헤더 파일 사용 시 발생할 수 있는 여러 문제점을 피할 수 있는 규칙들을 제시한다.2.1 자체 포함 헤더 (Self-contained Headers)헤더 파일은 독립적으로 컴파일될 수 있도록 자체 포함형으로 작성해야 하며, 확장자는 .h로 끝나야 한다. 헤더가 아닌 포함용 파일은 .inc 확장자를 사용하며, 필요한 경우에만 제한적으로 사용해야 한다.모든 헤더 파일은 자체 포함형이어야 하며, 이를 포함하는..

Google C++ Style Guide(2024) - 1장 C++ 버전 (C++ Version)

1장 C++ 버전 (C++ Version)현재 구글 C++ 스타일 가이드는 C++20을 기준으로 코드를 작성하도록 권장하며, C++23 기능은 사용하지 않는 것을 원칙으로 한다. 가이드는 최신 C++ 버전으로 빠르게 전환할 계획이기 때문에, 코드 작성 시점에 맞는 최신 가이드를 참고하는 것이 중요하다.비표준 확장은 사용하지 않는 것이 원칙이다. 또한, C++17과 C++20의 기능을 프로젝트에 적용하기 전 다른 환경으로의 이식성을 반드시 고려해야 한다.참조URLhttps://google.github.io/styleguide/cppguide.html

Google C++ Style Guide(2024) - 배경 (Background)

2024년도에는 진짜 마지막 구글 C++ 스타일 가이드 포스팅을 해낸다.배경 (Background)C++은 구글의 여러 오픈 소스 프로젝트에서 주요 개발 언어로 사용되고 있다. C++을 사용하는 개발자라면 알다시피, 이 언어는 강력한 기능을 제공하지만 그만큼 복잡성을 동반하며, 코드가 버그에 취약해지고 읽기 어려워지거나 유지보수가 까다로워질 수 있다.이 가이드는 C++ 코드를 작성할 때 지켜야 할 사항과 피해야 할 사항을 상세히 설명함으로써 이러한 복잡성을 관리하고자 한다. 이러한 규칙들은 개발자가 C++ 언어의 기능을 생산적으로 활용하면서도 코드베이스를 관리 가능하게 유지하는 데 그 목적이 있다.스타일 또는 가독성이라 불리는 규칙은 단순한 소스 파일 형식 이상의 관습을 포함하는데, 이는 코드 작성 방식..

CHM(Compiled HTML Help, 윈도우 도움말 파일)

1장 개요CHM(Compiled HTML Help) 파일은 주로 Windows 환경에서 사용되는 도움말 파일 형식으로, HTML, 이미지, 스크립트 등 다양한 파일을 압축하여 하나의 파일로 제공한다. Microsoft에서 개발한 이 파일 형식은 소프트웨어 사용자에게 도움말 시스템 제공에 최적화되어 있으며, 웹 브라우저와 유사한 탐색 환경을 지원한다. CHM 파일은 오프라인 상태에서도 사용 가능하여 정보 접근이 쉽고 빠르다.1.1 도움말 시스템문서화는 모든 소프트웨어에서 중요한 요소다. 복잡한 소프트웨어 시스템을 비프로그래머도 이해할 수 있도록 설명하는 것으로, 프로그램의 작동 방식과 기능, 그리고 이를 사용해 목표를 달성하는 방법을 안내한다.좋은 문서는 사용자에게 큰 도움이 되지만, 부족한 문서는 오히려..

기술 노트 2024.10.24

일의 격 - 성장하는 나, 성공하는 조직, 성숙한 삶 / 신수정

일의 격 - 성장하는 나, 성공하는 조직, 성숙한 삶저자: 신수정출판: 턴어라운드발행: 2021.07.01. Be Do Have책에서 "be do have"라는 구절이 등장한다. 이 문장은 ‘내가 어떤 사람인가(be)에 따라 어떻게 행동하고(do), 무엇을 가질 수 있는지(have)’를 표현한다. 예를 들어, 나는 닭의 무리 속에 있는 작은 독수리이다. 독수리이기 때문에 나는 독수리답게 행동하고, 그에 걸맞는 것을 가진다. 이 구절은 우리가 올바른 생각을 가지고 당당하게 행동하며 살아갈 수 있도록 해주는 말이다.

독서 기록 2024.08.31

개발자로 살아남기 - 한글과컴퓨터, 블리자드, 넥슨, 삼성전자, 몰로코 출신 / 박종천

개발자로 살아남기 - 한글과컴퓨터, 블리자드, 넥슨, 삼성전자, 몰로코 출신저자: 박종천출판: 골든래빗(주)발행: 2022.01.01. 모든 행복과 불행은 결국 나 자신으로부터 비롯된다.이 말을 이제서야 깊이 깨닫게 되었다는 사실이 아쉽기도 하다. 지난날, 무지하고 억울해했던 내 모습이 떠오르면 안쓰럽기도 하지만, 이제라도 이러한 깨달음을 통해 마음의 평화를 찾을 수 있음에 감사한다.하지만 솔직히 말하면, 아직도 이 말이 완전히 마음에 새겨지지 않은 것 같다. 명절 때 고향을 방문하는 문제를 결정하는 과정에서 마음 상할 일이 없었음에도 불구하고, 약간의 상처를 받은 나 자신을 보며 그 사실을 느낀다. 그럼에도 불구하고 나를 포용해주는 아내를 보면, 그녀야말로 진정으로 큰 사람이라는 생각이 든다. 이러한 ..

독서 기록 2024.08.27