데이터 연구 분야, 기술 통계 vs 추측 통계

이미지
기술 통계 이미 보유하고 있는 데이터에 대해 분석한다. 있는 그대로 요약, 정리, 시각화하여 데이터의 특성을 도출한다. 보유하고 있는 데이터의 모집단과 같이 데이터의 범위를 확장하여 추정하지 않고 가지고 있는 데이터에만 집중한다. 가지고 있는 데이터 그대로의 특성을 분석하므로 불확실성이나 오차와 같은 개념이 없다. 추측 통계 작은 표본을 가지고 전체의 특성을 유추한다. 전수 조사가 불가능할 때 데이터의 일부만 가지고 전체의 특성을 추정하므로 오차가 필연적으로 발생하고 - 확률 - 신뢰 구간 - 예측 모델의 개념이 추가된다. 예측 모델은 과거의 표본을 분석하여 수학적 패턴을 찾아낸다. 대표적인 통계적 모델은 회귀 분석 모델, 로지스틱 회귀, 시계열 분석 모델(ARIMA) 등이 있다. 머신러닝 모델 vs 통계적 모델 통계적 모델들은 수학적인 패턴이 존재하기 때문에 왜 그런 결과가 나왔는지 해석이 가능하다. 최신 머신러닝/딥러닝 모델은 결과에 대한 설명보다는 **"결과를 얼마나 잘 맞히는지(정확도)"**에 올인하기 때문에 속을 알 수 없는 복잡한 구조(블랙박스)인 경우가 많다.

데이터 연구 분야 시뮬레이션 vs 최적화

이미지
시뮬레이션 예시 그림의 유체 역학과 같은 물리적 상호작용을 보여주는 시각적 프로그램 뿐 아니라 현실과 가깝게 만든 모델 을 제작한 뒤 여러 변수를 대입 하여 실험해 보는 행위가 모두 시뮬레이션에 속한다. 가상의 네트워크를 만들어서 네트워크 트래픽을 시뮬레이팅 할 수도 있고 가상의 주식 시장을 만들어서 시장의 변동성을 시뮬레이팅 할 수도 있다. 불확실성이 많은 현실 세계의 도메인에서 시스템의 동작과 흐름을 모방하여 미래를 예측하고 이해한다. 결국 시뮬레이션도 미래를 예측하고 이해하기 위해 사용한다. 이 모델에서 조건을 바꾸면 어떤 일이 일어날 지를 관찰한다. 최적화 목표를 달성하기 위한 가장 좋은   방법 을 찾는다. 방법이라고하면 최소값 or 최대값의 해답을 의미한다. 꼭 값 하나로 귀결 되는 것은 아니며 단일 스칼라 값 외에도 스케줄, 경로, 벡터 행렬 등으로도 표현될 수 있다. 방법을 찾기 위 전제되어야 할 조건은 목표가 명확해야 한다는 것이다. 시뮬레이션과 최적화 최적화 과정을 통해 후보 해를 도출하고 시뮬레이션으로 검증하여 사용한다.

KDD(Knowledge Discovery in Databases) 분석 방법론과 CRISP-DM

데이터 분석의 유형 데이터 분석에는 '분석 대상'과 '분석 방법'이 존재한다. 분석 대상과 방법에 따라 분석은 4가지 유형으로 나뉜다. - 분석 대상을 알고, 분석 방법을 아는 경우 => 최적화 - 분석 대상을 알고, 분석 방법을 모르는 경우 => 해 - 분석 대상을 모르고, 분석 방법을 아는 경우 => 인사이트 - 분석 대상을 모르고, 분석 방법도 모르는 경우 => 발견 KDD 분석 방법론 Knowledge Discovery in Databases 데이터를 통해 '통계적 패턴', '지식'을 찾을 수 있도록 정리한  데이터마이닝 프로세스. 1. Selection 2. Pre-processing 3. Transformation 4. Data Mining 5. Interpretation / Evaluation 의 순서로 진행된다. 순서대로 진행하기 때문에 소프트웨어 개발의 Waterfall 방식과 유사하다. CRISP-DM Cross Industry Standard Process for Data Mining 이 방법론 또한 단계가 있긴 하지만 KDD 분석 방법론 처럼 순차적으로 진행되지 않고 보완해야 할 것이 있으면 전 단계로 되돌아가는 등의 반복 수행을 통해 분석 품질을 높인다. - 업무이해 - 데이터 이해 - 데이터 준비 - 모델링 - 평가 - 전개의 단계로 나뉘는데 KDD 분석 방법론 과 다른 점은 1. 특정 단계 간에 보완을 하기 위해 전 단계로 되돌아갈 수 있다는 것이다. 2.  '업무 이해', '데이터 이해'와 같이 KDD 분석 방법론의 '데이터 선택'에 해당하는 작업이 더 세분화 되었다. 3. '전개' 단계가 추가되었는데 모니터링과 유지보수 , 보고서 등 실무적인 작업이 더 세분화되었다.

소프트웨어 설계와 Vue.js의 프록시 패턴

소프트웨어 디자인 패턴의 프록시 패턴 Proxy pattern은 디자인 패턴 중 Structural 패턴 중 하나이다. 가장 기본적인 골자는 "대신 요청을 처리해주는" 패턴 이라는 것이다. 누구 대신 요청을 처리하냐면, 실제 객체 대신 요청을 처리한다. (요청의 주체는 누구든 될 수 있지만  일반적으로 프로그램 런타임에서 메모리에 생성되는 객체이다.  네트워크 관련 객체가 될 수도 있고, 상주하는 객체가 될 수도 있음.) a라는 기능을 본래는 A객체에서 처리하는 것이 맞지만 a라는 기능으로 인해 다른 객체에 의도하지 않은 접근을 허용할 수 있다. (A class 내에서 구현한 기능이든, 함수든) 따라서, 다른 객체에 대해 접근을 제어 하기 위해 본 객체와 다른 대리인 역할을 하는 객체 를 제공한다. 본 객체 = Real subject 대리인 = Proxy 는 공통 Interface를 구현함으로서 접근 제어를 구현한다. 본 객체는 비즈니스 로직을 수행한다. 대리인 객체는 요청이 본 객체에 도달하기 전에 구현된 작업을 수행해서 직접 도달하지 않게 접근을 제어하거나 기타 로직들을 수행한다. (접근 제어, 지연 로딩, 로깅, 캐싱, 원격 프록시 등) ( **원격 프록시 = 다른 네트워크의 머신에서 돌아가고있는 객체를 대표한다. ) 요청을 보내는 클라이언트 입장에서는 실제 객체 대신 대리인 객체와 소통하고 있는 것이다. Vue의 프록시 패턴 vue.js에서는 JS의 내장 Proxy객체를 활용하여 데이터를 관찰하고 데이터가 변하면 이를 변경사항에 적용한다. => 반응성, Reactive vue3에서는 객체를 반응성 상태로 만들 때 reactive() 함수를 사용하는데 이렇게 만들어진 프록시 객체는 실제 객체에 대한 모든 접근을 가로챈다. (속성 값 변경, 생성, 삭제 등) Vue에서는 JS의 Proxy 객체를 이용하여 본 객체에 요청이 도달하기 전에 요청을 가로채서 반응성을 위한 로직을 수행한다. (본 객체에 의존하는 다른 객체에 대한 의존성 추적...

투비소프트 Nextacro

이미지
 https://www.tobesoft.com/product/nexacro 대한민국의 투비소프트에서 만든 Quick-code, Lowcode 개발 플랫폼. UI를 개발할 때 코드가 아닌 개발 블록을 사용해 높은 생산성을 제공한다. QuickCode core는 3종의 블록, 'Model', 'View', 'Controller'을 제공하는데 이 블록들의 조합으로 UI개발을 수행할 수 있다. 개발자는 QuickCode 블록을 커스터마이징 할 수 있다. View Template Asset은 4종의 블록 'Button', 'Search', 'FreeForm', 'Grid(표)'을 제공하고 Controller Asset은 3종의 블록 'Transaction', 'Pop-up', 'Message'를 제공한다. 트랜잭션은 DB와 통신할 수 있는 모듈로 보인다. 다양한 배포환경을 지원한다. Web은 물론, android, ios까지 제공하여  사용환경마다 웹 뷰가 다른 불편함을 해결할 수 있다. 아래는 넥사크로 개발문서 https://docs.tobesoft.com/getting_started_nexacro_n_ko #### 체험판 라이센스를 실행하면 60일간 사용할 수 있다. 개발 문서를 통해 간단한 테이블 형태의 웹 뷰를 만들었다. 다양한 배포 환경을 지원하는 장점이 있고 런타임 환경 설정이 직관적이고 편리했다. 마이크로소프트의 Xamarine을 다룰 때와 느낌이 비슷했다. 컴포넌트를 드래그-드롭 한 뒤 프로퍼티 창에서 수정하고 소스코드 수정하기를 눌러서 코딩한다. 소스코드를 직접 작성하는 코딩에 익숙한 개발자는 이와 같은 방식을 익히는데 시간이 필요할 듯하다.

Vue 첫 걸음

Vue 하나도 모르는 상태에서 vue를 시작하면 최근 Vue 프로젝트와 API 서버 프로젝트를 번갈아가며  기능 수정/개선 작업을 수행했다. 간단한 API 호출 코드 수정과 vue 라이브러리, 내장 v-디렉티브를 활용하여 조건과 데이터에 따라 일부 UI를 변경하는 정도까지는 할 수 있었지만  FE 프로젝트 자체를 0부터 쌓아올린 것은 아니기에 집에서 사이드 프로젝트를 진행하며 정리하려고한다. 요즘 프로젝트 구성 global 환경 node.js - npm (or yarn)은 vue 프로젝트 환경을 구축하기 전에 설치해야 할 소프트웨어이다. node.js는 브라우저에서만 작동할 수 있었던 JS를 자바스크립트 서버 환경에서 돌아갈 수 있게 한다.(로컬, 리모트) 크롬의 V8 자바스크립트 런타임 엔진을 기반으로 구축되었다. vite.js 웹팩과 같이 js파일을  덩어리를 묶는 대신 네이티비ㅡ ES 모듈 임포트 기능으로 모듈을 불러오는 JS 개발 서버이다. 이전 기본 툴에는 vue cli가 있으며 웹팩을 사용한다. vue 커뮤니티는 vue 프로젝트를 생성하고 관리하는 기본 툴로써 vue cli에서 Vite로 대체했다. ts 문제 최신 프론트엔드 프레임워크의 프로젝트에서는 주로 Typescript와 의존성, 배포 설정 파일들이 함께 사용된다. 타이핑을 통해 체계적이고 가독성 높은 코드를 작성할 수 있는 장점이 있다. 당장 ts를 사용할 수는 없었다. 당장 npm init vue@{vue 버전}을 통해 프로젝트를 초기화해도 Cannot find module './App.vue' or its corresponding type declarations 라는 에러를 마주할 수 있는데 Typescript와 vue를 혼용해서 사용할 때 당장 처음에는 TS가 App.vue의 타입을 인식하지 못하기 때문에 발생한다. .vue 모듈을 TS가 인식할 수 있는 타입으로 정의해 주어야 하는데 관례적으로 'shims-vue.d.ts' 라는 파일명에 정의한다. 이 파일...

WAS 프레임워크에서의 직렬화, 비직렬화

직렬화/비직렬화 웹 애플리케이션 서버 프레임워크 웹 애플리케이션 서버 프로그램이 어떤 프로그래밍 언어의 소스 코드로부터 컴파일 됐든 인터넷을 통한 통신을 수행하려면 웹 생태계의 규칙을 따라야한다. 웹 애플리케이션 서버 프로그램은 일반적으로 각 언어들의 웹 애플리케이션 서버 프레임워크로부터 만들어지는데 이 프레임워크에서 직렬화/비직렬화 개념이 나온다. 송신자 & 수신자, 직렬화 & 비직렬화 직렬화 송신자가 객체를 문자열로 변환하여 데이터를 전송하는 작업. 비직렬화 수신자가 수신한 문자열을 다시 객체로 변환하여 활용하는 작업. 여기서 송신자, 수신자는 모두 웹 애플리케이션 서버이다. 웹 애플리케이션 서버에 로직을 작성하는 프로그래머는 그 언어와 프레임워크와 종속된 소스코드를 사용하는데 앞단의 웹 서버와 같은 소프트웨어나 더 멀리 있는 이기종의 장치는 이를 이해하지 못한다. 때문에 컨버팅 작업이 필요한데 이 컨버팅 작업을 직렬화/비직렬화라고 한다. Python web application framework를 예로 들자면, 파이썬으로 로직 처리가 끝난 데이터를 response 객체에 담아 반환하여 줄 때가 직렬화, 클라이언트의 요청이 request 객체로 추상화될 때가 비직렬화라고 할 수 있겠다. 끝

이 블로그의 인기 게시물

Blogger 커스터마이징 : CSS 수정 (sticky-header)

노마드코더 개발자북클럽 Clean code 완주, 독후감

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접