본문 바로가기
코리아 IT아카데미/grid·flex·mySql·jsp

13일차 | Javascript, mySQL

by Sharon kim 2021. 12. 1.

Javascript

class_11

          //함수 표현식
        //함수 선언
        function sayHi() {
            alert("Hello");
        }
        alert(sayHi());
        // alert(sayHi); //함수 코드가 보임
        // sayHi 옆에 괄호가 없기 때문에 함수는 실행되지 않는다.
        //자바스크립트는 괄호가 있어야만 함수가 호출된다.

 

        let sayHi = function () {
            alert("hello");
        };

        sayHi();

 

        let sayHi = function () {
            alert("hello");
        };
        
        let func = sayHi; //함수 복사(괄호가 없다는 점에 유의)

        func();

 

        function sayHi() {
            alert("Hello");
        }//컴퓨터가 블록으로 바라봄
        //함수 표현식
        let sayHi = function () {
            alert("hello");
        };//컴퓨터가 값으로 바라봄
        //끝에 세미콜론은 왜 있나요
        //let sayHi = ...;
        //코드에 블록이 아니고 값처럼 취급되어 변수에 할당되기 때문이다.

 

//함수를 값처럼 전달하는 예시

        //콜백 메서드
        function ask(question, yes, no) {
            if (confirm(question)) {
                yes();
            } else {
                no();
            }
        }

        function showOk() {
            alert("동의하셨습니다.");
        }

        function showCancel() {
            alert("취소 버튼을 눌렀습니다.");
        }
        //ask 사용법 : 
        ask("동의하나요?", showOk, showCancel);

class_12

        //함수 표현식
         let sum = function (a, b) {
             return a + b;
         }

        //좀더 간결하게 사용하는 방법_많이 쓰임
        //화살표 함수
        //let sum = (a, b) => a + b; // 한 줄로만 작성하는 방법
        //let sum = (a, b) => { a + b }; // 이렇게도 사용가능  

        alert(sum(100, 1000));

 		// let double = n => n * 2;을
        
        //함수 표현식으로 다시 만들어 주세요
        
        let double = function (n) {
            return n * 2;
        };

        //인수가 하나도 없을 때는 괄호를 비워 놓으면 됩니다.
        let sayHi = () => alert("안녕");

        sayHi();

19보다 많으면 '안녕하세요' 적으면 '안녕'

		let age = prompt("당신의 나이를 알려 주세요", 19);

        let welcome = (age < 19) ?
             () => alert("안녕") :
             () => alert("안녕하세요!");

        welcome();

        // 본문이 여러 줄인 화살표 함수

        let sum2 = (a, b) => { // 중괄호는 본문이 여러 줄로 구성된다고 알려준다.
            let result = a + b;
            return result;
        }

        alert(sum2(88, 22));

mySQL

class_14

-- insert update delete
/*
 insert 문
 테이블에 데이터를 삽입하는 명령어다.
 INSERT INTO 테이블명(열1, 열2, ...) VALUES (값1, 값2, ...);

*/

USE sqlDB;

CREATE TABLE testTbl(id int, userName char(3), age int);

INSERT INTO testTbl VALUES(1, '홍길동', 25);
SELECT * FROM testtbl;
-- 생략한 값은 null이 들어간다.
INSERT INTO testTbl(id, userName) VALUES (2, '이순신');

-- 순서를 변경할 수도 있다.
INSERT INTO testtbl(userName, id) VALUES ('야스오', 3);

-- 자동으로 증가하는 AUTO_INCREMENT
-- 자동으로 1부터 증가하는 값을 입력해준다.

CREATE TABLE testtbl2
(
	id int AUTO_INCREMENT PRIMARY KEY, 
    userName char(3), 
    age int
);

INSERT INTO testtbl2 VALUE(null, '지민', 25);
INSERT INTO testtbl2 VALUE(null, '유나', 22);
INSERT INTO testtbl2 VALUE(null, '유경', 21);

SELECT * FROM testtbl2;

INSERT INTO testtbl2(userName, age) VALUES('티모', 800);

-- 시나리오 1
-- AUTO_INCREMENT 값을 100부터 입력하게 변경하고 싶다면
ALTER TABLE testtbl2 AUTO_INCREMENT = 100;
INSERT INTO testtbl2(userName, age) VALUES('한나', 26);
INSERT INTO testtbl2(userName, age) VALUES('홍수', 21);

-- 실습
-- 1. tsettbl3을 만들어 주세요 id, userName, age / id 는 auto increment , primary key
-- 2. auto_increment 값을 1000부터 시작하게 변경
CREATE TABLE testtbl3
(
	id int AUTO_INCREMENT PRIMARY KEY,
    userName char(3),
    age int
);
ALTER TABLE testtbl3 AUTO_INCREMENT = 1000;
SELECT*FROM testtbl3;
INSERT INTO testtbl3(userName, age) VALUES('홍수', 21);
INSERT INTO testtbl3(userName, age) VALUES('한나', 27);
INSERT INTO testtbl3(userName, age) VALUES('철수', 31);

-- 확장 개념
SET @@auto_increment_increment = 3;
INSERT INTO testtbl3(userName, age) VALUES('한나2', 27);
INSERT INTO testtbl3(userName, age) VALUES('철수2', 31);

-- 3건의 데이터를 한 문장에서 다음과 같이 입력할 수도 있다.
INSERT INTO testtbl3(userName, age) VALUES ('철민',33),('공길',28),('민수',39);

-- 대량의 샘플 데이터 생성 !!!

CREATE TABLE testtbl4(id int, Fname varchar(50), Lname varchar(50));

-- 인설트 구문을 활용해서 대량의 데이터를 다른 테이블에서 들고 와서 만들어 줄 수 있다.
INSERT INTO testtbl4
	SELECT emp_no, first_name, last_name
    FROM employees.employees;

SELECT * FROM testtbl4;

-- 테이블 생성과 동시에 값 입력
CREATE TABLE testtbl5
(
	SELECT emp_no, first_name, last_name, gender FROM employees.employees
);
SELECT * FROM testtbl5;

class_15

/*
	UPDATE : 데이터 수정
    기존에 입력되어 있는 값을 변경하기 위해서 UPDATE라는 구문을 사용한다.
    
    UPDATE 테이블 이름
		SET 열1 = 값1, 열2 = 값2, ...
        WHERE 조건;
	1) 대부분의 UPDATE 구문에 WHERE 절이 추가되어야 한다.
    아니면 전체 데이터가 변경된다.
    
*/
SELECT * FROM testtbl4;

UPDATE testtbl4
SET Lname = '없음'
WHERE Fname = 'Mary';

UPDATE testtbl4
SET Lname = 'TEST'
WHERE Fname = 'Parto';

UPDATE testtbl4
SET Lname = 'HI';

SELECT * FROM testtbl4;

-- 시나리오1
-- 가끔 WHERE 절을 생략할 경우도 있다.
-- buytbl 에서 price 단가가 모두 1.5배 인상 되었다면

SELECT * FROM buytbl;

-- 문제 1. price 단가가 모두 1.5배 인상
UPDATE buytbl
SET price = price * 1.5;

SELECT * FROM buytbl;

class_16

/*
	DELETE FROM
    
    주의점 : 조건문과 함께 써야한다. 
    DELETE FROM 테이블 이름 WHERE 조건;
    
*/

SELECT * FROM testtbl4;

DELETE FROM testtbl4 WHERE Fname = 'Parto';

SELECT * FROM testtbl4 WHERE Fname = 'Anneke';

-- 상위 5명만 삭제하고 싶다.
DELETE FROM testtbl4 WHERE Fname = 'Anneke' LIMIT 5;
-- 225명 중 상위 5건만 삭제하라ALTER

SELECT *, count(Fname) FROM testtbl4
GROUP BY Fname
HAVING count(Fname) >= 200;

-- 대용량 테이블을 삭제해보자

CREATE TABLE bigtbl1 (SELECT * FROM employees.employees);
CREATE TABLE bigtbl2 (SELECT * FROM employees.employees);
CREATE TABLE bigtbl3 (SELECT * FROM employees.employees);

SELECT * FROM bigtbl1;
SELECT * FROM bigtbl2;
SELECT * FROM bigtbl3;

-- 대량의 데이터 테이블 삭제 3가지 방식
-- 1.344
-- 느린 작업, 한개씩 삭제
DELETE FROM bigTbl1;

-- 0.016
-- 한꺼번에 지운다, 테이블까지 삭제
DROP TABLE bigTbl2;

-- 0.015
-- 한꺼번에 지운다. 한번에 지워져서 DELETE 보다 빠르다
TRUNCATE TABLE bigTbl3;

class_17

/*
	조건부 입력하기
    
*/
use sqldb;

-- 문제1 
-- membertbl 테이블 생성과 동시에 usertbl 테이블에서 3건만 데이터를 입력해주세요
SELECT * FROM userTbl;
CREATE TABLE membertbl( SELECT userID, name, addr FROM usertbl LIMIT 3 );

DROP TABLE membertbl;

SELECT * FROM membertbl;
desc membertbl;

-- 테이블 생성 후에 PK 추후 생성하는 방법
ALTER TABLE memberTBL
	ADD CONSTRAINT pk_memberTBL PRIMARY KEY(userID); -- pk를 지정함

-- 3건 입력
INSERT INTO membertbl VALUE('BBK','비비코','미국'); -- 오류 
INSERT INTO membertbl VALUE('SJH','서장훈','서울'); -- 실행안됨
INSERT INTO membertbl VALUE('HJY','현주엽','경기'); -- 실행안됨

SELECT * FROM membertbl;

-- IGNORE : 무시하고 진행하라 
INSERT IGNORE INTO membertbl VALUE('BBK','비비코','미국'); -- 오류 
INSERT IGNORE INTO membertbl VALUE('SJH','서장훈','서울'); -- 실행됨
INSERT IGNORE INTO membertbl VALUE('HJY','현주엽','경기'); -- 실행됨

-- ON DUPLICATE KEY UPDATE : 중복이 되면 업데이트 하라
INSERT INTO membertbl VALUES('BBK', '비비코', '미국')
	ON DUPLICATE KEY UPDATE name = '비비코', addr = '미국';

socket : 운영체제가 가지고 있는 것
socket 통신 -> A와 C , A와 B가 계속 연결되어 있는 상태


B라는 컴퓨터                                                   A라는 컴퓨터
2) ip주소와 포트번호로 5000번 소켓에 연결              1) 5000번이라는 소켓오픈
                                                                      4) 5001 : 스레드 1 로 B와의 연결을 옮김
                                                                      5) 5002 : 스레드 2 로 C와 연결
C라는 컴퓨터
3) A에 연결하고 싶지만 B와 연결되서 연결안됨

허나 100, 1000명과 연결된다면 컴퓨터 과부하 -> http통신
*스레드 : 시간을 나눠서 동시에 이뤄지는 것처럼 보이게 하는 것


http 통신 -> state less 상태 (연결 단절 상태)
                  문서를 전달하고 요청하는 방식
                  .html이라는 확장자 문서를 읽어서 다시 돌려주는 방식이다.
                  

B컴퓨터                                             A컴퓨터
1) a.txt라는 것을 찾아달라 A에 요청          소켓
5) c.txt 재요청                                       2) B(a.txt) 요청 찾아주고 연결 끊음
                                                         4) C 요청 찾아주고 연결 끊음
C컴퓨터                                               6) B 요청을 찾아주지만 B가 요청했다는 것을 인식 x     
3) b.txt 파일 요청

톰캣 | 웹서버 개념을 구분하기

http : 소켓을 기반한 통신이다.
└------┘
시스템 콜


내컴퓨터 
a.avi
b.avi
c.mp4

친구 1
a.avi파일을 request(ip주소를 알아야함)
나 
response


웹서버는 static(정적인) 자원 
동적인 웹을 만들기 위해서는 웹서버 + 톰캣이 필요

웹브라우저                               웹서버 : 아파치 설치 + 톰캣설치
1) .jsp파일을 request                   2) .jsp 파일(자바코드가 포함된 파일이라 해석 못함)
5) .html 파일을 response              3) 톰캣 설치
                                              4) .jsp 파일을 컴파일해서 .html파일로 만들어 
                                                 웹서버에 접속해 웹브라우저에 보내기
    
갑 / 을 
갑은 sever(웹서버), 서비스 제공자하는 입장
을은 client, 요청하는 입장

채팅 서버, 게임 클라이언트 ...

 

내일 설치하게 될 것
이클립스 ee / 아파치 톰캣 / post man