공인인증서(공동인증서) 정보(내용) 보기, 암호 변경, 내보내기, 복사 등 방법 소개
금융인증센터(yessign)에서는 공동인증서(공인인증서)와 관련한 다양한 기능을 제공한다. 대표적으로 공인인증서(공동인증서)의 상세 내용을 확인할 수 있고, 암호를 변경하거나, 공인인증서를 파일로 내보내기할 수 있다. 인증서 관리 페이지는 다음의 경로에서 확인할 수 있다.
※ 인증서 내용보기 ※
페이지에 접속하면 다음과 같이 인증서를 관리할 수 있는 다양한 기능이 존재한다. 여기에서 [인증서 내용보기] 기능을 이용해보자.
이후에 인증서 목록이 나온다. 만약 자신이 원하는 인증서의 상세 내용을 확인하고 싶다면, 다음과 같이 [인증서 보기] 버튼을 누르면 된다.
이후에 [자세히] 버튼을 누르면, 해당 인증서의 소유자가 누구인지, 어떤 은행(혹은 증권) 사이트에서 공동인증서(공인인증서)를 발급받았는지 확인할 수 있다. 아래 인증서는 키움증권에서 발급받은 것을 알 수 있다.
※ 인증서를 갱신하고 싶다면? ※
인증서를 일반적으로 유효기간이 1년이기 때문에, 가지고 있는 인증서의 유효기간을 갱신하기 위해서는 [인증서 갱신]을 진행해야 한다.
그래서 인증서의 상세 내용을 본 뒤에, 자신이 인증서를 발급받았던 사이트에 방문하여 인증서를 갱신하면 된다.
※ 인증서 내보내기 ※
만약 [인증서 내보내기]를 하고 싶다면, 다음과 같이 인증서 내보내기 버튼을 누르면 된다.
인증서 암호를 입력한 뒤에 다음과 같이 자신이 원하는 경로에 인증서를 내보내기할 수 있다.
'기타' 카테고리의 다른 글
공인인증서(공동인증서) 파일로 내보내기 한 이후에 다른 컴퓨터에서 불러와 사용하는 방법 (0) | 2021.07.25 |
---|---|
우체국 인터넷뱅킹 공동인증서(공인인증서) 유효기간 갱신하는 방법 (0) | 2021.07.25 |
페이스북 페이지/프로필에서 특정 연도(날짜)로 게시물을 검색하는 방법 (0) | 2021.07.25 |
삼성전자, 삼성전자 우선주(삼성전자우) 차이 비교 및 주식 사는 방법 (0) | 2021.07.24 |
포항공대 학생회관/지곡회관 회의실 예약 방법 (0) | 2021.07.24 |
페이스북 페이지/프로필에서 특정 연도(날짜)로 게시물을 검색하는 방법
먼저 [검색] 버튼을 누른다.
이후에 자신이 검색하고자 하는 내용을 입력하면 된다.
이후에 [필터]에서 연도를 설정하면 된다.
'기타' 카테고리의 다른 글
우체국 인터넷뱅킹 공동인증서(공인인증서) 유효기간 갱신하는 방법 (0) | 2021.07.25 |
---|---|
공인인증서(공동인증서) 정보(내용) 보기, 암호 변경, 내보내기, 복사 등 방법 소개 (0) | 2021.07.25 |
삼성전자, 삼성전자 우선주(삼성전자우) 차이 비교 및 주식 사는 방법 (0) | 2021.07.24 |
포항공대 학생회관/지곡회관 회의실 예약 방법 (0) | 2021.07.24 |
SQLite를 활용한 데이터베이스 문제 풀이 예시 (0) | 2021.07.20 |
삼성전자, 삼성전자 우선주(삼성전자우) 차이 비교 및 주식 사는 방법
※ 삼성전자 보통주 vs 삼성전자 우선주 ※
삼성전자 (삼성전자 보통주): 일반적으로 말하는 삼성전자 주식이다. 보통주이므로, 주식을 갖고 있는 주주가 회사의 의사결정에 의견을 낼 수 있다. 일반적으로 1주당 하나의 의결권이 부여된다.
삼성전자우 (삼성전자 우선주): 보통주와는 다르게 의결권이 없다는 특징이 있다. 하지만 보통주보다 배당률이 높다. 그래서 의결권을 포기하고 배당금을 더 많이 받기 위해 위해 삼성전자 우선주를 구매하는 사람이 많다. 네이버 국어사전에 "우선주"를 검색해 보면 다음과 같이 나온다.
마찬가지로 네이버에 "삼성전자 우선주 주가"라고 검색하면 다음과 같은 그림을 확인할 수 있다.
※ 삼성전자 우선주 구매 방법 ※
삼성전자 우선주를 구매하는 방법은 간단하다. 그냥 증권사 주식 거래 사이트에서 삼성전자 우선주 주식을 매매하면 된다. 키움증권 WTS에서는 다음과 같이 "삼성전자우"라고 검색한 뒤에 매수하면 된다.
※ 배당금 확인 방법 ※
나중에 배당금이 들어오면 어떻게 확인할 수 있을까? 키움증권을 이용하는 경우 [거래내역] 탭에서 배당금을 확인할 수 있다.
'기타' 카테고리의 다른 글
공인인증서(공동인증서) 정보(내용) 보기, 암호 변경, 내보내기, 복사 등 방법 소개 (0) | 2021.07.25 |
---|---|
페이스북 페이지/프로필에서 특정 연도(날짜)로 게시물을 검색하는 방법 (0) | 2021.07.25 |
포항공대 학생회관/지곡회관 회의실 예약 방법 (0) | 2021.07.24 |
SQLite를 활용한 데이터베이스 문제 풀이 예시 (0) | 2021.07.20 |
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
포항공대 학생회관/지곡회관 회의실 예약 방법
포항공대에서 학생회관이나 지곡회관의 회의실을 예약할 때는 POPO를 사용할 수 있다. 나는 포항공대에서 2년을 있었는데, 연구실에만 있다 보니까 회의실 예약하는 방법도 모르고 있었다. 학생회관 대회의실을 포함하여 다양한 회의실에 대하여 경우 동아리 활동을 하지 않는 일반적인 학생들도 예약할 수 있는 것으로 보인다.
▶ POPO 사이트: http://popo.postech.ac.kr/
접속한 뒤에 로그인한다. 그리고 [장소 예약] 버튼을 눌러 예약 페이지로 들어갈 수 있다.
이후에 원하는 장소를 골라 [예약하기] 버튼을 누른다.
원하는 날짜와 시간을 설정하여 [예약]을 진행하면 된다.
'기타' 카테고리의 다른 글
페이스북 페이지/프로필에서 특정 연도(날짜)로 게시물을 검색하는 방법 (0) | 2021.07.25 |
---|---|
삼성전자, 삼성전자 우선주(삼성전자우) 차이 비교 및 주식 사는 방법 (0) | 2021.07.24 |
SQLite를 활용한 데이터베이스 문제 풀이 예시 (0) | 2021.07.20 |
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
DB Browser for SQLite (DB4S) 설치 및 사용 방법 (0) | 2021.07.19 |
PyTorch의 ImageFolder 설명 및 ImageFolder 형식의 데이터셋 구성하기 예제
PyTorch에서는 ImageFolder 라이브러리를 제공하는데, 다음과 같이 계층적인 폴더 구조에서 데이터셋을 불러올 때 사용할 수 있다. 다음과 같이 각 이미지들이 각 클래스명(class name)을 갖는 폴더 안에 들어가 있는 구조라면, ImageFolder 라이브러리를 이용해 바로 불러올 수 있다.
dataset/
class 0/
0.jpg
1.jpg
...
class 1/
0.jpg
1.jpg
...
...
class 9/
0.jpg
1.jpg
...
이러한 ImageFolder 형식을 가지고 있지 않은 데이터셋 예제를 불러와서, ImageFolder 형식에 맞게 변형해 보겠다. 한 번 다음의 데이터셋 예제를 확인해 보자.
▶ Scene Classification Dataset 예제: https://github.com/ndb796/Scene-Classification-Dataset
기본적으로 Scene Classification Dataset은 25,000개가량의 다양한 자연 경치(scene) 이미지로 구성되어 있다. 이때 각 이미지에 대하여 카테고리(category) 정보가 주어진다. 먼저 다음과 같은 코드로 전체 이미지 데이터를 다운로드한다.
# 깃허브에서 데이터셋 다운로드하기
!git clone https://github.com/ndb796/Scene-Classification-Dataset
# 폴더 안으로 이동
%cd Scene-Classification-Dataset
이때 데이터셋 폴더 구성은 다음과 같다.
Dataset/
train-scene classification/
train/ # 전체 이미지가 담긴 폴더입니다.
0.jpg
1.jpg
2.jpg
...
24333.jpg
24334.jpg
train.csv # 학습 이미지마다 클래스(class) 정보가 포함되어 있습니다.
test_WyRytb0.csv # 최종 테스트(test) 이미지의 번호를 포함하며, 본 실습에서 사용하지 않습니다.
장면(scene) 데이터셋은 정확히 24,335개의 다양한 자연 경치(scene) 이미지로 구성되어 있다. 이때 각 이미지는 150 X 150 크기를 가진다. 또한, 총 6개의 클래스(class)로 구성된다. 전체 클래스 목록은 다음과 같다.
0. 빌딩(buildings)
1. 숲(forests)
2. 빙하(glacier)
3. 산(mountains)
4. 바다(sea)
5. 거리(street)
이때 다음과 같은 방법으로 학습 이미지의 개수를 확인할 수 있다. 구체적으로 os 라이브러리의 os.listdir()를 이용하여 이미지 폴더에 존재하는 파일 이름을 확인할 수 있다. 예를 들어 다음과 같은 코드로 이미지의 개수를 확인할 수 있다.
import os
import pandas as pd
path = 'train-scene classification/'
# 전체 이미지 개수 출력하기
file_list = os.listdir(path + 'train/')
print('전체 이미지의 개수:', len(file_list))
# 학습 이미지 확인하기
dataset = pd.read_csv(path + 'train.csv')
print('학습 이미지의 개수:', len(dataset))
print('학습 이미지별 클래스 정보')
dataset.head()
실행 결과는 다음과 같다.
이때 클래스별 학습 이미지의 개수를 구하고자 한다면 다음과 같이 할 수 있다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['figure.figsize'] = (8.0, 6.0) # 그림의 기본 크기 설정
# 각 클래스별 개수 출력
print('클래스 0의 개수:', len(dataset[dataset.label == 0]))
print('클래스 1의 개수:', len(dataset[dataset.label == 1]))
print('클래스 2의 개수:', len(dataset[dataset.label == 2]))
print('클래스 3의 개수:', len(dataset[dataset.label == 3]))
print('클래스 4의 개수:', len(dataset[dataset.label == 4]))
print('클래스 5의 개수:', len(dataset[dataset.label == 5]))
# 각 클래스에 따른 학습 이미지의 개수를 출력하기
fig, ax = plt.subplots(figsize = (10, 4)) # 그림 크기 설정
sns.countplot(x ='label', data=dataset)
plt.xlabel("Class Label")
plt.ylabel("Number of Samples")
plt.show()
실행 결과는 다음과 같다.
이때 특정한 이미지를 불러와 화면에 출력하고자 한다면 다음과 같이 할 수 있다. 아래 코드는 첫 번째 이미지를 불러와 화면에 출력하는 코드다.
from skimage.transform import resize
from PIL import Image
import numpy as np
img = Image.open(path + 'train/' + file_list[0])
img = np.asarray(img)
img = resize(img, (64, 64, 3))
print('이미지의 해상도:', img.shape)
# 이미지 출력하기
plt.imshow(img)
plt.show()
실행 결과는 다음과 같다.
이어서 학습/검증 데이터셋을 나눌 수 있다. 이때 간단히 sklearn 라이브러리의 train_test_split()을 이용하면 된다. 예를 들어 학습 이미지 데이터를 8:2 비율로 학습(training)과 검증(validation)으로 나누는 예제는 다음과 같다.
from sklearn.model_selection import train_test_split
train_dataset, val_dataset = train_test_split(dataset, test_size=0.2)
print('학습 데이터셋 크기:', len(train_dataset))
print('검증 데이터셋 크기:', len(val_dataset))
실행 결과는 다음과 같다. 이제 결과적으로 데이터셋이 나누어진 것이다.
이제 나누어진 데이터셋을 적절한 폴더에 저장하기 위해 다음과 같이 먼저 폴더를 만든다. 클래스 개수가 6개뿐이므로, 간단히 다음과 같이 모든 폴더를 만들 수 있다.
!mkdir Scene-Classification-Dataset-Split
!mkdir Scene-Classification-Dataset-Split/train
!mkdir Scene-Classification-Dataset-Split/train/buildings
!mkdir Scene-Classification-Dataset-Split/train/forests
!mkdir Scene-Classification-Dataset-Split/train/glacier
!mkdir Scene-Classification-Dataset-Split/train/mountains
!mkdir Scene-Classification-Dataset-Split/train/sea
!mkdir Scene-Classification-Dataset-Split/train/street
!mkdir Scene-Classification-Dataset-Split/val
!mkdir Scene-Classification-Dataset-Split/val/buildings
!mkdir Scene-Classification-Dataset-Split/val/forests
!mkdir Scene-Classification-Dataset-Split/val/glacier
!mkdir Scene-Classification-Dataset-Split/val/mountains
!mkdir Scene-Classification-Dataset-Split/val/sea
!mkdir Scene-Classification-Dataset-Split/val/street
실행하면 다음과 같이 전체 폴더가 구성되는 것을 확인할 수 있다.
이제 ImageFolder 형식에 맞게 이미지를 저장해보자. 모든 이미지는 (64 X 64 X 3) 형식으로 resize하여 저장한다.
import time
classes = ['buildings', 'forests', 'glacier', 'mountains', 'sea', 'street']
######### 학습 데이터셋 #########
start_time = time.time() # 시작 시간
# 데이터 정보를 하나씩 확인하며
for index, row in train_dataset.iterrows():
# 이미지 정보를 배열에 담기
img = Image.open(path + 'train/' + row['image_name'])
img = np.asarray(img)
img = resize(img, (64, 64, 3))
img = Image.fromarray((img * 255).astype(np.uint8))
saved = 'Scene-Classification-Dataset-Split/train/' + classes[row['label']] + '/' + str(index) + '.png'
img.save(saved, 'PNG')
print("소요된 시간(초 단위):", time.time() - start_time) # 실행 시간
######### 검증 데이터셋 #########
start_time = time.time() # 시작 시간
# 데이터 정보를 하나씩 확인하며
for index, row in val_dataset.iterrows():
# 이미지 정보를 배열에 담기
img = Image.open(path + 'train/' + row['image_name'])
img = np.asarray(img)
img = resize(img, (64, 64, 3))
img = Image.fromarray((img * 255).astype(np.uint8))
saved = 'Scene-Classification-Dataset-Split/val/' + classes[row['label']] + '/' + str(index) + '.png'
img.save(saved, 'PNG')
print("소요된 시간(초 단위):", time.time() - start_time) # 실행 시간
이후에 만들어진 폴더를 압축(.zip)하여 저장한다.
!zip -r Scene-Classification-Dataset-Split.zip ./Scene-Classification-Dataset-Split/*
'인공지능' 카테고리의 다른 글
ResNet처럼 Batch Normalization을 포함한 네트워크를 Feature Extractor로 사용할 때 유의할 점 (0) | 2021.02.24 |
---|---|
PyTorch의 전이 학습(Transfer Learning)에서 Freezing 여부에 따른 성능 차이 및 유의점 (0) | 2021.02.24 |
CNN (Convolutional Neural Network) 요약 정리 (0) | 2020.10.20 |
PyTorch 나만의 데이터셋을 만들고, 이를 ImageFolder로 불러오기 (1) | 2020.04.10 |
PyTorch에서 특정 Dataset을 열어 이미지 출력하기 (3) | 2020.04.10 |
Adobe Acrobat을 이용해 PDF 파일에서 특정 페이지를 다른 PDF 파일의 페이지로 교체하기 (PDF 에서 특정 페이지 삭제/교체)
저는 Adobe Acrobat Pro DC를 이용하고 있습니다. 자신이 수정하고자 하는 PDF 파일을 Adobe Acrobat Pro DC를 이용해 PDF 파일을 열어줍니다. 저는 간단히 강의 자료를 열어 주었으며, 이후에 [페이지 구성] 버튼을 눌러줍니다.
[페이지 구성]을 연 뒤에는 다음과 같이 자신이 원하는 페이지를 선택하여 삽입, 추출, 교체, 삭제 등의 작업을 수행할 수 있습니다.
PDF 파일의 수정이 완료되면 다음과 같이 [파일] - [다른 이름으로 저장]을 눌러 저장할 수 있습니다.
SQLite를 활용한 데이터베이스 문제 풀이 예시
세 개의 릴레이션이 있는 상황을 가정합시다. 실습으로 다루고자 하는 데이터베이스는 사원(Employee), 회사(Company), 소속(Affiliation) 세 가지 테이블로 구성됩니다. 그 세부적인 정보는 다음과 같습니다.
※ 사원(Employee) 릴레이션 ※
사원의 이름, 거주 도시 정보를 포함하고 있습니다.
Employee_ID | Employee_Name | Employee_City |
1 | Seo | 청주 |
2 | Chung | 서울 |
3 | Lee | 인천 |
4 | Kim | 대전 |
5 | Park | 서울 |
6 | Moon | 서울 |
※ 회사(Company) 릴레이션 ※
회사의 이름, 회사가 위치한 도시 정보를 포함하고 있습니다.
Company_Name | Company_City |
SK | 인천 |
LG | 청주 |
삼성 | 서울 |
※ 소속(Affiliation) 릴레이션 ※
사원의 번호, 회사의 이름, 연봉 정보를 포함하고 있습니다. 즉, 어떠한 사원이 어떠한 회사에서 일을 하고 있는지에 대한 정보를 담고 있습니다.
Employee_ID | Company_Name | Pay |
1 | SK | 10000 |
2 | LG | 900 |
3 | 삼성 | 30000 |
4 | 삼성 | 50000 |
5 | 삼성 | 100 |
6 | LG | 200 |
※ 데이터베이스 구축하기 ※
다음과 같이 데이터베이스를 생성하고, 테이블을 구축하여 기본적인 데이터를 삽입할 수 있습니다.
/* 사원(Employee) 테이블 */
CREATE TABLE Employee(
Employee_ID INT PRIMARY KEY,
Employee_Name TEXT,
Employee_City TEXT
);
INSERT INTO Employee VALUES (1, 'Seo', '청주');
INSERT INTO Employee VALUES (2, 'Chung', '서울');
INSERT INTO Employee VALUES (3, 'Lee', '인천');
INSERT INTO Employee VALUES (4, 'Kim', '대전');
INSERT INTO Employee VALUES (5, 'Park', '서울');
INSERT INTO Employee VALUES (6, 'Moon', '서울');
/* 회사(Company) 테이블 */
CREATE TABLE Company(
Company_Name TEXT PRIMARY KEY,
Company_City TEXT
);
INSERT INTO Company VALUES ('SK', '인천');
INSERT INTO Company VALUES ('LG', '청주');
INSERT INTO Company VALUES ('삼성', '서울');
/* 소속(Affiliation) 테이블 */
CREATE TABLE Affiliation(
Employee_ID INT,
Company_Name TEXT,
Pay INT
);
INSERT INTO Affiliation VALUES (1, 'SK', 10000);
INSERT INTO Affiliation VALUES (2, 'LG', 900);
INSERT INTO Affiliation VALUES (3, '삼성', 30000);
INSERT INTO Affiliation VALUES (4, '삼성', 50000);
INSERT INTO Affiliation VALUES (5, '삼성', 100);
INSERT INTO Affiliation VALUES (6, 'LG', 200);
Q1. 회사명이 'LG'인 회사에서 일하는 모든 사원의 이름과 거주하는 도시들을 출력합니다.
SELECT e.Employee_Name, e.Employee_City
FROM Employee as e, Affiliation as a
WHERE e.Employee_ID == a.Employee_ID
AND a.Company_Name = "LG";
Q2. 소속한 회사가 위치한 도시와 다른 도시에 거주하는 모든 사원의 이름, 소속 회사 이름, 소속 회사의 도시, 사원이 거주하는 도시를 출력합니다.
SELECT e.Employee_Name, c.Company_Name, c.Company_City, e.Employee_City
FROM Employee as e, Company as c, Affiliation as a
WHERE e.Employee_ID == a.Employee_ID
AND c.Company_Name == a.Company_Name
AND e.Employee_City != c.Company_City;
Q3. 각 회사별로 회사 이름과 사원의 수, 평균 월급을 출력합니다.
간단한 버전은 다음과 같습니다.
SELECT a.Company_Name, COUNT(a.Employee_ID), AVG(a.Pay)
FROM Affiliation as a
GROUP BY a.Company_Name;
조금 더 어렵게 작성 소스코드 버전은 다음과 같습니다.
SELECT c.Company_Name, COUNT(e.Employee_ID), AVG(a.Pay)
FROM Employee as e, Company as c, Affiliation as a
WHERE e.Employee_ID == a.Employee_ID
AND c.Company_Name == a.Company_Name
GROUP BY a.Company_Name;
Q4. 각 회사별로 소속 사원들의 평균 월급보다 높은 월급을 받는 종업원들의 사원의 번호, 회사 이름, 월 급여, 해당 회사의 평균 월급을 출력합니다.
SELECT a.Employee_ID, a.Company_Name, a.Pay, c_sum.Pay
FROM Affiliation as a, (SELECT t.Company_Name, AVG(t.Pay) as Pay FROM Affiliation as t GROUP BY t.Company_Name) as c_sum
WHERE a.Company_Name == c_sum.Company_Name
AND a.Pay > c_sum.Pay;
Q5. 'LG'의 (하나 혹은 여러) 사원보다 월급을 많이 받는 모든 사원들의 사원의 번호, 회사 이름, 월 급여를 출력합니다.
SELECT a.Employee_ID, a.Company_Name, a.Pay
FROM Affiliation as a, (SELECT MIN(t.Pay) as Pay FROM Affiliation as t WHERE t.Company_Name == "LG") as c_sum
WHERE a.Pay > c_sum.Pay;
혹은 다음과 같이 할 수 있습니다.
SELECT a.Employee_ID, a.Company_Name, a.Pay
FROM Affiliation as a
WHERE a.Pay > (SELECT MIN(t.Pay) as Pay FROM Affiliation as t WHERE t.Company_Name == "LG");
'기타' 카테고리의 다른 글
삼성전자, 삼성전자 우선주(삼성전자우) 차이 비교 및 주식 사는 방법 (0) | 2021.07.24 |
---|---|
포항공대 학생회관/지곡회관 회의실 예약 방법 (0) | 2021.07.24 |
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
DB Browser for SQLite (DB4S) 설치 및 사용 방법 (0) | 2021.07.19 |
Python에서 SQLite3 사용하는 방법 핵심 요약 및 소스코드 예제! (0) | 2021.07.19 |
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법
네이버에 "주식 거래 시간"을 검색하면 다음과 같은 정보가 나온다.
위 표에 나와 있듯이 국내 주식 매매 거래 시간의 정규시간은 09:00~15:30이다.
기본적으로 해당 날짜에 형성된 종가의 위아래로 10% 이내의 가격을 [시간 외 단일가]라고 한다. 장이 마감한 이후에도 이러한 [시간 외 단일가]로 16:00~18:00 사이에 거래할 수 있다. 이때 16:00~18:00 사이에서 매 10분마다 1번씩 거래가 체결된다. 예를 들어 16:00~16:10까지의 주문을 모아서 16:10에 체결을 진행하고, 또 16:10~16:20까지의 주문을 모아서 16:20에 체결을 진행하는 방식이다.
그래서 16:00 시간대 이후라고 해도 갑자기 호재가 터지는 경우에는 매수 주문이 많아져서, 시간 외 상한가에 도달하는 경우도 있다. 이런 경우에는 시간 외 상한가가 다음날 종목 시세에 영향을 미쳐서, 장 시작과 동시에 상승장이 시작되기도 한다.
※ 키움증권 웹 사이트(웹 트레이딩, WTS)을 이용해 시외가 보는 방법 ※
시외가를 보는 방법은 간단하다. 먼저 키움증권 웹 사이트에 로그인하자. 이후에 [주식주문(웹트레이딩)] 버튼을 누른다.
이후에 원하는 종목을 선택한 뒤에 오른쪽 위에 있는 [시간 외 단일가] 버튼을 누른다. 예를 들어 필자는 HMM을 종목으로 선택했으며, [시간 외 단일가]를 확인한 결과 43,050원으로 가격이 형성된 것을 확인할 수 있었다.
'기타' 카테고리의 다른 글
포항공대 학생회관/지곡회관 회의실 예약 방법 (0) | 2021.07.24 |
---|---|
SQLite를 활용한 데이터베이스 문제 풀이 예시 (0) | 2021.07.20 |
DB Browser for SQLite (DB4S) 설치 및 사용 방법 (0) | 2021.07.19 |
Python에서 SQLite3 사용하는 방법 핵심 요약 및 소스코드 예제! (0) | 2021.07.19 |
미리캔버스 무료 PPT 템플릿을 이용한 PPT/배너/썸네일 제작 방법! (0) | 2021.07.11 |
DB Browser for SQLite (DB4S) 설치 및 사용 방법
DB Browser for SQLite (DB4S)는 SQLite과 호환되는 데이터베이스 설계 및 수정 소프트웨어입니다. 웹 사이트에 방문한 뒤에 간단하게 설치하여 곧바로 사용할 수 있습니다. DB4S는 다음의 웹 사이트에 방문하여 상세한 정보를 확인할 수 있습니다.
▶ DB Browser for SQLite 공식 홈페이지: https://sqlitebrowser.org/
DB4S 공식 페이지에 접속한 뒤에 [Download] 페이지로 이동하면 다음과 같은 화면을 확인할 수 있습니다. 자신의 운영체제에 맞는 설치 프로그램을 다운로드받으면 됩니다. 저는 윈도우(Windows) 운영체제에 맞는 64-bit 버전의 프로그램을 다운로드했습니다.
설치 프로그램을 실행하여, 가장 먼저 라이센스에 동의하고 설치를 진행합니다.
다음과 같이 설정을 진행합니다.
이후에 설치(install)를 진행하면 됩니다. 설치 이후에는 실행 프로그램을 실행하여 열 수 있습니다.
※ 데이터베이스 생성하기 ※
[새 데이터베이스] 버튼을 눌러 새로운 데이터베이스를 생성할 수 있습니다.
예를 들어 다음과 같이 test.db라는 이름의 데이터베이스를 생성할 수 있습니다.
데이터베이스가 생성되면 다음과 같이 [데이터베이스 구조] 탭에서 데이터베이스의 정보를 확인할 수 있습니다.
이후에 [SQL 실행] 탭으로 이동하여 자신이 원하는 SQL 쿼리를 입력할 수 있습니다.
'기타' 카테고리의 다른 글
SQLite를 활용한 데이터베이스 문제 풀이 예시 (0) | 2021.07.20 |
---|---|
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
Python에서 SQLite3 사용하는 방법 핵심 요약 및 소스코드 예제! (0) | 2021.07.19 |
미리캔버스 무료 PPT 템플릿을 이용한 PPT/배너/썸네일 제작 방법! (0) | 2021.07.11 |
유튜버를 위한 단역 배우 섭외 방법 Feat. 인스타그램 DM (0) | 2021.07.10 |
Python에서 SQLite3 사용하는 방법 핵심 요약 및 소스코드 예제!
파이썬의 경우 sqlite3을 표준 라이브러리로 제공하고 있다. 그래서 파이썬을 설치했다면, 별다른 추가 설치 없이 sqlite3을 이용할 수 있다. sqlite3은 다음과 같이 불러 올 수 있다. 참고로 아래 소스코드를 실행하면 '3.21.0'와 같은 SQLite의 버전명이 출력된다. 이것은 파이썬 라이브러리 버전은 아니고, SQLite의 버전으로 이해할 수 있다.
import sqlite3
print(sqlite3.sqlite_version)
※ 데이터베이스 생성 ※
데이터베이스를 생성할 때는 간단히 connect() 메서드를 사용하면 된다. 이때 메서드의 인자로 넣은 값이 데이터베이스 파일의 경로가 된다. 예를 들어 'my_database.db'라는 파일을 생성하고자 한다면 다음과 같이 한다. 현재 'my_database.db'라는 데이터베이스 파일이 없기 때문에, 새롭게 생성된 것을 확인할 수 있다.
※ 테이블 생성 ※
SQL 구문을 이용하기 위해서는 cursor 객체가 필요하다. cursor 객체를 이용하여 실제로 데이터베이스에 테이블(table)을 삽입하거나, 테이블(table)을 조회할 수 있다. 예를 들어 다음의 명령어는 Course(과목)라는 이름의 테이블을 생성한다. 이후에 생성된 테이블 정보를 조회한다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "CREATE TABLE Course (Course_ID int primary key not null, Course_Name text, Course_Date date);"
cursor.execute(SQL)
SQL = "SELECT name FROM sqlite_master WHERE type='table';"
cursor.execute(SQL)
print(cursor.fetchall())
SQL = "SELECT sql FROM sqlite_master WHERE type='table';"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
실행 결과는 다음과 같다.
[('Course',)]
[('CREATE TABLE Course (Course_ID int primary key not null, Course_Name text, Course_Date date)',)]
※ 데이터 삽입 ※
데이터를 삽입할 때는 INSERT 구문을 사용한다. 참고로 데이터를 삽입(insert)하는 명령어를 실행한 뒤에 데이터베이스에 반영하기 위해 commit() 메서드를 호출해야 한다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(1, 'Algorithm', '2021-03-01');"
cursor.execute(SQL)
SQL = "INSERT INTO Course VALUES(2, 'Data Structure', '2021-03-02');"
cursor.execute(SQL)
SQL = "INSERT INTO Course VALUES(3, 'Computer Architecture', '2021-03-05');"
cursor.execute(SQL)
con.commit()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
실행 결과는 다음과 같다.
[(1, 'Algorithm', '2021-03-01'), (2, 'Data Structure', '2021-03-02'), (3, 'Computer Architecture', '2021-03-05')]
※ 데이터 삭제 ※
데이터 삭제는 DELETE 구문을 사용하면 된다. 예를 들어 Course 테이블에 있는 모든 데이터(row)를 삭제하기 위해서는 다음과 같이 하면 된다. INSERT 구문과 마찬가지로 실행 뒤에 commit() 메서드를 이용해 DB에 반영할 수 있다. 위 코드를 실행하면 Course 테이블에 존재하는 모든 데이터가 삭제되기 때문에, 조회 결과가 없다.
import sqlite3
con = sqlite3.connect('./my_database.db')
cursor = con.cursor()
SQL = "DELETE FROM Course;"
cursor.execute(SQL)
con.commit()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
print(cursor.fetchall())
con.close()
※ 하나의 테이블로 구성되는 간단한 데이터베이스 연동 프로그램 예시 ※
파이썬에서 SQLite 3 문법을 활용한 간단한 데이터베이스 연동 프로그램은 다음과 같다.
import sqlite3
database_name = './my_database.db'
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "CREATE TABLE IF NOT EXISTS Course (Course_ID int primary key not null, Course_Name text, Course_Date date);"
cursor.execute(SQL)
con.close()
def insert_course(course_id, course_name, course_date):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(?, ?, ?);"
cursor.execute(SQL, (course_id, course_name, course_date))
con.commit()
con.close()
def insert_course_list(course_list):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "INSERT INTO Course VALUES(?, ?, ?);"
cursor.executemany(SQL, course_list)
con.commit()
con.close()
def search_course_by_name(course_name):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course WHERE course_name = ?;"
cursor.execute(SQL, (course_name, ))
return cursor.fetchall()
def search_course():
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course;"
cursor.execute(SQL)
return cursor.fetchall()
def search_course_order_by_date(limit):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "SELECT * FROM Course ORDER BY date(course_date) ASC Limit ?;"
cursor.execute(SQL, (limit, ))
return cursor.fetchall()
def update_course_by_id(course_id, course_name, course_date):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "UPDATE Course SET course_name = ?, course_date = ? WHERE course_id = ?;"
cursor.execute(SQL, (course_name, course_date, course_id))
con.commit()
con.close()
def delete_course_by_id(course_id):
con = sqlite3.connect(database_name)
cursor = con.cursor()
SQL = "DELETE FROM Course WHERE course_id = ?;"
cursor.execute(SQL, (course_id, ))
con.commit()
con.close()
delete_course_by_id(1)
delete_course_by_id(2)
delete_course_by_id(3)
delete_course_by_id(4)
delete_course_by_id(5)
insert_course(1, 'Algorithm', '2021-03-01')
insert_course(2, 'Data Structure', '2021-03-02')
insert_course(3, 'Computer Architecture', '2021-03-05')
course_list = [
(4, 'Programming Language', '2021-03-04'),
(5, 'Compiler', '2021-03-01'),
]
insert_course_list(course_list)
print(search_course_by_name('Algorithm'))
update_course_by_id(1, 'Cyber Security', '2021-03-03')
print(search_course())
print(search_course_order_by_date(100))
print(search_course_order_by_date(100)[::-1])
실행 결과는 다음과 같다.
[(1, 'Algorithm', '2021-03-01')]
[(1, 'Cyber Security', '2021-03-03'), (2, 'Data Structure', '2021-03-02'), (3, 'Computer Architecture', '2021-03-05'), (4, 'Programming Language', '2021-03-04'), (5, 'Compiler', '2021-03-01')]
[(5, 'Compiler', '2021-03-01'), (2, 'Data Structure', '2021-03-02'), (1, 'Cyber Security', '2021-03-03'), (4, 'Programming Language', '2021-03-04'), (3, 'Computer Architecture', '2021-03-05')]
[(3, 'Computer Architecture', '2021-03-05'), (4, 'Programming Language', '2021-03-04'), (1, 'Cyber Security', '2021-03-03'), (2, 'Data Structure', '2021-03-02'), (5, 'Compiler', '2021-03-01')]
※ 날짜 관련 코드 ※
참고로 현재 시각과 같은 날짜 및 시간 데이터가 필요할 때는 다음의 코드를 활용할 수 있다.
import sqlite3
database_name = './my_database.db'
con = sqlite3.connect(database_name)
cursor = con.cursor()
# 세계표준시
SQL = "SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');"
cursor.execute(SQL)
print(cursor.fetchall())
# 현지시간
SQL = "SELECT strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime');"
cursor.execute(SQL)
print(cursor.fetchall())
실행 결과는 다음과 같은 형태를 갖는다.
[('2021-07-18 12:09:18',)]
[('2021-07-18 21:09:18',)]
'기타' 카테고리의 다른 글
키움증권 웹 사이트에서 주식 시외가(시간 외 단일가) 보는 방법 (0) | 2021.07.20 |
---|---|
DB Browser for SQLite (DB4S) 설치 및 사용 방법 (0) | 2021.07.19 |
미리캔버스 무료 PPT 템플릿을 이용한 PPT/배너/썸네일 제작 방법! (0) | 2021.07.11 |
유튜버를 위한 단역 배우 섭외 방법 Feat. 인스타그램 DM (0) | 2021.07.10 |
주식 기본 용어 - HTS란 무엇일까? MTS, WTS에 대해서도 알아보자! (0) | 2021.07.10 |