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

 

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

 

5월19일실습문제.hwp
0.18MB

 

실습 문제는 5월 19일 실습 문제.hwp에 있습니다.

시험에 나오는 건 절대 아니기 때문에 간단히 돌려보시기만 하면 됩니다.

 

class Orange2
{
	int sugarContent;
	public Orange2(int sugar) { sugarContent = sugar; }
	public void showSugarContent() { System.out.println("오렌지 당도 " + sugarContent); }
}

class Apple2
{
	int sugarContent;
	public Apple2(int sugar) { sugarContent = sugar; }
	public void showSugarContent() { System.out.println("사과 당도 " + sugarContent); }
}

class FruitBox1<T>
{
	T item;
	public void store(T item) { this.item = item; }
	public T pullOut() { return item; }
}

public class assign4 {
	public static void main(String[] args) {
		FruitBox1<Orange2> fBox1 = new FruitBox1<Orange2>();
		fBox1.store(new Orange2(10));
		Orange2 org1 = fBox1.pullOut();	
		org1.showSugarContent();
		
		FruitBox1<Apple2> fBox2 = new FruitBox1<Apple2>();
		fBox2.store(new Apple2(20));
		Apple2 app1 = fBox2.pullOut();	
		app1.showSugarContent();
	}
}

 

제네릭에 대해 사용 방법을 익힐 수 있는 예제입니다.

 

class FruitBox2
{
	Object item;
	public void store(Object item) { this.item = item; }
	public Object pullOut() { return item; }
}

 

앞서 assign3.java 파일에서 FruitBox 클래스를 이렇게 정의한다면,

메인 메소드에서 FruitBox 클래스의 객체를 선언할 때, 필요에 따라 형 변환을 일일이 해줘야 한다는 단점과,

Object 객체 인자를 넣을 자리에 String 인자나 다른 객체 인자를 넣어준다면

컴파일 오류가 발생한다는 단점이 있습니다. ( 인자의 형은 무조건 똑같아야 합니다. )

 

class OrangeBox
{
	Orange item;
	public void store(Orange item) { this.item = item; }
	public Orange pullOut() { return item; }
}

 

FruitBox 클래스 대신에 OrangeBox 클래스를 정의하고 멤버 변수와 객체 인자를 Orange 로 정의할 수 있지만,

필요에 따라 OrangeBox, AppleBox, BananaBox 클래스를 각각 정의해야 한다는 번거로움이 있습니다.

 

class FruitBox1<T>
{
	T item;
	public void store(T item) { this.item = item; }
	public T pullOut() { return item; }
}

 

이렇게 제네릭을 사용한다면, 메인 메소드에서 T를 Orange로 대체해서 객체를 생성하고,

T를 Apple로 대체하여 객체를 생성할 수 있습니다.

즉, 하나의 클래스 정의로 둘 이상의 클래스를 정의한 효과를 가져다줍니다!

 

해당 예제는 밑의 링크에서 가져왔습니다.

 

https://jamesyleather.tistory.com/85

 

[Java] 제네릭 클래스 - 과일상자 실습

제네릭(Generic)  - jdk1.5에서 추가된 문법으로 상당수의 객체에서 사용하고 있는 개념  - 제네릭을 사용하면 사용하고자 하는 자료형을 클래스에서 미리 지정하지 않고, 인스턴스 

jamesyleather.tistory.com

4월29일실습문제.hwp
0.12MB

 

실습 문제는 4월 29일 실습 문제.hwp에 있습니다.

시험에 나오는 건 절대 아니기 때문에 간단히 돌려보시기만 하면 됩니다.

 

1,

 

class Triangle {
	double bottom;
	double height;
	
	public Triangle(double bottom, double height) {
		this.bottom = bottom;
		this.height = height;
	}
	
}

class TriangleArea extends Triangle {
	
	public TriangleArea(double bottom, double height) {
		super(bottom, height);
	}
	
	public double getArea() {
		return bottom*height/2;
	}
}

public class assign1 {
	public static void main(String[] args) {
		TriangleArea tr = new TriangleArea(6.0,3.0);
		
		System.out.println(tr.getArea());
	}
}

 

super하고 this의 사용 방법, 

상속을 사용하는 방법을 연습해볼 수 있는 예제입니다.

 

e캠퍼스 강의 자료 6주차에 있는 상속 ppt에 이와 비슷한 예제가 있으니 참고해보시면 됩니다.

 

2,

 

class person{
	
	int haveMonsterCan = 0;

	public void bringCan(refrigerator refri, int bring) {
		haveMonsterCan += refri.takeCan(bring);
	}

	public void showInfo() {
		System.out.println("사람이 현재 가지고 있는 몬스터 캔 개수 : " + haveMonsterCan);
	}
	
}

class refrigerator{
	
	int monsterCan;
	
	public refrigerator(int monsterCan) {
		this.monsterCan = monsterCan;
		
	}
	
	public int takeCan(int takeNumber) {
		monsterCan -= takeNumber;
		
		return takeNumber;
	}
	
	public void showInfo() {
		System.out.println("냉장고가 현재 가지고 있는 몬스터 캔 개수 : " + monsterCan);
	}
	
}

public class assign2 {
	
	public static void main(String[] args) {
		refrigerator fri = new refrigerator(20);
		person per = new person();
		
		per.bringCan(fri, 5);
		
		fri.showInfo();
		per.showInfo();
	}
}

 

클래스의 정의와 클래스간의 상호작용을 확인해볼 수 있는 예제입니다.

 

클래스란 사람, 냉장고 같은 객체를 컴퓨터로 프로그래밍한 것을 의미합니다.

 

그래서 현실 세계에서의 사람은 많은 행동을 할 수 있지만,

여기에서는 단순히 냉장고에서 몬스터 캔을 꺼내는 행동(메소드),

내가 가지고 있는 몬스터 캔(필드, 멤버 변수)로 정의하였습니다.

 

클래스의 상호 작용에 대해 쉽게 접할 수 있는 예제가 과일 장수 프로그램이 있는데,

제가 이 실습 문제를 과일 장수 프로그램하고 비슷하게 구현해보았습니다.

 

과일 장수 프로그램에 대한 설명은 밑의 링크를 참고해주시면 감사하겠습니다.

 

https://kkungchan.tistory.com/156

 

Java 기초 class(6) - 과일장수

JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 목표 과일 판매자와 구매자를 객체관점으로 코드를 구현해 본다. 판매자와 구매자의 상호작용을 ma..

kkungchan.tistory.com

 

 

 

메인(main) 메소드, 자바 키워드, 지역변수 선언 및 초기화 PPT 15쪽에 있는 문제입니다.

 

 

 

 

명령 프롬프트에서 java 명령어를 통해서 .java 파일을 실행하시는 건 생소하실 겁니다.

 

https://ororox.github.io/java%20beginner%20course/java-cmd/

 

자바 커맨드(cmd) 컴파일 및 실행

자바를 커맨드로 컴파일하거나 실행하는 경우는 거의 없습니다.

ororox.github.io

 

이 링크에 들어가시면 자세하게 설명되어 있으니 참고해주세요.

 

1, 우선 JDK에 대한 환경변수가 잡혀 있어야 합니다.

 

 

cmd를 검색해서 명령 프롬프트(Command Prompt)를 눌러주세요.

 

 

java -version을 칠 때 JDK 버전이 나오면 JDK에 대한 환경 변수가 잘 잡혀 있는 겁니다.

 

JDK 17의 경우에는, 설치하면서 JDK 환경 변수가 자동으로 잡히기에 문제는 없지만,

혹시라도 JDK 환경 변수가 잡혀 있지 않으면 이 링크를 참고해주세요. 방법 2로 해주시면 됩니다.

 

https://blog.naver.com/PostView.nhn?blogId=alcmskfl17&logNo=221870079271 

 

[JAVA] 자바 환경 변수 설정

명령 프롬프트에서 자바(Java)를 인식시켜 주기 위해 변수 설정을 한다. 또한 톰캣(Tomcat) 연동 시, 환...

blog.naver.com

 

2, MainArgsProblem.java 파일을 만들어서 저장해봅시다.

 

 

우선 이클립스에서 import한 testproject -> src -> week2 ->  MainArgsProblem.java 에 들어가셔서

빨간색 박스에 표시한 부분을 다 복사해주세요.

 

 

메모장을 키시고 내용을 붙여 넣기 해주세요.

 

 

저장하실 때 All Files로 타입을 정해주시고 파일 이름은 .java까지 다 쓰시고 바탕 화면에 저장해주시면 됩니다.

 

 

cd Desktop으로 경로를 바탕화면으로 잡아주세요.

 

 

그 다음에 java MainArgsProblem.java 2 2 2 2 를 입력해주세요.

 

 

콘솔에 결과가 출력되야 합니다.

 

혹시라도 오류가 발생했으면,

 

1, MainArgsProblem.java 이 있는 경로에서 해주셨는지 확인해주세요.

2, 실행할 .java 파일의 명칭이 MainArgsProblem.java이 맞는지 확인해주세요.

3, .java 파일 안에 있는 내용이 바뀌었는지 확인해주세요. 내용이 복사한 그대로여야 합니다.

public class 이름이 MainArgsProblem(.java 파일과 명칭이 동일)이여야 합니다.

우선 프로젝트 파일이 있는 github에 들어가주세요.

 

https://github.com/namjaegyeong/javaProgramming

 

GitHub - namjaegyeong/javaProgramming

Contribute to namjaegyeong/javaProgramming development by creating an account on GitHub.

github.com

 

1, 

 

 

해당 github 주소로 들어가신 후에 Code -> Download ZIP으로 프로젝트를 다운로드 받으세요.

다운로드 받은 .zip 파일을 바탕화면에 압축을 풀어주세요. 

 

2, 

 

 

이클립스에 들어가신 후에 File -> Import를 눌러주세요.

 

 

General -> Existing Projects into Workspace를 누르시고 Next를 눌러주세요.

 

 

 

Browse를 누르시고 바탕 화면에 압축 풀은 프로젝트 폴더를 선택해주세요.

 

 

Finish를 눌러주시면 프로젝트가 import가 됩니다.

 

 

프로젝트가 다 Building 될 때까지 기다려주세요.

 

3, 

 

 

프로젝트를 import해서 .java 파일을 들어가셨을 때 한글만 깨지는 경우가 있습니다.

 

https://sayit.tistory.com/entry/UTF8-for-Eclipse

 

이클립스 한글 깨짐 복구, UTF-8 설정으로 일괄변경 방법

다른 프로젝트에서 사용하던 소스를 임포트하고 보니 한글 주석 부분이 깨져있어 사용이 쉽지 않았습니다. 이전 프로젝트에서는 모든 설정이 UTF-8로 되어 있어 이런 한글 깨짐 오류가 없었지만,

sayit.tistory.com

 

이 링크를 참고해주세요. 자세하게 설명되어 있습니다.

 

4,

 

 

한글 깨짐 오류가 해결되셨으면 실행할 .java 파일을 마우스 오른쪽 버튼으로 클릭하시고

Run As -> Java Application을 입력해서 실행합니다.

 

 

혹은 해당 .java 파일에 들어가시고 Run을 눌러주셔서 실행해주시면 됩니다.

 

 

프로젝트 폴더에 있는 파일 중 일부는, 에러를 일부러 냈기 때문에 무시하시고 Proceed를 눌러주시면 됩니다. 

 

 

하단에 콘솔 창에 출력 결과가 정상적으로 나오면 프로젝트 셋팅은 끝났습니다.

 

동작을 확인하기 위해 코드를 돌려본다는 느낌으로 돌려보시면 됩니다. :)

1, 실버 라이트 설치(Chrome에서 설치)

 

 

https://microsoft-silverlight.softonic.kr/

 

Microsoft Silverlight

Adobe Air에 대한 Microsoft의 대답

microsoft-silverlight.softonic.kr

 

 

다운로드 받으신 Silverlight_x64.exe을 실행시키시면 됩니다.

 

 

 

 

 

 

2, 강의 듣기(Internet Explorer에서 강의 듣기)

 

 

http://www.kocw.net/home/cview.do?lid=4263e491c40bf1d3 

 

자바네트워크프로그래밍

 

www.kocw.net

 

 

Internet Explorer 를 키시고 해당 주소로 들어가신 후에 강의를 들으시면 됩니다.

 

+ Recent posts