전체 글 71

[MySql] TINYINT

효율적으로 데이터 형식을 결정하기 위해 TINYINT를 쓸 수 있다. 만약, 키에 대한 컬럼의 형식을 정할 때 SMALLINT로 지정할 수 있지만, SMALLINT는 -32768 ~ 32767 까지의 정수를 담을 수 있는데, 이때 키는 그 정도까지의 숫자가 필요하지 않기 때문에 TINYINT를 쓸 수 있다는 것이다. 하지만 TINYINT는 -128 ~ 127 의 숫자를 담을 수 있는데 127 이상인 키를 가진 사람들을 어떻게 담을지 걱정일 수 있다. 이때 TINYINT UNSIGNED로 쓴다면 0 ~ 255로 변환하여 쓸 수 있게 된다. 다른 정수형도 마찬가지로 UNSIGNED를 붙이면 0부터 범위가 지정된다.

DataBase/MySql 2023.02.27

[MySql] HAVING절

HAVING 예를 들어서, 출력 된 결과 중에서 총 구매액이 1000이상인 회원에게만 어떤 조건을 주려한다면 아마 WHERE 절에 조건을 줘야하나 싶을거다. SELECT mem_id, SUM(price*amount) "총 구매금액" FROM buy WHERE SUM(price*amount) > 1000; GROUP BY mem_id; 그 생각대로 이렇게 하면 아마 바로 오류가 날 것이다. 이럴때 WHERE 대신 사용하는 것이 HAVING절이다. HAVING은 WHERE과 비슷한 개념으로 조건을 제한하는 것이지만, 집계함수에 대해서 조건을 제한하는 것이라고 생각하면 된다. 그리고 HAVING은 GROUP BY절 다음에 나와야 한다. SELECT mem_id, SUM(price*amount) "총 구매금액"..

DataBase/MySql 2023.02.24

[MySql] IN()

얼렁뚱땅뚱땅 개발하다보니 기초적으로 놓친것이 너무나 많다. IN() 만약 경기/전남/경남 중 한 곳에 사는 회원을 검색하려면 일일이 OR로 써줘야한다. SELECT mem_name, addr FROM member WHERE addr = '경기' OR addr = '전남' OR addr = '경남'; 이렇게말이다. 하지만 IN()을 사용하면 코드를 훨씬 간결하게 작성할 수 있다. SELECT mem_name, addr FROM member WHERE addr IN('경기', '전남', '경남'); 이렇게 말이다. 조건식에서 여러 문자 중 하나에 포함이 되는지 비교할 때는 IN()이 간결하다는 것을 알 수 있다.

DataBase/MySql 2023.02.24

최신 오픈소스 기술 트렌드(GraalVM)

2022년 12월에 진행한 전자정부 표준프레임워크 세미나를 회사 이사님께서 흥미롭다며 보라고 공유해주셨다. 내가 느끼기에도 꽤나 흥미로운 내용이었다. 현재 어플리케이션을 실행할 때 각각 작업에 맞는 서로 다른 언어들을 사용하고, 자바와 융합되는 환경이 구성되어지고 있는데, 이것은 시스템의 복잡성과 어플리케이션 실행에 있어서 시간적은 지연을 일으키게 된다. 이러한 문제점을 보완 시키고자 나온 것이 GraalVM인 것이다. GraalVM(그랄브이엠)으로 읽는다. G랄브이엠인줄; GraalVM, New Technology in Java 자바 쪽의 jvm 새로운 기술로, 낮은 메모리와 높은 처리량을 가지고 있기 때문에 기존 jvm보다 50% 빠르고, 기존 jvm 에서 GraalVM으로 변경만 해도 성능향상이 1..

기타 2023.02.03

[개발일기] 배열, 객체 복제하기

배열이나 객체를 복제할 수 있다. 먼저 배열로 예를 들어보자면 var arr = [1,2]; var arr2 = Array.from(arr); console.log(arr, arr2, arr === arr2); // 출력 결과물 = [1,2] [1,2] false Array.from()을 통해서 배열을 복제할 수 있고 arr와 arr2는 서로 다른 값이다. 객체 복제의 예로는 var a = {name:mandoo}; var b = Object.assign({},a); console.log(a,b,a===b); //출력결과 = {name:mandoo} {name:mandoo} false b.name = 'dooman'; console.log(a,b,a===b); //출력결과 = {name:mandoo} {..

[react] shouldComponentUpdate

성능을 향상시키기 위해서 컴포넌트의 render 함수가 실행될지 안될지를 개발자가 결정할 수 있도록 하는 특수한 약속의 함수 shouldComponentUpdate 가 있다. shouldComponentUpdate(newProps, newState){ console.log('=====toc render shouldComponentUpdate' ,newProps.data, this.props.data); return false; } 이 코드는 해당 컴포넌트의 render함수 전에 작성한다. newProps.data 로는 바뀐값을 알 수 있고, this.props.data 를 통해서 현재 값을 알 수 있다는 것이다. shouldComponentUpdate 함수의 결과값이 true 면 render함수가 호출되..

FrontEnd/react 2023.02.02

[개발일기] .concat

배열에 원소를 추가할 때 .push를 자주 쓰곤 했는데 .concat이라는 기능을 알게 되었다. .concat도 똑같이 배열에 원소를 추가하는데, .push 와 뭐가 다를까? 바로 .push는 배열의 원본에 원소를 추가하는것이라면, .concat은 배열의 원본은 건드리지 않고 조작하는 것이다. 코드로 예를 들자면, var arr = [1,2]; arr.push(3); // 이라면, arr를 출력했을 때 [1,2,3]이 출력된다. var arr2 = [1,2]; var result = arr2.concat(3); //이라면, result는 [1,2,3]이 되지만 arr2를 출력해보면 [1,2]가 출력된다. state의 값을 바꿔야 할 때 .push를 쓰지 말고, .concat처럼 새로운 데이터를 추가하는걸..

[개발일기] e.preventDefault

event 함수 속성중에 preventDefault가 있다는 것을 알았다! 이 속성은 함수의 기본적인 동작을 못하게 막을 수 있는 기능이다 예를 들어 *밑의 코드들은 리액트 코드이므로 코드 문법이 조금 다를 수 있다. onClick={function(e){ alert('hi'); }} 이런 코드라고 보면 onClick으로 클릭했을 때 alert가 띄워지고 확인 버튼을 누르면 깜빡하면서 화면을 다시 로드하게 되는데, 이때 다시 로드하는 것을 막기 위해서(다시 로드하고 싶지 않을 때) e.preventDefault를 사용하는 것이다. onClick={function(e){ console.log(e); e.preventDefault(); alert('hi'); }}