깃허브에서 2021-08 부로 비밀번호 인증 방식에서 개인 액세스 토큰 인증 방식으로 바뀌었기 때문에 깃 레포지토리에 접근하려면 개인 액세스 토큰을 발급받아야 한다.
깃 허브에서 상단 우측의 프로필을 클릭하면 출력되는 메뉴에서 Settings를 선택한다.
페이지 좌측 메뉴의 하단에서 Developer settings를 선택한다.
좌측의 Personal access tokens을 선택하고 우측 상단의 Generate new token을 선택한다.
Note에는 해당 토큰의 용도를 적고 Expiration에는 토큰의 만료 기간을 설정해줄 수 있다. 그리고 select scopes에서는 토큰이 가질 수 있는 권한을 설정해줄 수 있다. 토큰은 비밀번호 대용으로서 사용되는데 이 토큰으로 어디까지 접근이 가능한지를 설정하는 것이다. 모든 권한을 다 주면 편리하겠다 생각할 수도 있지만 토큰이 공격자에게 탈취당하는 상황을 가정하면, 공격자에게 내 계정의 모든 권한이 넘어가는 상황이 발생하므로 필요한 권한만 최소한으로 부여하는 것이 좋다.
토큰을 생성하면 "ghp_"로 시작하는 토큰 인증번호를 얻을 수 있다. 이 토큰은 이 페이지를 벗어날 경우 절대 다시 확인할 수 없기 때문에 텍스트로든 사진으로든 저장해놔야 한다.
만약 실수로 페이지를 벗어나 토큰을 확인할 수 없게 됬다면 토큰을 생성하는 페이지에서 해당 토큰을 삭제할 수 있으니 삭제하고 다시 만들면 된다.
Git에 대해 더 자세히 알고 싶다면 깃 공식 문서인 git-scm를 참조하는 걸 추천드립니다. 한국어를 포함한 여러 언어를 지원하고 있습니다. 챕터별로 잘 나누어져 있고 개념들을 풀어서 자세히 설명하고 있기 때문에 git에 대해 지식이 없다면 도움이 될 것 같습니다. 다만 공식 홈페이지에서 진행하는 설치 및 연동 과정(CLI)은 리눅스를 기반으로 하고 있기 때문에 윈도우 연동 과정(GUI)과는 거리가 있습니다.
생성, 연동 순서
"프로젝트 생성 및 원격 레포지토리 연동"을 하는 방법은 한 가지로 정해져 있자 않고 여러 방법이 있다. 그 중 이 포스팅에서 소개하는 방법은 "먼저 깃허브에서 원격 레포지토리를 생성하고 내 PC로 복제(Clone)한 뒤 복제한 위치에 프로젝트를 생성"하는 방법이다. 간략하게 순서를 요약하면 다음과 같다.
원격 레포지토리 생성
원격 레포지토리를 내 PC로 복사(Clone)
복사해온 레포지토리 위치에 프로젝트 생성
Commit/Push
Remote Repository 만들기
Github에 접속해 로그인을 수행한 뒤 메인 화면에서 Create repository 혹은 Start a project를 클릭해 레포지토리 생성 화면으로 이동한다.
Repository name에 레포지토리 이름을 적고Description에는 생성하려는 레포지토리에 대한 가벼운 설명이나 소개를 적는다. 다음으로 레포지토리에 대한 공개 여부를 설정할 수 있는데 다른 사람이 내 프로필 혹은 레포지토리에 대한 주소를 통한 접근을 허용하려면public을, 개인 프로젝트로 사용하거나 공개하지 않는다면 private를 체크한다.
페이지 하단에서는 레포지토리를 생성하면서 추가할 수 있는 파일 옵션을 선택할 수 있다. 각 항목을 선택하면 그에 맞는 파일이 생성된다.
Add a README file : 레포지토리 소개를 작성할 수 있는 파일을 생성한다. > 포트폴리오나 외부에 공개할 프로젝트라면 추가하는 것이 좋고, 외부로 공개될 일이 없는 개인 프로젝트라면 생략해도 좋다.
Add .gitignore : 로컬 레포지토리에서 Push를 수행할 때 제외할 파일 패턴 목록을 가지는 파일을 생성한다. > 공개/비공개를 막론하고 반드시 생성해주는 것이 관리 측면에서도 좋고, 파일 성격에 따라 보안 이점이 있을 수 있다.
Choose a license : 생성할 레포지토리에 대한 라이센스를 설정한다. > 외부에 공개하지 않을 프로젝트라면 생성해도 의미를 가지지 않지만 외부에 공개하는 경우 필수적으로 생성하는 것이 좋다.
예제에서는 readme, gitignore 두 가지를 선택해 추가해주었다.
Remote Repository 복사
이클립스에서 Git 관련 기능을 다루기 위해서 이클립스 상단 리본 메뉴에서 [Window → Show View → Other...]로 들어간다. 필터창에 git을 입력해 나오는 목록(사진 좌측)에서 "Git Repositories"와 "Git Staging"을 선택하고 Open을 누르면 이클립스 하단(혹은 좌측)에 위와 같은 탭(사진 우측)이 추가되는 것을 볼 수 있다.
가장 먼저 앞서 깃허브에서 생성한 원격 레포지토리를 그대로 내려받아 로컬 레포지토리로 사용할 것이다. [Git Repositories] 탭에서 "Clone a Git Repository"를 선택한다.
레포지토리간 Push/Pull이 정상적으로 수행되려면 두 가지 중 하나의 조건이 갖춰져야 한다.
Push > 대상 원격 레포지토리가 비어 있어야 한다. 다시 말해 커밋 기록이 없어야 한다. > 대상 원격 레포지토리와 로컬 레포지토리가 공통 조상(같은 히스토리)을 가져야 한다.
Pull > 대상 로컬 레포지토리가 비어 있어야 한다. 다시 말해 커밋 기록이 없어야 한다. > 대상 로컬 레포지토리와 원격 레포지토리가 공통 조상(같은 히스토리)을 가져야 한다.
필자는 앞서 원격 레포지토리를 생성할 때 readme, gitignore 두 항목을 체크했다. 이에 따라 원격 레포지토리에는 각 항목에 맞는 파일 두 개가 생성되었는데, 원격 레포지토리 입장에서 이는 최초의 커밋이 되었다.
이러한 상황에서 프로젝트를 생성한 뒤 프로젝트를 Commit, Push 한다고 가정하면 Push 단계는 반드시 실패한다. Push란 로컬 레포지토리에 작성한 히스토리를 원격 레포지토리에 이어 작성하는 행위와 같다. 하지만 현재 로컬 레포지토리는 프로젝트를 만든 후 초기 상태를 commit 한 히스토리를, 원격 레포지토리는 readme, gitignore를 생성한 commit 히스토리를 가지고 있는 상태이기에 히스토리를 이어쓸 수 없다. 다시 말해 두 레포지토리간 공통 조상이 다르기 때문에 히스토리 불일치가 발생, Push를 수행할 수 없게 되는 것이다.
이렇듯 히스토리 불일치를 사유로 한쪽의 히스토리를 완전히 비워둔 상태로 연동을 진행하거나 한 쪽의 레포지토리를 다른 한 쪽에 복사해온 뒤 이어서 Commit, Push를 진행하는 것이다.
이 포스팅에서는 후자인 한 쪽의 레포지토리를 복사해오는 방식을 다루고 있다.
여기서 원격 레포지토리를 복사해 올 주소가 필요한데, 앞서 생성한 원격 레포지토리에 접속하여 우측에 [Code]를 누르면 주소를 복사할 수 있다.
URI 항목에 방금 복사한 주소를 붙여넣기 하면 오른쪽처럼 Host, Repository path, protocol이 자동으로 셋팅된다. 이제 레포지토리에 접근하기 위해 인증에 필요한 User, Password를 입력해야 하는데 User는 Github를 가입할 때 만들었던 아이디를 비밀번호는 계정 비밀번호가 아닌 개인 액세스 토큰을 입력한다. 2021-08 까지는 계정 비밀번호로 인증했지만 이후부터는 보안상의 문제로 개인 액세스 토큰 인증으로 변경되었다.
브랜치를 선택하는 화면이다. 별도로 생성한 브랜치가 없기 때문에 그대로 Next를 눌러 넘어가면 기본 브랜치가 선택된다.
원격 레포지토리를 내려받아 저장할 위치를 지정한다. 원격 레포지토리를 내려받으면 이 레포지토리(디렉터리)는 이제부터 로컬 레포지토리로서 사용될 것이다. 저장소를 내려받을 위치는 "평소 프로젝트를 생성/관리하는 경로"로 지정한다. 이유는 다음과 같다.
원격 레포지토리 클론이 성공한 경우 "C:\Workspace\Java\GitTest"의 내부는 위와 같다. 원격 레포지토리에서 생성한 gitignore, readme 파일을 내려받은 것을 확인할 수 있고 숨김 상태로 생성된 ".git" 디렉터리를 확인할 수 있다. 이 디렉터리는 로컬 레포지토리로 사용되는데, 이 디렉터리는 통상적으로 프로젝트 루트에서 관된다. 따라서 이 위치에 그대로 프로젝트를 만들 것이다.
작업을 완료한 후 이클립스로 돌아와 Git Repositories 탭을 보면 로컬 저장소가 생성된 것을 볼 수 있다.
.gitignore 파일 생성하기
앞서 원격 레포지토리에서 gitignore 파일을 생성했고 그 레포지토리를 복제(Clone)하였기에 gitignore 파일을 PC에서직접 편집할 수 있다. 이클립스에서 직접 편집할 수 있다면 편하겠지만 이클립스는 기본적으로 .으로 시작하는 파일은 패키지 익스플로러에서 숨겨지도록 설정되어 있다. 물론 설정을 변경하면 .으로 시작하는 파일이라도 익스플로러에서 확인할 수 있지만 버전마다 설정하는 방법이 조금씩 다르다는 것을 확인하였으므로 여기서는 다루지 않도록 않으려 한다.
www.toptal.com
gitignore에 작성할 큰 틀은 toptal 에서 자동 생성할 수 있다. 사이트에 접속해서 현재 환경에 맞는 키워드를 작성하고 생성을 누르면 그에 맞는 패턴들을 자동으로 작성해준다. 큰 틀은 이 사이트를 통해 작성하고 프로젝트 환경에 따라 추가적으로 필요한 것이 있다면 직접 추가하도록 한다. 작성된 텍스트를 복사한 뒤 앞서 생성한 ".gitignore"에 붙여넣기한다. 이 때 편집기는 메모장, 워드 패드, VS Code 어떤 것을 사용해도 좋다.
원격 저장소에 프로젝트를 push할 때 프로젝트와 관련이 없는 파일이나 백업 파일, 컴파일 된 파일 등은 올리지 않는다. 프로젝트를 올릴 때 파일을 일일이 선택하기보다 프로젝트 단위로 올리게 되는 일이 잦은데 이 과정에서 앞에 말한 파일들은 추적 대상에서 벗어나게 할 필요가 있다. 이 때 사용하는 것이.gitignore파일이다. 프로젝트에서 깃에 올릴 파일을 찾는 과정을 추적(tracking)이라고 하는데, .gitignore에 등록된 파일들은 untracked files가 되어 추적 대상에서 제외된다.
프로젝트 생성
[File > New > Java Project]를 선택한다. 프로젝트 이름은 앞서 생성한 디렉터리 이름과 같은 이름을 지정하고 위치 역시 같은 위치를 지정해준다. "Use default location"을 해제하면 위치를 직접 지정할 수 있다.
참고로 예제로 사용함에 있어 자바 프로젝트 구조가 가장 심플했기에 자바를 선택하였지만 다른 프로젝트를 생성해도 상관없다.
프로젝트를 생성하고 나면 기본 구조에 앞서 생성한 readme 파일이 포함되어 있는 것을 확인할 수 있다. 앞서 말했듯 .으로 시작하는 파일은 탐색기에 표시되지 않으므로 .gitignore는 탐색기에 포함되지 않는다.
추가적으로 프로젝트를 우클릭하여 [Team] 메뉴를 펼쳐보면 기존에 보이지 않던 Commit, Pull 등의 메뉴가 추가된 것을 확인할 수 있다. 이로 인해 방금 생성한 프로젝트가 로컬 레포지토리를 정상적으로 인식되고 있다는 것을 알 수 있다.
Commit/Push를 하려면 파일 생성/수정이 필요하기에 클래스를 하나 추가했다.
Commit, push하기
Git Staging 탭의 Unstaged Changes를 보면 처음 생성된 파일 혹은 수정이 발생한 파일이 표시되는데 처음이라면 모든 파일이 대상이 된다.
Unstaged Changes의 요소(Commit 대상)들은 우측의 +, ++ 버튼으로 목록의 Staged Changes로 이동할 수 있다. 즉 커밋할 대상을 선택하는 것이다. 처음 커밋이니 ++ 버튼으로 모든 파일을 추가한 뒤 커밋 메시지(커밋에 대한 일종의 주석)를 입력해준다. 마지막으로 하단의 Commit and Push를 눌러 먼저 커밋을 진행한다. 다음 화면에서 Push를 할 것인지 묻는 화면이 나오는데 마찬가지로 Push를 클릭해 진행한다.
톰캣을 설치한 직후 자주 볼 수 있는 에러 메세지다. Tomcat은 기본적으로 8080포트를 가지는데 이미 해당 포트를 사용하고 있는 프로세스가 있기 때문에 다른 포트로 변경하라는 의미이다. 톰캣의 포트 번호를 변경해주면 간단히 해결되는 문제다.
사용중인 포트 확인
현재 8080포트의 사용 여부는 netstat 명령어를 통해 확인할 수 있다. 여기서 추가로 8080이 사용중인 프로세스를 확인하고 싶다면 tasklist 명령어로 확인할 수 있다. netstat에서 얻은 pid를 검색하면 pid가 3372인 task는 "TNSLSNR.EXE"인 것을 확인할 수 있다.
pid를 알아냈다면 작업관리자의 서비스 탭에서도 확인할 수 있다. 정렬 기준을 pid로 잡고 3372를 찾아보면 "OracleXETNSListener"라는 프로세스를 확인할 수 있다. 해당 프로세스는 이름에서 확인할 수 있듯 오라클로서 오라클 DBMS는 설치할 때 기본적으로 8080포트를 가지기 때문에 톰캣과 포트가 겹쳐버린 상황이라는 것을 알 수 있다.
포트 번호 변경
다른 포트로 변경하기 위해 먼저 find 명령어로 사용하려는 포트가 사용중인지 확인한다. 위에서 8080을 검색한 결과와 달리 아무것도 뜨지 않는다면 현재 사용중이지 않은 포트라는 뜻이다.
이클립스에서 스프링 프로젝트를 생성했을 때 아무것도 하지 않았는데도 프로젝트에 빨간 불이 들어올 때가 있다.
프로젝트를 펼치고 에러가 있는 파일을 찾아 계속 하위 폴더로 이동하면 home.jsp에 오류가 있음을 확인할 수 있다. 에러가 나는 코드에 마우스를 대보면 "Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core" 라는 에러 메시지를 출력하고 있다.
이클립스에서 스프링 프로젝트를 시작할 때 많이 겪는 에러가 아닐까 한다. 이 에러 메시지로 구글링을 하면 여러 가지 에러 발생 원인과 해결방법이 존재한다. 그 중 내 컴퓨터 환경에서 이 에러가 발생한 원인은 자바와 이클립스의 버전이 맞지 않았기 때문이었다.
에러 발생 상황
[File - new]으로 스프링 프로젝트를 생성하는 화면이다. 여기서 Spring MVC Project를 선택하고 Next 버튼을 누르면 에러가 발생할 때가 있다. 예전에 마주하고 해결했던 에러이기에 아차하고 금방 처리해서 스샷은 없지만 에러 메시지 창에 아래와 같은 메시지를 출력하며 더 이상 프로젝트 생성이 진행되지 않는다.
"An error has occurred. See error log for more details. java.lang.ExceptionInInitializerError"
에러 발생 원인
이 에러가 일어나는 이유는 이클립스 버전과 자바 버전이 맞물리지 않기 때문이다. 이클립스 버전 2020-06 까지는 자바 8을 지원했지만 2020-09부터는 자바 11만 지원한다. 물론 기존의 자바 코딩을 하는데 문제는 없다. 이것은 스프링에 국한된 이야기다.
해결 방법
1. Java 8을 사용하면서 Eclipse 2020-09 이상 버전일 경우
→ Java 11을 설치하고 이클립스의 jdk 경로를 다시 잡아준다..
2. Java 8을 사용해야만 하는 환경일 경우
→ Java 8을 사용해야만 하는 환경이라면 이클립스 자바 8을 지원하는 이클립스 2020-06버전을 설치해서 사용한다.
3. Java 8과 11이 같이 설치되어 있는 경우
→ 이클립스의 버전이 2020-06 이하라면 이클립스의 jdk 경로를 java 8로 잡아준다.
→ 이클립스의 버전이 2020-09 이상이라면 이클립스의 jdk 경로를 java 11로 잡아준다.
이클립스, 자바 버전을 제대로 볼 줄 모르겠고 경로 잡는 것도 힘들다라고 한다면 프로젝트나 설정을 백업한 뒤 이클립스와 자바를 모두 삭제하고 맞는 버전으로 다시 설치하는 것도 좋을 것이다.
만약 목록에 사용중인 버전이 없을 경우 가장 하단에 있는 "JDBC Downloads page for older releases"를 선택한다. 필자의 버전은 11g인데 구버전 목록에도 없어서 적당히 12c를 선택했다.
ojdbc*.jar 파일 이 여러 개을 선택하고 다운로드 한다.
그래도 뭘 받아야할지 모르겠다면 가장 범용성이 높은 OJDBC8.jar을 다운로드한다.
이클립스에서 오라클 연동
이클립스에서 연동하고자 하는 프로젝트 우클릭 후 [Build Path → Configure Build Path...]를 선택한다.
상단 리본메뉴에서 "Libraries"를 선택하고 목록에서 "Modulepath"를 선택하면 비활성화 상태였던 우측 메뉴가 활성화 된다. "Add External JARs..."를 선택한다.
아까 다운받은 "ojdbc*.jar" 파일을 선택하고 돌아온 창에서 "Apply and close를 눌러준다."
프로젝트 내부에 "Referenced Libraries"가 추가된 것을 볼 수 있고 목록을 펼쳐보면 방금 추가한 파일의 위치를 가리키고 있는 것을 볼 수 있다. 위 사진으로 알 수 있듯이 파일을 복사한 것이 아니라 ojdbc 파일을 절대경로로 가리키고 있기 때문에 파일을 삭제하거나 다른 위치로 옮길 경우 참조가 불가능해지니 주의하자.
오라클 접속 테스트
import java.sql.Connection;
import java.sql.DriverManager;
public class Oracle {
public static void main(String[] args) {
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "scott";
String pw = "tiger";
System.out.println("DB 연결 성공");
try {
con = DriverManager.getConnection(url, id, pw);
System.out.println("계정 접속 성공");
} catch(Exception e) {
System.out.println("계정 접속 실패");
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
System.out.println("DB 연결 실패");
e.printStackTrace();
} finally {
try {
if(con != null)
con.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
드라이버와 url은 그대로 사용하고 id와 pw는 본인이 오라클 DB에 접근할 때 사용하는 계정을 사용한다. DB 연결에 실패하면 드라이버가 제대로 연동되었는지 확인하고 계정접속에 실패했다면 id와 password를 확인한다.
오라클에서는 자사 DBMS를 사용한 개발과 관리를 간소화시켜주는 무료 통합 개발 환경으로서 SQL Developer를 제공한다. 필자는 Oracle 11gR2 Express Edition이 설치되어 있는 상태다. 오라클 버전에 따라 어떠한 옵션을 선택할 때 제한되거나 다르게 설정해야하는 것들이 있으니 "나는 왜 안되지?"라는 생각이 들면 설치된 버전, 환경에 따라 해결 방법을 찾아야한다.
위 링크로 접속하면 위와 같은 화면을 볼 수 있다. SQL Developer 소개 글 아래에 [SQL Developer]를 선택한다.
윈도우나 리눅스 등 다양한 플랫폼을 제공한다. 여기서 윈도우를 기준으로 현재 컴퓨터에 JDK가 설치되어 있지 않다면 위에 것을, 설치되어 있다면 아래 것을 다운받기 바란다.
다운로드받은 압축 파일을 해제하면 다음과 같은 파일이 나온다. 여기서 sqldeveloper.exe를 통해 설치를 진행하는데 설치가 완료되어도 시작 메뉴나 바탕화면에 따로 실행 아이콘이 생기지 않기 때문에 이 파일을 통해 sqldeveloper를 실행해야 한다. 때문에 압축을 해제한 파일은 따로 폴더를 만들어 보관하고 sqldeveloper 파일은 바로가기를 만들거나 시작메뉴에 직접 추가해서 사용하는 것을 추천한다.
sqldeveloper.exe를 실행시키면 위와 같은 화면을 볼 수 있다. 현재 JDK가 설치된 디렉터리의 경로를 삽입해주면 된다. 현재 환경이 32bit 아키텍쳐라면 "C:\Program Files(x86)\Java"아래에 있을 것이고 64bit 아키텍쳐라면 "C:\Program Files\Java"아래에 있을 것이다. 두 곳 모두 뒤져봤는데 Java 폴더가 없다면 설치되어 있지 않거나 설치할 때 기본 경로를 사용하지 않고 본인이 임의의 경로를 잡아서 다른 곳에 설치되어 있을 확률이 높다. 경로를 입력했다면 OK 버튼을 눌러 설치를 진행한다.
설치 도중 중간에 환경 설정을 임포트하겠냐는 창이 뜨는데 아니오를 눌러 무시해주면 바로 SQL Developer 화면이 출력된다. SQL Developer를 사용할 준비가 끝났다.
2. SQL Developer 접속 테스트 및 사용자 계정 생성
초기 화면에서 "XE"를 클릭하면 위와같은 화면이 나온다. 사용자 이름에는 "system"을, 비밀번호에는 오라클 DBMS를 설치할 때 입력한 비밀번호를 입력해준다.
제대로 로그인이 되었다면 XE1이라는 이름으로 워크시트가 하나 켜졌을 것이다. 이대로 사용해도 상관없지만 사용자 계정을 하나 만들어서 사용해보자. 워크시트는 무시하고 좌측 메뉴에서 "다른 사용자"에 우클릭하여 "사용자 생성"을 선택한다.
사용자 이름과 비밀번호를 입력한다. 원하는 사용자명과 비밀번호를 입력해도 되지만 마땅히 떠오르지 않는다면 사용자 명에 "SCOTT", 비밀번호에 "tiger"를 추천한다. scott은 오라클 주식회사의 초대 프로그래머 Bruce Scott에서, tiger는 그가 기르던 고양이의 이름에서 따온 것으로 전세계의 많은 사람들이 오라클을 공부할 때 scott/tiger로 계정을 사용한다.
여기서 사용자 이름은 대문자로 입력해야 오류가 나지 않는다. 이후 로그인할 때에는 소문자로 입력해도 문제없다. 사용자 명과 비밀번호를 결정했다면 기본 테이블 스페이스와 임시 테이블 스페이스를 선택한다. 테이블 스페이스는 테이블의 정보가 저장될 공간을 뜻한다.
[버전이 11g가 아닐 경우] 현재 사용중인 DBMS가 11g라면 상관없지만 12c부터는 사용자 이름을 생성할 때 앞에 "C##"을 붙여야하는 규칙이 있다. 예를 들어 "scott"이라는 사용자를 생성한다고 하면 "C##SCOTT"으로 생성해야 한다는 것이다.
상단 탭에서 [부여된 롤]으로 들어오면 해당 사용자의 권한을 부여할 수 있다. DBA의 권한을 부여한다.
마지막으로 적용을 누르면 성공적으로 사용자가 생성된 것을 볼 수 있다.
좌측 상단 메뉴에서 + 를 클릭하면 위와 같은 화면이 출력된다. name, 사용자 이름, 비밀번호만 입력해주면 되는데 여기서 name은 좌측 접속 목록에 표시될 이름이니 별칭을 부여해도 된다. 그리고 사용자 이름과 비밀번호에 방금 생성한 계정의 이름, 비밀번호를 입력한다.
접속을 눌러 바로 접속해도 되고 테스트를 눌러서 접속 테스트를 시도해봐도 된다. 테스트를 눌러서 정상적으로 접속이 되면 좌측 하단에 "성공"이라는 문구가 출력될 것이다.
(Name 항목의 용도를 보여주기 위해 미리 생성 후 다시 접속 창을 열었기 때문에 스크린 샷에는 scott이 존재하는 것이고 원래는 없다.)
3. SQL Developer로 SQL 사용해보기
이제부터 타이핑하는 모든 명령문은 워크시트에 작성한다. 위처럼 명령문을 작성할 수 있으며 여러 개의 명령문을 작성한 뒤 모두 한 번에 실행시키거나 특정 명령문만 실행시키는 것이 가능하다. 모든 명령문을 실행시키는 경우 단축키 F5를 통해 수행할 수 있고 특정 명령문만 실행시키고자 하는 경우 해당 명령문에 키보드 커서를 옮긴 뒤 단축키 Ctrl + enter로 실행시킬 수 있다.
여기서 주의할 점은 모든 명령문이 끝나는 지점에 세미콜론을 표시해 줘야 한다는 것이다. 만약 워크시트 내에 명령문이 단 하나만 존재할 경우 세미콜론을 붙여주지 않아도 오류를 발생시키지 않지만 명령문이 2개 이상 존재할 때 명령문 끝에 세미콜론이 없다면 빨간줄이 그이게 된다.
하단 영역을 보면 스크립트 출력 탭과 질의 결과 탭이 있다. 스크립트 출력은 명령어의 수행 결과가 출력된다. 명령어를 수행함에 있어 오류가 있을 경우 에러 코드와 함께 오류 메시지를 출력하기 때문에 에러를 마주해도 구글링을 통해 에러를 쉽게 해결할 수 있다. 질의 결과 탭은 "SELECT"로 질의한 결과를 테이블 형태로 출력해서 보여준다.
마지막으로 사진처럼 워크시트의 각 라인에 행 번호를 붙여줄 수 있다. 이클립스나 비쥬얼 스튜디오를 사용해봤다면 라인 넘버가 있는 것이 에러 확인에 있어 편하다는 것을 알 것이다. 워크시트의 코드 영역에서 왼쪽의 빈 공간을 우클릭하여 "행 번호 토글"이라는 옵션을 클릭하면 라인마다 행 번호가 붙는다.
이제 간단한 명령문을 통해 사용법을 보자.
아이디와 비밀번호를 속성으로 가지는 users 테이블을 생성한다. CREATE 문을 구성한 후 단축키 Ctrl + Enter로 명령문을 수행한다. 명령어가 수행되면 아래 스크립트 출력창에 테이블이 정상적으로 생성되었다는 메시지를 볼 수 있다.
users 테이블에 id가 "user1"이고 pw가 "123456"인 데이터를 추가해보자. 위에서 말했듯 세미콜론만 잘 붙여준다면 이전에 입력한 CREATE문을 지우지 않은 채로 워크시트에 다음 명령문을 적을 수 있다. 단축키를 통해 명령문을 수행하면 스크립트 출력창에 행이 삽입되었다는 메시지를 볼 수 있다.
마지막으로 삽입한 데이터가 정상적으로 출력되는지 확인해보자. "SELECT * FROM users"는 users 테이블에 있는 모든 행을 읽어온다는 의미이다. 위에서 insert문을 통해 데이터를 삽입했기 때문에 users 테이블에 1개의 행이 있는 것을 볼 수 있다. 그리고 CREATE나 INSERT를 수행할 때에는 "스크립트 출력"창에 결과가 출력되었지만 데이터 질의를 수행했을 때에는 "질의 결과"창에 결과가 출력되는 것을 확인할 수 있다.
내가 개인 컴퓨터에서 사용하던 DB는 "Oracle Database 11gR2 Express Edition"이였는데 어느 순간부터 구글링을 해도 다운로드할 방법을 찾을 수 없어서 커뮤니티를 찾아보니 2020년 10월 31일 부로 지원이 종료되었다고 한다. 대체 버전으로 18c, 19c, 21c 등이 존재하지만 사용 용도에 비해 덩어리가 너무 큰 것이 사실이다. 나도 그렇지만 가볍게 사용하거나 학습 용도로 사용하기 좋아서 11g를 찾는 사람이 많다고 생각한다. 나는 11g 지원이 종료된 시점에서 파일을 구할 수 없어서 18c를 잠깐 썼는데 21년 중순 즈음부터 다운로드 링크가 돌아서 11g를 다시 사용하고 있다.
2021/01/20 기준으로 접속이 가능한 링크인데, 접속이 불가능해졌을 경우 댓글 남겨주시면 감사하겠습니다. 언제 또 사라질지 모르니 설치 후에 삭제하지 말고 저장해 놓는것도 좋을지도 모르겠네요.
위 링크에 접속하면 11g를 다운로드할 수 있는데 자신의 컴퓨터 환경에 맞게 다운로드하면 된다. 필자는 Windows 10 64bit 환경이기 때문에 첫 번째에 있는 파일을 다운받았다. 오라클에서 제공하는 것이기 때문에 다운로드하려면 로그인이 필요하다.
2. 압축해제 및 설치 진행하기
다운받은 파일의 압축을 풀면 아래와 같이 나온다. setup.exe를 실행해서 설치를 진행한다.
처음 화면을 넘기면 다음 화면에서 라이센스에 동의하겠냐는 문구가 나온다. 동의하고 Next를 클릭한다.
또 단일 선택지 화면에서 다음을 누르면 패스워드를 입력하라는 화면이 나오는데 여기서 입력한 패스워드는 SYS와 SYSTEM의 비밀번호가 된다. 사용하고자 하는 비밀번호를 똑같이 입력하고 다음 화면에서 Install을 눌러 설치를 진행해준다. 설치에 약 2~3분 정도 소요된다.
설치가 완료된 후 시작 메뉴를 살펴보면 위와 같이 설치가 완료된 것을 볼 수 있다.
오라클을 설치했다면 선택사항으로써 SQL Developer를 설치할 수 있다. DB에 접근할 때 CLI(Command Line Interface) 환경에서 할 수도 있지만 GUI 환경에서 편하게(?) 작업할 수 있도록 툴을 제공하는데 이것이 SQL Developer다. CLI로 SQL을 다루는게 어렵거나 검은 화면에서 SQL을 타이핑하는데 지쳤다면 SQL Developer를 설치해보는 것을 권장한다.