Development/Cloud
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 4) 무료 데이터 베이스 만들기 및 데이터 이관하기
Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 1)인스턴스 만들고 접속하기.
Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 2) 톰캣 설치하기 및 배포 + 외부 접속 허용
Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 3) 타임존 문제 해결
Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 4) 무료 데이터 베이스 만들기 및 데이터 이관하기
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 5) 톰캣 도메인 연결해 배포하기
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연결하기
시작에 앞서
사족
해당 글은 2021년 11월인 지금으로부터 약 4개월전인 2021년 7월에 작성 했던 글 입니다. 하지만 어느 순간 보니 글의 내용이 다 날라가 있더라고요, 글을 한번 씩 수정해서 업데이트 하다가 실수로 모두 지워 버렸던 것 같습니다.
지금에는 블로그 글을 쓸 때마다 Github 저장소에 꼬박꼬박 백업을 하며, 버전 관리를 하고 있으나 이 당시에는 티스토리에만 글을 작성하던 때라서 아무리 노력해도 글을 복원 할 방법을 찾지 못했습니다. 그냥 어쩔 수 없이 이때의 기억을 되살려 다시 한번 해 보려고 합니다.
사실 제가 M1 맥북을 처음 샀을 때 가장 고생 했던게 오라클 데이터베이스를 사용하는 문제였고, 지금도 해당 문제로 고생하고 있는 분들이 여전히 많을 거라고 생각합니다. 그에 관련된 여러 글을 시리즈처럼 썼었는데, 하필 가장 중요한 부분 중 하나인 4) 무료 데이터 베이스 만들기 및 데이터 이관하기
편이 날아가게 되어서 심히 속상하지만, 그걸 발견한 지금 손놓고 있을 수는 없다고 생각하기때문에 얼른 밤이 늦었지만 그때의 기억을 되살려 더 완성도 높은 글을 작성 해 보려고 합니다.
그래도 방문자 분들에게 최신의 정보를 제공 할 수 있다는 걸로 위안을 삼아봅니다..
M1 맥북과 오라클
오라클 서버를 네이티브로 돌리지 못한다고 m1으로 오라클 데이터베이스를 활용한 개발을 못하는 것은 아닙니다. 오히려 데이터베이스를 로컬로 띄우고 개발하는 일은 굉장히 적어지고 있습니다. 왠만한 DB는 도커를 이용해서 구동하고 있으며, 데이터베이스도 보통은 클라우드를 이용해서 가상으로 서버를 띄우는 일이 많습니다. 어차피 앞으로 하게 될 거, 미리 겪어보는것도 좋다고 생각합니다.
조금 어려울 수는 있는데, 너무 어렵지는 않습니다. 차근차근 따라하다 보면 누구든 가능하며, 막히는 부분이 있다면 편하게 댓글을 달아주세요. 아는 한 도와드리겠습니다.
Oracle Cloud Free tier 가입
보통은 AWS를 많이들 사용하시는데요. 무료로 사용하고 싶은데, 과금의 위험에서 벗어나고 싶은 분들에게 Oracle을 추천합니다.
Amazon의 AWS, Microsoft의 Azure, Google의 Google Cloud등이 이미 주름잡고 있는 Cloud 시장에 후발 주자로 들어가서 그런지 꽤나 파격적인 정책을 펼칩니다. 심지어 Free Tier로 확실히 나누어 놨기 때문에 실수로라도 과금이 될 가능성이 없습니다.
처음 Free tier에 가입하면 $300 만큼의 Credit을 지급하기도 하니 충분히 해볼 만 한 가치가 있습니다.
혹시 회원 가입을 아직 하지 않은 분이 있을 수 있으니 가입 부터 글을 작성 해 보겠습니다. 혹시 이미 가입 한 분은 아래로 스크롤을 조금 내리셔도 괜찮습니다.
회원가입은 간단 합니다.
너무나 당연하게 이름, 이메일 정도 쓰고 이메일 확인 등의 절차가 있습니다.
이제 회원가입은 좀 건너 띄고 바로 데이터베이스 생성을 해 보겠습니다.
Autonomous Database 생성
DB 생성 준비
일단 처음 로그인 하면 아래와 같은 화면을 볼 수 있습니다.
여기에서 데이터 베이스 생성을 위해서는 우측 하단의 Create an ADW database를 선택 하면 됩니다.
혹은 좌측 상단의 햄버거 버튼을 누르고 Oracle Database -> Autonomous Databases 를 클릭 하고 들어가 보면
대략 이런 화면이 나옵니다. 저는 해당 데이터베이스를 접속하지 않은 지 오래되었다 보니 자동으로 접속이 서버가 종료된 상태 입니다.
일단 기존의 데이터 베이스를 삭제 하고 새로 만들어 보겠습니다. 여러분은 아무것도 없는 상태일 테니 다음 단계부터 함께 진행 해 주시면 됩니다.
DB 생성
일단
Create Autonomous Database
를 클릭합니다.
Display name은 익숙하고 편한 이름으로 직접 작성해주세요. 다른건 안바꿔도 됩니다.
Always Free 가 체크 되어 있습니다.
DB 버전도 무료에서는 정해져있는 19c 버전만 사용 할 수 있습니다.
어차피 Always Free를 끄지도 못하니, 과금의 걱정은 전혀 없습니다. 무료 요금제를 위해 옵션을 켜주세요.
관리자 비밀번호를 정해줍니다.
여기도 따로 바꿔 줄 건 없습니다.
Advanced Option에도 따로 설정 해 줄 건 없습니다.
Create Autonomous Database를 클릭해 생성해줍니다.
DB가 생성되고 있습니다.!!
조금만 더 기다리면 바로 준비가 됩니다.
DB 접속
이제 DB에 접속을 해야 겠죠.
두번째 메뉴인 DB Connection을 클릭 해 봅니다.
Oracle Cloud Database 는 특이하게 전자지갑을 사용 합니다. Download wallet을 클릭해서 다운 받아주세요.
비밀번호를 입력 하고 다운 받아 줍니다.
이제 전자지갑 준비가 끝났습니다.
SQL Developer를 실행 해 줍니다.
오랜만에 실행 해서 예전에 지웠나 했는데 다행히도 아직 있더라고요.
새로운 연결을 위해 좌측 상단의 십자가 모양을 클릭하고요
Connection Type 에서 Cloud wallet을 선택 해 줍니다.
그러고 우측의 의 Browse... 를 눌러 방금 다운 받은 전자지갑을 선택 해 줍니다.
Username 에는 admin을 입력 하고, Password 에는 아까 DB 생성할 때 입력한 관리자 비밀번호를 입력 합니다.
Services 에는 기본으로 설정된 high를 두고, 모두 입력 했으면 Test를 클릭해 테스트 해 봅니다.
좌측 하단에 Status: Success 가 기분 좋게 나옵니다.
준비가 되었으면 Connect를 클릭해서 접속 합니다.
예제를 위해 오라클의 국룰인 dept 테이블과 emp 테이블을 생성 해 보았습니다.
create table dept(
deptno number(2,0),
dname varchar2(14),
loc varchar2(13),
constraint pk_dept primary key (deptno)
);
create table emp(
empno number(4,0),
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0),
constraint pk_emp primary key (empno),
constraint fk_deptno foreign key (deptno) references dept (deptno)
);
이어서 몇몇 데이터도 넣습니다.
연습용으로 아주 좋은 데이터 입니다. 실제 학원에서도 보통 이 데이터로 실습을 하니 넣어두시면 좋습니다.
insert into dept
values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept
values(20, 'RESEARCH', 'DALLAS');
insert into dept
values(30, 'SALES', 'CHICAGO');
insert into dept
values(40, 'OPERATIONS', 'BOSTON');
insert into emp
values(
7839, 'KING', 'PRESIDENT', null,
to_date('17-11-1981','dd-mm-yyyy'),
5000, null, 10
);
insert into emp
values(
7698, 'BLAKE', 'MANAGER', 7839,
to_date('1-5-1981','dd-mm-yyyy'),
2850, null, 30
);
insert into emp
values(
7782, 'CLARK', 'MANAGER', 7839,
to_date('9-6-1981','dd-mm-yyyy'),
2450, null, 10
);
insert into emp
values(
7566, 'JONES', 'MANAGER', 7839,
to_date('2-4-1981','dd-mm-yyyy'),
2975, null, 20
);
insert into emp
values(
7788, 'SCOTT', 'ANALYST', 7566,
to_date('13-JUL-87','dd-mm-rr') - 85,
3000, null, 20
);
insert into emp
values(
7902, 'FORD', 'ANALYST', 7566,
to_date('3-12-1981','dd-mm-yyyy'),
3000, null, 20
);
insert into emp
values(
7369, 'SMITH', 'CLERK', 7902,
to_date('17-12-1980','dd-mm-yyyy'),
800, null, 20
);
insert into emp
values(
7499, 'ALLEN', 'SALESMAN', 7698,
to_date('20-2-1981','dd-mm-yyyy'),
1600, 300, 30
);
insert into emp
values(
7521, 'WARD', 'SALESMAN', 7698,
to_date('22-2-1981','dd-mm-yyyy'),
1250, 500, 30
);
insert into emp
values(
7654, 'MARTIN', 'SALESMAN', 7698,
to_date('28-9-1981','dd-mm-yyyy'),
1250, 1400, 30
);
insert into emp
values(
7844, 'TURNER', 'SALESMAN', 7698,
to_date('8-9-1981','dd-mm-yyyy'),
1500, 0, 30
);
insert into emp
values(
7876, 'ADAMS', 'CLERK', 7788,
to_date('13-JUL-87', 'dd-mm-rr') - 51,
1100, null, 20
);
insert into emp
values(
7900, 'JAMES', 'CLERK', 7698,
to_date('3-12-1981','dd-mm-yyyy'),
950, null, 30
);
insert into emp
values(
7934, 'MILLER', 'CLERK', 7782,
to_date('23-1-1982','dd-mm-yyyy'),
1300, null, 10
);
전부 데이터를 넣었으니 간단한 쿼리를 테스트 해 봅니다.
select emp.*, dept.dname
from emp
join dept on (emp.deptno = dept.deptno);
아주 잘 되네요. 만족 스럽습니다.
데이터 이관
이번에는 혹시 기존에 사용하고 있던 데이터베이스가 있는 분들을 위해서 새로운 서버로 옮겨 오는 방법을 알려드리겠습니다.
여러가지 방법이 있는데 보통 DB 규모가 크면 덤프를 하는데요, 아직 보통은 DB가 작은 분들이 대부분일 테니 그냥 쉽게 하는 방법을 알려드리겠습니다.
DB는 이 gaia 에서 옮겨 올 예정입니다.
백업 보내는 컴퓨터와 백업 받는 컴퓨터가 달라도 상관 없습니다. 지금부터는 백업 하는 컴퓨터에서 작업 해 주시면 됩니다. Windows 피시여도 상관 없습니다.
우측 상단의 Tools 에 보면 Database Export가 있습니다. 클릭해줍니다.
제일 먼저 Connection에 추출할 DB를 선택 합니다. 여기에서는 gaia를 선택 합니다.
Show Schema 체크박스를 해지해 주고, 저장될 파일 경로만 Browse 눌러 찾기 쉬운 장소로 선택 해 줍니다.
준비 되었으면 next> 를 클릭합니다.
여기에서는 딱히 바꿔줄 게 없습니다. Next> 를 누릅니다.
그 다음 Specify Objects나 Specify Data도 특별히 바꾸지 말고 Next를 눌러 줍니다.
이제 여기에서 Finish 를 클릭 합니다.
부지런히 백업이 됩니다.
솔직히 이게 sql insert문으로 만드는 과정과 실제 insert 치는 부분이 느려서 .sql 로 추출하는 건 잘 안하는데요, 쉽기 때문에 데이터 양이 적은 초보때만 이렇게 합니다.
2분 정도 걸려서 드디어 끝났네요. 저는 백업을 네트워크를 통해 했기 때문에 느렸지만, 백업 하고자 하는 PC에서 추출 했다면 정말 금방 끝났을 듯 하네요.
해당 메시지는 추출은 정상적으로 끝났지만, gaiadb.sql 파일이 너무 길어서 sql developer에서 열지 못했다는 메시지 입니다. 저렇게 떴다고 하시 해야 하나 걱정 하지 않으셔도 됩니다.
이제 Visual Studio Code를 이용해 백업 한 파일을 열어봅니다.
총 7천줄이 조금 넘네요
이제 DB를 이관할 데이터 베이스로 와서 모두 붙여넣기 합니다. 저는 이제 아까 만든 든 Oracle cloud에 넣습니다.
몽땅 붙여넣기 하고 Ctrl + Enter
를 눌러 바로 실행합니다.
열심히 자료가 들어가고 있습니다. 생각보다 오래 걸리지 않습니다. insert 되는 동안에는 인터럽트 하지 않게 조심하세요.
이제 모두 끝났습니다.
20초 정도 걸린 것 같습니다. Oracle Cloud 데이터베이스의 Table 안에 GAIA에서 가져온 모든 테이블들이 잘 삽입 되어 있는 것이 확인 됩니다.!!
마치며
마침글
무료 데이터베이스라는데 정말 말도 안되게 좋은 건데, 공짜로 이렇게 쓰게 해주니 고마울 따름입니다.
저는 학원 다닐때 맥북 사고, 데이터베이스를 설치하지 못하니 집에 남는 윈도우 노트북에 Oracle 서버를 설치 하고, 공유기 포트포워딩으로 1521 포트를 열어서 학원에서든 어디서든 그 데이터베이스만 사용했던 기억이 나네요. 이렇게 오라클에서 무료로 데이터베이스를 제공해 주기 때문에 사실 그럴 필요가 없었지만 그때는 할 줄을 몰랐습니다.
이렇게 DB를 로컬이 아닌 인터넷 상에 구축 해 두면 또 장점이, 팀원들과 한 DB로 함께 개발을 할 수 있다는 점입니다.
비록 m1 맥북을 구매하셔서 오라클을 쉽게 사용하진 못했지만, 여기까지 오셨다면 그 위기가 기회가 되어서 남들보다 훨씬 더 좋은 데이터베이스 활용을 하고 있다는 자부심을 가져도 된다고 말씀드리고 싶습니다.
수고 정말 많으셨습니다.
추가로
DB를 실제 프로젝트와 연결 해서 사용하고 싶다면, Oracle Cloud 전자지갑을 어플리케이션과 연결하는건 기존의 방법과 꽤나 차이가 있습니다. 난이도가 높기 때문에 어느 정도 익숙해진 후에 시도 해 보시길 권장드리며, 국비 학원 기준으로는 최소 초급, 중급 프로젝트가 끝난 후에 진행해보시는게 좋습니다. 3 개월 차 까지는 어려울 가능성이 높습니다.
도전할 준비가 되었다면 아래의 링크를 클릭해주세요!
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연결하기
'Development > Cloud' 카테고리의 다른 글
'Development/Cloud'의 다른글
- 이전글Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 3) 타임존 문제 해결. timezone region not found , java.net.SocketException: Permission denied
- 현재글Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 4) 무료 데이터 베이스 만들기 및 데이터 이관하기
- 다음글Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 5) 톰캣 도메인 연결해 배포하기
관련글
-
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 6) 오라클 전자지갑 사용해 프로젝트와 연결하기 2021.08.21
-
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 5) 톰캣 도메인 연결해 배포하기 2021.07.17
-
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 3) 타임존 문제 해결. timezone region not found , java.net.SocketException: Permission denied 2021.07.17
-
Mac) Oracle Cloud FreeTier 이용해 웹 어플리케이션 배포하기 2) 톰캣 설치하기 및 배포 + 외부 접속 허용 2021.07.17
-
youngjin 2021.07.27 20:00
안녕하세요 포스팅따라 작성중이었는데 create database에서 Operation failed because the OCI tenancy with OCID ~~~ is not in the Active state. 라는 에러가 발생하는데 해결방법이 있을까요?
답글-
youngjin 2021.07.27 20:06
아 해결했습니다. 좋은 포스팅 감사합니다 ㅎ
-
Shane Park 2021.07.27 21:06 신고
쉽지 않은 내용일텐데 수고 많으십니다!
-
youngjin 2021.07.27 23:25
아 추가로 질문이 있는데 혹시 오라클 클라우드에서 생성한 DB를 홈페이지에서 별도로 확인하는 방법이 있나요?
-
Shane Park 2021.07.28 10:59 신고
디비에 있는 데이터를 시각적으로 확인하는 것을 말하시는 것 같은데, 확실하지는 않지만 오라클 클라우드 자체에 클라이언트 기능은 없는 걸로 알고 있습니다. SQL Developer를 사용하시는게 좋을 것 같아요
-
-
-
Shane Park 2021.08.06 21:37 신고
혹시 product.conf 파일 설정은 변경 하셨나요?
https://shanepark.tistory.com/87 에 보면 product.conf 파일 변경하는 내용이 있는데요, jdk 위치를 정확히 알려주는 절차 입니다.
혹시 설정 후에도 계속 동일한 현상 일어난다면 JDK 변경을 해보시길 권해드립니다.
-
-
help 2021.08.07 01:07
안녕하세요 좋은글 감사합니다
답글
다름이아니라 sql developer에 전자지갑 넣고 테스트를 돌리면
상태: 실패 -테스트 실패: IO 오류: Remote host terminated the handshakethe handshake 가 뜹니다 혹시 해결방법 아시나요?-
Shane Park 2021.08.07 08:19 신고
안녕하세요. username, password 정상적으로 잘 입력 되어 있나요 ? 전자지갑은 .zip 압축 풀지 않은 상태로 잘 등록 하셨나요? oracle cloud 에서 작동중인 서버 상태는 잘 켜져 있나요?
제 글에 "방금 다운 받은 지갑이 있는 위치에 찾아가서 파일을 선택 해 줍니다." 이 아래 있는 첨부 사진과 테스트 진행하셨을때 입력한 값을 한번 비교 해 보시고, 혹시 그래도 안되면 오류를 조금 더 자세히 올려주시면 제가 구글에 검색을 좀 해보겠습니다.
-
-
help 2021.08.07 10:22
모두 정확하게 넣었습니다. 혹시 몰라서 지우고 다시 만들었지만 실패하네요. 서버 작동은 따로 뭔가 눌러줘야 하나요? 초록색 되고 진행하긴 했습니다. 오류는 저렇게나오는게 끝이에요 테스트를 누르면
답글
상태: 실패 -테스트 실패: IO 오류: Remote host terminated the handshakethe handshake
라고 뜹니다.-
Shane Park 2021.08.07 11:08 신고
혹시 디비 생성할때 위에서 제가 한 그대로 생성했다면 디비는 정상적으로 생성 되었을 텐데, 해당 전자지갑으로 다른 컴퓨터의 SQL Developer에서 접속 해보시겠어요? 다른 컴퓨터에서도 접속이 안된다면 전자지갑 자체가 DB와 문제가 있는거고 접속이 된다면 해당 컴퓨터의 SQL Developer 설정에 문제가 있는건데,
Developer에 문제가 있다면 설정을 다시 해주면 될 것이고.
제 생각에는 전자지갑이랑 데이터베이스 서버에 이미 문제가 있을 확률이 높아 보이는데 다시 생성해보셨다고 하셨지만 그래도 한개씩 혹시나 설정을 다른게 있는지 확인 해 보면서 완전히 똑같이 설정해 보시고, 전자지갑 발급도 확인 해 보세요.
Client 쪽에서 보낸 SSL handshake를 Server 쪽에서 거절한다면 접속정보 문제이지 않을까 싶은데 큰 도움이 되지 못해서 죄송하네요. 에러코드라도 있었으면 검색하기 좀 수월했을텐데 -
help 2021.08.07 12:51
성실한 답변 감사합니다.
여러방면으로 다시 시도해보겠습니다. -
help 2021.08.07 14:53
해결했습니다.
sql developer 최신버전으로 재설치하니 되네요
oracle도 다시 설치했었지만 이는 해결방안이 되지 못했습니다. -
Shane Park 2021.08.07 14:57 신고
다행이네요 !! 정말 수고하셨습니다.
SQL Developer가 버전도 자기 맘대로 새로 추가되고, 심지어 예전 버전은 다운 받을수도 없게 해놓는 등 특별히 안정된 버전도 없고 쓰기가 참 불편 한 것 같아요. 그렇다고 사용하던 버전이 자동 업데이트를 지원하지도 않구요.. 고생 많으셨습니다. -
help 2021.08.07 17:12
모두 선생님 덕분입니다. 감사합니다!
-
-
help 2021.08.07 17:36
선생님 혹시 실례가 안된다면 지금 만든 DB를
답글
전 강의에서 만든 인스턴스에서 연동하는 방법을 알수 있을까요?
아무리 찾아도 안나오네요 ㅠㅠ-
Shane Park 2021.08.07 20:49 신고
안녕하세요.
전 강의에서 만든 인스턴스에 연동한다는게 어떤 말씀이신지 잘 모르겠네요.
프로젝트에서 해당 디비를 사용하는걸 말씀하신 건가요?
전 강의에서 만든 인스턴스라는게 Oracle Free Tier로 만든 Linux 말씀하시는거면, 해당 인스턴스와 연결이 되는게 아니고 해당 인스턴스에서 실행중인 프로젝트와 DB가 연동이 되는 겁니다.
제가 학원 다닐때 오라클 잠깐 쓰고 그 후로 오라클 쓸 일이 없어서 전자지갑 으로 만든 DB를 프로젝트와 연동 해 본적이 없어 따로 포스팅 한 건 없습니다.
https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/connect-jdbc-thin-wallet.html#GUID-5ED3C08C-1A84-4E5A-B07A-A5114951AA9E
이 링크를 보고 따라하시면 될 건데 이게 사람에 따라 엄청 어려울 수도 엄청 쉬울 수도 있어요. 차근 차근 따라하시면 아마 되지 않을까 싶습니다만 기본기가 어느정도 갖춰줘야 될거에요
-
Shane Park 2021.08.07 20:51 신고
저도 기회가 되면 빨리 올리고 싶은 포스팅 내용 중에 하나인데 회사 막 들어가서 정신도 없고 오라클 쓸 일이 없다 보니 손이 안가네요 ㅜㅜ
-
help 2021.08.07 21:29
답변 감사합니다.
제가 학생인데 spring boot를 war로 free tier에 배포하려했으나 실패했습니다.
확인해보니 DB가 연결이 안되서 그런거더라구요. db연결 없이 만든 테스트 프로젝트는 free tier에서 성공했습니다.
결국 제가 원하는건 DB연동되는 프로젝트를 free tier에서 배포하는건데 이 부분을 해결할 수가 없었습니다.
선생님께선 war 배포하실때 DB를 어떻게 연동하셨는지 궁금합니다.
현재 DB는 오라클을 이용하고 있습니다. -
Shane Park 2021.08.07 21:38 신고
해당 내용에 대한 document는 https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/connect-jdbc-thin-wallet.html#GUID-5ED3C08C-1A84-4E5A-B07A-A5114951AA9E
를 참고하시면 되고요,
좀 더 본질적인 당장의 해결 방법 특히 Spring boot 에서는
https://stackoverflow.com/questions/43993338/spring-boot-web-application-not-working-with-oracle-wallet
를 참고하셔서 해결 하시면 될 것 같네요. 일단 free tier 에 배포 하시기 전에 로컬 환경에서 먼저 DB 연결을 성공 하신 다음에 배포를 하시면 될 것 같습니다.
dataSource = new OracleDataSource();
Properties props = new Properties();
String oracle_net_wallet_location =
System.getProperty("oracle.net.wallet_location");
props.put("oracle.net.wallet_location", "(source=(method=file)(method_data=(directory="+oracle_net_wallet_location+")))");
dataSource.setConnectionProperties(props);
dataSource.setURL(url);
이쪽이 핵심이니 유심히 보시구요,
document 랑 stackoverflow 답변 내용 둘다 참고 하시면서 차근 차근 해 보면 될 것 같습니다. 쉽지 않은 내용인데 도전하시는 모습 보기 좋고 꽤나 많이 성공 하셔서 대단하시기도 합니다. 저도 불과 몇달 전에 남들보다 한걸음 더 나가보겠다는 생각으로 그렇게 낑낑대며 고생했던 기억들이 나네요.
제가 큰 도움이 못되어 드려서 죄송하지만 기본기 + 검색능력이 뒷받침 된다면 무엇이든 해결 하실 수 있을 겁니다. 하시는 거 보니 고생은 좀 하더라도 뭐든 잘 하실 것 같네요.
-
-
help 2021.08.08 00:54
이것 저것 알려주셔서 감사합니다.
답글
로컬에서 클라우드 지갑 DB 연결은 성공했지만 역시 free tier로 넘기면 404 not found 동일하게 뜨네요. 아무래도 free tier에서 DB연결 안되서 그런것 같습니다.
수동으로 oracle sqlplus free tier에 깔고 그 안에서 DB만들고 해결해야되나 봅니다 ㅠㅍㅠ
좋은 일 가득하시길 바라겠습니다!-
Shane Park 2021.08.08 08:25 신고
DB 연결이 안되면 404 not found 가 아니고 아에 프로젝트가 실행이 안되는게 맞습니다. (프로젝트가 실행이 안되어서 아에 서버접속이 안되는 404일 수도 있긴 합니다) 인스턴스 에서 정상적으로 실행이 되었는지 Boot 로고를 먼저 확인해보고, 인스턴스에서 curl localhost:8080 을 해서 (ssh로 접속 후 입력하시면 됩니다) 해당 주소에 요청을 보냈을때 페이지를 잘 받아오는지 확인해보세요. 인스턴스 로컬 에서의신호는 잘 받아온다면 방화벽 문제일 가능성이 높습니다.
스프링부트를 jar로 실행하신 게 아니고 war 형태라면 아마 embed tomcat을 사용하지 않고 외부 톰캣을 설치해서 사용하실텐데 그럴경우에는 서버 실행 후
/logs 에서 tail -f catalina.out 로 로그를 확인 하실 수도 있습니다
-
help 2021.08.08 17:14
저 한명 위해서 노력해주시는게 너무 감사드립니다.
제가 현재 시도한 것들을 간략하게 나열해보겠습니다.
1.spring boot(jsp형식)
DB연결 없이 저의 컴퓨터에서 스트링 부트 실행(성공)
-> war로 만든후 저의 컴퓨터에서 외부 톰캣으로 배포(성공)
-> 클라우드 free 톰캣으로 배포(성공)
2.spring boot(jsp형식)
DB연결 하고 컴퓨터에서 스트링부트로 실행(성공)
-> war로 만든후 저의 컴퓨터에서 외부 톰캣으로 배포(성공)
-> 클라우드 free 톰캣으로 배포(실패. 404 not found)
(db url 형식
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@[나의컴퓨터주소]:1521:xe)
3.spring boot(jsp형식)(클라우드DB. ATP)
지갑이용한 DB연결후 spring boot 실행(성공)
-> war로 만든후 저의 컴퓨터에서 외부 톰캣으로 배포(실패. 404 not found)
-> 클라우드 free 톰캣으로 배포(실패. 404 not found)
(db url 형식
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@[user_high]?TNS_ADMIN=./src/main/resources/wallet)
DB연결 안할땐 프로젝트를 만들때 마이바티스 프레임워크를 사용 안했고
DB 연결 할땐 사용해서 프로젝트 생성 했습니다.
결국엔 DB가 연결이 안되서 프로젝트가 실행이 안되고 404 not found가 뜨는게
맞는것 같습니다.
-----404 not found----
타입 상태 보고
메시지 요청된 리소스 [/ja8db]은(는) 가용하지 않습니다.
설명 Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다.
---------
처음엔 AWS를 시도했었는데 tomcat까지 연결하고 나니 AWS의 RDS는 ORACLE DB가 무료가 아니였습니다. 포기하고 오라클 클라우드에 도전한거였습니다만.... 결국 DB 연결에서 막혀버렸네요...
-
Shane Park 2021.08.08 17:27 신고
일단 2번은 실패 할 수 밖에 없어요. 왜냐면 2번에서의 DB는 사용하시는 컴퓨터에서 서버를 여는거고 배포된 주소는 인스턴스기 때문이죠. 혹시 나의 컴퓨터 주소 라고 말씀하시는 거에서 DB가 돌아가고 있는 사용하시는 컴퓨터의 외부 ip 주소를 제대로 적었다면 작동 되게끔 할 수도 있습니다. 이 경우에 안된 다면 방화벽 설정 문제로 orcl 이 사용하는 1521 포트를 사용하시는 컴퓨터 혹은 공유기에서 막았기 떄문입니다. 컴퓨터는 방화벽 설정에서 1521 포트를 인바운드 규칙에 추가해서 해결 하실 수 있으며 공유기의 경우에는 iptime을 쓰신다면 192.168.0.1로 접속해서 해당 컴퓨터의 내부아이피 넣고 1521 포트를 포트포워딩 시키면 포트를 열어서 해결 할 수 있습니다.
다만 2번 문제를 이렇게 해결했을 경우에는 클라우드에서 인스턴스를 실행했음에도 불구하고 DB 때문에 해당 컴퓨터 또한 계속 켜둬야 하는 상황이 발생해서 클라우드로 이전 한게 의미가 없어지게 됩니다.
이번엔 3번의 경우입니다. 이 경우에는 지갑 주소를 제대로 못잡지 않았을까 의심이 되는데요, 혹시 전자지갑을 클라우드상의 어딘가의 폴더에 넣어서 지갑 경로를 잡을때 ./src/main/resources 이런식으로 가지 말고 특정 절대 경로로 잡아서 해결하신다면 될 수도 있을 것 같습니다.
404 가 뜬다는게 서버가 애초에 켜지지 않았다는 거 같은데 이 경우에는 tomcat에서의 로그를 확인 할 수 있으면 좋을텐데 아쉽네요. 혹시 외부톰캣 설치된 폴더 들어가서 log 쪽 잘 뒤져보면 해당 로그 확인 하실 수 있을거에요. 오류 메시지 확인한다면 해결에 좀 도움이 될 거에요.
AWS는 과금이 심각하게 될 수 있어서 Oracle cloud 의 Free tier를 저는 추천하는 편입니다. 아에 과금이 될 수 없는 구조기 때문에 안전하게 사용 할 수 있습니다. 다만 전자지갑을 사용한다는 점에서 좀 더 난이도가 높아지는게 문제죠 . AWS 에서는 엔드포인트를 구체적으로 제공 해 주기 때문에 프로젝트나 SQL Client에서 접속하기가 매우 용이하더라고요.
제가 볼 땐 거의 다 오신 거 같은데 너무 스트레스 받지 마시고 혹시 꼭 당장 해결해야 하는 게 아니라면 몇주정도 하시던 공부 하시다가 나중에 돌아왔을때는 그 사이 성장한 실력으로 간단하게 해결 하실 수도 있을거라고 생각합니다. 제가 학원 수업 4주 듣고 Oracle Free Tier로 뭐 깔아볼라다가 멘탈 부서졌던 기억이 있는데, 학원 수료 한 후에는 Free Tier가 그렇게 좋을 수가 없더라고요.
하시는거 보니 충분히 많이 성장하고 계신거 같으니 너무 낙담 하지 않으셔도 될 거 같습니다. 제가 한번 해결 해 보았던 문제라면 쉽게 도와 드릴 수 있었을 텐데 저도 머리속으로만 생각 해보고 실제로 해본 단계는 아니여서 뭐라 말씀드릴 수가 없네요. -
hlep 2021.08.08 18:52
3번은 절대경로로도 해봤지만 결과는 같았습니다.
톰캣 로그가 따로 메모장에 생기는 줄은 몰랐네요. 지금부터 하나씩 확인해보려 합니다. 정말 많은 도움이 되었습니다. 문제 해결하면 다시 댓글 남기도록하겠습니다
감사합니다! -
help 2021.08.08 20:45
선생님
정말 말로 표현할 수 없을 만큼 감사하고 감사합니다.
선생님 덕분에 골칫거리를 해결 할 수 있었습니다.
문제가 복합적으로 있었네요
1.OJDBC 버전이 달랐습니다.
tomcat, java, oracle에서 모두 ojdbc10이었는데 제가 만든 프로젝트는 ojdbc8 이였습니다. 디펜던시로 추가해서 된줄알았는데 적용이 안된거더라구요...
2.지갑을 이용하여 DB 접근하기 위해 스프링 부트 디펜던시에 OJDBC뿐만 아니라 osdt_cert, osdt_core, oraclepki를 추가로 했었습니다.
근대 정작 war로 배포할때는 프로젝트에 안에 추가한 jar에 접근하는게 아닌 톰캣과 연결된 java, oracle 폴더에 접근하나봅니다.
jar을 따로 다운 받고 각 폴더에 넣어주니 연결 성공했습니다.
정확한 방법을 알아낸건 아니지만 문제를 해결해서 기분이 좋네요.
정말 감사합니다 선생님! -
Shane Park 2021.08.08 21:41 신고
저도 초급프로젝트때 OJDBC 문제로 엄청 고생한 적이 있었는데 정말 고생하셨네요.
전자지갑에 접근 과정에 Tomcat이 관여를 하나 보네요. 문제해결 하셨다니 정말 다행이네요. 문제 해결하시는 것 보니 앞으로 뭐든 잘하실 것 같습니다. 개발자가 개발 하면서 느낄 수 있는 가장 짜릿한 순간을 경험하셨는데 저도 얼마 안해봤지만 그 맛에 개발자하는게 아닌 가 싶네요. 저는 선생님은 아니지만 박수 쳐드리고 싶습니다 좋은 개발자가 되실 거에요
-
-
hj 2021.08.14 09:16
안녕하세요 create database에서 Operation failed because the OCI tenancy with OCID ~~~ is not in the Active state. 라는 에러가 발생하는데 해결방법이 있을까요?ㅠㅠ
답글-
Shane Park 2021.08.14 09:31 신고
혹시 오늘 만든 계정이라면 바로 데이터 베이스 생성이 안될 수도 있습니다 ! Support Chat 을 이용해서 계정을 생성했는데 디비 생성이 안된다고 문의 하시거나 조금 기다려보시는 방법이 있어요
-
hj 2021.08.14 21:14
감사합니다:)
-
hj 2021.08.15 22:38
테스트 할 때 Required property 'hostname' cannot be null or empty 라는 오류가 뜨는데 어떻게 해결하나요?
-
Shane Park 2021.08.15 22:41 신고
접속하실때 Connect Type 을 Cloud Wallet으로 지정 하셨나요? Connection Type을 설정 하고, Configuration File 로 해당 전자지갑을 선택 해야 해요
-
hj 2021.08.15 23:53
네 그렇게 했는데도 안돼요 ㅠㅠ..포기하고 윈도우에서 오라클쓰는 게 맞겠죠?
-
Shane Park 2021.08.16 10:53 신고
에구 제가 자세한 상황을 볼 수가 없어 도움이 되어드리지 못해 죄송하네요.
정확한 원인을 찾지 못한다면 일단 데이터 베이스를 생성한걸 지우고 다시 생성하며 차근차근 하나씩 다시 해 보고, SQL Developer도 최신 버전으로 새로 다운 받아서 접속 해 보세요.
정 안되면 AWS 의 RDS 서비스를 이용하면 엔드포인트를 제공해 주기 때문에 초보자도 정말 쉽게 데이터베이스를 사용 할 수 있는데요, 대신 아주 조심해서 사용하지 않으면 과금의 가능성이 있으니 꾸준히 체크를 해 줘야 합니다 -
Shane Park 2021.08.16 10:54 신고
여분의 윈도우 PC 가 있다면 (전력 사용량 때문에 랩톱을 추천합니다 )
해당 컴퓨터로 오라클 데이터베이스를 열고, 1521 포트를 열고 공유기상에서도 포트 포워딩으로 1521 포트를 열어준다면 해당 아이피로 접속해서 어디서든 데이터베이스로 사용할 수 있습니다. 랩탑 뚜껑도 덮어놓으면 한달에 체감상 전기요금 많아야 2천원쯤 추가되는 선이라서 초급때 서버로 사용하기에 괜찮은 선택이 될 수 있어요 -
hj 2021.08.16 10:55
감사합니다ㅠㅠ 좋은하루보내세요:)
-
hj 2021.08.16 11:27
저 성공했습니다!!! 당신은 저의 영웅...
-
Shane Park 2021.08.16 11:44 신고
고생하셨습니다~
뭐가 문제였을까요 ?
-
-
WritingStudio 2021.08.14 15:56 신고
좋은 포스팅 정말 감사합니다. M1 맥북은 docker 로도 oracle 설치가 안 되어서 방황하던 참에 큰 도움을 받았습니다.
답글
아 포스팅 업데이트에 참고하시라고 몇 가지 말씀을 드리면,
1. 현재는 oracle cloud free tier 도 payment info를 등록해야 계정 생성이 되더라구요.(물론 plan upgrade를 하지 않는 한 결제금액은 없다는 안내가 나옵니다.)
2. 맨 위에 분이 말씀하신 'Operation failed because the OCI tenancy with OCID ~~~ is not in the Active state. ' 문제는 oracle 이 계정 setup을 아직 다 하지 않아서 생기는 문제이고 몇 분 정도 기다리면 해결되는지라, 저런 문구가 뜨면 몇 분 기다렸다 다시 해보라고만 적어주시면 읽는 분들에게 중요한 정보가 될거같네요. (블로그를 보고 따라하는 경우는 안내 순서에 따라 눌러보다 뭐 하나라도 막히면 당황하게 되더라구요)
아무튼 본 포스팅 덕에 도움 많이 받았습니다. 정말 감사합니다.-
Shane Park 2021.08.14 16:12 신고
도움 되는 댓글 정말 감사합니다 ! 말씀해주신 내용 참고해서 즉시 내용 업데이트 진행하였습니다.
말씀하신대로 현 상태에서 m1 맥북은 arm 64 기반이기 때문에 Docker를 통해서도 Oracle Database를 돌릴 수 있는 방법이 전혀 없습니다. 워낙에 필요로 하시는 분들이 많은 것 같아서 여러가지 시도를 해 봤는데 절대 방법이 없더라고요.
도움 되었다니 기쁘네요. 즐거운 개발 되세요 !
-
-
hanst 2021.08.18 21:06
안녕하세요 오랫만에 다시 찾아왔습니다.
답글
맥북으로 SQL Developer 설치 후 오라클 클라우드 ATP 설치 연동 완료하여 각종 테이블 만들고 SQL구문 연습많이했습니다. 좋은 포스팅 감사합니다.
다름이 아니라 이번에 Spring boot 와 DB 연동을 나가게 되었는데 맥북으로 도저히 할줄몰라서 다시 찾아왔습니다.
윈도우데탑으로 어찌저찌 수업은 따라갔습니다.
Spring boot tool 최신버전 다운 -> 스프링스타터 프로젝트 만듬 -> build.gradle 에 사용할 api 새로 정의 후 refresh
application.properties 에 아래와 같은 양식 저장
server.port=8081
spring.mvc.view.prefix=/WEB-INF/views/
#spring.mvc.view.suffix=.jsp
#----------------------------------------------------
#오라클 드라이버 이름, 오라클 URL 주소, 계정, 암호 관련 속성 설정하기
#----------------------------------------------------
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=****
spring.datasource.password=*****
#----------------------------------------------------
#mybatis에서 사용할 SQL구문 저장 xml 파일의 위치 지정하기
#----------------------------------------------------
mybatis.mapper-locations=classpath:com/naver/erp/*.xml
이후에 프로젝트안에 폴더하나 만들고 ojdbc6-12.1.0.1.jar 및 cos.jar 건내받은 파일을 그대로 복붙
src/main/resources 파일안에 static 파일안에 a.html 이란 파일 만들고 안녕 작성
이후 인터넷브라우저 켠 후 http://localhost:8081/a.html 작성 시 해당 웹페이지로 이동 후 안녕이란 글씨 화면보임
오늘 이 순서대로 윈도우컴퓨터에서 진행하였습니다.
윈도우 컴 같은 경우는 오라클 등등 따로 설정해주지않아도 연결이 잘 되어지지만
맥북으로 오늘 윈도우에서 진행했던 순서 그대로 따라했는데 되질않더군요
아마 맥북에선 오라클DB를 월렛? 으로 해주어서 설정을 전부 바꿔주어야 될거같은데 전혀 감도 오질않고 어디서 무엇을바꾸어야하는지도 모르겠습니다.ㅠㅠ
현재 ojdbc10-full 일단 다운받았긴한대 혹시 저 순서대로 하려면 어디를 수정하고 어디를 손봐야할까요...ㅠㅠ도움좀부탁드립니다.
-
Shane Park 2021.08.18 21:29 신고
https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/connect-jdbc-thin-wallet.html#GUID-5ED3C08C-1A84-4E5A-B07A-A5114951AA9E
이 링크에 있는 내용들을 참고해서 application.properties 파일을 작성 해 주시면 됩니다 ! Using Oracle Wallet 라고 써있는 부분을 보시면 되구요, 위에 help님이 거의 비슷한 상황을 겪어서 해결하셨기 때문에 말씀하신 대로 OJDBC 버전 체크 및 osdt_cert, osdt_core, oraclepki 를 톰캣과 연결된 java.oracle 폴더에 넣어 보시면 될 것 같아요.
https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/DataSourceSample.java
위에는 DataSource 샘플 코드이니 같이 참고하시면 좋을 것 같습니다.
제가 오라클을 안쓰다보니 전자지갑을 프로젝트와 연결을 한번도 안 해 보았는데, 시간 날때 프로젝트와 연결하는 포스팅도 한번 해봐야 겠네요
-
-
hanst 2021.08.19 10:40
감사합니다.
답글
이것저것해보았는데 ㅠㅠ 실력이많이부족한탓인지 ㅠㅠ에러만뜨네요..
국비+맥북조합 스트레스로인해ㅠㅠ팔거나 페럴러즈이용해야할거같아여
여러방면으로 도움주시고 답달아주셔서 감사합니다.-
Shane Park 2021.08.19 11:00 신고
AWS 오라클 RDS 사용하시면 엔드포인트 제공 해 주기 때문에 좀 더 쉽게 사용 할 수 있습니다.
과금 되지 않게 신경은 써줘야합니다.
-
-
Shane Park 2021.08.21 12:24 신고
전자지갑과 프로젝트 연결에 어려움을 겪는 분들이 많이 계셔서 해당 내용을 직접 해보고 글로 정리하였습니다.
답글
https://shanepark.tistory.com/207 -
안녕하세요! 제가 SQL Developer를 깔아서 Connections의 초록색 + 버튼 눌러서 Cloud Wallet를 넣고 유저 이름이랑 비번을 적는 부분에서 status: failure - test failed: oral-00604: error occurred at recursive SQL level 1 era-01756: quoted string not properly terminated 라고 뜹니다ㅠㅠ 이게 대체 어떤 오류인지 알 수 있을까요..? 비전공자라 어렵네요ㅠㅠ
답글-
Shane Park 2021.08.25 11:42 신고
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddAbQB%2Fbtq9R4FdQA4%2FMqoqo568683yLqlXZfNso0%2Fimg.png
이렇게 로그인 화면 한번만 찍어서 psh40963@naver.com 으로 메일 보내주시면 한번 제가 봐드릴게요! 뭔가 잘못 입력이 되지 않았을까 싶네요 -
Shane Park 2021.08.25 12:21 신고
혹시 비밀번호에 [ " ] 나 [ ' ] 를 넣으셨나요?
-
Shane Park 2021.08.25 12:27 신고
일단 지갑 경로를 먼저 한번 옮겨서 다시 테스트 해 주세요. 좀 더 심플한 경로로
-
Shane Park 2021.08.25 12:28 신고
그런다고 해결될 것 같진 않지만.. 그래서 안되면 SQL Developer를 한번 새로 깔아 보고, 그래도 안되면 데이터베이스를 지웠다가 새로 만들어서 새로운 지갑을 발급 받아보는게 좋을 것 같아요. 입력 하신 값 다 확인 해 봤는데 특별히 문제가 보이지는 않네요
-
Shane Park 2021.08.25 12:31 신고
비밀번호 입력할때 한/영 여부도 한번 확인해주세요.그런데 제가 알기로는 한글로 입력되어도 비밀번호가 다르다는 오류가 나오지 ORA-00604: error occurred at recursive SQL level 1 ORA-01756:quoted string not properly terminated 는 아닐텐데..
-
Shane Park 2021.08.25 12:32 신고
제 생각에는 지갑 정보에 문제가 있는 것 같아서 데이터베이스 지우고 새로 만들어서 지갑 새로 발급받는다면 되지 않을까 생각됩니다... ㅜㅜ 아 분명 저두 저 에러 봤던거같은데.. SQL DEV만 새로 껐다 켜보고, TEST 말고 바로 접속도 시도해보고 이것저것 해보시면 금방 해결하실거에요..
-
Shane Park 2021.08.25 18:34 신고
아직 도커로는 맥북에서 오라클 티비 사용 불가능합니다. 올해안엔 안될 것 같네요
-
Shane Park 2021.08.25 18:37 신고
혹시 집에 남는 윈도우 컴퓨터 있으면 오라클 서버로 돌리시는 방법이 있구요. aws 에서 rds 구축해보는 방법도 있습니다 . 오라클 클라우드가 조금 어려워도 제일 좋은 방법인데 이상하네요. sql developer 한번 다시 깔아보시고, 혹시 디벨로퍼가 파일 접근 권한이 없어서 그럴수도 있으니 그것도 한번 체크해보세요. 권한 관련해서는 제가 올린 mac 에서 sql developer 실행에 설명 되어 있어요
-
Shane Park 2021.08.25 23:30 신고
안녕하세요.
방법을 찾았습니다. 언어 선택의 문제였다네요.
시스템 환경설정 > 언어 및 지역으로 가서, 지역을 미국으로 한번 바꿔서 저장 한 후에 다시 한국으로 변경하면 문제가 해결 됩니다.
팀원들이랑 최종 프로젝트 할때 팀원들 이런 문제 생긴분이 많았어서 그때 장난삼아 미국 한번 보냈다 온다고 했었는데 그새 제가 까먹었었네요
https://proni.tistory.com/m/entry/%E2%9C%85-Solved-oracle-sqldeveloper-%EC%97%B0%EA%B2%B0-%EC%8B%9C-%EC%97%90%EB%9F%AC-at-Mac
-