시간별 데이터 공백 그래프를 엑셀로 그리는 작업 필요

 

1,  데이터베이스에 있는 데이터를 sql 문으로 긁어오는 작업

 

 

2, HeidiSQL 데이터를 CSV로 한 번에 저장할 수 있다.

https://parksrazor.tistory.com/213

 

MariaDB에서 HeidiSQL 데이터를 CSV로 한번에 이동하기

하이디SQL 에서 아래와 같은 쿼리를 실행합니다. 위 player 결과 테이블에서 우클릭 하면 다음 화면이 뜹니다. 격자 행 내보내기를 클릭하세요. 위와 같이 하면 csv 와 json 파일이 생성된 것을 볼 수

parksrazor.tistory.com

 

3, timestamp(m/d/yyyy h:mm)를 mdyyyy와 hmm으로 쪼갠 다음에,

일별로 속한 데이터를 분류해내기

 

3-1)  = INT( 숫자 )로 연월일 분리 후 timestamp와 INT(timestamp)를 서로 빼서 시간 분리를 한다.

 

https://www.oppadu.com/%EC%97%91%EC%85%80-%EB%82%A0%EC%A7%9C-%EC%8B%9C%EA%B0%84-%EB%B6%84%EB%A6%AC/

 

엑셀 날짜 시간 분리, 함수 하나로 3초 만에 해결하는 법 - 오빠두엑셀

엑셀 날짜 시간 분리, 함수 하나로 3초 만에 해결하기 엑셀 날짜 시간 분리 목차 바로가기 영상강의 예제파일 다운로드 오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니

www.oppadu.com

 

3-2)

=FILTER(TEXT(G2:G100,"h:mm:ss AM/PM"), F2:F100=R2)

 

https://www.oppadu.com/%EC%97%91%EC%85%80-filter-%ED%95%A8%EC%88%98/

 

엑셀 FILTER 함수 사용법 및 실전예제 :: 동적배열함수 - 오빠두엑셀

엑셀 FILTER 함수 사용법 및 실전예제 총정리 :: 동적배열함수 FILTER 함수 목차 바로가기 함수 요약 엑셀 FILTER 함수는 입력한 조건을 바탕으로 데이터를 필터링하는 함수입니다. 함수 구문 = FILTER (

www.oppadu.com

또는

 

=IFERROR(INDEX($C$2:$C$10516, SMALL(IF(H$1=$B$2:$B$10516, MATCH(ROW($B$2:$B$10516), ROW($B$2:$B$10516)),""),ROWS($A$1:A1)),COLUMNS($A$1:$A$1)),"")

 

https://www.oppadu.com/vlookup-%EC%97%AC%EB%9F%AC%EA%B0%9C-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0/

 

엑셀 VLOOKUP 함수 여러개 출력 공식 - 단계별 정리 - 오빠두엑셀

엑셀 VLOOKUP 함수 여러개 출력 공식 동작원리 - 단계별 정리 엑셀 VLOOKUP 여러개 출력 공식 목차 바로가기 영상강의 예제파일 다운로드 오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제

www.oppadu.com

 

 

으로 날짜별로 데이터 분류 완료

 

4, 이렇게 하면 그래프를 만드는데 적합한 데이터 구성이 아니기 때문에, 다시 조정하기로 했음.

 

SELECT
 CASE
  WHEN '조건' THEN '조건에 만족할 때 출력할 데이터'
  ELSE '조건에 만족하지 않을 때 출력 데이터'
 END
FROM 테이블;

 

https://chocoball3.tistory.com/152

 

[SQL] 오라클 CASE WHEN THEN 표현식 사용하기

SQL을 이용하여 데이터를 출력할 때 조건을 사용하여 표현할 수 있는 CASE문이 존재합니다. DECODE 함수와 비슷하지만 더욱 확장적입니다. 사용 방법은 그렇게 어렵지 않지만 DECODE보다는 조금 복잡

chocoball3.tistory.com

으로 조건에 맞는 데이터일 때 값을 넣어주는 case 문과

 

 

https://sksstar.tistory.com/74

 

[SQL] SQL 함수

기존의 프로그래밍 언어에서 함수를 사용하듯이 SQL언어에서도 다양한 종류의 SQL함수를 제공한다. SQL 함수에는 크게 단일행 함수와 복수행 함수로 나뉘어진다. 단일행 함수 : 입력 값이 단일 행

sksstar.tistory.com

위 예시처럼 월별로 column을 만든 후 조건에 맞는 값들을 출력하는 select 문을 이용한다.

 

SELECT 
substr(timestamp,1,10) as dt,
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '00' THEN 24 END, "") "00",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '01' THEN 1 END, "") "01",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '02' THEN 2 END, "") "02",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '03' THEN 3 END, "") "03",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '04' THEN 4 END, "") "04",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '05' THEN 5 END, "") "05",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '06' THEN 6 END, "") "06",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '07' THEN 7 END, "") "07",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '08' THEN 8 END, "") "08",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '09' THEN 9 END, "") "09",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '10' THEN 10 END, "") "10",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '11' THEN 11 END, "") "11",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '12' THEN 12 END, "") "12",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '13' THEN 13 END, "") "13",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '14' THEN 14 END, "") "14",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '15' THEN 15 END, "") "15",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '16' THEN 16 END, "") "16",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '17' THEN 17 END, "") "17",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '18' THEN 18 END, "") "18",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '19' THEN 19 END, "") "19",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '20' THEN 20 END, "") "20",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '21' THEN 21 END, "") "21",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '22' THEN 22 END, "") "22",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '23' THEN 23 END, "") "23"
from drforest.user_activity
WHERE entity_id = 98740 AND field_name = "GPS" and timestamp between '2022-08-02 00:00:00' and '2022-11-01 23:59:59'
GROUP BY
substr(timestamp,1,10),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '00' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '01' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '02' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '03' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '04' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '05' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '06' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '07' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '08' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '09' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '10' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '11' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '12' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '13' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '14' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '15' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '16' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '17' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '18' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '19' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '20' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '21' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '22' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '23' THEN 1 END, "")

 

으로 특정 날짜에 몇 시에 데이터 있는지 불러오기 완료

 

5, 월별로 여러 row가 가지고 있는 것들을 데이터 통합 기능으로 월별로 1개 row만 가지도록 한다.

 

https://m.blog.naver.com/aj4370/221497137124

 

엑셀 데이터통합 기능 사용하여 데이터 요약/계산 하기

엑셀 기능 중 데이터통합 기능에 대하여 소개해 드리겠습니다. 데이터통합 기능은 같은 시트내 또는 다른 ...

blog.naver.com

 

 

그래프에 넣을 수 있는 데이터 준비 완료

 

 

엑셀 그래프 시각화 완료

 

6, sql 문으로 데이터 추출 후 엑셀로 2차 가공해야 하는데 시간이 많이 잡아먹어 sql 문으로 최대한 해결해보려고 노력

 

6-1) before과 after로 나누고 임시 테이블의 row 개수 계산하는 작업

 

FROM 절에서 사용하는 서브쿼리인 인라인 뷰를 이용해서 임시 테이블을 만들고 데이터를 가공한다.
서브쿼리는 웬만하면 지양해야 하지만, 오로지 로컬에서 분류 목적으로 하기 때문에 사용한다.

 

https://gent.tistory.com/464

 

[Oracle] 오라클 서브쿼리 종류 및 사용법 (SubQuery)

오라클에서 쿼리문을 작성하다 보면 서브 쿼리(subquery)를 자주 접하게 된다. 서브 쿼리를 처음 접하면 아주 복잡하게 느껴지는데, 기능을 조금만 익히면 쿼리문을 작성할 때 아주 유용하게 사용

gent.tistory.com

 

SELECT
A.user,
case when substr(A.dt,6,2) >= '05' AND substr(A.dt,6,2) < '07' then "after"
when substr(A.dt,6,2) = '07' OR (substr(A.dt,6,2) = '08' AND substr(A.dt,9,2) <= '20') then "Before"
END as dt,
COUNT(A.hhmm) AS count
FROM (SELECT
entity_id AS user,
substr(timestamp,1,10) as dt,
case when substr(timestamp,15,2)<'10' then concat(substr(timestamp,12,2),':00')
when substr(timestamp,15,2) >='10' and substr(timestamp,15,2)<'20' then concat(substr(timestamp,12,2),':10')
         when substr(timestamp,15,2) >='20' and substr(timestamp,15,2)<'30' then concat(substr(timestamp,12,2),':20')
         when substr(timestamp,15,2) >='30' and substr(timestamp,15,2)<'40' then concat(substr(timestamp,12,2),':30')
         when substr(timestamp,15,2) >='40' and substr(timestamp,15,2)<'50' then concat(substr(timestamp,12,2),':40')
         when substr(timestamp,15,2) >='50' and substr(timestamp,15,2)<'60' then concat(substr(timestamp,12,2),':50')
     END as hhmm
FROM drforest.user_activity 
WHERE (entity_id = 2 AND field_name = "GPS" and timestamp between '2022-05-10 00:00:00' and '2022-08-20 23:59:59')
GROUP BY entity_id,
substr(timestamp,1,10),
case when substr(timestamp,15,2)<'10' then concat(substr(timestamp,12,2),':00')
when substr(timestamp,15,2) >='10' and substr(timestamp,15,2)<'20' then concat(substr(timestamp,12,2),':10')
         when substr(timestamp,15,2) >='20' and substr(timestamp,15,2)<'30' then concat(substr(timestamp,12,2),':20')
         when substr(timestamp,15,2) >='30' and substr(timestamp,15,2)<'40' then concat(substr(timestamp,12,2),':30')
         when substr(timestamp,15,2) >='40' and substr(timestamp,15,2)<'50' then concat(substr(timestamp,12,2),':40')
         when substr(timestamp,15,2) >='50' and substr(timestamp,15,2)<'60' then concat(substr(timestamp,12,2),':50')
     END) A
GROUP BY 
A.user,
A.dt

 

 

SELECT
A.dt,
case when SUM(A.00) = 0 then "" 
when SUM(A.00) > 0 then SUM(A.00) END AS "00",
case when SUM(A.01) = 0 then "" 
when SUM(A.01) > 0 then SUM(A.01) END AS "01",
case when SUM(A.02) = 0 then "" 
when SUM(A.02) > 0 then SUM(A.02) END AS "02",
case when SUM(A.03) = 0 then "" 
when SUM(A.03) > 0 then SUM(A.03) END AS "03",
case when SUM(A.04) = 0 then "" 
when SUM(A.04) > 0 then SUM(A.04) END AS "04",
case when SUM(A.05) = 0 then "" 
when SUM(A.05) > 0 then SUM(A.05) END AS "05",
case when SUM(A.06) = 0 then "" 
when SUM(A.06) > 0 then SUM(A.06) END AS "06",
case when SUM(A.07) = 0 then "" 
when SUM(A.07) > 0 then SUM(A.07) END AS "07",
case when SUM(A.08) = 0 then "" 
when SUM(A.08) > 0 then SUM(A.08) END AS "08",
case when SUM(A.09) = 0 then "" 
when SUM(A.09) > 0 then SUM(A.09) END AS "09",
case when SUM(A.10) = 0 then "" 
when SUM(A.10) > 0 then SUM(A.10) END AS "10",
case when SUM(A.11) = 0 then "" 
when SUM(A.11) > 0 then SUM(A.11) END AS "11",
case when SUM(A.12) = 0 then "" 
when SUM(A.12) > 0 then SUM(A.12) END AS "12",
case when SUM(A.13) = 0 then "" 
when SUM(A.13) > 0 then SUM(A.13) END AS "13",
case when SUM(A.14) = 0 then "" 
when SUM(A.14) > 0 then SUM(A.14) END AS "14",
case when SUM(A.15) = 0 then "" 
when SUM(A.15) > 0 then SUM(A.15) END AS "15",
case when SUM(A.16) = 0 then "" 
when SUM(A.16) > 0 then SUM(A.16) END AS "16",
case when SUM(A.17) = 0 then "" 
when SUM(A.17) > 0 then SUM(A.17) END AS "17",
case when SUM(A.18) = 0 then "" 
when SUM(A.18) > 0 then SUM(A.18) END AS "18",
case when SUM(A.19) = 0 then "" 
when SUM(A.19) > 0 then SUM(A.19) END AS "19",
case when SUM(A.20) = 0 then "" 
when SUM(A.20) > 0 then SUM(A.20) END AS "20",
case when SUM(A.21) = 0 then "" 
when SUM(A.21) > 0 then SUM(A.21) END AS "21",
case when SUM(A.22) = 0 then "" 
when SUM(A.22) > 0 then SUM(A.22) END AS "22",
case when SUM(A.23) = 0 then "" 
when SUM(A.23) > 0 then SUM(A.23) END AS "23",
case when COUNT(*) <= 18 then 0
when COUNT(*) > 18 then 1 END AS blank
FROM (SELECT 
entity_id AS user,
substr(timestamp,1,10) as dt,
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '00' THEN 24 END, "") "00",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '01' THEN 1 END, "") "01",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '02' THEN 2 END, "") "02",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '03' THEN 3 END, "") "03",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '04' THEN 4 END, "") "04",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '05' THEN 5 END, "") "05",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '06' THEN 6 END, "") "06",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '07' THEN 7 END, "") "07",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '08' THEN 8 END, "") "08",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '09' THEN 9 END, "") "09",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '10' THEN 10 END, "") "10",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '11' THEN 11 END, "") "11",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '12' THEN 12 END, "") "12",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '13' THEN 13 END, "") "13",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '14' THEN 14 END, "") "14",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '15' THEN 15 END, "") "15",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '16' THEN 16 END, "") "16",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '17' THEN 17 END, "") "17",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '18' THEN 18 END, "") "18",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '19' THEN 19 END, "") "19",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '20' THEN 20 END, "") "20",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '21' THEN 21 END, "") "21",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '22' THEN 22 END, "") "22",
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '23' THEN 23 END, "") "23"
from drforest.user_activity
WHERE entity_id = 2
 AND field_name = "GPS" and timestamp between '2022-05-10 00:00:00' and '2022-11-01 23:59:59'
GROUP BY
substr(timestamp,1,10),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '00' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '01' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '02' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '03' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '04' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '05' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '06' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '07' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '08' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '09' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '10' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '11' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '12' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '13' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '14' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '15' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '16' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '17' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '18' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '19' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '20' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '21' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '22' THEN 1 END, ""),
ifnull(CASE WHEN to_char(timestamp, 'HH24') = '23' THEN 1 END, "")
) A
GROUP BY
A.dt

 

 

엑셀에서 2차 가공 안하게 데이터 추출 완료

 

부연참고)

 

1)

컨트롤 + 쉬프트 + 화살표 아래쪽으로 셀 범위 선택하는 방법

수식 - 정의된 이름 - 선택 영역에서 만들기로 이름 정의 만드는 방법

 

https://hantip.net/379

 

일자별 시간별 매출현황 구하기

안녕하세요. 거래일자와 거래시간, 거래금액이 저장된 데이터가 있습니다. 이 데이터를 일자별 시간별로 나누어 거래금액 합계와 거래건수를 나타내려고 합니다. 실습 파일 다운로드 완성 파일

hantip.net

 

2)

[데이터] > [데이터 도구] > [중복된 항목 제거] 에서 엑셀 Excel 중복 데이터 없애기

 

https://mainia.tistory.com/1555

 

엑셀 Excel 중복 데이터 없애기

엑셀에서는 아주 간단하게 중복을 제거할 수 있는 방법이 있습니다. 중복된 항목 제거 기능이 그것입니다. 중복된 항목 제거 기능의 특징은 중복되는 값의 행 전체를 삭제할 수 있으며, AND 조건

mainia.tistory.com

 

3) 

TO_CHAR에 시간 지정 형식을 통해 비교하기

 

 

https://sorrow16.tistory.com/156

 

날짜 및 시간 형식 변환하기(TO_CHAR)

TO_CHAR는 날짜, 숫자, 문자 값을 지정한 형식의 VARCHAR2 타입 문자열로 변환하는 함수입니다. [사용법]TO_CHAR(날짜 데이터 타입, '지정 형식') 아래와 같이 날짜 지정 형식으로 변환하여 출력할 수 있

sorrow16.tistory.com

 

'개발' 카테고리의 다른 글

Odroid H2+ 하드 마운트  (0) 2023.02.21
2023년 2월 2주차  (0) 2023.02.14

 

 

https://www.hardkernel.com/ko/shop/odroid-h2plus/

 

(DISCONTINUED)ODROID-H2+ – ODROID

(DISCONTINUED)ODROID-H2+ OBSOLETED This product is no longer available. It has not been possible for us to clearly establish the future availability of a main component due to the global chip shortages, we have therefore decided to discontinue the producti

www.hardkernel.com

 

오드로이드에 리눅스 설치 후, 시노비 CCTV라는 NVR 오픈소스를 사용하였다.

호환되는 DRAM이 정해져 있기 때문에 신중히 골라야 한다. 

 

가성비인 디램리스 삼성 980를 사용하다가, 백업 용도로 안정성 있는 노트북용 HDD를 마운트시키기로 결정했다.

 

1, Shinobi 디렉토리로 이동 후 nano conf.json 열고 addStorage를 확인한다.

원하는 경로로 바꿔서 재시작할 수 있다.

 

 

2, Shinobi는 conf.json의 "addStorage" 변수를 사용하여 여러 스토리지 영역을 지원한다.

 

https://medium.com/@ShinobiSystems/how-to-save-recordings-to-additional-storage-spaces-2c6c8a5d0d3e

 

How to Save Recordings to Additional Storage Spaces

Your additional storage space can be something like NFS, a USB Hard Drive, or just another folder altogether. 3. Edit the addStorage variable. You may already have a value set as an example for a…

medium.com

 

3, HDD 연결 후 Odroid 케이스 조립

 

 

https://www.youtube.com/watch?v=lHhsMTlJXxM 

 

4) 우분투에 하드디스크 마운트하는 절차

 

4-1) 하드디스크 확인

sudo fdisk -l

4-2) 4TB 이하의 하드디스크 설치 시 파티션 생성

sudo fdisk /dev/sdb

 

4-3) 파티션 포맷

mkfs.ext4 / dev/sdb1

4-4) UUID 확인

sudo blkid

4-5) 디렉토리 생성 후 마운트할 디스크 추가

# 디렉토리 생성

sudo mkdir /mnt/storage1

# 부팅 때 자동으로 마운트하도록 설정

sudo nano /etc/fstab

#/etc/fstab 열고 확인한 UUID를 적어준다.

UUID=5CB7DAA4259AB3BD /mnt/storage1 ext4 defaults 0 0

4-6) sudo mount - a 명령어로 마운트 진행

 

https://ca.ramel.be/127

 

[UBUNTU] 우분투에 하드디스크 마운트하기

우분투에 ftp, smb, dlna 서버 등을 설치하기에 앞서 하드디스크를 인식하고 마운트하는 방법을 알아보려고 한다. 우분투가 설치된 메인 디스크를 저장공간으로 사용할 수도 있지만, 별도의 하드를

ca.ramel.be

 

6, 4-3) ext4로 파일 시스템을 포멧하는 과정에서 오류 발생

 

mkfs.ext4: Permission denied while trying to determine filesystem size

 

6-1) 해결 방안

 

루트로 이것을 시도해 보셨습니까? 

내가 아는 한 루트만 파일 시스템을 만들 수 있으므로 보고 있는 권한 문제는 

수퍼유저가 아닌 일반 사용자로 실행하는 것과 관련이 있습니다. "su -"를 수행하고 다시 시도하고 확인하십시오. 

 

https://www.linuxquestions.org/questions/slackware-14/unable-to-format-391718/

 

7, 4-6) sudo mount - a 명령어로 마운트 진행하는 과정에서 오류 발생

 

7-1) 해결 방안

 

 /dev/sda1 파일 시스템을 /mnt/storage1 디렉토리에 마운트하려면 다음을 사용한다.

sudo mount /dev/sda1 /mnt/storage1

 

https://jjeongil.tistory.com/1413

 

Linux : 파일 시스템 Mount, Unmount 하는 방법, 예제, 명령어

Linux 및 UNIX 운영 체제에서는 mount 명령을 사용하여 파일 시스템 및 USB 플래시 드라이브와 같은 이동식 장치를 디렉토리 트리의 특정 마운트 지점에 연결(마운트)할 수 있습니다. umount 명령은 마

jjeongil.tistory.com

 

8, 시간이 지나면 녹화 영상이 삭제되는 경향이 있는데, Account Settings에서 Max Storage Amount 재설정해서

삭제 텀 늘리기

 

https://www.reddit.com/r/ShinobiCCTV/comments/b5b6q3/whats_up_with_cronjs/

 

r/ShinobiCCTV - What's up with cron.js?

3 votes and 1 comment so far on Reddit

www.reddit.com


경로 설정 완료, 백업 영상 저장 완료

 

 

!) SSD DRAM 캐시’와 ‘SLC 캐싱’에 대한 설명

https://www.manzlab.com/news/articleView.html?idxno=22744 

 

SSD 성능, 롤러코스터 태우는 ‘DRAM 캐시’와 ‘SLC 캐싱’ - 맨즈랩

인텔·AMD가 차세대 CPU를 발표했다. 새 PC를 맞추기 위해 SSD를 구매하려고 하는 A씨. SSD는 무엇을 구매해야 할까? 지인에게 물었더니 성능 좋은 NVMe SSD를 추천한다. NVMe SSD에도 제품에 따라 순차 읽

www.manzlab.com

 

!) 오드로이드 H2와 GTX1080으로 고사양 에뮬 및 PC 게임 어느 정도까지 가능할까?

https://m.blog.naver.com/drangra/222037667875

 

오드로이드 H2+와 eGPU(GTX1080)로 고사양 에뮬 및 PC 게임 어느 정도까지 가능할까?

대한민국의 자랑 하드커널에서 오드로이드 H2의 업그레이드 버전인 H2+를 새롭게 선보였습니다. SBC(...

blog.naver.com

 

 

'개발' 카테고리의 다른 글

2023년 2월 4주차  (0) 2023.02.28
2023년 2월 2주차  (0) 2023.02.14

스프링 model.addAttribute로 값 전달 및 그래프로 시각화 필요성 

 

비교 및 손실율을 그래프로 나타내야 하기 때문에 직관적이고 유용한 막대 그래프 선정

 

우선은 협업 때문에, 로컬 DB 서버 외부 접속을 허용해야 했다.

 

1, mysql -u 유저네임 -p 패스워드 

MySql 윈도우 터미널로 접속

 

https://nickjoit.tistory.com/144

 

mysql 사용자추가/DB생성/권한부여

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다. MySQL 접속 및 데이터 베이스 추가# mysql -u root -p 사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다. mysql > use

nickjoit.tistory.com

 

2, mysql 사용자 추가/DB 생성/권한 부여를 통한 외부 접속 허용

 

https://nickjoit.tistory.com/144

 

mysql 사용자추가/DB생성/권한부여

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다. MySQL 접속 및 데이터 베이스 추가# mysql -u root -p 사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다. mysql > use

nickjoit.tistory.com

 

1) use mysql; 후 select host, user from user; 로 host와 user 확인

2) 외부 접근 허용된 사용자 추가

 

!) 로그인 오류 Access denied for user '' @ ''(using password: YES) 해결 방법

https://changun516.tistory.com/55

 

[Mysql 2059] 로그인 오류 Access denied for user '' @ ''(using password: YES)

오류 해결 Mysql을 Connet하는 경우 아래와 같은 Error 메세지를 만나는 경우가 종종 있습니다. 로그인이 불가하다는건데 문제는 다음과 같습니다. 0. 로그인 정보가 잘못된 경우. 1. 외부 접속을 열어

changun516.tistory.com

 

!) 유저 권한 주기 에러 ERROR 1410 (42000): You are not allowed to create a user with GRANT 해결 방법

https://dzzienki.tistory.com/22

 

MYSQL 유저 권한 주기 에러 ERROR 1410 (42000): You are not allowed to create a user with GRANT

글을 시작하기에 앞서 댓글을 달아주신 분들의 의견중 root 계정에 모든 권한 허용시 DB 가 외부에 노출이 되면 위험하다는 의견이 있었습니다. 만약 해당 사항이 있으시다면 이점 참고하여 주시

dzzienki.tistory.com

 

3, highcharts로 그래프 구현

 

1) 해당 사이트로 예제 확인하기

 

https://www.highcharts.com/blog/download/

 

Download Highcharts | Highcharts

Don't miss a byte Never miss important news, tips, and tricks that will help you get the most out of your Highcharts products. We won’t spam you, sell your contact info or do anything else that would betray your trust. By signing up you confirm to have r

www.highcharts.com

 

4. highchart에서 json 데이터를 전달하는 과정이 담긴 유튜브 영상.

 

https://www.youtube.com/watch?v=LolL95k57_Y 

 

1) highchart에서 json 데이터를 전달하기 위해 프론트 단의 $.ajax과 백 단의 @ResponseBody를 사용해야 했다.

 

https://velog.io/@nestour95/Spring-Json-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%ED%86%B5%EC%8B%A0

 

Spring) Json 데이터로 통신

스프링 공부하면서 form 이용해서 보내는 것 말고 어떤 식으로 데이터를 자바스크립트에서 스프링으로 보내는지 궁금해서 찾아보았다.Body가 아닌 주소에 데이터를 담아 보내는 형태key = value 형

velog.io

 

https://lifejusik1004.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-RequestBody-ResponseBody-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

[Spring] 스프링 @RequestBody, @ResponseBody 사용하기

@RequestBody, @ResponseBody 어노테이션을 사용하면 컨트롤러에서 JSON 데이터를 주고받을 수 있습니다. @RequestBody로 JSON 정보 받기 JSON 형태의 정보를 Map과 커맨드 객체로 변환하기 위해 jackson 라이브러

lifejusik1004.tistory.com

 

5, ajax 쓰던 도중 CORS 오류 발생

 

 

SOP란 같은 Origin에만 요청을 보낼 수 있게 제한하는 보안 정책을 의미하며,

Origin은 아래와 같은 구성으로 이루어져 있다.

* URI Schema(ex. http, https)
* Hostname(ex. localhost, naver.com)
* Port(ex. 80, 8080)

 

이 중에 하나라도 구성이 다르면 SOP 정책에 걸리기 때문에 ajax 요청 전송 불가

 

https://shinsunyoung.tistory.com/86

 

Spring Boot에서 CORS 적용해보기

안녕하세요! 이번 포스팅에서는 CORS가 무엇인지 간단하게 알아보고, Spring Boot에서 CORS를 적용하는 방법에 대해 알아보겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 저는 만들어둔 AP

shinsunyoung.tistory.com

 

!) 원인 파악

 

인텔리제이의 html 작성 중 built in preview라는 기능을 사용하면 포트가 63442가 됐는데, 인텔리제이의 임시 서버라고 예상하고 있다. 포트가 달라 SOP에 걸렸고, 우선 ajax 쓰는 도중 built in preview 기능을 쓰지 않는 게 좋다고 판단하였다.

 

https://velog.io/@gnoesnooj/CORS-%ED%95%B4%EA%B2%B0

 

CORS 해결

어떠한 주제에 대해서 요구사항을 나열하고, 이에 맞춰서 프로젝트를 단시간 안에 해결하는 방법으로 진행해보았다.나는 bit.ly 에서 해주는 것처럼 원래 URL을 단축 URL로 줄여서 리턴해주는 주제

velog.io

 

6, 프론트 단이 백 단에서 받아온 json 에서 json 안에 json 접근 방법

 

sample = '{ "key1": "val1", "key2": { "key3": "val2"} }'
json = JSON.parse(sample)
console.log(json['key2']['key3'])

 

https://okky.kr/articles/974197

 

OKKY - json 객체 배열안에 json객체 배열 접근 방법 알려주세요 제발...ㅜㅜㅜ

node로 데이터를 json데이터를 받아왔는데요json안에 또 json이 있는 구조인데 어떻게 접근해야하나요ㅠㅠㅠㅠ

okky.kr

 

7. 자바스크립트에서 문자열에 변수 사용하기(템플릿 리터럴)

 

var t1,t2;
t1 = 3;
t2 = 6;

console.log(`t1 = ${t1}, t2 = ${t2}`);

 

단 주의해야할 게,무조건 ` ` 으로 문자열을 묶어야 한다.

 

https://pang2h.tistory.com/116

 

JS: 문자열에 변수 사용하기(템플릿 리터럴)

자바스크립트가 ES6로 업데이트 되면서 나온 기능으로 문자열에서 변수명을 사용할 수 있도록 하는 기능이 추가되었다. 다른 프로그래밍 언어에서는 이미 지원이 되는 경우도 있으며(VB.Net, C# 등

pang2h.tistory.com

 

!) $ 사용 도중, Uncaught ReferenceError: $ is not defined 오류가 발생했는데 제이쿼리 (jQuery)가 제대로 로드 되지 않아서 발생한 것이다.

 

아래의 <script> 중 하나를 선택해서 추가한다.

// jQuery에서 제공하는 최신 버전의 jQuery URL
<script src="http://code.jquery.com/jquery-latest.js"></script> 
// jQuery에서 제공하는 3.5.1 버전의 jQuery CDN 호스트
<script src="http://code.jquery.com/jquery-3.5.1.min.js"></script>

 

https://joonpyo-hong.tistory.com/entry/JS-jQuery-is-not-defined-is-not-defined-%EC%98%A4%EB%A5%98

 

[JS] jQuery is not defined, $ is not defined 오류

개발자 모드(F12)에서 아래의 에러가 발생했다. Uncaught ReferenceError: jQuery is not defined Uncaught ReferenceError: $ is not defined 제이쿼리 (jQuery)가 제대로 로드 되지 않아서 발생한 것이다. 해결 방법 아래의 /

joonpyo-hong.tistory.com

 

8. JSON에서 object에 접근하기

 

 hobby : [
    { hobbys : "농구"}, //0
    { hobbys : "축구"}, //1
    { hobbys : "게임"}  //2
  ],

 

{ hobbys : "축구"} 에 접근하기 위해서는 obj.hobby[1].hobbys 로 접근하면 된다.

 

https://gamepp.tistory.com/18

 

[JSON] object에 접근하기

오늘은 JSON Object에 접근하는 방법을 알아볼것입니다. 정말 많이쓰이죠 JSON { key : value} 키벨류 라는 말을 정말 많이 들어보셨을 껍니다. JSON 이라는 문에 알맞는 key를 넣으면 그 key 에 맞는 value가

gamepp.tistory.com

 

9. 자바스크립트에서 배열의 끝에 요소를 추가하는 방법 중 push()가 있다.

 

var arr = ['a', 'b', 'c'];
arr.push('d');

// arr = ['a', 'b', 'c', 'd']

 

https://stonefree.tistory.com/50

 

[JavaScript] 배열(array) 생성, 추가, 삭제_new, push(), pop()...

자바스크립트에서 배열(array) 생성하기 1. 배열 리터럴 대괄호[]를 사용하여 배열을 만드는 방법 1) 초기값을 할당하여 배열 생성 var arr = [123, '가나다', true]; console.log(arr); 2) 빈 배열 생성후 배열

stonefree.tistory.com

 

10. 자바스크립트에서 Date의 set API로 시간을 더할 수 있다.

 

let date = new Date();
console.log(date)
// Add 1 day
date.setDate(date.getDate() + 1);
// Add 1 hour
date.setHours(date.getHours() + 1);
// Add 10 minutes
date.setMinutes(date.getMinutes() + 10);
// Add 10 seconds
date.setSeconds(date.getSeconds() + 10);
console.log(date)

 

https://codechacha.com/ko/javascript-add-time-to-date/

 

JavaScript - Date에 시간(일/시/분/초) 더하기

Date 객체에 시간(일, 시, 분, 초)을 추가하는 방법을 소개합니다. Date는 set/get API를 제공하며, 이 API를 이용하여 시간을 설정할 수 있습니다. Date.setDate() 날짜 설정, Date.setHours() 시간 설정, Date.setMin

codechacha.com

 

console.log로 그래프에 넣을 배열을 확인하면서 데이터 바인딩 완료

더 가다듬을 필요가 있지만, 그래프는 나중에 쓰이기 때문에 여기까지 작업

 

 

부연 참고)

 

1) meta viewport (메타 뷰포트 태그) 사용법

 

다양한 모바일 기기에서도 페이지의 너비나 화면 배율을 설정할 수 있는 뷰포트 설정

 

https://aboooks.tistory.com/352

 

meta viewport (메타 뷰포트 태그) 사용법

meta viewport(메타 뷰포트 태그) 사용법 얼마 전에 meta 태그 사용법이란 글을 썼는데 [html] meta 태그 사용법 위 글에서 다루지 못한(빠진) 것들을 다루어 보려고 해요. 힌트를 주신 admin 님께 감사합니

aboooks.tistory.com

 

2) JSONObject는 순서가 상관이 없지만, JSONArray는 순서가 중요하다.

 

https://velog.io/@jonmad/Til.-%EC%BD%94%ED%8B%80%EB%A6%B0-JSON-%ED%8C%8C%EC%8B%B1

 

Til. 코틀린 JSON 파싱

Json은 프론트와 백엔드에서 통신을 할 때 자주 사용하는 형식이다. javascript를 사용할 땐 편하게 파싱했었는데 kotlin으로 파싱할 땐 조금 더 불편한거 같다. trimIndent는 스트링 안에 불필요한 띄어

velog.io

 

3) JSONParser.parse()로 문자열을 JSON으로 변환하기

 

https://hianna.tistory.com/623

 

[Java / json-simple ] 문자열을 JSON으로 변환하기

json-simple 라이브러리를 사용하여 문자열을 JSON으로 변환하는 방법을 소개합니다. 라이브러리 추가하기 (MAVEN) JSON 변환에 사용할 json-simple 라이브러리를 추가하기 위해 pom.xml 파일에 아래와 같이

hianna.tistory.com

 

4) String <-> Json 쉽게 변환할 수 있는 Gson 라이브러리

 

https://kkh0977.tistory.com/2775

 

110. (spring/스프링) GSON 사용해 Map , Json 데이터 변환 수행 실시

[개발 환경 설정] ​ 개발 툴 : inteli j 개발 언어 : spring ​ [소스 코드] ​ // TODO [SEARCH FAST] : [테스트 함수 실행] @GetMapping("/TEST_MAIN") public String TEST_MAIN(@RequestParam Map param){ // [쿼리 파람 방식] System.o

kkh0977.tistory.com

 

5) Ajax 메소드 설명

 

http://www.tcpschool.com/jquery/jq_ajax_method

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

6) 스프링과 자바 스크립트 간의 Json 데이터로 통신 예제

 

https://velog.io/@nestour95/Spring-Json-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%ED%86%B5%EC%8B%A0

 

Spring) Json 데이터로 통신

스프링 공부하면서 form 이용해서 보내는 것 말고 어떤 식으로 데이터를 자바스크립트에서 스프링으로 보내는지 궁금해서 찾아보았다.Body가 아닌 주소에 데이터를 담아 보내는 형태key = value 형

velog.io

 

7) try 구문 내에서 return에 도달하지 못하고 예외 발생했을 경우 catch-finally문이 작동한 뒤,

이 후 코드를 계속 실행해 나가다가 리턴값을 만나면 리턴, 해당 방식을 통해 예외 처리

 

https://codevang.tistory.com/211

 

메소드 내 예외처리(try-catch-finally)에서의 리턴 처리

1. try 구문 내에서 리턴에 도달했을 경우 try 내에서 리턴에 정상적으로 도달하였으므로, 리턴시킬 값을 임시 저장한 뒤 바로 finally 문을 최종 실행시키고 메소드를 종료합니다. 실제 리턴은 finall

codevang.tistory.com

 

8) 자바스크립트에서 스코프(scope)는 식별자(ex. 변수명, 함수명, 클래스명 등)의 유효범위를 뜻하며, var 키워드로 선언된 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 이 때문에 var 사용을 주의해야 한다.

 

https://www.howdy-mj.me/javascript/var-let-const

 

var, let, const의 차이 ⏤ 변수 선언 및 할당, 호이스팅, 스코프

자바스크립트에서 var로 변수 선언이 가능했는데, 왜 const와 let이 나왔으며 이 둘의 사용을 권장할까? 이를 정확하게 알기 위해서는, 변수의 선언 및 할당 과정, 호이스팅, 스코프를 알아야한다. #

www.howdy-mj.me

 

9) '==' 연산자를 이용하여 서로 다른 유형의 두 변수의 [값]을 비교하지만,  '==='는 엄격한 비교를 하는 것으로 알려져 있다. ([값 & 자료형] -> true).

 

https://velog.io/@filoscoder/-%EC%99%80-%EC%9D%98-%EC%B0%A8%EC%9D%B4-oak1091tes

 

자바스크립트: '==' 와 '===' 는 다르다!

무엇이 다른가? 저는 자바 언어를 먼저 배운 입장에서 자바스크립트에 깊게 노출되지 않았기 때문에 충격을 받았다. 비록 자바스크립트의 어떤 기능, 사건 처리, 그리고 어떤 jQuery 속임수에 상

velog.io

 

10) Ajax 통신 url 보낼 때 쿼리스트링을 보내는 방법이, url:"detailMovie.com?m_number='"+ms_mid+"'", 형식 말고 url: "detailMovie.com?m_number=" + ms_mid, 형식으로 바꾸기

 

https://qna.programmers.co.kr/questions/4251/ajax-%ED%86%B5%EC%8B%A0-url-%EB%B3%B4%EB%82%BC%EB%95%8C-%EC%BF%BC%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A7%81%EB%8F%84-%EA%B0%99%EC%9D%B4-%EB%AA%BB%EB%B3%B4%EB%82%B4%EB%82%98%EC%9A%94

 

Ajax 통신 url 보낼때 쿼리스트링도 같이 못보내나요..?

안녕하세요! 제가 스프링 MVC 패턴을 이용한 영화예매프로그램 개발중에 있는데요 **/* 평점 등록 버튼 누르면 댓글 등록되게하기 ! 비로그인시 -> 로그인 유도 팝업창 로그인되있을시 -> movies

qna.programmers.co.kr

 

11) Intelijj IDEA state, that success function in AJAX request in never used. 라 해서 success 함수가 unused property success 인 상태일 때 밑처럼 [] 로 묶어서 사용할 수 있다.

 

$.ajax({
    type : "POST",
    contentType : "application/json",
    url : "dotheajax",
    data : JSON.stringify(dataToSend),
    dataType : "json",
    success : [
        function(response) {
            $("#typeAjaxHere").html(response);
        }
    ]
});

 

https://stackoverflow.com/questions/33528364/intelijj-idea-state-that-success-function-in-ajax-request-in-never-used

 

Intelijj IDEA state, that success function in AJAX request in never used.

I have a problem and I have no idea what the reason is. I'm testing ajax requests with this code. function sendAJAX() { var dataToSend = {}; dataToSend["username"] = $("#

stackoverflow.com

 

'개발' 카테고리의 다른 글

2023년 2월 4주차  (0) 2023.02.28
Odroid H2+ 하드 마운트  (0) 2023.02.21

+ Recent posts