본문 바로가기
공부/java & Spring

[왕왕왕초보 Spring 실습] 1. 실습 데이터 만들기(oracle, DBeaver)

by 고기 2022. 7. 17.

작성순서

1. DBeaver 설치

2. DBeaver 다크모드 해제

3. DB 테이블 생성

4. DBeaver에서 oracle 연동

5. 실습 데이터 작성


 

1. DBeaver 설치

전에 sqldeveloper를 설치하고 사용하는 방법에 대해 글을 작성했었는데,

영 불편한점이 많아서 DBeaver로 실습을 진행한다.

(물론 내가 사용법을 몰랐을 가능성이 높긴하다. ㅋㅋㅋ)

 

 

https://dbeaver.io/download/

 

Download | DBeaver Community

Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer – run installer executable. It will automatically upgrade version (if needed). MacOS DMG – just run it and drag-n-drop DBeaver into Applications. Debian package

dbeaver.io

 

 

Windows 설치파일 다운로드

 

 

언어선택

 

다음

 

동의함

 

개인 컴퓨터면 아무거나 선택해도 상관없지만 for me 선택하는걸 권장함

해보진 않았는데 all users 선택하면 관리자 권한으로 설치하게 되는데,

아마 파일 삭제하거나 하는 등의 어떤 작업을 할 때 관리자 권한이 없으면 작업을 진행하지 못할듯?

 

이거 웃긴게 상세 설명 보고 싶으면 마우스 올리라고 되어 있는데 마우스 올리면 설명 안보여준다;

 

Reset Settings : 이전에 DBeaver 설치한 적이 있을 경우, 설정을 초기화해줌

Associate .SQL files : sql file을 열면 자동으로 DBeaver 실행

 

다음

 

설치

 

마침

 

2. DBeaver 다크모드 해제

 

왠지 모르겠지만 설치하고 바로 다크모드가 적용되어 있었다.

살짝 가독성이 떨어지는 것 같아서 먼저 다크모드를 해제했다.

 

설정 - 윈도우

 

User Interface - 모양에서 테마를 light로 변경 후 Apply and Close

적용하고 DBeaver 재시작해주면 된다.

 

3. DB 테이블 생성

 

먼저 사용한 데이터베이스는 오라클 버전 11g이다.

 

갓 태어난 사슴마냥 데이터베이스 설치만 끝낸 상태라고 가정하고

처음부터 데이터베이스 테이블을 생성하는 과정에 대해 작성한다.

 

테이블 스페이스 만들고 테이블 스페이스에 접근할 수 있는 계정을 만든다.

 

4. DBeaver에서 oracle 연동

왼쪽 상단에 콘센트 클릭하면 연동할 데이터베이스를 선택할 수 있다.

오라클 선택하고 다음

 

데이터베이스 접속하기 위한 정보를 입력하면 된다.

1) localhost 또는 127.0.0.1을 입력한다

2) port는 오라클 기본 포트가 1521이므로 1521을 입력한다.

3) SID도 마찬가지로 오라클 기본 SID는 orcl이므로 orcl 그대로 입력한다.

4) DB 테이블 생성 에서 만들었던 계정과 비밀번호를 입력한다.

 

데이터베이스 연동 정보 입력 후 왼쪽 하단의 Test Connection 클릭

 

분명 설치할 때 다운로드 했을텐데.. 오라클 드라이버 파일이 없다고 한다...

어딘가 있긴 하겠지만 그냥 Download 클릭

 

연동 성공했다는 메세지

 

완료

 

연동된 데이터베이스를 확인하고, 알아보기 쉽게 이름을 변경해주자.

 

상단의 SQL을 클릭하거나 Ctrl + ] 눌러서 스크립트를 생성할 수 있다.

 

뭔가 행번호가 나와야 할 것 같은 곳에 마우스 우클릭 - 행 번호 표시 클릭

 

 

5. 실습 데이터 작성

 

먼저 생성되어 있는 테이블들을 확인한다.

계정을 처음 만들었으니 당연히 만들어져 있는 테이블은 존재하지 않는다.

-- 해당 계정에서 생성된 테이블 확인
SELECT table_name FROM tabs;

 

간단한 실습 테이블을 생성한다.

-- 음식 리스트
CREATE TABLE MH_FOOD(
	NO		NUMBER(5) NOT NULL,
	CODE	VARCHAR2(12) NOT NULL,
	NAME	VARCHAR2(15)		
);

 

실습 데이터를 삽입한다.

참고로 DBeaver에서 sql을 한 문장씩 실행시키는 단축키는 ctrl+enter고 여러 문장을 한 번에 실행시키는 단축키는 ALT+X 다. 전부 드래그하고 ALT+X 해주면 된다.

INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '삼겹살');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '육회');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '시금치');   	  
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '오징어볶음');   	  
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '제육볶음');   	  
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '시리얼');   	  
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '바게트');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '냉면');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '돼지갈비');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '샐러드');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '피자');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '치킨');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '족발');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '스테이크');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '햄버거');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '라면');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '죽');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '짜장면');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '탕수육');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '짜파게티');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '솜사탕');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '고구마맛탕');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '감자채');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '소세지볶음');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '국밥');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '비빔밥');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '월남쌈');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '미역국');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '배추김치');
INSERT INTO MH_FOOD(NO, CODE, NAME) VALUES( (SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD), (SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1 ) FROM MH_FOOD), '곱창');

 

마지막으로 잠깐 삽입한 쿼리 중에서 NO와 CODE 컬럼에 적용된 쿼리를 설명하면 다음과 같다.

1) SELECT NVL(COUNT(*), 0)+1 FROM MH_FOOD

    MH_FOOD 테이블에서 NULL이 아닌 행의 개수 +1를 말한다.

    즉, NO 컬럼은 1, 2, 3, ... n의 값을 가지게 된다.

2) SELECT CONCAT( 'FOOD', NVL(COUNT(*), 0)+1) FROM MH_FOOD

    CONCAT(A, B)를 하면 AB가 된다.

    즉, CODE 컬럼은 FOOD1, FOOD2, FOOD3, ... FOODn 의 값을 가지게 된다.

 

테이블에 삽입된 값을 확인한다.

 

다음 글에서는 이클립스에서 spring mvc 프로젝트를 생성하는 방법에 대해 작성한다.

댓글