오라클 11g, 12c, 19g랑 심지어 8까지 사용하면서 이런 저런 오류를 많이 겪게 되었다..^^

그러다 갑자기 처음 보는 오류

ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다.

을 맞이하게 되었는데!!

오라클 12c부터는 CDB와 PDB이라는 개념이 생기면서 공통계정 앞에는 C##을 붙이도록 바뀌었다고 한다...!


CDB, PDB에 대해서는 아래를 참조!
https://eastcold.tistory.com/24

 

[Oracle] 멀티테넌트 DB, CDB, FDB란?

Oracle 12c부터는 멀티테넌트(MutilTenant)라는 기능이 도입되었다고 한다! 말 그대로 다중의 세입자라는 뜻으로 하나의 DB 안에 여러개의 DB가 포함되어 있는 구조라고 보면 된다 이전 11g까지만 해도

eastcold.tistory.com

 

그래서 좌측 하단 이미지의 SP DB의 이름을 SP로 만들지 않고 C##을 붙여

C##SP DB로 생성하였다!!

좌측:멀티테넌트DB // 우측: 싱글DB

 

반응형

'[ 개발 ] > DB' 카테고리의 다른 글

[MSSQL] varchar와 nvarchar  (0) 2022.09.01
[Oracle] ORA-12541, ORA-12514  (0) 2022.07.14
[Oracle] 멀티테넌트 DB, CDB, FDB란?  (0) 2022.06.28
[DB] DDL, DML, DCL, TCL 정리표  (0) 2021.05.20
[DB] view에서 사용하는 with check option  (0) 2021.04.21

 

오늘은~ 파이썬에서 프로그램을 만들어 실행 파일, 설치 파일을 만들어 배포했을 때 사용했던 프로그램들을 소개하려고 한다^_^

이번 포스팅에서는

- pyinstaller
- NSIS
- HM NIS Edit

이렇게 세가지 프로그램을 다룰 예정이며

pyinstaller는 설치방법 + 사용법을 모두 다루고
NSIS와 HM NIS Edit은 지난 포스트에서 설치가 완료되었다는 가정 하에 순차적으로 사용법을 기록할거다..!

# NSIS와 HM NIS Edit 설치방법 참고
https://eastcold.tistory.com/21?category=941604

 

[Programming] NSIS와 HM NIS Edit을 이용한 설치파일(Setup.exe) 만들기

Python으로 프로그램을 만들 일이 생겨서 알아보던 중 찾게 된 NSIS와 HM NIS Edit !! 가장 유명한 인스톨 프로그램 중 하나이자 오픈소스라서 많이 사용된다고 한다. 설치방법과 사용법이 간단한 것은

eastcold.tistory.com

 

"""
개발 환경
Window(x64)
IDE : Pycharm
Python Version : 3.8.10
"""

pyinstaller란?

pyinstaller는 파이썬과 PyQt로 제작한 GUI 프로그램을 간단하게 실행파일(exe)로 만들어주는 프로그램이며

실행파일은 파이썬이 설치되어 있지 않은 PC에서도 프로그램이 실행될 수 있도록 해준다

다른 실행파일 제작 프로그램이 있긴 하나,

파이썬에서는 pyinstaller를 많이 사용하고 편한 것 같아서 평소에 자주 사용했다!



설치

1. Pyinstaller 세팅

pyinstaller를  설치하기  위해서는  CMD 명령어창에서 다음과 같이 입력한다

# 설치
pip install pyinstaller

# 설치 및 버전 확인
pyinstaller --version


이후 파이참에서 ctrl + alt + s 를 입력하여 Settings창을 켜주고
Python Interpreter에서 pyinstaller가 정상적으로 설치된 것을 확인해준다!


이후 Tools - External Tools에서 pyinstaller를 추가한다!
Name과 Tool Settings의 값들을 추가해주면 되는데
Name은 임의로 기입하면 되고
Program은 pyinstaller.exe의 위치를 적어주면 된다. 보통 Python/Scripts에 있는 것 같다!
Arguments는 아래에 상세히 설명할거고
Working  directory는 작업하고 있는 폴더를 넣어주면 된다!


좌측 하단 이미지는 실제 사용한 Argument인데 사실 여기서 말고도 굳이 여기서 할 필요는 없고
본인 프로젝트 폴더에 가서 보면 'Main파일명.spec' 파일이 존재한다. 거길 들어가보면 우측 하단과 같이 나오는데
본인이 편한 곳에서 내용을 기입하거나 수정해주면 된다.
근데 Spec 파일에 관련된 내용은 많아서 Argument로 작성하는 방법을 쓰겠다..! (사실 이게 난 더 편하다^_^)

# 주석으로 설명할테니 필요한 부분만 추가하면 된다~!

-y  # 프로그램 생성시 CMD명령어 창이 디스플레이됨. 없애고 싶다면 -w로 설정
--uac-admin  # 관리자 권한으로 실행하는 프로그램을 만들기 위한다면 추가하기
--add-data  
T-gear_Guide/*.docx;T-gear_Guide/.  
--add-data  # 데이터를 추가할 때 기입하는 명령어
ui/*.png;ui/.  # ui폴더에 있는 png파일을 모두 추가하고 파일명은 모두 동일하게 설정
--add-data  
ui/*.ui;ui/.
--add-data
T-gear.ico;.  # 이것처럼 일반 파일도 특정해서 추가할 수 있다
-i=T-gear.ico  # 아이콘 설정
--hidden-import=pydicom.encoders.gdcm  # 원하는 라이브러리 추가
--hidden-import=pydicom.encoders.pylibjpeg
T-gear.py  # 생성하고자 하는 파일명

Argument 작성이 되고 External Tools에 추가되었다면
Main.py 파일을 우클릭-External Tools- pyinstaller 클릭한다!


Terminal창에 빌드가 완료되었다는 메시지가 출력되면 dist폴더 안에 실제 배포할 수 있는 폴더(dist/Main)가 생성되어 있을 것이다!




2. HM NIS Edit 세팅

이제 HM NIS Edit에서 Ctrl + W를 입력하거나 빨간 네모에 있는 '스크립트 작성 마법사' 버튼을 눌러 스크립트를 작성한다!


프로그램 이름과 버전, 배포자, 웹사이트 등의 정보를 입력해준다. 웹사이트는 공백이어도 되는듯!


설치 아이콘을 설정해주고 설치  파일의 이름을 명명해준다..!
다른 것은 설정하지 않아도 된다


프로그램 설치시 설치되는 경로를 설정해주고, 라이센스 파일을 추가해준다!
라이센스 파일은 txt파일 등으로 첨부가 가능하지만 본인은 추가하지 않고 진행하겠다!


다음으로 설치할 파일을 추가해주는데 기본적으로 2개 파일이 추가되어있으니
이것들을 X 버튼(1번 빨간네모)을 눌러 모두 삭제해준다.
그 후 트리 버튼(2번 빨간네모)을 클릭해준다.


SelectDirectory에서 아까 Pyinstaller에서 빌드했던 'dist/Main폴더명'을 추가해준다..!
일일이 들어가서 찾기 귀찮아서 '파일 탐색기'에서 주소를 복붙해줬다^^


그럼 아래와 같이 필요한 파일들이 모두 추가되는 것을 확인하고 다음 클릭!


이후 아래  이미지와 같은 창이 나올 때까지 모두 기본값에서 변경하지 않고 계속 '다음' 클릭..!
마법사를 완료했을 때, '스크립트 저장'만 체크한 후 완료 버튼 클릭하면 된다.


나는 바탕화면에 Main파일을 저장했다

 


2. NSIS 세팅

마지막으로 NSIS를 켜서 위에서 만든 Main.nsi 스크립트 파일을 컴파일해주려고 한다
Complie NSI scripts 클릭!


이제 빨간 버튼 Load Scripts 버튼을 클릭하여 좀 전에 만든 Main.nsi 파일을 컴파일해주자!


컴파일이 정상적으로 완료되었다면 Titlebar에 Finished Successfully 메시지와 함께 연두색으로 디스플레이되고
비정상적으로 완료되었다면 분홍색으로 디스플레이되고 Test Installer시 오류가 발생하게 된다!


그리고 평소에 우리가 보는 Setup 실행파일이 정상적으로 설치되어 있는 것과
실행시 익숙한 설치창이  켜지는 것을 확인할 수 있다!! ^_^

 



오늘은 이전에 작성했던 HM NIS Edit과 NSIS, 그리고 Pyinstaller를 활용하여

파이썬으로 설치 및 실행 프로그램을 만들어 보았다

순서가 좀 복잡한 것 같지만 한두번 해보면 금방 익숙해지는 것 같다 ^_^

반응형

Python으로 프로그램을 만들 일이 생겨서 알아보던 중 찾게 된 NSIS와 HM NIS Edit !!

가장 유명한 인스톨 프로그램 중 하나이자 오픈소스라서 많이 사용된다고 한다.

설치방법과 사용법이 간단한 것은 덤 ^_^

이번 포스팅에서는 설치방법만 간단하게 정리해보도록 하자!

 

두개 프로그램 모두 설치해야 우리가 원하는 설치파일 만들기 작업을 할 수 있으니 꼭 둘 다 받아주자!

아래는 내가 사용했던 NSIS와 HM NIS Edit 파일이다~! 

NSIS & HM NIS Edit.zip
0.00MB

직접 다운받으려면 아래 프로세스 참고하기!

 

NSIS 다운로드

>> nsis.sourceforge.io/Download

위와 같은 화면에서 다운로드받아주시고~

별다른 설정 없이 모두 Next 후 Install까지 진행하고 나서

위와 같은 Main창이 나타나면 NSIS 설치 완료!

 

HM NIS Edit 다운로드

>> http://hmne.sourceforge.net/

 

HM NIS Edit: A Free NSIS Editor/IDE

HM NIS EDIT: A Free NSIS Editor/IDE  |   |   |   |   |   |   |     HM NIS Edit is the best Editor/IDE for Nullsoft Scriptable Install System (NSIS). Its useful for experts and beginners in the creation of Setup programs with the NSIS. Its S

hmne.sourceforge.net

 

위와 같은 홈페이지 화면 하단부에 있는 nisedit2.0.3.exe을 다운로드해준다

계속 다음> 을 눌러 진행하다가 다음과 같은 화면이 나오면 무시(I) 해주고 진행한다

실행하여 위와 같은 Main창이 나오면 HM NIS Edit 설치 완료!!

 

 

반응형

JS 간단한 함수 정리(개인 학습용/지속적 업데이트)

  • str.toUpperCase(), str.toLowerCase()
    해당 문자열을 모두 대문자, 소문자 변환
    ex) console.log('hello'.toUpperCase()); // 'HELLO'
    ex) console.log('WORLD'.toLowerCase()); // 'world'
     
  • str.indexOf(searchValue)
    찾고자 하는 문자열이 있을 때 사용
    ex) console.log('hello'.indexOf('a')); // -1
반응형

 

*** 일반적으로 1개의 레포지토리에 1개의 app

*** gitignore : 환경변수 등 필요없는 파일 지정하면 안올릴 수 있음

*** Choose a license : 라이선스 지정 가능 ex)mit license

*** 소스트리 : 9:28
        - 소스트리에서 로컬은 개인pc, 원격은 레포에 있는 파일
        - 클론해서 복사하기

*** commit
        - 소스트리에서 'commit - push'해야 깃허브site에 올라감
       - 'pull' : A개발자가 수정한 코드를 B개발자가 로컬pc로 이동
       - 깃헙 'history' 누르면 수정내역 다 볼 수 있음
        - 예전시점으로 돌아가는 방법 : '코드뭉치 되돌리기'

*** commit rule
        - 커밋 주기정하기 - 기능별, 오전 오후별, 일별
        - commit 카테고리 관리
               - [INNITIAL] : 레포를 생성하고 최초에 파일을 업로드할 때
                - [ADD]  : 신규 파일 추가
               - [UPDATE] : 코드 변경이 일어날 때
                - [REFACTOR] : 코드를 리팩토링 했을 때
                - [FIX] : 잘못된 링크 정보 변경, 필요한 모듈 추가 및 삭제
                - [REMOVE] : 파일 제거
                - [STYLE] : 디자인 관련 변경사항
        - 설명 어떻게 할지 정하기8

*** GitFlow전략
        - 소프트웨어의 소스코드를 관리하고 출시하기 위한 '브랜치 관리전략' 중 하나
        - 이외에도 githut flow, gitlabflow 전략 등이 있으나 Gitflow가 제일 좋음

        - 항상 유지되는 메인 브랜치
                - Master : 제품으로 출시되는 브랜치
                - Develop : 다음 출시 버전을 개발하는 브랜치
        - 일정 기간 유지되는 보조 브랜치
                - Feature : 기능을 개발하는 브랜치
                - Realease : 이번 출시 버전을 준비하는 브랜치
                - Hotfix -  출시 버전에서 발생한 버그를  수정하는 브랜치,
                                    
Master브랜치에서 직접 땀(Master와 Develop에 둘다 반영시켜야 함)

        - 깃헙에서 레포 생성하면 기본적으로 Master브랜치로 생성됨
          
새로운 브랜치를 만들면 참조한 브랜치(Master)를 그대로 가져옴

        - ex) Feature(name_edit)브랜치를 Develop브랜치로 pull하는 방법
                - 깃헙 'Pull requests' - 'Compare & pull request'버튼 클릭
                - base: develop <- compare: name_edit  V Able to merge 확인
                - Create pull request 클릭
                - 개발리더가 코드 확인 후, 잘못되었으면 comment
                   문제가없다면 'Merge pull request' - 'Confirm merge' 버튼 클릭
                - Develop브랜치에 들어가서 정상적으로 반영되었는지 확인 후,
                   Feature브랜치 삭제(branches 들어가서 휴지통 버튼)

        - Default branch를 Develop으로 변경하기 : 'Change default branch' - 'branches' - 변경가능 

*** 이슈관리(Issues) : Message 대신에 사용, e-mail로 모든 것을 소통할 수 있음
        - to do : 체크박스 만들어서 사용하기

*** 개발진행관리 : 'Projects' 에서 '개발목록', '개발진행중', '개발완료', '테스트완료', '최종개발완료' 로 나누어서 해도 좋음

*** 문서관리 : 깃헙에서 모두 가능

*** 동일한 파일 수정하면서 충돌했을 때 문제 발생하는 것들도 더 배워야 함

반응형

 

''.join(iterable) 함수는 리스트를 문자열로 합춰주는 기능을 한다.

문자열을 리스트로 쪼개주는 .split() 함수와 정반대의 기능을 한다고 보면 된다.

iterable에는 List, Tuple, Dictionary, Set 등이 들어갈 수 있다.

시간복잡도가 O(n) 밖에 되지 않아 일반적으로 for문을 사용하여 문자열을 합치는 것보다 성능면에서 우월하다.

 

"".join(iterable) 함수 예제

 

"".join(iterable) 실행 결과

 

 

반응형

 

*args

arguments의 줄임말로 args가 아닌 다른 문자열이 들어와도 된다.
ex) *enterprise, *hi, * hello_world

여러개의 argument가 들어올 때 사용한다.

tuple 형태로 들어오며 매개변수 지정시 일반 변수가 존재한다면, 반드시 그보다 뒤에 들어와야 한다.

 

**kwargs

keyword arugments의 줄임말로 kwargs가 아닌 다른 문자열이 들어와도 된다.
ex) **countries, **LikePython, **coffee

여러개의 argument가 key,value값으로 들어올 때 사용한다.

dictionary 형태로 들어오며 매개변수 지정시, 일반 변수 또는 args변수가 존재한다면, 반드시 그보다 뒤에 들어와야 한다.

 

*args, **kwargs test 함수

 

*args, **kwargs test 실행 결과

반응형

자바에 dcm2che 이런 라이브러리들이 많았는데 

파이썬에서는 괜찮은 라이브러리들이 별로 없는 줄 알았다가 찾게 된

mritopng !!

써보니 정말 간단하고 편리했다!

 

https://github.com/danishm/mritopng

 

GitHub - danishm/mritopng: A simple python module to make it easy to batch convert DICOM files to PNG images.

A simple python module to make it easy to batch convert DICOM files to PNG images. - GitHub - danishm/mritopng: A simple python module to make it easy to batch convert DICOM files to PNG images.

github.com

 

여기에 들어가서 다운받은 후, 아래 명령어로 설치하기!

python setup.py install

 

또는 아래 명령어로 설치!

pip install mritopng

 

convert_file이란 함수로 파일 이름 하나하나 짚어가면서 바꿀 수 있고,

convert_folder 함수로 폴더 안에있는 모든 dicom 파일을 (DCM) png로 바꿀 수 있다.

 

import mritopng

# Convert a since file
mritopng.convert_file('/home/user/DICOM/SCAN1', '/home/user/output.png')

# Convert a whole folder recursively
mritopng.convert_folder('/home/user/DICOM/', '/home/user/PNG/')

 

 

 

 

출처 : https://sosal.kr/

반응형

 

윈도우에서 개발한 프로그램이 리눅스 환경에서 실행되어야 한다고 하는데 찾아보니

리눅스에서는 윈도우 응용 프로그램이 실행되지 않는다고 한다.

그래서 나는 exe파일을 정상적으로 작동시키기 위해 Wine이라는 소프트웨어를 사용했다.

 

시작하기 전에 시스템에 설치되어 있는 wine을 제거하자.

설치된 Wine 모두 제거하기

sudo apt-get autoremove wine --purge

+ /.wine 폴더 모두 제거하기

sudo rm -rf ~/.wine

 

아래 홈페이지로 들어가 각 환경 및 버전에 맞게 wine을 다운로드한다.

나는 Ubuntu 21.04 환경에 맞춰 설치를 진행했다.

                                                                            https://wiki.winehq.org/Download

 

Wine 설치를 마친 후, Terminal로 들어가서

1. Ubuntu 64인 경우에만 아래의 구문을 실행하여 32비트를 활성화시켜준다.

sudo dpkg --add-architecture i386

 

2. 이후, 저장소 키를 설치한다.

wget -O-https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add-

 

3. version을 아래 시스템 버전에 맞게 수정한 후, 와인 저장소를 추가한다.

  • Ubuntu 20.04, Linux Mint 20.x : focal
  • 우분투 20.10 : 그루비
  • 우분투 21.04 : hirsute
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ version main'
  • Ubuntu 18.04 및 Linux Mint 19.x : 
sudo add-apt-repository ppa : cybermax-dexter / sdl2-backport

 

4.  Wine 6.9 업데이트 및 설치한다.

sudo apt update && sudo apt install --install-recommends winehq-devel

 

5. 정상적으로 설치를 완료했다면 exe파일을 있는 폴더에서 실행시킨다.

cd test; wine test.exe

 

반응형

List list = new ArrayList(); 와 ArrayList list = new ArrayList(); 의 차이는 무엇인가.

클래스를 생성할 때 도형 타입으로 생성하게 되면 정사각형이 아닌 다른 직사각형, 삼각형 등 도형 인터페이스를 구현한

클래스에서 사용 될 수 있다. 하지만 정사각형 클래스로 생성하게 되면 직사각형, 삼각형 등 에서는 사용할 수 없다.

 

도형에 비유하여 풀어보면,

 

List는 인터페이스이므로

List list = new ArrayList();

-> 도형 list = new 정사각형();

 

ArrayList는 클래스이므로

ArrayList list = new ArrayList();

-> 정사각형 list = new 정사각형();

반응형

+ Recent posts