티스토리 뷰
전날에는 DCL을 활용하여, 권한을 관리하고, 트랜잭션을 실습해 보았고, join 연산이 어떤 식으로 이루어지는지 알아보며,
마지막으로 imformation_schema와 mysql 데이터베이스에서 db에 관련된 정보를 조회하는 법에 대해서 배웠다.
index
pk 값은 기본적으로 인덱스가 된다.
인덱스 조회
show index from customer;
인덱스 추가
create index idx_purchase_product
on purchase (product);
99990101인 인덱스가 아닌 파일을 찾는 시간을 찾아보자.
인덱스를 걸어주고 찾으면 몇초가 걸릴까?
날짜 인덱스 생성
절반 정도 단축된다.
만약 날짜가 아닌 정수로 검색을 하려고 한다면?
날짜처럼 따로 정해진 연산이 아니라면 인덱스 존재 시 엄청난 시간이 단축된다.
만약 인덱스를 제거하고 싶다면 다음 명령어를 사용하면 된다.
View
create table customer2 as
select * from customer;
customer가 바뀌면 customer2가 바뀌지는 않는다.
(백업)
create view customer2 as
select * from customer;
customer가 바뀌면 customer2도 바뀐다.
create view customer2 as
select a, b, c from customer;
사용자에게 물리적으로 존재하지 않지만 필요한 정보만을 제공하기 위해 가상으로 생성한 뷰
조인한 뒤 view를 해서
원하는 결과를 view로 보여줄 수 있다.
새로운 테이블을 만드는 것이 아님
장
1. db의 실제 구조가 변경돼도 논리적 독립성을 제공해 준다.
2. 다수 테이블에서도 조인된 값에 단순한 질의를 할 수 있다.
3. view에 권한을 제공이 가능하다.
단
1. 인덱스 사용 불가
2. view는 수정이 아닌 삭제 후 재생성을 해야 한다.
3. 인스턴스의 삽입, 변경, 삭제에 제약이 있음
(view에 not null 필드가 없다면 데이터 추가가 불가능함)
ㄴ> 뷰에서 데이터를 추가해도 실제 테이블에 수정이 가능함
create view vw_students
as
select class, name, address from students order by class asc;
view 함수를 확인하기 편해진다.
(수식으로 필드가 생성)
실제 인스턴스 값이 변경 가능한 것을 볼 수 있다.
하지만 여기서 주의해야 할 것이 모든 데이터 조작을 할 수 있는 것이 아니라는 것이다.
만약 view에 pk 필드나, not null 필드가 없다면 insert 하는 것이 불가능할 것이다.
문제
배송 회사에 배송에 필요한 정보를 제공해야 한다.
하지만, 테이블 자체를 조회하면 민감한 정보가 유출될 수 있기 때문에
필요한 부문만을 노출하는 view를 만들어서 제공하려고 한다.
view: vw_delivery
필드: purshase: no, date, product
customer: name, address
순서: no, date, name, address, product로 출력
정렬: no 오름차순
view는 실제 테이블 목록에도 나옴
create view vw_scores
AS
select students.id, name, class, kor, eng, math, ((kor + eng + math) / 3) as avg
from students inner join scores
on students.id = scores.id
order by class asc;
동일한 결과
create view vw_scores
AS
select students.id, name, class, kor, eng, math, ((kor + eng + math) / 3) as avg
from students natural join scores
order by class asc;
group by 절을 2개 사용이 가능하다.
순차대로 처리가 될 것이다.
year(20240513)
month(20240513);
day(20240513);
으로 원하는 값을 얻어 낼 수 있다.
having 구
그룹핑을 하여 처리된 결과에 대한 조건
where으론 집계된 데이터들을 집계할 수 없으므로,
where로 필터링 후 group by로 그룹핑한 뒤 having으로 그룹핑된 데이터를 필터링하는 것이다.
where -> group by -> having 순서로 와야 한다.
이렇게 각 반의 평균의 성적을 알 수 있지만 더 편하게 보는 방법이 있다.
with rollup은 그룹마다 중간 집계 값을 넣어준다.
ifnull(필드명, 대체 값)
필드명 자리에 null 값이 있을 때 대체 값으로 출력
select ifnull(class, "total");
web server
apm
a apache 웹 프로그램
p php 웹 프로그래밍 언어
m mysql 데이터베이스
LAMP (linux apm)
java (Spring Framework) php -> JDK(JRE)
우리나라는 공기관이 애초에 스프링 프레임워크로 고정됐다고 말할 수 있는 정도기에 보통 자바를 사용한다.
Open sourse 게시판 -> php
php 언어로 만들어진 게시판 오픈소스들
wordpress
xe
gnuboard
Redhat 계열에서 아파치 웹 패키지 이름을 httpd 라고 하며
Debian 계열에서는 apache2라고 배포한다.
Rocky, centos, fedora는 httpd
systemctl start httpd로 실행
ubuntu, kali 등은
apache2라고 부른다.
pm(dnf)로 설치했을 때 설정 파일 위치는
설정
/etc/httpd/conf/httpd.conf (메인)
/etc/httpd/conf.d/추가.conf (추가)
문서
/var/www/httpd/웹문서.html
로그
/var/log/httpd/accrss_log
error_log
source 설정 /usr/local/apach2/conf/httpd.conf
compile extras/추가.conf
문서 /usr/local/apache2/htdocs/웹문서.html
로그 /usr/local/apache2/logs /access_log
error_log
source 컴파일의 장점
rpm 설치는 배포판에 따라서 파일들의 위치가 달라질 수 있지만
source compile 방식으로 설치하면 언제나 같은 방식으로 설치 가능하다.
index.html
index.php
ㄴ> 데모페이지
서버에는
/etc/httpd/conf/httpd.conf
DirectoryIndex [index.html] [index.php] 둘 다 없으면? test page 출력
디렉토리에 접근 시 자동으로 읽어지는 파일 목록
http://www.swj.so.mega/phpinfo.php
index.php로 바꾸거나
httpd.conf에 DirectoryIndex [index.html] [index.php] [phpinfo.php]
전통적으로 php 구동을 확인하는 창
만약 php가 설치되지 않았다면 이런 창이 뜰 것이다.
주소 설정 시 해당 ip로 접속했을 시만 접속 가능하게 설정가능하다.
(ip주소를 임의로 추가해 둠)
:(
0.0.0.0:80은 모든 나의 주소에서 80번 포트에서 접속 가능하다는 뜻
wordpress를 사용하여 보다 쉽게 웹서버를 구축할 수 있다.
웹서버에서 php wordpress 구동을 시키는 과정
1. httpd, php, php-mysqlnd 설치
2. httpd 실행
systemctl start httpd
3. 방화벽 해제
Selinux 설정
집에 왔으니 다시 해보려고 한다.
첫 번째 리눅스에 mariaDB를 설치하고 설정까지 끝낸 뒤 두 번째 리눅스부터 시작하겠다.
두 번째 리눅스에 웹서버 구동에 필요한 프로그램들을 설치한다.
실행 -> 방화벽 개방 후 wordpress 파일을 윈도우에서 가져와서 /var/www/html/ 디렉토리 안으로 옮긴다.
압축 해제 후 wordpress 디렉토리 안에서 바깥으로 꺼낸 뒤 재실행하고 웹 브라우저로 진입해 보자.
시작하기를 누르면 이 화면이 나오는데, 이런 구성으로 만들어보자
이제 이 구성에 맞게 DB를 생성해 보자
완성했다.
이제 진입해 보자.
진입할 수 없다!
그 이유는 selinux라는 설정은 리눅스의 보안 설정인데 이 설정에 db보안이 잡혀있기 때문이다.
db가 네트워크에 연결이 되지 않는 것이 기본 설정이다.
getbool 목록을 변경하는 명령어는 setbool이다.
setsebool httpd_can_network_connect_db on
짧아 보이지만 정말 많은 시행착오로 성공했다.
setsebool -P httpd_can_network_connect_db 1
'클라우드 국비 과정 > 리눅스' 카테고리의 다른 글
리눅스 강의 15일차_2025_02_20 (0) | 2025.02.20 |
---|---|
리눅스 강의 14일차_2025_02_19 (0) | 2025.02.19 |
리눅스 강의 13일차_2025_02_17 (0) | 2025.02.17 |
리눅스 강의 12일차_2025_02_14 (0) | 2025.02.14 |
리눅스 강의 11일차_2025_02_13 (0) | 2025.02.13 |
- Total
- Today
- Yesterday
- vm copy
- getsebool
- WordPress
- WAN
- sticky_bit
- 리눅스 전원
- named.conf
- GROUP BY
- CCNA 1년 도전기
- tar
- 서브네팅
- vmware 자동로그인
- 캐싱네임서버
- OSI 7계층
- mariaDB
- dns
- zon
- IP
- OSI
- DBMS
- 프로토콜
- JOIN
- putty 원격접속
- TCP
- 방화벽
- permission
- Database
- ed25519
- accessdb
- Lan
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |