작성해야하는 로직이 대용량의 데이터를 특정 DB에 적재하는 로직을 설계해야 한다면 대용량의 데이터를 한번에 적재하는 것보단 데이터를 일정기준으로 끊어서 적재하는 것이 바람직하다. 1. 메모리 자원의 효율적 관리 한꺼번에 적재하게되면 적재해야할 데이터들을 Insert를 실행하기 전까지는 변수에 담고 있어야하기 때문에 데이터의 양이 방대하면 방대할수록 너무나 많은 데이터를 변수에 담고 있기 때문에 메모리 자원을 너무 많이 점유할 수 있다. 따라서 일정기준을 두어서 데이터를 분할하여 Insert를 실행하고 데이터를 담고 있는 변수를 비워주고 다음 분할량을 넣고 Insert하는 식으로해서 JVM에서 Heap 메모리나 Static 메모리 자원 등을 너무 많이 점유하지 않도록 해야한다. (예제 코드) import ..
새로운 기능 개발시 생각해볼 것. 1. 해당 기능구현을 위해서 필요한 데이터들을 현재의 DB에서 저장되고 관리되는데 문제가 없는가? > 문제가 발생하여 해결하기 위한 방법으로 데이터를 조금 변형해도 되는가? > 데이터 변형이 불가능하다면 기능 타협을 통해서 구현이 가능한가? > 기능타협이 불가능하다고 하더라도 새로운 DB종류를 사용한다던지 하여 개발할 수 있는가? 2. 기능 개발에 필요한 라이브러리가 기존의 프로젝트의 프레임워크, RDB, 자바버전 등등 과 호환이 가능한가? > 호환이 불가능해도 구현할 수 있는가? (라이브러리의 기능을 자체개발 한다던지 등) > 기존의 프레임워크를 교체할 수 있는가? 교체할 필요성이 있는가? 3. 새로운 기능이 시스템의 전반적인 성능에 영향을 미치는가? > 해당 기능으로..
회사 프로젝트에서 작업할 때 무심코 ES에서 Query를 사용할 때 무심코 모든 데이터를 다가져와서 사용했었는데 조회하는 데이터 사이즈가 상당히 큰 사이즈라서 성능이슈를 발생시킬 수 있다는 피드백을 받았다. 아래는 성능이슈를 발생시킬 수 있던 쿼리이다. GET camo_al_was_acc_log/_search { "from": 0, "size": 10000, "query": { "bool": { "must": [ { "range": { "str_time_ui": { "from": "2022-09-22 14:28:31", "to": "2022-09-22 23:59:47", "include_lower": true, "include_upper": true, "format": "yyyy-MM-dd HH:mm:s..
들어가며 일전의 @ResponseBody 어노테이션에 대해서 정리한 포스팅이 있다. https://data-study-clip.tistory.com/189?category=1034056 Spring - @ResponseBody 사용원리 클라이언트에서 localhost:8080/hi-spring url로 요청이 들어왔다고 치자 그럼 톰켓서버에서 해당 url 요청이 들어왔다고 Spring Container에다가 던져준다. 스프링컨테이너에 있는 Controller에서 매핑되는게 data-study-clip.tistory.com @ResponseBody라는 어노테이션이 없으면 ViewResolver에게 던져서 템플릿엔진으로 처리하게 되고 @ResponseBody 어노테이션이 붙어있으면 데이터 그대로 내려주게된다..
개인정보 '개인정보란 살아 있는 개인에 관한 정보를 말한다.' 위 문장은 개인정보 보호법 제 2조 1항에 정의된 문장이다. 좀 더 구체적으로 기술하면 살아있는 개인에 관한 정보로서 성명, 주민등록번호, 이미지, 영상 등을 통하여 개인을 식별할 수 있는 정보라면 모두 개인정보에 포함된다. 이렇게 때문에 얼핏보면 되게 간단할 것 같지만서도 개인정보의 범위는 상당히 넓다. 유튜버들이 자신의 채널에 목소리가 나오고, 얼굴이 나오는 것도 모두 개인정보에 해당되고 그냥 우리가 집밖으로 나와서 활동을 하는 것도 행동적, 신체적 특징이라는 정보가 노출되고 있는 상태이기 때문에 길거리에 만연한 CCTV도 개인정보보호법의 영향을 받고 있는 것이다. CCTV는 원칙적으로 공개된 장소에서 설치, 운영되지 못하도록 규정되어있다..
State 개념 리액트에서 State는 Component의 데이터 상태를 말한다. 한마디로 State란 개발자가 정의한 변경 가능한 데이터를 말하며 이는 자바스크립트 객체로서 존재한다. KeyPoint는 렌더링이나 데이터 흐름에 사용되는 값만 state에 포함시켜야 한다는 점이다. 왜냐하면 State가 변경될 경우 Component가 다시 렌더링 되기 때문에 그 외의 데이터가 State로 작성되면 불필요하게 다시 렌더링되어 성능저하를 초래하기 때문이다. 따라서 렌더링이나 데이터 흐름에 사용되지 않는 값들은 Component안에 instance field로 정의해서 사용한다. useState useState는 React의 내장 Hook 중 하나로, 함수형 컴포넌트에서 상태를 관리할 수 있게 해준다. 이는 ..
Component 합성 리액트에서는 Component안에 또 다른 Component를 사용할 수 있다. 따라서 복잡한 화면을 여러개의 Component로 구성할 수 있다. 예시) function Welcome(props) { return Hello, {prop.name} ; } function App(props){ reutrn( ) } ReactDom.render( , document.getElemnetById("root") ); 위 코드를 보면 Welcom 컴포넌트를 prop 를 다르게하여 여러번사용하는 것을 볼 수 있다. App이라는 Compoent는 Welcome이라는 컴포넌트를 포함하고 있는데 이러한 것을 컴포넌트 합성이라고 한다. Component 추출 컴포넌트 합성과 반대로 복잡한 컴포넌트를 ..
Component란? 리액트의 컴포넌트는 아래의 그림과 크게 클래스 컴포넌트와 함수 컴포넌트로 나누어 볼 수 있다. 리액트 초기버전에는 클래스 컴포넌트를 주로 사용하였으나 사용의 불편함이 대두되어 이후에는 함수 컴포넌트를 개선하여 사용하게 되었다. 함수 컴포넌트를 개선하면서 만들어진 것이 훅(Hook)이다. 훅이란 class를 이용한 코드를 작성할 필요 없이 state와 여러 React 기능을 사용할 수 있도록 만든 라이브러리이다. 이 훅을 통해서 함수 컴포넌트도 클래스 컴포넌트처럼 사용할 수 있다. Function Component(함수형 컴포넌트) 모든 리액트 컴포넌트는 pure function과 같은 역할을 해야한다고 했다. 이는 곧 리액트 컴포넌트를 일종의 함수라고 생각한다는 것이다. 다음의 예시..