*이 게시글은 인프런-처음 만난 리액트 강좌를 보고 정리한 글입니다.


목차

1. 리액트란?

2. 리액트의 장점1-빠른  업데이트와 렌더링 속도

3. 리액트의 장점2-컴포넌트 기반 구조

4. 리액트의 단점


1. 리액트란?

UI를 만들기위한 자바스크립트 라이브러리

사용자와 웹사이트의 상호작용을 돕는 인터페이스를 만들기 위한 자바스크립트 기능 모음집

SPA를 쉽고 빠르게 만들 수 있게 해주는 도구

 

라이브러리 : 자주 사용되는 기능들을 정리해 모아 놓은 것

출처 : 인프런-처음 만난 리액트 강좌

 

★프레임워크와 라이브러리

프레임워크는 뼈대나 기반구조를 뜻하는데 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발한다.

앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드등을 구현한다.

출처 : 코딩 공부 일지 티스토리

라이브러리는 소프트웨어를 개발할 때 컴퓨터 프로그램에 필요한 특정 기능을 모아둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미한다. 

 

출처 : 코딩 공부 일지 티스토리

프레임워크와 라이브러리의 차이점은 제어 흐름의 권한이 어디에 있는가인데

라이브러리의 경우 사용자가 개발 시 필요한 기능이 있을경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수나 코드를 가져다 쓰는 식으로 직접 코드의 흐름을 제어해야하지만

 

프레임워크는 애플리케이션의 코드가 있는데 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그안에 필요한 코드를 작성하게 된다. 

 

즉, 프레임워크는 양식이 있는 글 작성, 라이브러리는 자유양식 글 작성 이렇게 생각하면 될 듯하다.


2. 리액트의 장점1- 빠른 업데이트와 렌더링 속도

렌더링은 사용자 화면에 뷰를 보여 주는 것을 말하는데 이런 렌더링 과정을 리액트에서는 render라는 함수가 담당한다.

render 함수는 뷰가 어떻게 생겼고 작동하는지에 대한 정보를 지닌 객체를 반환한다.

따라서 초기렌더링은 렌더링을 하고 렌더링 작업을 통해 얻은 정보들을 이용하여 HTML 마크업(<div>..</div> 같은거)을 만들고 그것을 실제 페이지 DOM 요소 안에 주입한다.

 

여기서 말하는 업데이트는 웹사이트에서 화면에 나타나는 내용이 바뀌는 것이라고 생각하면 되는데

업데이트 될 때는 변화에 따라 뷰가 변형되는 것이 아니라 새로운 요소로 갈아끼우는 것이며

새로운 데이터를 가지고 redner 함수가 또 다시 호출돼서 그 데이터를 지닌 뷰가 생성되게 된다.

 

render 함수가 반환하는 결과를 곧바로 DOM에 반영하지 않고, 이전에 render 함수가 만들었던 정보와 현재  render함수가 만든 정보를 비교한다.

자바스크립트를 사용하여 두 가지 뷰를 최소한의 연산으로 비교한 후, 둘의 차이를 알아내 최소한의 연산으로 DOM 트리를 업데이트 하는 것이다.

출처 : 개발자 시니 티스토리 블로그

이 것이 뒤에 나오는 Virtual Dom에 대한 기본 개념이다.

 

Dom부터 차근차근 다시 알아보자.

 

★Virtual DOM

1> DOM(Document Object Model)이란?

웹페이지를 정의하는 하나의 객체

하나의 웹사이트에 대한 정보를 담고 있는 큰 그릇

웹페이지를 이루는 태그들을 자바스크립트가 이용할 수 있게 끔 브라우저가 트리 구조로 만든 객체 모델

DOM은 트리 형태라서 특정 노드를 찾거나 수정하거나 제거하거나 원하는 곳에 삽입할 수 있다.

Dom의 단점은 잦은 DOM 업데이트는 오류와 UI에 악영향을 미친다

ex) 광고창 하나가 바뀌었다고해도 전체 페이지를 계속 업데이트를 해야한다.

 

 

*문서 객체란 html, head, body 같은 태그들을 javacsript가 이용할 수 있는 (메모리에 보관할 수 있는) 객체를 의미한다.

*자바스크립트가 html 태그를 조작 할수 있는 이유는 Document라는 전역 객체를 통해 접근하기 때문이다.(window는 document 객체의 상위에 위치)

출처 : 개발자 시니 티스토리 블로그

1-1>웹페이지가 빌드 되는 과정

브라우저가 HTML 파일을 읽어와서 화면에 띄워주는 과정을 'critical rendering path'라고 하는데

이 과정을 2가지로 나누면

(1) 브라우저가 HTML과 CSS를 파싱하여, 화면에 어떤 것이 보여지게 되는지 결정하는 과정

(2) 브라우저가 렌더링하는 과정

으로 나뉜다.

 

(1)번 과정을 거치면 렌더트리가 만들어지며 렌더트리는 HTML element와 그에 대응하는 스타일을 표현한 것이다.

출처 : yejinee.log

1-2> DOM은 어떻게 만들어지는가?

DOM은 HTML문서를 객체 기반으로 표현한 것이며

객체기반인 이유는 HTML의 구조와 내용을 바꿔서 다양한 프로그램에서 쉽게 사용할 수 있게 하기 위함이다.

DOM의 객체 구조는 노드 트리라고도 불리는데 DOM을 루트에서부터 여러 노드들이 가지치며 나오는 트리로 생각할 수 있기 때문이다.

 

1-3>DOM의 특징

①DOM은 원본 HTML이 아니다

DOM은 유효한 HTML문서에 대한 인터페이스이며

HTML을 파싱하며 DOM을 생성하는 과정에서, 브라우저는 HTML에서 문제가 있는 것들을 고칠 수 있다. 

출처 : yejinee.log

②DOM은 브라우저에서 보여지는 것이 아니다

브라우저 화면에서 보여지는 것은 렌더트리이며 렌더트리는 DOM과 CSSOM을 합쳐져서 구성하게 된다.

 

1-4> DOM Node와 Element의 차이

DOM은 Node의 계층 구조로 이루어져 있으며 HTML에서 그냥 텍스트도 하나의 노드가 된다.

노드 타입은 여러가지가 있는데 그 타입중 Node.ELEMENT_NODE가 Element를 의미한다.

ELement는 HTML에서 태그로 적은 노드들을 지칭한다.

예를 들어 <html>, <div>, <title>과 같은 태그들은 전부 element이다.

출처 : yejinee.log

 

DOM에 대해 더 알고싶으면 아래링크를 참고하기 바란다.

DOM은 무엇인가? DOM Node와 Element의 차이 (velog.io)

 

1-3> DOM은 느린가?

요즘 흔히 접하는 큰 규모의 웹 애플리케이션(트위터, 페이스북)은 스크롤을 내릴수록 수많은 데이터가 로딩되는데 이런 규모가 큰 웹 애플리케이션에서 DOM에 직접 접근하여 변화를 주다 보면 느려지게 되는데

이를 두고 요즘 자바스크립트 엔진은 매우 빠른 반면, DOM은 느리다고 하는데 정확한 말은 아니다

 

DOM 자체는 빠르고 자바스크립트 객체를 처리할 때의 성능과 비교하여 다르지 않지만

웹 브라우저에서 DOM에 변화가 일어나면 웹 브라우저가 CSS를 다시 연산하고 레이아웃을 구성하고 페이지를 리페인트하는 렌더링 과정에서 시간이 허비되는 것이다. 

 

이렇게 느려지는 것에 대한 해결책으로 Virtual Dom 방식이 등장하게 되었다.

 

2>Virtual DOM

Virtual DOM을 사용하면 실제 DOM에 접근하여 조작하는 대신, 이를 추상화한 자바스크립트 객체를 구성하여 사용한다.

기존 DOM의 복사본을 만들어서 비교후 업데이트 된 부분만 실제 DOM에 적용하는 것이다.

출처 : 개발자 시니 티스토리 블로그

Virtual DOM을 사용한다고 해서 무조건 빠른 것이 아니다.

리액트를 사용하지 않아도 코드 최적화를 열심히 하면 DOM 작업이 느려지는 문제를 개선할 수 있고 또 작업이 매우 간단할 때는 리액트를 사용하지 않는 편이 더 나은 성능을 보이기도 한다.

 

리액트와 Virtual Dom이 언제나 제공할 수 있는 것은 업데이트 처리 간결성이다.

업데이트하는 과정에서 생기는 복잡함을 해소하고 쉽게 업데이트에 접근할 수 있다

 

3> Dom과 Virtaul DOM의 차이

Real DOM은 페이지에 업데이트할 사항이 있으면 전체 문서가 업데이트되지만 

Virtual DOM은 기존의 Virtual DOM과 비교하여 변경된 사항만 Real Dom에 업데이트 된다.

 


3. 리액트의 장점2-컴포넌트 기반 구조

Component는 구성요소라는 뜻을 가지는데 리액트는 모든 페이지가 컴포넌트로 구성돼있고 한 컴포넌트는 또 여러개의 다른 컴포넌트로 이루어져 있다.

마치 레고 블록 조립하듯 컴포넌트들을 모아서 개발하는 것과 같다.

 

아래는 에어비앤비 사이트를 스크린샷한 것인데 이 웹사이트도 리액트로 만들어져 있다.

아래 사진과 같이 A는 여행할 지역을 나타내는 컴포넌트이고 B라는 컴포넌트는 체험할 지역을 나타낸다.

 

리액트로 만든 웹사이트는 수많은 컴포넌트의 조합으로 이루어져있다.

 

출처 : 인프런-처음 만난 리액트 강좌

★ 컴포넌트 구조의 장점

1) 재사용성(Reusuability)

재사용성은 말그대로 다시 사용가능한 성질을 의미하는데 재활용과는 사뭇 다르다.

재활용은 다시 활용 가능한 자원을 가공하여 새로운 제품을 만드는 것이고 재사용은 계속해서 재사용이 가능한 성질을 의미한다.

물리적인 물질은 쓰면 쓸수록 닳기 때문에 기본적으로 재사용이 불가능해서 주로 소프트웨어 분야에서만 쓰인다.

 

모든 소프트웨어가 재사용되는 것은 아닌데 그 이유는 의존성이나 다양한 호환성문제가 발생할 수 있기 때문이다.

그래서 소프트웨어 개발을 할 때 재사용성이 높게 개발해야한다고 하는데 이 말의 의미는 해당 소프트웨어의 모듈이 다른 소프트웨어에서도 쉽게 사용할 수 있어야 함을 의미한다.

 

*재사용성의 장점

  • 재사용성이 높아지면 개발 기간이 단축된다. (기존에 개발한 모듈을 재사용하기 때문이다)
  • 유지 보수가 용이하다(원인인 모듈만 수정하면 되기 때문이다)

출처 : 인프런-처음 만난 리액트 강좌

 


4. 리액트의 단점

1) 방대한 학습량

모든 라이브러리 언어가 그렇지만 특히 리액트의 경우 기존과는 다른 방식의 UI 라이브러리라서 배워야할 것이 많다.

출처 : 인프런-처음 만난 리액트 강좌

2) 높은 상태관리 복잡도

state는 쉽게 말해 리액트 Component의 상태를 의미하는데 웹사이트의 규모가 커져 Component의 개수가 많아지면 상태 관리 복잡도가 증가된다.

앞에서 Virtual Dom이 바뀐 부분만 업데이트 한다고 했는데 여기서 바뀐 부분은 state가 바뀐 Component를 의미한다

 

그래서 큰 규모의 프로젝트의 경우 상태관리를 위해 외부 상태관리 라이브러리를 사용하는 경우가 많다.


참고문헌

1. [무료] 처음 만난 리액트(React) - 인프런 | 강의 (inflearn.com)

2. [개발상식] 프레임워크(Framework) 와 라이브러리(Library)의 차이 :: 코딩 공부 일지 (tistory.com)

3. [React] DOM이란? 가상 돔 (Virtual DOM )이 나오게 된 이유 (tistory.com)

4. 리액트를 다루는 기술-김민준

5. Virtual dom과 Real dom의 차이 (velog.io)

6. DOM은 무엇인가? DOM Node와 Element의 차이 (velog.io)

 

★연습문제1

1. 회원관리(EC_Member) 테이블의 주민등록번호를 이용하여 성별을 추출하고, 성별이 '1' 또는 '3'일 때 '남자', '2' 또는 '4'일 때 '여자'로 변환하여 성별순으로 출력하시오.

더보기
SELECT NAME, REGIST_NO,DECODE(SUBSTR(REGIST_NO,8,1),'1','남','2','여',
                                                    '3','남','4','여')
                                                    AS 성별
FROM EC_MEMBER
ORDER BY 3;

2. 회원관리(EC_Member) 테이블을 이용하여 각 회원의 [회원명, 주민등록번호, 나이, 기준년월일]을 출력하시오. 단 , 기준녀월일은 SYSDATE로 한다.

더보기
SELECT NAME,REGIST_NO,EXTRACT(YEAR FROM SYSDATE)
       -(DECODE(SUBSTR(REGIST_NO,8,1),'1', '19','2','19','20') || 
       SUBSTR(REGIST_NO,1,2)) +1 AS 나이,
       TO_CHAR(SYSDATE,'YYYY/MM/DD') AS 기준년월일
FROM EC_Member
ORDER BY 3;

3. 주문처리(EC_Order) 테이블에서 결제 후 배달하지 않은 상품에 대하여 [주문자ID, 상품코드, 수량, 결제금액, 결제 후 지난 일자, 기준일]을 계산하여 출력하시오. 단, 기준일은 SYSDATE임.

더보기
SELECT ORDER_ID, PRODUCT_CODE AS 주문상품,ORDER_QTY AS 수량,
       TO_CHAR(CMONEY,'L99,999,999') AS 결제금액, 
       TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD') 
       - TO_DATE(TO_CHAR(CDATE,'YYYYMMDD'),'YYYYMMDD') "결제 후 일자",
       TO_CHAR(SYSDATE,'YYYY/MM/DD') AS 기준일
FROM EC_Order
WHERE GUBUN='결제' AND MDATE IS NULL;

4. 단가가 100만원 이상인 상품에 대하여 10% 할인하려고 한다. 상품관리(EC_Product) 테이블에서 해당 상품의 10%할인된 금액을 형식에 맞추어 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,
       TO_CHAR(UNIT_PRICE,'L99,999,999') AS 단가,
       TO_CHAR(UNIT_PRICE*0.9,'L99,999,999') "10%할인된금액"
FROM EC_Product
WHERE UNIT_PRICE>=1000000;

5. 주문처리(EC_Order) 테이블의 구분(Gubun) 칼럼 값이 '배달'을 제외하고, '결제'이면 '배달준비', '미결'이면 '결제대기', '취소'이면 '반품', 그렇지 않으면 '대기'로 변경하여 [주문자ID, 상품코드, 결제금액, 결제일자, 구분]의 처리내용을 출력하시오.

더보기
SELECT ORDER_ID,PRODUCT_CODE,CMONEY AS 결제금액,TO_CHAR(CDATE,'YY/MM/DD') AS 결제일자,
       DECODE(SUBSTR(GUBUN,1,2),'결제','배달준비'
                                ,'미결','결제대기'
                                ,'취소','반품','대기')AS 처리내용
FROM EC_Order
WHERE NOT GUBUN='배달';

★연습문제2

1. 회원관리(EC_Member) 테이블에서 '서울' 거주자에 대하여 회원명의 성씨를 출출하여 [회원명, 성, 전화번호, 주소]를 출력하시오.

더보기
SELECT NAME, SUBSTR(NAME,1,1) AS 성,TELEPHONE,ADDRESS
FROM   EC_Member
WHERE Address LIKE '서울%'
ORDER BY 1;

2. 상품관리(EC_Product) 테이블에서 모든 컴퓨터 제품의 재고수량을 단위와 결합하여 [상품코드, 상품명, 단위, 재고수량, 생샌처]를 출력하시오. CONCAT()함수

더보기
SELECT Product_Code,Standard, CONCAT(Left_Qty,Unit) "재고수량",
Company
FROM Ec_product
WHERE Product_Name LIKE '%컴퓨터%';

3. 주문처리(EC_Order) 테이블에서 결제금액이 100만원 이상 결제한 주문자의 결제일자(CDATE를 년월('YYYY/MM') 형식으로 변환하여 출력하시오.

더보기
SELECT Order_ID, Product_Code, CMoney,CDate "결제일자",
       TO_CHAR(Cdate, 'YYYY/MM') "결제년월"
FROM   EC_Order
WHERE  CDATE IS NOT NULL AND CMONEY >=1000000
ORDER  BY CDate;

4. 회원관리(EC_Member) 테이블에서 현재일자(SYSDATE) 기준으로 회원가입기간을 'xx년 xx월'로 계산하여 1년 이상인 회원을 출력하시오.

더보기
SELECT Name, REGIST_NO, TimeStamp "가입일자",
       Trunc(MONTHS_Between(Current_DATE,Timestamp) /12) || '년' ||
       MOD(Trunc(MONTHS_Between(Current_Date,Timestamp)),12)||'월' AS 가입기간,
       CURRENT_DATE "기준일자"
FROM   EC_MEMBER
WHERE  Trunc(MONTHS_Between(Current_Date, Timestamp)/12) >=1
ORDER  BY 1;

5. 주문처리(EC_Order) 테이블에서 결제한 회원중 '신용카드'로 결제한 회원에 대하여 EXTRACT() 함수를 이용하여 결제년도와 결제 월을 추출해 보시오.

더보기
SELECT Order_ID, CMoney, Csel, Cdate,
       ExTRACT(YEAR FROM CDATE) "결제년도",
       EXTRACT(MONTH FROM CDATE) "결제 월"
FROM   EC_Order
WHERE  CDATE IS NOT NULL AND Csel='신용카드'
ORDER  BY 4;

6. 수강임시(T_SG_Scores) 테이블에서 CASE 함수를 이용하여 등급을 산출하고, [학번, 과목코드, 성적, 등급, 성적취득일자]를 출력하시오.

더보기
UPDATE T_SG_Scores
SET    GRADE = CASE WHEN Score BETWEEN 95 AND 100 THEN 'A+'
                    WHEN Score BETWEEN 90 AND 94  THEN 'A'
                    WHEN Score BETWEEN 85 AND 89  THEN 'B+'
                    WHEN Score BETWEEN 80 AND 84  THEN 'B'
                    WHEN Score BETWEEN 75 AND 79  THEN 'C+'
                    WHEN Score BETWEEN 70 AND 74  THEN 'C'
                    WHEN Score BETWEEN 65 AND 69  THEN 'D+'
                    WHEN Score BETWEEN 60 AND 64  THEN 'D'
                                                  ELSE 'F'
                    END
WHERE  GRADE IS NULL;

SELECT*FROM T_SG_SCores;
COMMIT;

7. 수강임시(T_SG_Scroes)테이블에서 'C1801'학번의 성적을 5로 나누어 몫과 나머지를 계산하여 [학번, 과목코드, 성적, 몫, 나머지]를 출력하시오.

더보기
SELECT Student_ID, Course_ID, Score, Floor(Score/5)"몫",MOD(Score,5)"나머지"
FROM   T_SG_Scores
WHERE  Student_ID='C1801'
ORDER  BY 3 DESC;

8. 수강임시(T_SG_Scores) 테이블에서 CASE 함수를 이용하여 'C1801' 학번의 등급이 'A+'이면 4.5, 'A'이면 4.0, 'B+'이면 3.5, 'B '이면 3.0, 'C+'이면 2.5, 'C'이면 2.0, 'D+'이면 1.5, 'D'이면 1.0, 'F'이면 0.0을 출력하시오.

더보기
SELECT Student_ID, Course_ID, Grade,
       CASE Grade When 'A+' THEN '4.5' WHEN 'A ' THEN '4.0'
                  When 'B+' THEN '3.5' WHEN 'B ' THEN '3.0'
                  When 'C+' THEN '2.5' WHEN 'C ' THEN '2.0'
                  When 'D+' THEN '1.5' WHEN 'D ' THEN '1.0'
                            ELSE '0.0'
       END "평점"
FROM   T_SG_Scores
WHERE  Student_ID='C1801';

9. 과목임시(T_Course) 테이블에서 추가수강료(Course_fees)가 널인 행에 대하여 널 값을 0으로 변환하여 출력하시오.

더보기
SELECT Course_ID, Title,C_Number,Professor_ID, NVL(Course_fees,0)
FROM   T_Course
WHERE  Course_fees IS NULL;

10. 기준일자(CURRENT_DATE)에 5일을 더하고, 기준시간에 4시간을 더하여 출력하시오.

더보기
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

SELECT CURRENT_DATE "기준일자와 기준시간", CURRENT_DATE+5 "5일 후",
       CURRENT_DATE+4/24 "4시간 후"      FROM DUAL;

11. 상품관리(EC_Product)테이블에서 상품명을 '개인용컴퓨터', '노트북컴퓨터', '프린터', 'TV', 기타 출력순서로 1순위, 단가 내림차순을 2순위로 출력하시오.

더보기
SELECT Product_Code, Product_Name, Unit_Price, Company
FROM   EC_Product
ORDER  BY CASE Product_Name WHEN '개인용컴퓨터' THEN 1
                            WHEN '노트북컴퓨터' THEN 2
                            WHEN '프린터'      THEN 3
                            WHEN 'TV'         THEN 4
                                              ELSE 5
          END, 3 DESC;

 

*이 게시글은 인프런-처음 만난 리액트 강좌를 보고 정리한 글입니다.


목차

1. Node. js와 npm 설치하기

2. VS Code 설치하기


1. Node. js와 npm 설치하기

 

Node.js는 자바스크립트로 네트워크 Application을 만들 수 있게 도와주는 개발환경이라고 생각하면 되고

npm은 node package mangaer의 약자로 node.js를 위한 패키지 매니저이다.

 

패키지 매니저의 역할은 프로젝트에 필요한 다양한 외부 패키지들의 버전과 의존성을 관리하고 편하게 설치 및 삭제를 할 수 있도록 도와준다.

 

npm은 node.js를 설치하면 자동으로 함께 설치된다

1) 아래 링크를 통해 node.js를 설치한다

Node.js (nodejs.org)

 

2) 왼쪽은 안정화된 버전이고 오른쪽은 최신버전인데 안정화된 버전을 다운로드 한다

3) 설치가 다 되면 cmd나 powershell에 node -v, npm -v를 쳐서 node.js와 npm이 잘 설치 됐는지 확인한다.


2. VS Code 설치하기

메모장으로 코딩을 할 수 도 있지만 부가적인 기능을 가진 프로그램을 사용하면 좀 더 효율적이게 프로그램을 개발할 수 있기 때문이다.

이렇게 부가적인 기능을 제공하여 프로그램을 작성하는데 도움을 주는 프로그램을 IDE라고 한다(통합 개발 환경)

출처 : 인프런-처음 만난 리액트 강좌

1) 아래 링크에서 설치

Visual Studio Code - Code Editing. Redefined


*이 게시글은 인프런-처음 만난 리액트 강좌를 보고 정리한 글입니다.

 

목차

1. 자료형(Data Type)

2. 연산자(Operator)

3. 함수(function)

4. 백틱(`)


1. 자료형(Data Type)

일반적인 프로그래밍 언어에서는 변수를 선언하는 시점에 해당 변수의 자료형이 결정되는 반면 

자바스크립트는 변수에 데이터가 대입되는 시점에 해당 변수의 자료형이 결정된다.

이처럼 동적으로 자료형이 결정되는 것을 동적 타이핑이라고 한다.

출처 : 인프런-처음 만난 리액트 강좌

var은 변수를 의미하는 variable을 뜻한다.

var 외에도 let, const등도 있다.

var은 재선언, 재할당 모두 가능

let은 재할당만 가능

const는 재할당, 재할당 모두 불가능

 

let은 값이 바뀌면 안되는 변수를 쓸 때

const는 변수이름을 똑같은 이름으로 또 선언하려고 할 때 실수 방지 기능

 

 

★자료형의 종류

출처 : 인프런-처음 만난 리액트 강좌

1) Number type

숫자 자료형

 

2) String type

문자열 자료형

 

3) Bollean type

참/거짓 판단 자료형

 

4) Null type

값이 Null임을 의미하는 자료형

 

5) Undefined type

값이 정의돼있지 않음을 의미하는 자료형

아래 17번 라인처럼 선언만하고 할당을 하지 않은 경우 undefined 자료형이 된다.

 

6) Array type

배열 자료형

다른 프로그래밍 언어와 다르게 자바스크립트의 배열에서는 다른 자료형도 함께 들어갈 수 있다

출처 : 인프런-처음 만난 리액트 강좌

 

7) Obejct type

객체를 다루기 위한 자료형(다른 객체지향 프로그래밍에서의 객체와 의미가 다르다)

자바스크립트에서 객체는 key와 value로 이루어진 쌍의 집합을 의미한다

 

key는 문자열이여야 하며

value는 어떤 값이든 들어갈 수 있다

출처 : 인프런-처음 만난 리액트 강좌


2. 연산자(Operator)

1) 대입 연산자(=)

2) 산술 연산자

출처 : 인프런-처음 만난 리액트 강좌

3) 증가 연산자(++), 감소 연산자(--)

출처 : 인프런-처음 만난 리액트 강좌

4) 관계 연산자 또는 비교 연산자

 

출처 : 인프런-처음 만난 리액트 강좌

5) 동등 연산자와 일치 연산자

4번째, 7번째 줄이 동등 연산자

10번째, 13번째 줄이 일치 연산자

 

동등 연산자는 1과 '1' 구별 불가

일치 연산자는 1과 '1' 구별 가능

 

즉, 일치 연산자는 변수의 값 뿐아니라 자료형이 같은지, 다른지 까지 판별

출처 : 인프런-처음 만난 리액트 강좌

 

6) 이진 논리 연산자

&&는 둘 다 true여야 true

||는 둘 중 하나면 true면 true

출처 : 인프런-처음 만난 리액트 강좌

 

7) 조건부 연산자 또는 삼항 연산자

출처 : 인프런-처음 만난 리액트 강좌
출처 : 인프런-처음 만난 리액트 강좌


3. 함수(function)

출처 : 인프런-처음 만난 리액트 강좌

함수를 만드는 방법은 크게 2가지이다.

function 함수이름 형태를 쓰거나 화살표 함수 형태를 쓴다.


4. 백틱

키보드에 ESC키 아래에 ~(물결) 모양 버튼 아래 있는 `이게 백틱이다.

백틱을 사용하면 ${}를 사용해서 문자열과 변수를 적절히 같이 사용할 수 있다.

 

출처 : 리본 티스토리
출처 : 리본 티스토리


참고문헌

1. [무료] 처음 만난 리액트(React) - 인프런 | 강의 (inflearn.com)

2. [JavaScript] ES2015 백틱(`)과 템플릿 문자열 :: 리본 (tistory.com)

*이 게시글은 인프런-처음 만난 리액트 강좌를 보고 정리한 글입니다.

 

목차

1. 프론트엔드

2. API

3. HTML과 SPA

4. CSS

5. Javascript, ES6, 바벨


1. 프론트엔드(Front-End)

프론트엔드는 사용자가 볼 수 있는 화면, 즉 사용자 인터페이스(User Interface, UI)를 말한다.

 

대비되는 용어로 백엔드가 있는데 백엔드는 웹 애플리케이션의 사용자가 보지 못하는 영역인 서버나 데이터베이스를 관리하는 기술이다.

 

쉽게 말해 프론트엔드는 사용자가 보는 화면과 그 안에 있는 요소들을 만들고 백엔드는 사용자가 볼 수 없는 데이터베이스나 서버를 관리한다.

 

리액트는 프론트엔드 언어이다.


2. API

API는 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스이다.

 

UI가 사용자와 프로그램을 연결해주는거라면 API는 프로그램과 프로그램을 연결해주는 것이라고 생각하면 된다.

 

스마트폰 화면에서는 사람이 이용하기 편하도록 버튼이 있다.

만약 버튼이 없다면 사용자는 스마트폰을 사용하기가 어려울 것이다.

이런 경우 사용자를 도와주는 것이 바로 UI이다.

API도 마찬가지이다.

지도를 이용한 맛집 찾기 프로그램을 만들고자 하는데 일반인들은 이런 지도 기능들을 제공할만한 기반이 되는 데이터도 없고 관련 프로그램도 없다.

그리고 일반인들 입장에서는 그런 지도 데이터를 공개해도 여러 문제점 때문에 그 지도 데이터를 사용하기 어려울 것이다.

그래서 이 지도 데이터를 일종에 스마트폰의 버튼처럼 그 지도 데이터를 접근하기 쉽게 만들어 사용자들에게 공개한 것이 바로 지도 API이다.


3. HTML과 SPA

HTML은 웹 브라우저를 통해서 사용자에게 보이는 웹 문서를 작성하는 언어로 웹 문서의 내용 작성에 집중을 한다.

 

마크업종류의 한 종류로서 기존에서는 웹에서만 사용되었지만 최근에는 웹브라우저를 이용해서 데스크탑 용 앱을 만들 수 도 있기 때문에 그런 곳에서도 사용된다.

*마크업 : 문서나 데이터를 처리하기 위해 추가되는 정보
*마크업 언어: 마크업 정보를 표현하는 언어
HTML은 웹사이트의 뼈대를 구성하기 위해 사용하는 마크업 언어

출처 : 인프런-처음 만난 리액트 강좌

HTML에서는 태그라고 부르는 것으로 웹사이트의 구조를 만들고 웹사이트에 들어갈 내용을 채워넣는다.

 

태그는 아래와 같이 홑화살괄호를 사용하며 홑화살괄호안에 태그 이름을 넣어서 사용하며 <태그이름>으로 태그를 시작하며 </태그이름>으로 태그를 끝내는 형태를 가진다.

 

 

출처 : 인프런-처음 만난 리액트 강좌

 

 

웹사이트의 뼈대를 구성하는 태그에는 html 태그, head태그, body 태그가 있다.

 

  • html 태그 : html의 시작과 끝을 알리는 태그
  • head 태그 : 웹사이트의 속성
  • body 태그 : 실제로 웹사이트에서 보이는 내용

출처 : 인프런-처음 만난 리액트 강좌

우리가 사람의 머리를 보면 그사람이 누구인지 알 수 있는 것 처럼 head 태그를 보면 제목, 속성등이 나와있어 이 웹사이트가 어떤 사이트인지 알 수 있다.

이러한 속성들을 메타 데이터라고 한다.

 

출처 : 인프런-처음 만난 리액트 강좌

 

우리가 웹사이트를 둘러보다보면 웹사이트에 보이는 화면이 계속 바뀌는 것을 볼 수 있다.

웹사이트에서 보이는 내용이 Html에서 body태그라고 했으니까 그렇다면 body태그안이 계속 바뀐다는 얘기일까?

그렇다. 페이지가 바뀔 때마다 아래 그림과 같이 새로운 html파일을 불러와서 사용자에게 보여준다.

그렇다면 복잡한 웹페이지의 경우 이런 페이지들이 수십~수백개 이상일텐데 이렇게 많은 페이지를 어떻게 관리할까?

출처 : 인프런-처음 만난 리액트 강좌

이런 문제를 해결하기 위해 나온 것이 바로 SPA이다.

SPA는 말그대로 하나의 페이지만 존재하는 웹페이지 혹은 웹 애플리케이션이다.

 

출처 : 인프런-처음 만난 리액트 강좌

아래의 왼쪽 그림은 전통적인 웹 애플리케이션을 나타낸 것이고 아래의 오른쪽 그림은 SPA를 나타낸 것이다.

전통적인 방식인 Html페이지가 수십~수백개가 있는 것이 아니라 HTML이 1개, 즉 단 하나의 페이지만 존재한다.

 

SPA에서 유일한 HTML파일에 body태그의 내부가 텅 비어있다가 사용자가 해당 페이지에 접속할 때 그 페이지의 컨텐츠를 가져와서 동적으로 body태그 내부를 채워넣는 형태이다.

이렇게 동적으로 body 태그 내부를 채워넣는 역할을 하는 것이 리액트라고 생각하면 된다.

출처 : 인프런-처음 만난 리액트 강좌


4. CSS

CSS는 웹사이트의 레이아웃과 글꼴, 색상등의 디자인을 입히는 언어이다.

HTML로 웹사이트의 구조를 만들었다면 그 위에 CSS로 디자인을 입혀야 아름다운 웹사이트가 완성된다.

출처 : 인프런-처음 만난 리액트 강좌


5. JavaScript

만약 웹사이트가 HTML만으로 구성되어있다면 사용자가 버튼을 누르거나 정보를 입력하는 등의 동적인 작업을 처리할 수 없다. 이러한 동적인 작업을 하기위해 JavaScript를 사용한다. (Java와 관련이 없다)

자바의 정식명칭은 ECMAScript로 버전을 매길때도 맨 앞글자 EC를 따서 EC5, EC6 이런식으로 나타낸다.

출처 : 인프런-처음 만난 리액트 강좌

JavaScript는 이름에서도 알 수 있다시피 Script언어인데 다른언어와 가장 큰 차이점은 프로그램이 실행되는 runtime에 코드가 해석된다.

C언어나 Java같은 컴파일언어는 컴파일이라는 과정을 통해 소스코드가 해석되고 실행가능한 형태로 변환되는데 javascript같은 script언어는 runtime(실행시간)에 코드가 해석된다.

 

Javascript는 오랫동안 웹개발에만 사용되었는데 단순히 웹페이지에서만 국한되지 않고

Node.js 런타임을 통하여 서버쪽

NW.js, Electron 등의 도구를 사용하여 데스크탑 앱을 만들 수도 있고

react-native, NativeScript 등의 도구를 사용하여 모바일 앱도 만들 수 있다.

그리고 하드웨어에서도 Node.js를 통하여 JavaScript를 사용할 수 있기 때문에 Iot진영에서도 사용될 수 있다.


5-1 ES6

ES6은 ECMAScript6을 의미하며, 자바스크립트의 버전을 가리킨다.
ES6은 2015년에 도입되었고 2015년 이후에도 계속해서 새로운 자바스크립트 버전이 나오고 있는데
ES6에서 새로운 문법이 많이 추가가 되었다.


5-2 바벨(Babel)

최신 Javascript 문법으로 작성된 코드를 이전 Javascript 문법으로 변환시켜주는 도구이다.

Javascript는 표준이 존재하는데, 이 표준에 따라 Javascript를 개발하고 매년 새로운 버전을 만드는데 그 중 ES5에서 ES6이 되면서 새로운 기능들이 많이 추가가 되었다. 그래서 예전 브라우저를 쓰는 사람도 최신형 문법을 사용할 수 있게 해주는 도구가 필요해지게 된 것이다.


 

참고문헌

1. 스파르타코딩클럽 (spartacodingclub.kr)

2. HTML,CSS,JS의 관계 (velog.io)

3. [무료] 처음 만난 리액트(React) - 인프런 | 강의 (inflearn.com)

4. 1장. 자바스크립트 입문 · GitBook (vlpt.us)

5. 맨날 한귀로 듣고 흘리는 바벨(Babel)이 뭘까? (velog.io)

6. API 란?. 저도 API가 무엇인지 자세히 알지 못하였기 때문에 검색을 하며 스스로… | by 초보개발자 | Medium

★연습문제1

1. 상품관리(EC_Product) 테이블에 표를 참고하여 새로운 상품을 추가하시오.

상품코드 상품명 규격 단가 재고수량 생산처 이미지
SP01 아이폰 IPHONE8+64G 816, 000 10 APPLE sp01.jpg
SP02 갤럭시노트 NOTE8+256G 829, 000 15 SAMSUNG sp02.jpg
SP03 G7 ThinQ G7+128G 822, 000 10 LG전자 sp03.jpg
더보기
INSERT INTO EC_Product
(PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY,IMAGENAME)
VALUES
('SP01','아이폰','IPHONES8+64G',816000,10,'APPLE','sp01.jpg');
INSERT INTO EC_Product
(PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY,IMAGENAME)
VALUES
('SP02','갤럭시노트','NOTE8+256G',829000,15,'SAMSUNG','sp02.jpg');
INSERT INTO EC_Product
(PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY,IMAGENAME)
VALUES
('SP03','G7 ThinQ','G7+128G',822000,10,'LG전자','sp03.jpg');

SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY,IMAGENAME
FROM EC_Product
WHERE PRODUCT_CODE IN('SP01','SP02','SP03');

2. 주문처리(EC_Order) 테이블에 배달일자(Mdate)와 구분(Gubun) 칼럼 값을 표를 참고하여 수정하고, 2018년 5월 10일의 배달 내역을 출력하시오.

주문번호 주문자ID 배달상품코드 배달수량 배달일자 구분
180505002 kcchoi DK01 1 개 2018/05/10 배달
180505003 kcchoi CH01 1 개 2018/05/10 배달
더보기
UPDATE EC_Order
SET   MDATE='18/05/10', GUBUN='배달'
WHERE  ORDER_ID='kcchoi';

SELECT ORDER_NO,PRODUCT_CODE,ORDER_QTY,CMONEY,MDATE,GUBUN
FROM   EC_Order
WHERE  MDATE='18/05/10';

3. 주문처리(EC_Order) 테이블에 금일(2018/07/12) 입금된 내역이다. 주문금액과 결제 금액이 동일한 경우 표를 참고하여 [결제방법, 결제일자, 구분]의 결제항목을 입력하시오.

주문번호 주문자ID 주문금액 결제금액 결제방법 결제일자 구분
180707001 jupark 3,725,000 3,735,000 신용카드 2018/07/12 결제
180707002 jupark 4,300,000 4,300,000 신용카드 2018/07/12 결제
180707003 cscho 747,000 747,000 신용카드 2018/07/12 결제
더보기
UPDATE EC_Order
SET CSEL='신용카드',CDATE='18/07/12',GUBUN='결제'
WHERE ORDER_NO='180707001';

UPDATE EC_Order
SET CSEL='신용카드',CDATE='18/07/12',GUBUN='결제'
WHERE ORDER_NO='180707002';

UPDATE EC_Order
SET CSEL='신용카드',CDATE='18/07/12',GUBUN='결제'
WHERE ORDER_NO='180707003';

4. 주문처리(EC_Order) 테이블로부터 금일 (2018년 7월 12일) 결제한 [주문번호, 상품코드, 주문수량, 결제금액, 결제방법, 결제일자]를 주문번호순으로 출력하시오.

더보기
SELECT ORDER_NO,PRODUCT_CODE,ORDER_QTY,CSEL,CMONEY,CDATE
FROM EC_Order
WHERE CDATE='18/07/12'
ORDER BY 1;

5. 회원관리(EC_Member) 테이블의 구매실적(BuyCash) 칼럼이 널(null)인 행을 0으로 수정하시오.

더보기
UPDATE EC_Member
SET    BUYCASH=0
WHERE  NVL(BUYCASH,0)=0;

6. 테이블의 트랜잭션 영역의 모든 행들을 영구히 저장하시오.

더보기
COMMIT;

★연습문제2

1. 다음 표의 개설과목을 과목임시(T_Course) 테이블에 저장하고, 출력하시오.

과목코드 과목명 학점수 담당교수번호 추가수강료
L3001 스프링 프로젝트 3 P11 50,000
L3002 모바일프로그래밍 3 P12  
L3003 데이터베이스튜닝 2 P13 50,000
L3004 빅데이터 개론 2 P14 30,000
더보기
INSERT INTO T_Course
(Course_ID, Title, C_Number,Professor_ID,Course_fees)
VALUES
('L3001','스프링 프로젝트',3,'P11',50000);

INSERT INTO T_Course
(Course_ID, Title, C_Number,Professor_ID,Course_fees)
VALUES
('L3002','모바일프로그래밍',3,'P12',null);

INSERT INTO T_Course
(Course_ID, Title, C_Number,Professor_ID,Course_fees)
VALUES
('L3003','데이터베이스튜닝',2,'P13',50000);

INSERT INTO T_Course
(Course_ID, Title, C_Number,Professor_ID,Course_fees)
VALUES
('L3004','빅데이터 개론',2,'P14',30000);

SELECT * FROM T_Course;

2. 다음 표를 참고하여 학번별 수강신청 과목을 수강임시(T_SG_Scores) 테이블에 저장하고 출력하시오.

학번 성명 과목코드 과목명 학점수 수강일자
C1801 김대현 L3001 스프링 프로젝트 3 2018/02/23
L3002 모바일프로그래밍 3
L3003 데이터베이스튜닝 2
L3004 빅데이터 개론 2
C1802 신지애 L3001 스프링 프로젝트 3 2018/02/24
L3002 모바일프로그래밍 3
L3003 데이터베이스튜닝 2
L1051 웹서버 관리 2
더보기
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1801','L3001','18/02/23');              
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1801','L3002','18/02/23');              
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1801','L3003','18/02/23');                
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1801','L3004','18/02/23');  
                 
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1802','L3001','18/02/24');                
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1802','L3002','18/02/24');               
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1802','L3003','18/02/24');                
INSERT INTO T_SG_Scores (Student_ID,Course_ID,Score_Assigned)
                 VALUES ('C1802','L1051','18/02/24');   
                 
SELECT*FROM T_SG_Scores ORDER BY 1,2;

3. 'C1802' 학번의 '신지애' 학생이 수강 신청한 'L1051' 과목을 'L3004'  '빅데이터 개론'으로 수강 과목을 변경하고자 한다. T_SG_Scores 테이블에 변경하시오.

더보기
UPDATE T_SG_Scores
SET COURSE_ID='L3004'
WHERE STUDENT_ID='C1802' AND COURSE_ID='L1051';

4. 표를 참고하여 성적을 수강임시(T_SG_Scores) 테이블에 저장하고 출력하시오

교수번호 과목코드 과목명 학번 성적 성적취득일자
P11 L3001 스프링프로젝트 C1801 98 2018/06/28
C1802 88
P12 L3002 모바일프로그래밍 C1801 87
C1802 92
P13 L3003 데이터베이스튜닝 C1801 92 2018/06/28
C1802 93
P14 L3004 빅데이터 개론 C1801 89
C1802 97
더보기
UPDATE T_SG_Scores
SET Score=98,Score_Assigned='2018/06/28'
WHERE Student_ID='C1801' AND Course_ID='L3001';
UPDATE T_SG_Scores
SET Score=87,Score_Assigned='2018/06/28'
WHERE Student_ID='C1801' AND Course_ID='L3002';
UPDATE T_SG_Scores
SET Score=92,Score_Assigned='2018/06/28'
WHERE Student_ID='C1801' AND Course_ID='L3003';
UPDATE T_SG_Scores
SET Score=89,Score_Assigned='2018/06/28'
WHERE Student_ID='C1801' AND Course_ID='L3004';

UPDATE T_SG_Scores
SET Score=88,Score_Assigned='2018/06/28'
WHERE Student_ID='C1802' AND Course_ID='L3001';
UPDATE T_SG_Scores
SET Score=92,Score_Assigned='2018/06/28'
WHERE Student_ID='C1802' AND Course_ID='L3002';
UPDATE T_SG_Scores
SET Score=93,Score_Assigned='2018/06/28'
WHERE Student_ID='C1802' AND Course_ID='L3003';
UPDATE T_SG_Scores
SET Score=97,Score_Assigned='2018/06/28'
WHERE Student_ID='C1802' AND Course_ID='L3004';

SELECT*FROM T_SG_Scores ORDER BY 1,2;

5. 과목코드 'L2033'의 '게임프로그래밍' 개설과목이 폐강되었다. 수강임시(T_Course) 테이블에서 'L2033' 과목코드를 삭제하시오.

더보기
DELETE FROM T_Course
WHERE Course_ID='L2033';

6. 과목임시(T_Course) 테이블의 과목코드 'L1031', 과목명이 'SQL'의 추가수강료를 30000원으로 수정하시오.

더보기
UPDATE T_Course
SET Course_fees=30000
WHERE Course_ID='L1031';

7. 트랜잭션 영역의 모든 행들을 테이블에 영구히 저장하고, SQL*PLus의 AUTOCOMMIT 시스템 변수를 OFF으로 설정하시오.

더보기
COMMIT;
SET AUTOCOMMIT OFF;

8. 수강임시(T_Course)테이블에서 과목코드가 'L4'로 시작하는 과목코드들을 삭제하시오.

더보기
DELETE FROM T_Course
WHERE Course_ID LIKE 'L4%';

9. 수강임시(T_Course) 테이블에서 과목코드가 'L4'로 시작하는 과목코드들을 실수로 삭제하였다. 삭제된 행들을 복구하시오.

더보기
ROLLBACK;

*아래 연습문제는 연습문제를 위한 견본데이터베이스가 있어야 실행 가능

★연습문제1

1. 상품관리(EC_Product) 테이블에서 단가가 100만원을 초과하는 상품 목록의 [상품코드, 상품명, 단가]를 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,UNIT_PRICE
FROM EC_Product
WHERE UNIT_PRICE >1000000;

2. 회원관리(EC_Member) 테이블로부터 서울에서 거주하는 회원의 [사용자아이디, 회원명, 주민등록번호, 주소]를 출력하시오.

더보기
SELECT USERID,NAME,REGIST_NO,ADDRESS
FROM EC_Member
WHERE ADDRESS LIKE '서울%';

3. 장바구니(EC_Basket) 테이블에서 2018년 07월 11일에 주문한 고객과 주문 내용을 출력하시오.

더보기
SELECT ORDER_NO, ORDER_ID, PRODUCT_CODE,ORDER_QTY,ORDER_DATE
FROM EC_Basket
WHERE ORDER_DATE='18/07/11';

4. 주문처리(EC_Order) 테이블에서 결제한 회원 중에서 상품을 배달하지 않은 회원의 [주문번호, 상품코드, 주문수량, 결제방법, 결제금액, 결제일자, 구분]을 주문번호순으로 출력하시오.

더보기
SELECT ORDER_NO, PRODUCT_CODE,ORDER_QTY,CSEL,CMONEY,CDATE,GUBUN
FROM EC_Order
WHERE GUBUN ='결제'  AND GUBUN != '배달' ;

5. 회원관리(EC_Member) 테이블에서 회원명에 '우'자가 들엉간 회원의 [회원ID, 회원명, 주민등록번호]를 출력하시오.

더보기
SELECT USERID, NAME,REGIST_NO
FROM EC_Member
WHERE NAME LIKE '%우%';

6. 주문처리(EC_Order) 테이블에서 배달한 주문자 중에서 '신용카드'로 결제하지 않은 주문자의 [주문번호, 주문자ID, 상품코드, 결제방법, 구분]을 주문자ID 순으로 출력하시오.

더보기
SELECT ORDER_NO, ORDER_ID, PRODUCT_CODE,CSEL,GUBUN
FROM EC_Order
WHERE GUBUN ='배달' AND CSEL !='신용카드'
ORDER BY 2;

7. 상품관리(EC_Product) 테이블에서 상품의 단가가 30만원에서 50만원 이내의 상품 목록의 [상품코드, 상품명, 단가, 재고수량, 생산처를 단가(Unit_Price)내림차순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE UNIT_PRICE BETWEEN 300000 AND 500000
ORDER BY 3 DESC;

8. 주문처리(EC_Order) 테이블에서 '신용카드'로 결제한 행의 [주문번호, 주문자ID, 결제금액, 결제일자, 결제방법]을 출력하시오.

더보기
SELECT ORDER_NO,ORDER_ID,CMONEY,CDATE,CSEL
FROM EC_Order
WHERE CSEL='신용카드';

9. 주문처리(EC_Order) 테이블에서 결제하지 않은 행의 [주문번호, 주문자ID, 상품코드, 주문수랴으 결제할 금액, 구분]을 출력하시오.

더보기
SELECT ORDER_NO,ORDER_ID,PRODUCT_CODE,ORDER_QTY,CMONEY,GUBUN
FROM EC_Order
WHERE GUBUN IS NULL;

10. 주문처리(EC_Order) 테이블에서 'usko' 회원의 거래한 상품의 [주문자ID, 상품코드, 주문수량, 결제방법, 결제금액, 구분]을 출력하시오.

더보기
SELECT ORDER_ID,PRODUCT_CODE,ORDER_QTY,CSEL,CMONEY,GUBUN
FROM EC_Order
WHERE ORDER_ID = 'usko';

★연습문제2

1. 상품관리(EC_Product) 테이블에서 삼성(samsung) 회사의 제품의 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 상품명순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE COMPANY IN('SAMSUNG','Samsung','samsung')
ORDER BY 2;

2. 상품관리(EC_Product) 테이블에서 '프린터' 제품의 단가(Unit_Price)가 50만원을 추과하는 상품의 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 단가 내림차순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD, UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE PRODUCT_NAME='프린터' AND Unit_Price >500000
ORDER BY 4 DESC;

3. 회원관리(EC_Member) 테이블에서 '정'씨 회원의 [회원명, 주민등록번호, 전화번호, 가입일자]를 출력하시오.

더보기
SELECT NAME,REGIST_NO,TELEPHONE,TIMESTAMP
FROM EC_Member
WHERE NAME LIKE '정%';

4. 주문처리(EC_Order) 테이블에서 '현금입금'과 '계좌이체'한 회원의 [주문번호, 상품코드, 결제방법, 결제일자]를 결제방법, 결제일자순으로 출력하시오.

더보기
SELECT ORDER_NO,PRODUCT_CODE,CSEL,CMONEY,CDATE
FROM EC_Order
WHERE CSEL IN('현금입금','계좌이체')
ORDER BY 3,5;

5. 상품관리(EC_Product) 테이블에서 'Hp' 회사의 '프린터' 제품에 대한 [상품코드, 상품명, 단위, 단가, 재고수량]을 단가순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,UNIT_PRICE,LEFT_QTY
FROM EC_Product
WHERE COMPANY='HP' AND PRODUCT_NAME='프린터'
ORDER BY 3;

6. 상품관리(EC_Product) 테이블에서 생산처가 '삼성(SAMSUNG)'과 'LG전자'가 아닌 상품의 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 생산처, 단가순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE COMPANY NOT IN ('SAMSUNG','Samsung','samsung','LG전자')
ORDER BY 6,4;

7. 회원관리(EC_Member) 테이블에서 주소가 '서울'과 '대구'가 아닌 회원의 [회원명, 주민등록번호, 전화번호, 주소]를 주소(Address)순으로 출력하시오.

더보기
SELECT NAME,REGIST_NO,TELEPHONE,ADDRESS
FROM EC_Member
WHERE ADDRESS NOT LIKE '서울%' AND ADDRESS NOT LIKE '대구%'
ORDER BY 4;

8. 상품관리(EC_Product) 테이블에서 재고수량이 10 미만인 상품의 [상품코드, 상품명, 규격, 단가, 재고수량, 생산처]를 상품명순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE LEFT_QTY <10
ORDER BY 2;

9. 회원관리(EC_Member) 테이블에서 전화번호가 '666'이 포함된 회원의 [회원명, 주민등록번호, 전화번호, 주소]를 회원명순으로 출력하시오.

더보기
SELECT NAME,REGIST_NO,TELEPHONE,ADDRESS
FROM EC_Member
WHERE TELEPHONE LIKE '%666%'
ORDER BY 1;

10. 회원관리(EC_Member) 테이블에서 2018년 5월 1일 이후에 가입한 회원의 [회원명, 주민등록번호, 전화번호, 주소, 가입일자]를 회원 가입일자(Timestape)순으로 출력하시오.

더보기
SELECT NAME,REGIST_NO, TELEPHONE, ADDRESS, TIMESTAMP
FROM EC_Member
WHERE TIMESTAMP >'2018/05/01'
ORDER BY 5;

11. 상품관리(EC_Product) 테이블에서 상품명이 '노트'로 시작하는 상품의 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 생산처순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE PRODUCT_NAME LIKE '노트%'
ORDER BY 6;

12. 상품관리(EC_Product) 테이블에서 'LG'로 시작하는 생산처의 상품이 80만원을 초과하는 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 상품코드순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE COMPANY LIKE 'LG%' AND UNIT_PRICE>800000
ORDER BY 1;

13. 상품관리(EC_Product) 테이블에서 생산처가 입력되지 않은 행의 [상품코드, 상품명, 단위, 단가, 재고수량, 생산처]를 상품코드순으로 출력하시오.

더보기
SELECT PRODUCT_CODE,PRODUCT_NAME,STANDARD,UNIT_PRICE,LEFT_QTY,COMPANY
FROM EC_Product
WHERE COMPANY IS NULL
ORDER BY 1;

14. 주문처리(EC_Order) 테이블에서 상품코드가 'CM01'이고 주문이 1개 초과 주문한 행의 [주문번호, 주문자ID, 상품코드, 주문수량, 결제금액]을 주문자ID순으로 출력하시오.

더보기
SELECT ORDER_NO,ORDER_ID,PRODUCT_CODE,ORDER_QTY,CMONEY
FROM EC_Order
WHERE Product_CODE='CM01' AND ORDER_QTY>1
ORDER BY 2;

15. 회원관리(EC_Member) 테이블에서 회원명이 '고'씨부터 '최'씨를 제외한 회원을 [회원명, 주민등록번호, 전화번호, 주소']를 회원명순으로 출력하시오.

더보기
SELECT NAME,REGIST_NO,TELEPHONE,ADDRESS
FROM EC_Member
WHERE NAME NOT BETWEEN '고' AND '쵸'
ORDER BY 1;

16. 수강(SG_Scores) 테이블에서 수강과목코드가 'L1011'과 'L1021' 과목의 학점을 취득한 학생의 [과목코드, 학번, 성적, 성적취득일자]를 과목코드, 학번순으로 출력하시오.

더보기
SELECT COURSE_ID, STUDENT_ID,SCORE,SCORE_ASSIGNED
FROM SG_Scores
WHERE COURSE_ID IN('L1011','L1021')
ORDER BY 1,2;

17. 수강(SG_Scores)테이블에서 성적이 80점 이상이 아닌 행의 [과목코드, 학번, 성적, 성적취득일자]를 출력하시오.

더보기
SELECT STUDENT_ID, COURSE_ID, SCORE,SCORE_ASSIGNED
FROM SG_Scores
WHERE NOT SCORE >=80;

18. 학생(Student) 테이블에서 학과코드가 '컴공',과 '경영'학과가 아닌 학생의 [학과코드, 학년, 학번, 성명, 전화번호]를 학과코드, 학번순으로 출력하시오.

더보기
SELECT DEPT_ID, YEAR, STUDENT_ID,NAME,TELEPHONE
FROM Student
WHERE DEPT_ID NOT IN('컴공','경영')
ORDER BY 1,3;

★연습문제1

1-1. 표의 논리적 스키마를 참고하여 상품관리 테이블을 생성하시오.

칼럼명 영문명 데이터형 크기  NN 참조테이블
상품코드 Product_Code 문자형 10 NN PK  
상품명 Product_Name 문자형 20 NN    
규격 Standard 문자형 20      
단위 Unit 문자형 10      
단가 Unit_Price 숫자형 7 NN    
재고수량 Left_Qty 숫자형 5 NN    
생산처 Company 문자형 20      
상품이미지명 ImageName 문자형 20      
상품정보 Info 문잦형 50      
상세소개 Detail_Info 문자형 255      
더보기
CREATE TABLE EC_Product (
Product_Code VARCHAR2(10),
Product_Name VARCHAR2(20) NOT NULL,
Standard     VARCHAR2(20),
Unit         VARCHAR2(10),
Unit_Price   NUMBER(7)    NOT NULL,
Left_Qty     NUMBER(5)    NOT NULL,
Company      VARCHAR2(20),
ImageName    VARCHAR2(20),
Info         VARCHAR2(50),
Detail_Info  VARCHAR2(255),
CONSTRAINT EC_Product_pk PRIMARY KEY(Product_Code));

1-2. 표의 논리적 스키마를 참고하여 회원관리 테이블을 생성하시오.

칼럼명 영문명 데이터형 크기 NN 참조테이블
회원 ID UserID 문자형 10 NN PK  
회원비밀번호 Passwd 문자형 10 NN    
회원명 Name 문자형 10 NN    
주민등록번호 Regist_No 문자형 14 NN UK  
eMail 주소 Email 문자형 20      
전화번호 Telephone 문자형 13 NN    
주소 Address 문자형 40      
구매실적 Buycash 숫자형 9 기본값 0    
가입일자 Timestamp 날짜형   기본값 SYSDATE    
더보기
CREATE TABLE EC_Member (
UserID    VARCHAR(10),
Passwd    VARCHAR(10)   NOT NULL,
Name      VARCHAR(10)   NOT NULL,
Regist_No VARCHAR(14)   CONSTRAINT EC_Member_uk UNIQUE NOT NULL,
Email     VARCHAR(20),
Telephone VARCHAR(13)   NOT NULL,
Address   VARCHAR(40),
Buycash   NUMBER(9)     DEFAULT 0,
Timestamp DATE          DEFAULT SYSDATE,
CONSTRAINT EC_Member_pk PRIMARY KEY(UserID));

1-3. 표의 논리적 스키마를 참고하여 장바구니 테이블을 생성하시오.

칼럼명 영문명 데이터형 크기 NN 참조테이블
주문번호 Order_No 문자형 10 NN PK  
주문자 ID Order_ID 문자형 10 NN FK1 회원관리
상품코드 Product_Code 문자형 10 NN FK2 상품관리
주문수량 Order_Qty 숫자형 3 NN    
주문일자 Order_Date 날짜형   기본값 SYSDATE    
더보기
CREATE TABLE EC_Basket(
Order_No     VARCHAR(10),
Order_ID     VARCHAR(10) NOT NULL,
Product_Code VARCHAR(10) NOT NULL,
Order_Qty    NUMBER(3)   NOT NULL,
Order_Date   DATE        DEFAULT SYSDATE,
CONSTRAINT EC_Basket_pk  PRIMARY KEY(Order_No),
CONSTRAINT EC_Basket_fk1 FOREIGN KEY(Order_ID)     REFERENCES EC_Member(UserId),
CONSTRAINT EC_Basket_fk2 FOREIGN KEY(Product_Code) REFERENCES EC_Product(Product_Code));

1-4. 표의 논리적 스키마를 참고하여 주문처리 테이블을 생성하시오.

칼럼명 영문명 데이터형 크기 NN 참조테이블
주문번호 Order_No 문자형 10 NN PK  
주문자ID Order_ID 문자형 10 NN    
상품코드 Product_Code 문자형 10 NN    
주문수량 Order_Qty 숫자형 3 NN    
결제방법 Csel 문자형 10      
결제금액 CMoney 숫자형 9      
결제일자 Cdate 날짜형        
배달일자 Mdate 날짜형        
구분 Gubun 문자형 10      
더보기
CREATE TABLE EC_Order(
Order_No     VARCHAR2(10),
Order_ID     VARCHAR2(10) NOT NULL,
Product_Code VARCHAR2(10) NOT NULL,
Order_Qty    NUMBER(3)    NOT NULL,
Csel         VARCHAR2(10),
Cmoney       NUMBER(9),
Cdate        DATE,
Mdate        DATE,
Gubun        VARCHAR2(10),
CONSTRAINT EC_Order_pk PRIMARY KEY(Order_No));

2. 사용자가 생성한 테이블명을 모두 출력하시오.

더보기
SELECT * FROM TAB;

3. 장바구니(EC_Basket) 테이블의 구조를 출력하시오

더보기
DESC EC_Basket

4. 상품관리(EC_Product) 테이블의 상세소개(Detail_info) 칼럼을 삭제하시오.

더보기
ALTER TABLE EC_Product DROP COLUMN Detail_info;

5. 상품관리(EC_Product) 테이블의 상품정보(Info) 칼럼을 40자로 줄이시오.

더보기
ALTER TABLE EC_Product MODIFY(INFO VARCHAR2(40));

6. 주문처리(EC_Order) 테이블의 구분(Gubun) 칼럼을 20자로 늘리시오.

더보기
ALTER TABLE EC_Order MODIFY(Gubun VARCHAR2(20));

7. 주문처리(EC_Order) 테이블의 상품코드(Product_Code) 칼럼을 상품관리(EC_Product 테이블을 참조하여 외부 키를 추가하시오.

더보기
ALTER TABLE EC_Order
ADD CONSTRAINT EC_Order_fk
    FOREIGN KEY(Product_Code) REFERENCES EC_Product(Product_Code);

8. 주문처리(EC_Order) 테이블에 지정된 제약조건을 출력하시오.

더보기
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='EC_ORDER';

9. 주문처리(EC_Order) 테이블에 지정한 제약조건명, 칼럼명, 복합칼럼(POSITION) 유무를 출력하시오.

더보기
SELECT CONSTRAINT_NAME,COLUMN_NAME,POSITION
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME ='EC_ORDER';

★연습문제2

1. 표의 논리적 스키마를 참고하여 자유게시판(Board) 테이블을 생성하시오.

칼럼명 영문명 데이터형 크기 NN
게시물 번호 B_Id 숫자형 5 NN PK
등록자 B_Name 문자형 20 NN  
비밀번호 B_Pwd 문자형 20 NN  
이메일 주소 B_Email 문자형 20 NN  
제목 B_Title 문자형 80 NN  
내용 B_Content 문자형 2000 NN  
등록일자 B_Date 날짜형   기본값 SYSDATE  
조회수 B_Hit 숫자형 5 기본값 0  
IP 주소 B_Ip 문자형 15    

 

더보기
CREATE TABLE Board(
B_Id      NUMBER(5),
B_Name    VARCHAR2(20)   NOT NULL,
B_Pwd     VARCHAR2(20)   NOT NULL,
B_Email   VARCHAR2(20)   NOT NULL,
B_Title   VARCHAR2(80)   NOT NULL,
B_Content VARCHAR2(2000) NOT NULL,
B_Date    DATE           DEFAULT SYSDATE,
B_Hit     NUMBER(5)      DEFAULT 0,
B_IP      VARCHAR2(15),
CONSTRAINT Board_pk PRIMARY KEY(B_Id));

2. 표를 참고하여 답변형 게시판에 필요한 칼럼을 Board 테이블에 추가하시오.

칼럼명 영문명 데이터형 크기 NN
동일 게시물 참조번호 B_Ref 숫자형 5 기본값 0  
동일 게시물 단계번호 B_Step 숫자형 5 기본값 0  
동일 게시물 위치번호 B_Order 숫자형 5 기본값 0  
더보기
ALTER TABLE Board
ADD(B_Ref  NUMBER(5) DEFAULT 0,
    B_Step NUMBER(5) DEFAULT 0, 
    B_Order NUMBER(5) DEFAULT 0);

3. Board 테이블의 제목(B_Title) 칼럼 길이를 100자로 늘리시오

더보기
ALTER TABLE Board
MODIFY(B_TiTLE VARCHAR2(100));

4. Board 테이블의 비밀번호(B_Pwd) 칼럼을 NULL로 수정하시오.

더보기
ALTER TABLE Board
MODIFY(B_Pwd VARCHAR2(20) NULL);

5. Board 테이블의 IP 주소(b_ip) 칼럼을 삭제하시오

더보기
ALTER TABLE Board
DROP COLUMN B_Ip;

6. Board 테이블의 구조를 확인하시오

더보기
DESC Board

7. 회원관리(EC_Member) 테이블의 회원 ID(UserID) 칼럼에 영소문자(a부터 z까지)로 제한하시오. 체크 제한조건이 동작하는지 다음 INSERT문을 실행해 보시오.

INSERT INTO EC_Member (UserID, Passwd, Name, Regist_No, Telephone)
VALUES ('srlee','1234','이소라','821001-2******','010-1234-1234');
INSERT INTO EC_Member (UserID, Passwd, Name, Regist_No, Telephone)
VALUES ('20park','1234','박연수','810604-1******','010-2345-2345');
더보기
ALTER TABLE EC_MEMBER
ADD(CONSTRAINT Member_CK CHECK(UserID BETWEEN 'a' AND 'z'));
INSERT INTO EC_Member(UserId,Passwd,Name,Regist_No,Telephone)
VALUES('srlee','1234','이소라','821001-2******','010-1234-1234');
INSERT INTO EC_Member(UserId,Passwd,Name,Regist_No,Telephone)
VALUES('20park','1234','박연수','810604-1******','010-2345-2345');

8. Board 테이블의 동일게시물번호(B_Step) 칼럼명을 "B_Level"로 변경하시오

더보기
ALTER TABLE Board
RENAME COLUMN B_Step TO B_Level;

9. 주문처리(EC_Order) 테이블의 기본 키를 삭제하시오

더보기
ALTER TABLE EC_Order DROP PRIMARY KEY;

10. Board 테이블의 B_Email 칼럼에 유일성(unique) 제약조건을 추가하시오.

더보기
ALTER TABLE Board
MODIFY(B_Email VARCHAR2(20) CONSTRAINT BOARD_uk UNIQUE);

11. Board 테이블을 Free_Board 테이블명으로 변경하시오.

더보기
RENAME Board TO FREE_Board;

12. 장바구니(EC_Basket) 테이블을 삭제하시오.

더보기
DROP TABLE EC_Basket;

13. 휴지통의 임시 테이블들을 삭제하시오.

더보기
PURGE RECYCLEBIN;

+ Recent posts