DBeaver로 Oracle XE 21c 접속/계정 생성/테이블 생성하기

이미지
Oracle DB와 연동할 일이 생겼다. XE를 연동 테스트 대상 제품으로 정하고 설치했는데 MariaDB와는 다른 구조라서 조금 헤맸던 경험을 기록한다. XE는 Oracle Database Express Edition을 지칭한다. 무료고, 경량이고 같은 기업용 제품과 같은 엔진을 쓰지만 하드웨어 자원을 사용하는데 제한이 있다고 한다. 1. 설치 후 최고 사용자 설정 우선 설치가 끝나면 Database Configuration Assistant를 실행하여  기존 최초로 생성된 데이터베이스를 설정한다. 데이터베이스 선택에서 계정 설정을 마친 뒤  모두 다음(N) > 을 눌러주면 된다. * TDE 전자지갑 비밀번호는 DB 레벨에서 데이터 암호화 서비스를 위한 비밀번호다. - ... - 접속 모드 > 전용 서버 모드 설정 완료후, Dbeaver로 Oracle 접속을 시도하면 우선 Oracle JDBC Driver를 설치하라는 창이 뜨고 설치해준다. 2. 최초 Connection Database configuration manager에서 데이터베이스 이름을 'XE'로 잡았으므로 최초 접속 시, 아래와 같이 구성한다. - 데이터베이스는 'XE' - Username은 'system' - Role은 Normal - Password는 패스워드 3. PDB 전용 사용자 생성 이렇게 master 또는 system 유저로 구성된 세션에서는 SELECT * FROM ALL_USERS ; 를 통해 오라클 DB에서 생성된 기본 계정들을 열람할 수 있는데 우리는 애플리케이션 서버와 통신하기 위한 전용 사용자를 생성해야한다. 오라클 12c의 멀티테넌트 아키텍처 구조상 컨테이너 데이터베이스(CDB)와 플러그인 데이터베이스(PDB)가 있는데 CDB는 물리적으로 하나의 Oracle 인스턴스를 의미하고 PDB는 논리적으로 독립된 DB로 작동한다. CDB는 여러 개의 PDB를 가지고 공통 사용자 계정이 존재한다. 때문에 CDB에 생성되는 사...

ipTime 라우터/공유기에 연결된 기기에 IPV4가 할당 안 될 때

컴퓨터를 라우터에 LAN 케이블을 연결했고 컴퓨터의 CLI에서 ip addr을 했을 때 이더넷 인터페이스에 ipv4주소가 잘 나옴에도 불구하고 라우터/공유기의 IP목록에 안 뜨는 경우가 있다. (고급설정 > 네트워크 관리 > 내부 네트워크 설정 > 사용중인 IP 주소 정보) DHCP 통신으로 라우터로부터 ipv4주소는 성공적으로 할당 받았으나 "사용중인 IP 주소 정보" 재검색 버튼을 눌러도 갱신이 되지 않는다면 해당 컴퓨터에서 공유기에 PING 신호를 보내어 목록을 갱신할 수 있다. 주로 공유기가 해당 ip대역의 gateway 역할을 하고 xx.xx.xx.1번대를 차지하므로  ping xx.xx.xx.1 의 신호가 Network unreachable만 아니면 정상적으로 갱신된다.

Linux 머신에 꽂은 USB 플래시 드라이브에 어떻게 접근할까?

sudo fdisk -l로 Disk의 위치를 확인가능하다. Device   Start   End   Sectors   Size   Type 내 경우 USB Flash memory를 꽂으면 Disk /dev/sda에 마운팅됨. Disk model을 통해서 이름을 확인할 수 있다. /dev/sda에 있어서 바로 cd로 접근하려고하면 Not a directory라고 뜨는 경우  sudo 권한으로 다음과 같이 체크해주자. sudo umount {드라이브 경로} sudo mount {드라이브 경로} {마운팅 경로} sudo fsck {드라이브 경로} umount를 실행했더니 아직 마운팅 되지 않았다고한다. (*unmount가 아니다. umount임. 하도 틀려서) mount 해주자. 나 같은 경우 바로 프로젝트 폴더에 만들지 않고 /media/폴더에 mkdir로 마운팅 전용 경로를 만들었다. mount를 실행했더니 wrong fs type이라한다. USB에서 사용하는 파일 시스템이 맞지 않아서다. df -h를 실행하면 리눅스 파일 시스템에 뜨지 않는다. sudo fsck /dev/sda를 통해 검사하면 ext2/ext3/ext4 파일 시스템으로 해석할 수 없다고한다. 그리고 Found a dos partition table in /dev/sda라는 메시지를 볼 수 있다. /dev/sda는 디스크 전체를 의미하고 /dev/sda1는 디스크의 일부인 파티션을 의미한다. 나는 파티션에 접근하지 않고 디스크 자체에 접근하려고 했기 때문에 supdblock을 잘못 인식한거다. 자, 그러면 원인은 잘못된 접근 경로였다. 잘 찾아보니 /dev/sda아래에 dev/sda1정보가 있다. 경로를 /dev/sda1로 바꾸고 다시 명령어를 실행하자. df -h를 했더니 /dev/sda1/가 파일시스템에 인식된다! USB는 USB 컨트롤러가 존재하는 기기와 그 반대 기기를 구별할 수 있다. - 전...

wsl 설치 후 창이 곧바로 사라지는 현상 해결

WSL이 실행할 Linux distribution이 안 깔려서 그럼. 깐 뒤에 실행하면 해결됨. wsl.exe --install Ubuntu-26.04

Python 코드에서 ... 의 의미 ( 타입 힌팅 )

Python에서 '...' 문법은 생략 부호라고 부르며 pass의 역할을 한다. pass를 써도 문제 없지만 더 표현이 간결하기 때문에 쓰임. 다음은 python의 system 패키지 __init__.pyi이다.     @ property     def dev_mode ( self ) -> bool : ...     @ property     def utf8_mode ( self ) -> int : ... 위 프로퍼티 데코레이터가 적용된 함수에서 실제 기능은 구현되지 않은 것을 볼 수 있는데 인터페이스를 정의할 때 자주 사용한다. (인터페이스는 상세적인 구현이 없다.) < .pyi 파일에 대해서 > .pyi 파일은 빌트인 모듈이고 Type Stub files를 연다. 빌트인 모듈이라하면은, python 패키지를 설치했을 때(CPython) 자동으로 딸려오게 되는 모듈을 의미한다. 이 파일들은 sys 모듈의 built-on 모듈들이고 단지 함수의 사인과, 변수들만을 표현할 뿐 실제 공식 Python 코드가 없다. (Input/ outpt) & type Hinting 실제 로직은 C에 숨겨져있다. < .py 파일과 .pyi > 그래서 .py파일과 .pyi를 비교해보면 .py는 실제 로직이 구현된 코드고 .pyi는 구현 메뉴얼이라고 보면 된다. -> Python 인터프리터는 실행하지 않는다. 타입 힌트를 적용한 코드를 .py에 구현할 수 있고 또 framework과 pydantic 유저라면 .py에 구현하는 것이 익숙하지만 C 확장 모듈이나 구형 라이브러리에 타입힌팅을 적용할 때,  직접 소스코드에 타입힌팅을 하면 오류가 많아지니까 라이브러리와 별개로 .pyi파일을 같이 제공할 수 있다. 이렇게 하면 type checker 가 .pyi 파일을 먼저 참조한다.   다른 ... syntax 사용례 1. Type hinting: Tupl...

Python 인터프리터가 __path__를 처리하는 법

파이썬의 특수 내장 변수 __name__, __file__  중에 __path__라는 변수가 있다. __name__의 경우 직접 파이썬 인터프리터가 단일 파일을 실행할 때 '__main__' 값을 가진다. 다른 파일에서 import를 통해 모듈을 불러오는 경우 __name__은 원래 파일명을 가진다. __path__는 단일 파일 모듈(.py)에는 존재하지 않고 하위에 __init__.py가 명시된 패키지에만 존재하는 속성이다. 때문에, 단일 파일 모듈에서 __path__에 접근하면 다음과 같은 에러가 raise된다. NameError: name '__path__' is not defined. Did you mean: '__name__'? 파이썬 인터프리터는 패키지가 포함된 폴더를 import를 통해 호출할 때, 1. __path__ 변수를 만들어 __init__.py에 삽입한다. 2. 패키지의 위치를 __path__ 변수에 리스트 형태로 저장한다. 부분적으로 패키지의 하위 모듈을 호출하고 싶을 때 pkgutils.walk_packages(__path__)를 사용하면 모듈들을 탐색할 수 있다.  

CSS : 하드웨어 픽셀 VS 소프트웨어 픽셀

VueJS 프로젝트를 만들고나면 기초 css 파일에 #app의 max-width값이 지정되어 있는 것을 확인할 수 있다. CSS의 미디어 쿼리를 작성할 때는 보통 base가 되는 최상위 컴포넌트의 픽셀값을 따로 명시하지는 않고 HTML의 head 태그 안에 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 를 명시하여 디바이스의 디스플레이 크기에 따라 device-width가 적용되게한다.    CSS는 하드웨어 픽셀 대신 소프트웨어, 즉 , CSS 픽셀을 참조한다. 하드웨어 픽셀은 기기의 디스플레이 스펙 그 자체라고 보면 된다. 디스플레이의 해상도 글에서도 언급했듯이 같은 해상도여도 디스플레이의 크기와 작고 큼에 따라서 화질이 다르게 보인다. CSS픽셀은 DPR을 사용하여 하드웨어 픽셀이 CSS 픽셀값으로 매핑된다. DPR = Device Pixcl Ratio. 갤럭시S22의 경우 DPR값은 3이고 하드웨어 디스플레이의 가로의 픽셀 수가 1080이다. S22에서 크롬 앱 등의 브라우저 앱을 사용할 때, 브라우저는 웹사이트에 1080px 물리 픽셀 값을 DPR값 3으로 나눈 값인 370px을 전달한다. 서버는 이 값을 인식하고 적당한 미디어쿼리 값에 맞는 CSS를 Return한다. 위와 같은 경우 모바일 페이지에 적합한 CSS를 Return 할 것이다. 최종적으로 S22의 웹브라우저에서는 CSS 뷰포트의 가로 길이가 360pixel인 디자인이 페인팅된다.

이 블로그의 인기 게시물

Blogger 커스터마이징 : CSS 수정 (sticky-header)

Vue 첫 걸음

Python의 빌트인 class들의 관계