1. publish할 폴더의 package.json 파일 확인하기 > publish할 폴더 내부에 기본적으로 package.json 파일이 생성되었는지 확인한다. 사용자가 해당 package를 설치하면서 package.json 파일도 동일하게 생성되고, react
정말 다수의 개발환경, 체감상 90% 이상은 Mac체제에 특화되어 있다. 지금까지 window만 사용한 개발자들에게 개발환경을 구축하는 것은 매우 쉽지 않은 일이고, 손도 많이 필요한 번거로운 작업들이 많다. 특히 매번 CLI 명령을 window가 인식하지 못해 G
## 1. express middleWare > 기본적으로 middleWare는 처리과정 중간에서 간섭을 하여, 데이터나 요청 결과를 같이 공유하는 개념의 기능이다. express는 url 요청(엔드포인트)에 대한 결과를 보내주는 promise의 일종이다. ```
## 1. module exports - require > 기존 javascript 문법에서의 파일 불러오기 방식 한 파일 내에서 함수, 클래스, 변수 등을 다른 파일에서 사용할 수 있도록 한다. ```javascript const tables = db.defin
git init 및 commit의 별도 설정이 없다면 master branch로 push 한다.git init : 변경관리점 생성git add . : 해당 경로에서의 변경점을 git에 반영→ 현재까지의 git branch는 master이다.git remote maste
다른 개발자가 만든(작성한) 코드(혹은 기능/tool)로, 사용자가 프로젝트를 위해서 빌려 사용한다.USER CAN CONTROL사용자가 필요할 때마다 특정 코드의 집합, 혹은 기능을 불러와 사용한다.지역적으로 사용하기 때문에 다른 라이브러리로 대체가 용이하고, 전체적
HTML은 보통 화면 랜더링을 하기 위한 파일이고, js은 내부적인 동작을 구성하는데 활용하는 파일이다.HTML 내부의 script에서 logic을 작성할 수도 있지만, 보통은 js파일과 HTML을 나누어서 구성한다.HTML과 js파일을 연결하기 위해 src를 통해 경
한 지점에서 다른 지점으로 데이터가 전달될때, 그 중간에서 데이터를 중개하는 요소 혹은 기능을 일컫는다.body parser는 이러한 middleware의 한 종류이다.주로 client가 보내오는 요청(request)을 조회/가공하기 위하여 사용하며, 이때의 middl
express에서 활용하는 file 경로는 정해진 default 값(경로)을 준수해야 한다.express와 같은 framework를 활용하면서 자신만의 file directory를 구성한다면, 반드시 file을 읽을 수 없다는 오류를 마주하게 된다.상대경로, 절대경로에
사용자 정보에 대한 프로그래밍을 진행하면서 가장 기본적으로 염두에 두어야할 사항은 데이터의 안전한 저장이다.데이터의 안전성을 높여주기 위한 가장 기본적인 방법은 암호화 및 해싱이다.암호화와 해싱은 원래 데이터를 보호해준다는 기능을 제공하는 목적에선 동일하지만, 그 원리
head기본적으로 head는 문서에 대한 정보이며, 화면에 출력되지 않는 내부적인 정보이다.title→ 문서의 제목을 나타내며, tab에서 확인할 수 있는 정보이다.meta charset→ HTML언어에 대한 정보이다.→ 웹사이트를 출력해주기 위한 기본 폰트 설정에 대
1. HTTP module by node.js > express를 통한 REST API를 사용하기에 앞서, node.js에서 제공하는 HTTP module을 활용하여 기본적인 server를 구성해본다. 2. server 작동의 기본 원리 2-1. server는 E
file open, read, save 등 file을 다루기 위한 기본적인 method들을 이해한다.지금 활용하는 file system method들은 default pattern이 아닌, 사용자가 지정한 class나 객체에 apply하는 개념으로 인터페이스를 수정하면
기존에 작성하였던 filesystem과 더불어, 알아두면 유용하게 사용할 수 있는 fs API를 알아둔다.const fs = require('fs')내부적인 file system에 접근하여 파일을 CRUD할 수 있는 API를 제공한다.file의 내용을 읽는다.fs.re
기본적인 client request, URL 요청에 대한 정의를 해주기 위해 사용하는 module.app.get, app.post, app.use, ...동일한 URL Request(path)에서 REST API에 따른 endpoint를 다르게 설정할 경우쉽게 말하면
리눅스를 제어하는 CLI환경(명령어기반 인터페이스)에서 명령어 형태는 standard form과 GNU extension form이 존재한다.기본적으로 유닉스 호환 혹은 유닉스 체계 지원하는 환경에서 명령어를 작성한다고 가정하면서, 컴퓨터가 달라져도 명령어에 대한 확장
github와 같은 형상/버전관리를 하는 도구이다.다만 github가 CLI를 통해 진행된다면, sourcetree는 이를 GUI로 구성하여 조금 더 사용자에게 친숙한 인터페이스를 제공한다.체크아웃 : 현재 사용자가 작업하고 있는 branch를 의미한다.브랜치를 통해
"서버의 요청을 처리한다", "데이터를 다룬다"toy project와 같이 규모가 작은 프로젝트를 진행하거나, 학습 목적의 localhost server를 구성하였다면 장담컨대 가장 많이 활용하는 도구가 express일 것이다.물론 express보다 훨씬 간편하고 직관
query string 관련 - URL에서 변수 확보하기 https://velog.io/@yiyb0603/React-Router-dom%EC%9D%98-%EC%9C%A0%EC%9A%A9%ED%95%9C-hooks%EB%93%A4 window.location.path
frontend에서 작업을 하다보면 무한 스크롤과 같은 화면 관련 동작을 처리하는 경우가 많이 생긴다.이때 사용자에게 보여지는 화면이나 보여지지 않는 화면(document area) 등을 잘 구분하면 frontend 작업하기가 좀 더 용이해진다.특히 무한 스크롤 기능을
일전 무한스크롤을 구현하면서 화면에 대한 개념을 알아보았는데, 좀 더 정확하고 구체적으로 화면요소(Geometric elements)를 이해하도록 한다.먼저 Element size and scrolling이라는 사이트에서 관련 개념들을 자세히 설명해주고 있다.일단 일전
sourcetree를 활용하여 버전관리를 진행하다보면 다른 branch로 체크아웃(작업장소를 옮기는 과정)하는 상황이 빈번히 발생한다.이때 commit을 하지 않은 상태에서 다른 branch로 체크아웃할 경우 먼저 commit을 하라는 경고 알림이 오는데, 이전 작업을
frontend 작업은 기본적으로 사용자 화면에 따라 layout이 어떻게 구성될지 고려하면서 이루어진다.이때 사용자 화면을 구성하는 여러 요소들과 개념들이 있는데, 그 중 가장 기본적이면서 근래 무한스크롤 동작을 구현하면서 알게된 부분들을 정리하고자 한다.먼저 사용자
stack : 데이터의 정렬 순서가 기준, 후입선출queue : 데이터의 정렬 순서가 기준, 선입선출priority queue : 데이터 우선순위(크기, 비중) 기준, min/max heap 자료구조 활용리스트에 넣어 선형탐색 및 조건확인 후 추출할 수 있지만, hea
계층적으로 데이터를 표현하기 위해 사용하는 자료구조루트노드(parent node) : 부모가 없는 최상위 노드단말노드(leaf node) : 자식이 없는 노드크기(size) : 노드개수루트노드로부터의 특정 노드까지의 거리(depth) : 깊이깊이 중 최대값(height
React라는 javascript 기반 프레임워크/라이브러리에서도 쿼리스트링 개념이 많이 활용되었는데, 지금 프로젝트를 진행하면서 java와 javascript 전체적으로 상당히 많은 부분이 겹치고 있다는 생각이 들고 있습니다.일단 쿼리스트링은 선생님께서 말씀하신대로
Application Programming Interface, 말 그대로 프로그램(application) 사이에서 소통하고 관련 데이터를 확보하기 위해 사용하는 개발자들 간의 약속이자, 약속된 요청이다.API는 URL 요청과 같이 특정 데이터를 얻어올 수 있는 경로를
fetch는 기본적으로 조회의 의미를 가지고 있고, 업무에 따라 다르겠지만 보통은 두가지 의미로 이해하면 좋을 것 같다.fetch는 데이터를 실시간으로 작업하는 과정에서 많이 사용하고, 이러한 점에서 batch와 상이하다.node.js에서 특정 url로 부터 data를
Really Simple Syndication, Rich Site Summary.간편한 조합, 요약을 제공하는 사이트라는 의미를 가지고 있다.블로그나 뉴스와 같이 매일 새로운 컨텐츠, 내용, 글 등이 올라오는 사이트들은, 그러한 새로운 컨텐츠들을 종합하여 별도의 공간
more 파일이름파일 내용을 한번에 한 화면에 나타낼 수 있는 최대로 보여주고, 그 이후엔 사용자 입력에 따라 내용을 보여주는 유닉스 명령어이다.vi와의 차이점이라 한다면, 왼쪽 하단에 보여지는 읽은 정도(%)가 보여진다는 점이다."유효하지 않은 와이드 문자입니다" 에
두 파일 공통적으로 데이터를 저장하고, 특히 Related data를 조작하기 위해 많이 사용한다.xls우리가 보통 알고있는 엑셀파일로, Excel 워크북과 sheet 등의 작업영역을 모두 포함하는 파일이다.csv쉼표로 구분된 자료들이라는 뜻으로 일반 텍스트 파일이다.
VBScript에서Chr코드값 = 해당 코드에 해당하는 문자 Asc"문자" = 해당 문자에 해당하는 코드VB Script에서 "\\"와 같은 문자는 인식하지 못하거나, 인식을 하더라도 시간이 지나면 공란처리가 될 가능성이 높다.이러한 일을 방지하기 위해, raw 문자
VB Script에서 split 함수는 특정 구분자를 통해 문자열을 분할하고, 이를 배열 형태로 저장해주는 함수이다.local file system을 통해 받아온 fileName(=파일이 존재하는 전체 경로)을, Chr(92)라는 문자를 구분자로 하여 분할 및 저장한다
지정한 길이(크기) 만큼 지정한 문자로 문자열을 채우는(메꾸는 개념) 함수이다.LPAD("값", "총 문자길이", "채움문자")EMP_NAME = 'HYOKYUN'인 문자열이 있다고 하면, LPAD 채움문자에 따라 앞에서부터 문자열을 메꾸어 나간다.LPAD(EMP_NA
이와 같이 VBScript에서 배열을 선언했다고 하자.(VBScript상에서 As를 통해 별도의 자료형을 선언해주지 않는다면 기본형 자료형으로 초기화되는듯 하다)해당 배열의 인덱스를 선언해주지 않은 경우로, 이렇게 배열 인덱스를 별도로 만들어주지 않았다면 동적배열이라
javascript, vbscript 등에서 사용하는 함수로, 문자열을 연산화 및 로직화하여 실행하게 해주는 함수이다.연산을 문자열화하여 이를 처리하려고 할때, 두개 이상의 문자열을 입력받아 바로 숫자로 처리하려고 할때 본래 "2+2" 문자열이지만, eval 함수에 의
1. 팝업 팝업창은 특정 웹사이트 혹은 브라우저에서 또 다른(새로운) 브라우저 페이지, 웹사이트를 띄우는 것이며 광고 및 알람 목적의 창이다. 새로운 브라우저 페이지, 웹사이트를 띄우는 것이므로 기존 브라우저 페이지와는 아무런 관련이 없고, 다만 브라우저에서 해당
숫자를 나타내는 type이다.x는 최대 유효숫자 자릿수, 쉽게 말해 소수점까지 포함한 숫자의 자릿수를 의미한다.y는 소숫점 자릿수를 의미한다. x에서 y를 뺀 수가 정수부의 자릿수가 된다.NUMBER(x, y)의 개념 - https://bebeya.tistor
전위, 중위, 후위연산에서 가장 중요한 것은 연산자와 피연산자를 구별하는 것이다.이 구별이 잘 이루어진다면 연산과정, 연산을 전환하는 과정 모두 어렵지 않게 이해할 수 있다.위와 같은 전위식이 있고, 이를 후위식으로 바꾼다고 하자.가장 먼저 해야할 일은 이 식이 전위식
흔히 "제어"라고 하면 사용자, 개발자 입장에서 필요할때마다 제어관련 컨트롤러 및 기능을 호출하여 해당 시점에서 적절한 동작이 이루어지도록 하는 흐름(flow)을 떠올릴 것이다.이러한 흐름은 기본적으로 객체를 통해 이루어진다고 생각하면 이해가 쉽고, 제어 역행 역시 객
지금까지 배열을 선언하고 사용할때 당연하게 생각하면서, 아무런 생각없이 하였는데 이번 기사 공부를 통해 아직 개념이 미흡한 부분이 많다는 것을 느끼게 되었다.말 그대로 1차원 배열이다.C언어 기준으로 중괄호내 원소를 나열하여 나타내고, 한 배열안에 속한 원소들은 반드시
개념, 목적, 지향점Java hashMap 등 map 함수에서 각 요소들은 Key-Value로 서로 연결되어 저장된다.Map 구조에서 Key-Value의 관계는 1:1 대응관계이다.이러한 대응관계, 매핑변수에 대해 Java 사상이라 한다. 모델링에서도 사용할 수 있는
웹 애플리케이션 간 데이터 통신을 하는 애플리케이션 프로그래밍 인터페이스(API)를 구축하는 방법을 정의한다.REST는 프로토콜은 아니고 하나의 체계이자 통신형태를 정의하는 방법이라 보면 된다. 반면 SOAP는 W3C에서 유지하는 공식 프로토콜이다.SOAP는 다른 언어
API를 통신(대내->대외기관으로 데이터를 송수신할때)하면서 하나의 데이터를 동시에 송신요청을 하려고 한다. 어떻게 제어 해야할까?이 물음에 대한 해답을 찾으려면 동시성 제어에 대해 알아보면 좋을 것 같다.2\. TBD
다건 처리 시 매개변수 전달을 위한 DTO 객체 생성 시 단순 값 복사 / 내부적으로 또 다른 신규(중복) 객체 생성하는 방법을 유의해야 한다.자바가 메모리 누수를 방지하기 위한 gc가 있긴 하지만, 이것도 gc 상황을 만족하지 않는다면 의미가 없으므로 반드시 고려하면
동시에 여러 스레드가 insert, update를 요청할 때 중복 exception없이 안정적인 트랜잭션을 보장하기 위한 여러 방법이 있다.쿼리에서 for update를 활용한다면 해당 row 데이터 처리 시 lock이 걸려 select, update가 모두 불가능해지
대용량 통계 쿼리 작성 시 보통 데이터를 추출할 대상(기준) 및 그 대상에 대해 데이터를 추출할 합계(산출) 기준 등을 분류하고 이를 어떻게 다루어야 할 지 고민이 많이 된다.가독성과 성능적인 부분을 많이 고민해야 하는데, 일단 고민의 시작이 보통 WITH절과 서브쿼리
일전 작성한 동시성 제어에서 이어지는 글이며, 현재 현업에서 통용하며 단순하게 제어를 할 수 있는 방법을 기술한다.쿼리/DB 차원의 동시성 제어 \-> 해당 행에 대한 처리를 진행할 경우 row lock을 하는데, 이때 for update wait ms or 채번 자체
성능 및 부하테스트를 진행할 경우 가장 먼저 보는 지표가 메모리의 점유율이다. 즉 컴퓨터가 해당 성능을 수행하기 위해 얼마나 많은 메모리를 사용하고 있는 지를 살펴본다.이 성능/부하 테스트의 요지는 결국 다수의 사용자가 몰릴때 DB 과부하 여지가 존재하는가(쿼리성능),
성능을 고려한 구조화 작업을 진행하면서 객체지향성에 대해 다시 한번 의미를 돌이켜보는 시간이 되었고, 이 과정에서 일급 객체와 일급 컬렉션에 대한 개념을 알게 되었다.일급 객체와 일급 컬렉션을 잘 이해하면, 가장 효율적으로 객체지향성을 구현할 수 있을 것이란 생각이 들
## 1. 개요 - 무조건 JPA가 좋은가? JPA를 사용해야 하는가? ## 2. JPA의 개념 - java application에서 DB와 상호작용하기 위한 표준 API, 객체지향 프로그래밍에서 RDBMS와의 매핑을 용이하게 해주는 도구이다. - ORM(Obje
## 1. 개요 - 30~50만건의 대용량 데이터를 기반으로 특정 데이터를 산출해야 할 경우 - 특히 산출 데이터의 기준이 달라 WITH절 혹은 서브쿼리를 통해 기준 테이블을 다르게 설정해야할 경우 상기와 같은 상황에서 효율적으로 데이터를 산출하는 방법을 찾아보았다
## 1. 개요 단순한 조회에서부터, 한정된 자원에서 조금이라도 성능 개선을 이루기 위해서는 시스템 아키텍칭적인 요소에 의지하기 보다는 일단은 개발 역량을 높여 방안을 찾는 것이 훨씬 중요하고 빠르다. ## 2. 연결관계 시스템 아키텍칭에서 성능에 미칠 수 있는
비즈니스 처리 로직을 리팩토링하면서 좋은 참고 자료가 있기에 공부해보았다.1) 아예 조건 자체를 함수로 바꾼다. 이때 함수의 return type은 조건 자체, 즉 문자열이다.2) Early Return - 조건을 만족하여 바로 return할 수 있는 항목은 바로 re
대용량 통계 쿼리 성능 개선 작업을 진행하면서 알게된 점을 기록하였다.50만건의 데이터에서 3000건의 서로 다른 기준의 통계를 산출하는 데이터 조회 시 최초) 10초 이상 \-> 기준 데이터의 조건을 최대한 설정하여 데이터 부피를 감소 \-> 5초 \-> PARTIT
성능 개선 작업을 하면서, 인덱스 처리하는 작업이 많아졌는데 전산처리(INSERT/UPDATE)할때 어떠한 관계가 있는지 궁금해서 관련 내용을 찾아보았다.보통 인덱스 처리 시 처리성능이 안좋아진다고 들었는데, 꼭 그렇지만은 아닌것 같았다.체결내역을 저장/수정할 때 성능
전산처리를 할 때 공백을 처리하는 방법은 여러가지가 있다.관련한 방안을 찾아보면서, 단순한 등록/수정 처리를 하더라도 깊게 고려해야할 부분이 존재한다는 것을 느끼게 되어 기록한다.사용법 : replace(" ","") 공백 1칸, 즉 찾고자 하는 문자열 그 자체를 찾아
통계 산출 쿼리 튜닝을 진행하면서, 서브쿼리 및 WITH 절 연산 최소화기준테이블 최소화최종적으로, 이를 위한 대용량 데이터 산출 시 성능 개선을 위해 소계(SUM OVER PARTITION)을 사용해야 했다.이때 GROUP BY로 1차 기준 데이터를 산출하고, 이를
대용량 전산 처리 성능 개선을 진행하면서 배치 관련한 개념을 많이 접하게 되었는데, 관련 개념들을 확실히 알고있는게 좋을 것 같기에 기록해 놓는다.스케쥴러\-> 주기적으로 대용량 데이터를 일괄 처리하는 배치, 흔히 알고있는 배치일 것이다.ondemand\-> 사용자 요
전체적으로 로직을 살펴보면서 너무 시스템 아키텍칭 부분을 등한시하고 넘어가고 있지 않나는 생각이 들었다.관련 개념들을 알아보면서 시스템을 보는 눈이 더 성장하지 않을까하는 생각에 본 내용을 기록하여 남긴다.우리가 사용하고 있는 @Autowired, @SqlSession
트래픽 처리 관련한 성능 개선 작업을 진행하면서 근본적으로 처리할 수 있는 방안을 알아보았다. DB, Java에서 제어할 수 있는 방안은 한계가 있을 것이고, 더 큰 트래픽을 처리하기 위한 개념이나 여러 방안들이 더 존재할 것이라 생각하였다.이 과정에서 네이버 블로그에
일전에 대용량 트래픽 처리 관련해서 네이버 블로그에 좋은 개념 정리 글이 있어 읽어보았는데, 다른 방안을 찾다가 동일하게 좋은 내용이 있어서 추가 기록하게 되었다.이전의 방법은 아키텍칭, 하드웨어적인 제어가 많았지만 본 글의 경우 SW적인 제어이므로 향후 업무확장에 좋
로직 리팩토링, 최적화 작업을 진행하면서 자바독을 많이 참고하고 있는데 이 중 제너릭이 많이 보여서 이 참에 한번 정리해보고자 하였다.특히 제너릭은 사소하게만 생각하고 그냥 넘어가기도 하여서, 이해의 폭을 넓히는 차원에서 한번 정리해보았다.데이터 타입을 일반화하는 것이
최근에 CI/CD 자동화 관련하여 데이터 파이프라인 구축 이슈가 제기되었는데, 이 과정에서 데이터 사일로라는 용어를 알게 되었다.시스템 배포 측면에서 알아두면 유용하게 활용할 수 있을 개념일 것 같아서 정리해둔다.조직 내에서 데이터가 독립적으로 관리되어 다른 부서 및
한창 소스 구조화 작업 중인데, 다른 개발자 소스까지 협업을 하다보니 충돌이 꽤 빈번하게 발생하고 있다.다른건 괜찮은데, 특히 git 작업을 하면서 stage 단계에서 충돌이 발생하여 pull, merge의 작업을 진행할 수 없을때 다음과 같이 해결하였다.이 내용이 의
javascript 로직에서 동적변수를 바인딩하는 방법에 대해 찾아보았다.이 방법을 통해 여러 줄의 자바스크립트 로직을 한줄로 축소할 수 있고, 동적 바인딩 변수와 문자열을 적절하게 혼합 사용하여 파라미터 구성 등 원하는 형태로 적재적소 활용가능하다는 점에서 기억할 만
1. 개요 PIVOT은 오라클에서 사용할 수 있는 기능 중 하나로, 단순히 정렬을 바꾸는 기능뿐 만 아니라 고정적으로 보여주어야 하는 항목에 대해 활용할 수 있는 기능 중 하나이다. 특히 서브쿼리를 과도하게 사용하여 가독성과, 집계 함수 다중 사용으로 인한 성능 문제를 개선할 수 있는 방안이기도 하다. 피벗을 사용할 수 있는 방법은 크게 두가지로, 기...
개발의 편의성을 위해 현재 RESTFul API 서버는 GET, POST, DELETE 세가지만 존재한다.그러나 개발자로서 왜 다른 메서드를 사용하지 않을까하는 의문점이 생겼고, HTTP 표준을 지키고 진정한 REST/RESTful API란 무엇인지 한발자국이라도 더
오늘 우연히 개발환경과 시스템 운영 환경이 다르다는 것을 알게 되었다.당연히, 모든 테스트 서버 환경은 개발 환경과 동일할 것이고 그게 맞다고 생각하였는데 반드시 그렇지만은 않았다.여쭤보니 라이센스 비용, 관리 비용의 절감 측면에서 개발 환경과 실제 운영 환경이 다를