728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL

■ Windows Server 2016 영문버전 한글로 변경

1. [시작] - [Settings]을 클릭하면 Windows Settings로 들어가는데 그 안의 메뉴에서 [Time & language]를 클릭한다.

2. 하단 왼쪽 이미지의 [Region & language]를 클릭 - 상단의 [Korea]를 선택하고 중간에 [+Add a language]를 클릭한다.

    그러면 하단 오른쪽 이미지가 나타나는데 [한국어]를 찾아서 클릭한다.

3. 한국어가 추가되면 [Options] 버튼을 클릭한다.

    그러면 하단 오른쪽 이미지가 나타나는데 [Download] 버튼을 클릭한다.

4. [Download] 버튼을 클릭하면, 하단 왼쪽 이미지와 같이 다운로드가 진행된다.

    다운로드가 완료되면 하단 오른쪽 이미지와 같이 한국어가 추가된 것을 볼 수 있다.

5. 한국어를 클릭하여 [Set as default]를 클릭하고 컴퓨터를 재부팅하면 한글로 적용되는 것을 볼 수 있다.

 

■ Windows Server 2016 한국 시간으로 변경

1. 아래와 이미지의 [Date & time]을 클릭하고 [Time zone]에서 [Seoul]을 클릭하면 시간이 변경된다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ VirtualBox 7.0.18 설치방법

1. 다음 사이트로 접속하여 [Downloads]를 클릭한다. VirtualBox 7.0.18 Download 

2. [VirtualBox 7.0.18 platform packages]에서 os에 맞는 버전을 다운로드한다.

    필자는 Windows이므로 [Windows hosts]를 클릭하여 다운로드하였다.

3. 아래와 같이 다운로드한 파일을 클릭하여 설치한다.

4. 아래 이미지대로 설치를 진행한다. 아무것도 건드리지 말고, Next를 클릭한다.

    참고로 3번의 내용은 다음과 같다.

경고:
네트워크 인터페이스

Oracle VM VirtualBox 7.0.18 네트워킹 기능을 설치하면 네트워크 연결이 재설정되고 네트워크에서 일시적으로 연결이 끊어집니다.

지금 설치를 진행하시겠습니까?

5. 설치를 완료하고 실행해서 아래 이미지와 같은 창이 뜨면 설치가 성공적으로 된 것이다.

■ VirtualBox 7.0.18 사용법

1. VirtualBox를 실행하고, 아래 [새로 만들기]를 클릭한다. (사전에. iso파일을 다운로드하여야 한다.)

2. 새로 만들기를 클릭하면 가상 머신 만들기 창이 뜨는데, [이름], [폴더], [ISO 이미지]등을 선택하고 다음을 클릭한다.

  - 이름 : 가상머신 이름

  - 폴더 : 가상머신이 설치될 폴더

  - ISO 이미지 : 사전에 다운로드한 ISO파일 경로를 선택

  - 에디션 : ISO에 포함된 에디션 종류  

3. 무인 게스트 OS설치가 가능한 경우 아래 이미지와 같이 정보를 입력할 수 있다. 정보를 입력하면, 아래 정보로 OS가 설치된다.

4. 기본 메모리, 프로세서 등을 설정하고 다음을 클릭한다.

5. 하드 디스크 크기를 지정하고 다음을 클릭한다.

6. 만들어질 가성 머신 정보를 요약해서 보여준다. 맞으면 완료를 클릭한다.

7. 완료 버튼을 클릭하면, 아래와 같이 만든 가상 머신이 실행된다.

 

728x90
반응형
LIST
728x90
반응형
SMALL
DBeaver를 설치하면 여러 환경이 기본값으로 설정되어 있다.
SQL 편집기 글씨도 작고, 폰트도 마음에 안 들고 해서 설치 후 몇 가지 내가 설정하는 것을 정리해 보았다.

■ SQL 편집기 글꼴 및 크기 변경

1. [상단메뉴 - 윈도우 - 설정]으로 이동한다.

2. [User Interface - 모양 - 색상 및 글꼴]로 이동하여 [DBeaver Fonts - Monospace font]로 가서 원하는 글꼴 및 크기로 편집한다.

 

■ 쿼리 작성 중 테이블 자동완성 목록에서 클릭하면 테이블 옆 Space와 Alias 자동 생성 막는 방법

1. [편집기 - SQL 편집기 - SQL 자동완성]으로 이동한다.

2. [Insert space after table/column names]는 체크를 해제한다. (자동완성 중 테이블 및 컬럼을 클릭하면 자동으로 Space가 들어가는 기능)

3. [Insert table aliases (in FROM clause):]는 N/A로 변경한다. (자동완성 중 테이블을 클릭하면 자동으로 Alias가 생성되는 기능)

 

■ 쿼리 작성 중 싱글쿼터('), 더블쿼터(") 작성 시 자동으로 닫히는 기능 막는 방법

1. [편집기 - SQL 편집기 - Code Editor]으로 이동한다.

2. Auto close의 내용을 보고 체크를 해제한다.

 

■ 줄 바꿈이 공백인 경우 쿼리 실행이 될 수 있도록 변경하는 방법

1. 아래와 같이 쿼리문에 줄 바꿈 공백이 들어간 경우, 기본설정에서는 에러가 난다.

2. 이를 무시하려면 [편집기 - SQL 편집기 - SQL 실행]으로 이동한다.

3. [Blank line is statement delimiter]는 체크를 해제한다.

 

■ 단축키 설정

1. 단축키를 변경은 [User Interface - 키]로 들어가서 변경할 수 있다.

2. 단축키 변경은 바꾸고 싶은 명령을 클릭한 후, 하단 바인딩에서 사용할 단축키를 누르면 세팅된다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ HL7이란 무엇인가?

1. HL7은 전자 건강 정보 교환을 위한 표준을 개발하는 국제적인 비영리 표준 개발 기구이다.

    이 기구의 목표는 건강 정보 기술 시스템 간에 데이터를 표준화하고 상호 운용성을 촉진하여 의료 정보를 효과적으로 공유하고 활용할 수 있도록

    하는 것이다.

2. HL7은 다양한 표준을 개발하고 유지보수하며, 이를 통해 건강 정보 기술 시스템 간에 데이터를 교환하고 상호 운용성을 달성한다.

    대표적인 HL7 표준에는 HL7 v2, HL7 v3, HL7 FHIR(Fast Healthcare Interoperability Resources) 등이 있다.

  - HL7 v2: 초기에 개발된 표준으로, 텍스트 기반의 메시지 형식을 사용하여 의료 정보를 교환한다.

                  주로 인터페이스 개발 및 데이터 전송에 사용된다.

  - HL7 v3: 보다 복잡하고 구조화된 데이터 모델을 사용하여 의료 정보를 표현하는 표준이다. 그러나 채택이 적어 일부 지역에서만 사용된다.

  - HL7 FHIR: 최근에 개발된 표준으로, RESTful 웹 서비스를 기반으로 하여 간단하고 유연한 데이터 교환을 지원한다.

                     많은 관심과 채택을 받아 건강 정보 교환 분야에서 중요한 역할을 한다.

3. HL7 표준은 의료 기관, 병원, 의료 정보 기술 회사 등 다양한 기관과 시스템에서 사용되며, 전 세계적으로 의료 정보 교환에 필수적인 역할을 하고

    있다. 이를 통해 환자 데이터의 이동성을 향상시키고 의료 서비스의 품질을 향상시키는 데 기여하고 있다.

 

■ HL7을 사용하는 이유

1. 의료 시스템 간에 데이터를 표준화하여 교환할 수 있도록 한다.

    이는 다양한 의료 기관 및 시스템 간에 의료 정보를 공유하고 통합하는 데 도움이 된다.

2. 의료 전문가들은 환자의 의료 기록, 진단, 처방 등의 정보를 빠르게 공유하고 업데이트할 수 있다.

    이는 환자 치료 및 관리에 필요한 정보에 빠르게 접근하여 의사 결정을 내릴 수 있도록 돕는다.

3. 의료 정보를 표준화하여 전송할 수 있으므로 데이터 통합 및 교환에 드는 비용을 줄일 수 있다.

    이는 의료 기관 및 시스템의 운영 비용을 절감할 수 있도록 돕는다.

4. 의료 정보를 더 빠르게 전송하고 공유할 수 있다.

    이는 의료 전문가들이 환자의 의료 정보에 빠르게 접근하여 즉각적인 치료 및 관리를 제공할 수 있도록 돕는다.

5. 많은 국가에서는 의료 기록 및 데이터의 보안 및 개인 정보 보호에 관한 법적 요구 사항을 준수해야 한다.

    HL7을 사용하면 의료 데이터의 안전한 전송 및 저장이 보장될 수 있다.

 

■ HL7 FHIR이란 무엇이며, 사용하는 이유

1. HL7 FHIR 첫 번째 버전은 2014년에 출시되었고, 현대적인 건강 정보 교환을 위한 표준으로서, 의료 데이터의 상호 운용성을 촉진하기 위해 개발

    된 표준이다. 이를 통해 다양한 의료 시스템 및 응용 프로그램 간에 데이터를 교환하고 공유할 수 있다.

    여기에는 환자 기록, 진단 정보, 의약품 처방, 검사 결과 등의 의료 정보가 포함된다.

2. RESTful 웹 서비스를 기반으로 하여 HTTP 프로토콜을 사용하여 데이터를 교환한다.

    이는 개발자들이 기존의 웹 기술과 도구를 활용하여 FHIR 서비스를 구축하고 통합하는 데 용이하다.

3. 자원(Resource)을 중심으로 데이터를 모델링하며, 각 자원은 특정한 의료 정보를 나타낸다.

    예를 들어, 환자, 의사, 진단, 처방 등이 FHIR 자원의 예이다.

4. 간단하고 이해하기 쉬운 데이터 모델을 사용하여 의료 정보를 표현한다.

    이는 새로운 기능을 쉽게 추가하고 기존 기능을 확장할 수 있도록 한다.

5. 다양한 의료 정보를 표현하고 다양한 응용 프로그램 및 시스템 간에 데이터를 교환할 수 있도록 설계되었다.

    이는 현대적인 의료 환경에서 발생하는 다양한 요구 사항을 충족시킬 수 있도록 한다.

6. HL7 국제 표준으로 채택되어 있으며, 전 세계적으로 다양한 의료 시스템과 기관에서 사용되고 있다.

    이는 의료 정보의 표준화와 상호 운용성을 향상시키는 데 기여한다.

7. https://hl7.org/fhir 는 HL7 FHIR 공식 사이트로 FHIR 스펙에 대한 문서 및 가이드를 제공한다.

728x90
반응형
LIST

'ETC' 카테고리의 다른 글

Oracle vs PostgreSQL 및 SQL사용 순위  (0) 2023.07.21
728x90
반응형
SMALL

■ Visual Studio 항상 관리자 권한으로 실행하는 법

1. Visual Studio 실행파일로 이동한다. 경로를 모르면 아래 이미지와 같이 찾아간다.

2. devenv파일을 찾았으면 해당 파일에서 우클릭 후, 호환성 문제 해결을 클릭한다.

3. 아래 이미지와 같이 순서대로 진행한다.

4. 프로그램 테스트를 클릭하지 않으면 다음이 안 눌리므로, 프로그램 테스트를 꼭 클릭하도록 한다.

728x90
반응형
LIST
728x90
반응형
SMALL
DBeaver 설치 후, 쿼리를 실행하였는데, 테이블이 없다고 메시지가 나왔다.
알고 보니 스키마 지정이 안 돼서, 테이블 앞에 스키마 이름까지 써야 쿼리가 된다는 것을 알았다.
스키마 이름까지 쓰는 건 번거로워 스키마 이름을 안 쓰는 방법을 알아보도록 하자.

■ DBeaver 실행 시,  Default Schema 설정하는 방법 1

1. 아래 이미지와 같이 Schema에서 마우스 우클릭 후, Set as default를 클릭한다. (완료)

 

■ DBeaver 실행 시,  Default Schema 설정하는 방법 2

1. 아래 이미지와 같이 Database에서 마우스 우클릭한다.

2. Edit Connection을 클릭한다.

3. Connection settings - Initialzation 클릭 후, Default schema에서 기본값으로 지정할 스키마를 선택하고 저장한다. (완료)

 

728x90
반응형
LIST
728x90
반응형
SMALL
어느 날 잘 되고 있던 Oracle Database가 갑자기 접속이 안 되는 현상이 발생하였다.
Error Code는 ORA-01034, ORA-27101
구글링을 하여도 거의 서비스를 재시작하라는 거밖에 없었다.
모든 게 정상적으로 서비스가 올라와 있었는데 접속이 되지 않는 경우, 어떻게 해결하는지 알아보도록 하자.

■ ORA-01034, ORA-27101 에러 해결책

1. 잘 사용하고 있던 Database가 갑자기 아래 이미지와 같이 ORA-01034, ORA-27101 에러코드가 발생하면서 접속이 되지 않았다.

에러창

2. 명령 프롬프트 - sqlplus를 실행하여 sysdba로 접속한다.

>> sqlplus / as sysdba

 

-- 정상적으로 접속되는 경우 아래 이미지와 같이 SQL로 진입한다.

-- 접속이 되지 않는 경우 아래 이미지와 같이 ORA-12560 에러코드가 발생

 

3. SQL로 진입하지 못했을 경우, 명령 프롬프트에서 아래와 같이 먼저 Database를 직접 지정한다.

>> set oracle_sid=test    -- test는 접속할 Database로 알맞게 변경한다.

 

4. 그리고 다시 명령 프롬프트에서 sqlplus / as sysdba로 다시 접속하면 SQL로 진입된다.

    단, Connected to an idle instance.라는 메시지가 나온다. (휴지 인스턴스(idle instance)는 데이터베이스가 셧다운 된 상태)

5. 아래의 쿼리를 실행하면, 아래 이미지와 같이 에러가 발생한다. 

SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;    -- 현재 접속해 있는 Database와 상태를 확인할 수 있는 쿼리

 

6. startup을 실행한다. 이미 실행 중이라는 메시지가 나오면, shtdown immediate를 하고 다시 startup 한다.

    아래와 같이 에러가 발생한다. (정상적인 서버도 아래 경로에 xxx.ORA파일은 없음)

SQL> startup;

 

7. [C:\app\aa\virtual\admin\bb\pfile]의 경로로 들어가면 [init.ora. 숫자]로 된 파일이 있는데, 이 파일을 복사하여

    [C:\app\aa\virtual\product\12.2.0\dbhome_1\database] 경로 안으로 붙여 넣고 파일 이름을 [initbb.ora]로 변경한다.

    (주의 : 빨간색 글씨는 Database명으로, 해당 Database를 선택하면 된다. 경로는 사용자 PC에 따라 달라진다.)

 

8. SQL에서 startup을 파라미터와 함께 실행한다.

SQL> startup pfile="C:\app\aa\virtual\product\12.2.0\dbhome_1\database\initbb.ora"

 

-- 아래 이미지와 같이 성공적으로 startup이 된다.

 

9. 5번의 쿼리를 다시 실행한다. 아까와 달리 조회가 되는 것을 볼 수 있다.

SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;    -- 현재 접속해 있는 Database와 상태를 확인할 수 있는 쿼리

 

10. 마지막으로 DBeaver에서 Connection Test 해봐도 접속이 잘되는 것을 볼 수 있다.

 

※ 주의 : 이렇게 서비스가 시작된 것은 윈도우 서비스에서 재시작을 하면, 위와 같이 에러가 똑같이 나기 때문에 startup 할 때, pfile 파라미터를 넘

              겨줘서 서비스를 재시작해야 한다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ Visual Studio Professional 2019 설치 방법 

1. 아래 사이트로 가서 Visual Studio Professional 2019 파일을 다운로드한다.(MS 계정이 있어야 함)

    https://visualstudio.microsoft.com/ko/vs/older-downloads/

2. 2019 왼쪽 상단 화살표를 클릭하여 펼치고, 다운로드 버튼을 클릭한다.

3. 다운로드 버튼을 누르면 MS에 로그인 창이 뜨는데, MS 계정이 있으면 로그인하고, 없으면 새로 만든다.

4. 로그인을 하면 다운로드할 수 있는 버전이 표시된다. (Visual Studio Professional 2019 다운로드)

5. 다운로드 한 Visual Studio Professional 2019 파일을 실행한다.

6. 아래 이미지와 같이 순서대로 진행한다.

7. 아래 이미지까지 넘어왔으면, C#을 사용할 것이기에 아래 이미지에 빨간 사각형이 있는 [.NET 데스크톱 개발]을 클릭하고 설치 버튼을 누른다.

8. 아래와 같이 설치가 시작된다.

9. 설치가 완료되면, Visual Studio 2019를 실행하고, [우측 하단에 코드를 사용하지 않고 계속]을 클릭한다.

10. 아래 이미지와 같이 [도움말 - Visual Studio 등록]을 클릭한다.

11. 아래 이미지와 같은 화면이 뜨면 [제품 키로 잠금 해제]를 클릭한다.

 

12. 구매했던 제품 키를 입력하면, 정식으로 Visual Studio Professional 2019를 사용할 수 있다.

728x90
반응형
LIST

'C#' 카테고리의 다른 글

Visual Studio 관리자 권한 실행 설정  (0) 2024.04.15
Visual Studio 2019 Professional 제품 키 변경 방법  (1) 2024.01.29
728x90
반응형
SMALL
Oracle DB Dump는 [expdp, impdp] 방법과, [exp, imp] 이렇게 2가지로 크게 요약된다.
이번 시간에는 [exp, imp]를 이용하여, 전체 데이터를 export, import를 해보자.

■ exp를 이용하여 데이터 export

1. 명령 프롬프트(cmd)를 실행하여, 아래 명령어를 입력한다.

>> exp userid=system/1@database file='C:\dump.dmp' full=y

 

-- system : 로그인 ID (고정 값이 아니고, 현재 사용하고 있는 ID를 입력하면 됨)

-- 1 : 로그인 Password (고정 값이 아니고, 현재 사용하고 있는 ID에 맞는 Password를 입력하면 됨)

-- database : export 할 database (옵션 값으로 안 써도 됨. database가 여러 개 있을 때 지정 - export 할 database를 입력하면 됨)

-- file : export 할 파일 경로 및 파일명

-- full = y : database를 전체 export (옵션 값)

명령 프롬프트에 명령어 입력

 

2. export가 완료되면 위에서 지정한 경로에 dmp파일이 생성된다.

    (파일이 3개인 이유는 과거에 export를 해서 생긴 파일이므로 별 다른 의미는 없음)

 

■ imp를 이용하여 데이터 import

1. 명령 프롬프트(cmd)를 실행하여, 아래 명령어를 입력한다.

>> imp userid=system/1@database file='C:\dump.dmp' full=y

 

-- system : 로그인 ID (고정 값이 아니고, 현재 사용하고 있는 ID를 입력하면 됨, import대상 ID)

-- 1 : 로그인 Password (고정 값이 아니고, 현재 사용하고 있는 ID에 맞는 Password를 입력하면 됨)

-- database : import 할 database (옵션 값으로 안 써도 됨. database가 여러 개 있을 때 지정 - import 할 database를 입력하면 됨)

-- file : import 할 파일명

-- full = y : database를 전체 export (옵션 값)

 

2. import가 완료되면 해당 database를 확인해 본다. import가 잘 되어있는 것을 확인할 수 있다.

 

■ 주의할 점

1. NLS_LANG을 export 한 것과 맞춰서 import 해야 한다.

NLS_LANG 확인

2. NLS_LANG을 맞추지 않을 경우 아래 이미지 같이 주석 문자가 깨지는 현상이 발생하였다. (다시 import 함)

주석 문자 깨짐

3. NLS_LANG을 을 맞추고 다시 Import하니 주석도 잘 나오는 것을 확인하였다.

 

※ 참고로 문자 관련해서는 아래 포스팅도 같이 참고하면 좋을 거 같다.

2024.01.27 - [Oracle] - ORA-12721, ORA-06552, ORA-06553 해결 방법 및 주의 사항

 

728x90
반응형
LIST
728x90
반응형
SMALL
DBeaver로 DB에 잘 접속하고, 쿼리를 실행하였더니, No active connection이라는 메시지가 나왔다.
다행히 해결책은 간단하였다.
해결책을 알아보도록 하자.

■ DBeaver No active connection 에러 해결

1. 아래 이미지는 DBeaver로 Connection을 했을 때의 모습이다.

Test Connection

2. 접속한 이후, 쿼리를 실행하면 다음과 같이 No active connection이라는 메시지가 나온다.

No active connection

3. 해결책은 다행히도 간단하다. 아래 이미지 상단에 빨간 박스에 Database를 지정하면 된다.

Database 지정

4. 화살표 버튼을 클릭하면, 아래 이미지와 같이 Database를 선택할 수 있는 창이 나타난다.

Database 선택

5. Database를 지정하고 쿼리를 다시 실행하면, 잘 실행되는 것을 볼 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
Visual Studio 2019 Professional을 설치하고 사용하다가, 제품키를 변경해야 하는 상황이 발생했는데,
변경하는 방법은 쉽지 않았다.
제품키를 변경하는 방법을 알아보도록 하자.

■ 구독을 하고 있는 경우, 레지스트리 삭제

1. 아래 이미지와 같이 [도움말 - Visual Studio 등록]으로 들어가서 나오는 창을 보면 [라이선스 제품 키 적용됨] 외엔 어디서도 제품키를 변경하는 부분은 없다.

    그러므로 레지스트리를 삭제해야 한다.

2. 실행(ctrl+r) 창에서 regedit를 실행한다.

3. HKEY_CLASSES_ROOT\Licenses 경로에서 [41717607-F34E-432C-A138-A3CFD7E25CDA]를 삭제한다.

    [2019 Professional registry key : 41717607-F34E-432C-A138-A3CFD7E25CDA]

4. 삭제하고 다시 들어가 보면, 아래 이미지와 같이 변경된 것을 볼 수 있다. 구독을 하고 있다면, [아래 업데이트된 라이선스 확인]을 눌러서 갱신한다.

■ 제품키를 구매한 경우

1. Visual Studio를 삭제하고 재설치한다.

2. 설치 후, [도움말 - Visual Studio 등록]으로 들어가면 아래 이미지와 같이, [제품 키로 잠금 해제]라는 항목이 보인다.

    클릭하여, 제품키를 입력한다.

728x90
반응형
LIST

'C#' 카테고리의 다른 글

Visual Studio 관리자 권한 실행 설정  (0) 2024.04.15
Visual Studio Professional 2019 설치 방법 (C# 사용)  (0) 2024.03.19
728x90
반응형
SMALL
오라클 설치 후, DBeaver를 통하여 접속하려고 하였으나,
[ORA-12638 신용 검색에 실패했습니다.]라는 에러가 발생하였다.
해결책은 의외로 간단하였다.

 

■ 해결책

1. 오라클이 설치되어 있는 경로를 찾는다. 대략 아래와 비슷하다.

C:\Oracle\product\12.2.0\dbhome_1\network\admin

2. 위의 경로로 들어가면 sqlnet.ora라는 파일이 있다.

3. 파일을 열어 아래 이미지 사각형으로 표시된 부분 앞에 #을 붙여주고 저장하면 DBeaver가 잘 접속되는 것을 확인할 수 있다.

4. 바로 저장이 안 되면 다른 경로로 저장한 후 파일을 덮어쓰기 하도록 하자.

 

# 원인 : 오라클 설치 시 관리자 권한으로 설치하지 않아 생기는 문제

728x90
반응형
LIST
728x90
반응형
SMALL
오라클 설치 후, 데이터 Import까지 하여 잘 사용하고 있었으나, 문자열을 아스키코드로 변환하는 과정에서,
과거 오라클을 설치했을 때와 다른 아스키코드 값이 나와 확인해 보니,
Characterset이 다르게 설정되었다는 것을 알게 되었다.
Characterset을 변경하는 방법 및 변경 과정에서 ORA-12721 에러가 발생하였는데,
이 모든 것들의 해결법을 알아보도록 하자.
이 작업을 하기 전에 데이터 Backup을 받아 놓도록 하자.
(Characterset을 바꾸면 이미 저장되어 있는 한글 데이터는 깨질 수 있다.)

 

■ 쿼리를 통하여 아스키 값 확인

-- 아래 쿼리 실행을 통하여, 과거 설치된 버전과 현재 설치된 버전 아스키 값 확인

select ascii('가나다')

 from dual

왼쪽: 과거 / 오른쪽: 현재

 

■ 아스키 값이 다르게 나오는 경우 먼저 Characterset을 확인

-- 아래 쿼리를 실행

select *

 from sys.props$

where name in ('NLS_NCHAR_CHARACTERSET', 'NLS_CHARACTERSET')

 

-- 실행 결과

-- 이전에 설치했던 Characterset 확인

-- NLS_CHARACTERSET이 다르다.

 

■ Characterset 변경

1. 명령 프롬프트(cmd) 창 실행하여 아래 구문을 차례대로 실행한다.

2. sqlplus / as sysdba

3. update props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET';

4. commit;

5. Characterset을 다시 확인하면, 아래 이미지와 바뀐 것을 볼 수 있다.

6. 아스키 값을 확인했던 쿼리를 다시 실행해 보면 아직 바뀌지 않은 것을 볼 수 있다. 서비스로 들어가서 아래 표시된 부분을 재시작한다.

    (sqlplus에서 shutdown immediate; startup;으로도 가능)

    그러면 아스키 값이 변경된 것을 확인할 수 있다.

7. 이후, 문제는 SQL편집 툴에서 테이블 목록을 열면 아래와 같은 메시지가 발생한다.

    ORA-06552: PL/SQL: Compilation unit analysis terminated

    ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다

8. 아래 쿼리를 실행하여 몇 가지를 확인해 보자.

-- 아래 쿼리를 실행

select distinct

           nls_charset_name(charsetid) characterset,

           decode(type#, 1, decode(charsetform, 1, 'varchar2',

                                                                           2, 'nvarchar2',

                                                                           'unknown'),

                                    9, decode(charsetform, 1, 'varchar',

                                                                            2, 'nchar varying',

                                                                           'unknown'),

                                    96, decode(charsetform, 1, 'char',

                                                                              2, 'nchar',

                                                                             'unknown'),

                                    112, decode(charsetform, 1, 'clob',

                                                                                2, 'nclob',

                                                                               'unknown')

                       ) types_used_in

  from sys.col$

where charsetform in (1, 2) and type# in (1, 9, 96, 112)

order by characterset

 

-- 실행 결과 (이쪽에는 Characterset이 바뀌지 않았음)

 

■ ORA-06552, ORA-06553 해결방법

1. sqlplus로 접속하여, 아래 순서대로 실행한다.

2. shutdown immediate;

3. startup mount;

4. ALTER SYSTEM ENABLE RESTRICTED SESSION;

5. ALTER SYSTEM SET AQ_TM_PROCESSES = 0;

6. ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;

7. ALTER DATABASE OPEN;

8. col value new_value charset

9. SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

10. ALTER DATABASE CHARACTER SET INTERNAL_USE & CHARSET;

11. shutdown immediate;

12. startup;

13. 여기까지 작업을 진행하면 에러를 해결할 수 있다.

 

※ 10번에서 [ORA-12721 다른 세션이 활성일 때는 실행할 수 없는 작업] 에러가 나오는 경우 해결책

  - 명령 프롬프트를 관리자 권한으로 실행하여 다시 진행한다. (여기까지만 해서 해결됨)

  - 그래도 안 되는 경우 shutdown immediate; startup; 진행 후, 다시 명령 프롬프트를 관리자 권한으로 실행하여 다시 진행해 본다.

 

■ 마지막으로 데이터 확인

1. Characterset을 변경하기 전 한글 데이터가 이미 존재하는 경우, 한글이 깨지는지 확인한다.

2. 한글이 깨지면, Import를 다시 한다. (이 방법 말고, 해결책이 있으면 댓글 달아주세요.)

728x90
반응형
LIST
728x90
반응형
SMALL

■ Windows Server 2016 FTP 서버 만들기 전 확인해야 할 사항

1. IIS가 먼저 설치되어 있는지 확인한다.

  - IIS 설치 방법 확인

2. IIS설치 후, FTP 서버가 설치되어 있는지 확인한다. (FTP 서버 설치방법은 아래 대분류 확인)

3. 로컬 사용자를 만든다. (아래 링크는 Windows 10 Home에서 로컬 사용자 만드는 방법이지만, 거의 비슷하므로 참고)

  - 로컬 사용자 만들기 참고

■ IIS설치 후, FTP 서버 설치 방법

1. [시작 - Server Manager]를 클릭한다.

2. [IIS - Manage - Add Roles and Features]를 클릭한다.

3. 이미지 순서대로 진행한다. (Confirmation, Results는 Next만 하면 되므로 생략)

■ Windows Server 2016 FTP 서버 만들기

1. [시작 - Server Manager]를 클릭한다.

2. [IIS - Tools - Internet Information Services (IIS) Manager]를 클릭한다.

3. Sites에서 마우스 우클릭 후, Add FTP Site... 를 클릭한다. (Add FTP Site 메뉴가 안 보이면 상단의 [IIS설치 후, FTP 서버 설치 방법] 참고)

4. FTP site name을 입력하고, 업로드/다운로드할 경로를 지정한다.

5. 각각의 정보를 입력한다. IP Address는 대부분 그대로 두고, Port는 원하는 Port로 지정한다. SSL은 No SSL로 변경한다.

6. Authentication은 Basic, Authorization은 Specified users(지정한 사용자)로 변경한다.

    Specified users는 앞서 만든 로컬 사용자를 지정한다. ([Windows Server 2016 FTP 서버 만들기 전 확인해야 할 사항][3번] 참고)

    마지막으로 Permissions은 Read, Write를 체크하고, Finish 버튼을 클릭한다.

7. Sites안에 test라는 FTP가 만들어진 것을 확인할 수 있다.

8. 시작 - Windows Firewall with Advanced Security를 클릭하여 FTP서버 방화벽을 설정한다.

9. Inbound Rules에서 우클릭 후, New Rule를 클릭한다.

10. Predefined에서 FTP Server를 선택한다.

11. 아래 이미지에서 나타나는 FTP관련된 3가지 항목을 체크한다.

12. Allow the connection을 선택하고, Finish버튼을 누른다.

13. Outbound Rules에서 우클릭 후, New Rule를 클릭한다.

14. Predefined에서 FTP Server를 선택한다.

15. 아래 이미지에서 나타나는 FTP관련된 2가지 항목을 체크한다.

16. Allow the connection을 선택하고, Finish버튼을 누른다.

17. Windows 탐색기를 열고, FTP가 접속되는지 확인한다. (ftp://ip:port 입력 후 Enter)

18. 아래와 같은 화면이 뜨면 User name, Password를 입력하고, Log On 한다.

19. 지정된 폴더로 이동되면 FTP 서버 설치가 완료된 것이다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ Windows에서 telnet 활성화 방법

1. 윈도우 [시작 - 제어판]으로 들어간다.

2. 제어판 창에서 [프로그램]을 클릭한다.

3. 프로그램 및 기능 - [Windows 기능 켜기/끄기]를 클릭한다.

4. 스크롤 하단으로 내려가서, [텔넷 클라이언트]를 클릭한다.

5. 텔넷이 설치되는 창과 함께 완료되면 아래 이미지와 같이 나타난다.

6. 명령 프롬프트 창으로 통하여 telnet이 실행되는지 확인한다.

■ telnet를 사용하는 이유

1. telnet은 텍스트 기반의 프로토콜로 간단한 텍스트 통신에 사용된다. 특히 특정 서비스나 서버에 텍스트 명령을 보내고 응답을 받는 것이 목적일 때 활용될 수 있다.

2. 특정 호스트와 포트 간의 접속을 테스트할 때 사용될 수 있다. telnet을 사용하여 특정 포트에 연결을 시도하고, 연결이 성공하면 해당 포트에 서비스가 정상적으로 동작하는지

    확인할 수 있다.

3. telnet을 사용하여 원격 호스트에 로그인하여 명령을 실행할 수 있다. 그러나 보안상의 이유로, 비밀번호 등 민감한 정보를 포함한 통신을 할 때는

    보안적인 위험을 고려해야 한다.

4. 네트워크 문제를 해결하거나 진단할 때, telnet을 사용하여 호스트 간의 연결을 확인하거나 서비스와의 통신을 테스트하는 데 유용할 수 있다.

 

※ 결론 - telnet은 과거에 주로 사용되었지만, 현대에는 일부 상황에서만 사용되거나 보안적인 이유로 피하는 것이 권장된다.

 

 

728x90
반응형
LIST
728x90
반응형
SMALL
Windows Server 2016에 DB를 세팅하고 Ping 테스트를 진행하였으나,
Ping 테스트가 안 되는 현상이 발생하였다.
DB 접속에는 문제가 되지 않았으나, 단지 Ping 테스트가 안 되는 경우, 해결책을 알아보도록 하자.
또한, Ping 테스트가 안되게 설정하는 이유도 알아보도록 하자.
(환경 : Windows Server 2016)

 

■ Windows Ping 테스트 안될 때 해결 방법

1. Client에서 DB 서버로 Ping을 날려 보았으나, Ping이 날라가지 않았다. (모자이크 부분은 IP 주소)

Ping 테스트 실패

2. 시작 - 검색어에 con을 입력하면, Control Panel이 나오는 것을 볼 수 있다. Control Panel을 클릭한다.

3. Windows 방화벽을 클릭한다.

4. 고급 설정을 클릭한다.

5. 인바운드 규칙을 클릭하면 하단에 파일 및 프린터 공유(에코 요청 - ICMPv4-In)에서 우클릭 후, 규칙 사용을 클릭한다.

6. 1번과 동일한 방법으로 다시 Ping을 날려보면, 아래 이미지와 같이 Ping이 정상적으로 테스트되는 것을 볼 수 있다.

Ping 테스트 성공

■ Windows Ping 테스트를 안되게 설정하는 이유

1. 외부에서의 트래픽을 최소화하고 보안을 강화하기 위해 ping 응답을 차단한다. 이는 외부 공격이나 스캐닝 시도로부터 시스템을 보호하기 위하여 사용한다.

2. ping 테스트는 대상 호스트에서 일부 리소스를 사용할 수 있다. 트래픽이 과도하게 발생하는 경우 이를 방지하기 위해 ping을 차단하는 것이 일반적이다.

3. 결론적으로 네트워크와 시스템 보안을 강화하거나 관리 목적으로 테스트를 안되게 설정하는 것이다.

728x90
반응형
LIST
728x90
반응형
SMALL
lusrmgr.exe
1.02MB
Windows10 Home 버전에서 사용자 및 그룹을 설정하려고 하는데 메뉴에 보이지 않았다.
Home 버전에서는 이 메뉴가 없다고 한다.
그렇지만 다른 방법으로 설정하는 방법이 있다.
그 방법을 알아보도록 하자.

 

■ Windows10 Home 로컬 사용자 및 그룹 설정하는 방법

1. 내 PC - 마우스 우클릭 - 관리 메뉴로 들어간다.

2. Windows10 Pro와 달리 Home에서는 [컴퓨터 관리(로컬) - 시스템 도구 - 사용자 및 그룹]이라는 메뉴가 없다.

3. Windows10 Home에서 사용자 및 그룹을 사용하려면 첨부된 파일을 다운로드한다.

4. lusrmgr.exe 파일을 실행한다. (제대로 작동 안 하면 관리자 권한으로 실행한다.)

5. 실행하면 아래 이미지와 같이 프로그램이 실행된다. Users 및 Groups - 마우스 우클릭 하여 동일하게 사용할 수 있다.

6. User cannot change password(사용자가 암호를 변경할 수 없음), Password never expires(암호 사용 기간 제한 없음)를 체크하고, 사용자를 생성한다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ Windows Server 2016 IIS 설치 방법

1. 시작 - Server Manager를 검색하여 클릭한다.

2. 관리 - 역할 및 기능추가를 클릭한다.

3. 이미지 순서대로 설치를 진행한다. (경우에 따라 6번의 .Net Framework 3.5 기능은 설치가 안 되는 경우도 있다.)

4. IIS가 설치된 이후 웹페이지에서 localhost를 입력하면 아래와 같이 설치된 것을 볼 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ DBeaver 인증 에러

1. DBeaver 설치 후 오라클 서버에 접속을 하려고 하니 다음과 같은 에러가 발생하였다.

Network unavailable due to a certificate issue.

 

Try changing the setting `Use Windows trust store` in Preferences->Connections and restart DBeaver. It might help if you haven't overridden the trust store.

javax.net.ssl.SSLHandshakeException:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

2. 번역내용

인증서 문제로 인해 네트워크를 사용할 수 없습니다.

 

환경설정->연결에서 'Windows trust store 사용' 설정을 변경하고 DBeaver를 다시 시작해 보십시오. 신뢰 store를 무시하지 않았다면 도움이 될 수 있습니다.

javax.net .ssl.SSLHandshakeException:PKIX 경로 빌드 실패: sun.security.provider.certpath.SunCertPathBuilderException:요청한 대상에 대한 유효한 인증 경로를 찾을 수 없음

 

■ 해결책

1. 위의 에러 내용을 자세히 보면 해결책이 나와 있다.

2. [윈도우 - 설정 - 연결]로 들어가서 Security의 Use Windows trust store 체크를 해제한다.

3. 적용 후 DBeaver를 재실행한다. 그러면 오라클 서버에 잘 접속되는 것을 확인할 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
오라클 서버로 붙지 못하여, 이런저런 작업을 하면서 shutdown immediate, startup을 반복하는 중
아래와 같은 에러메시지를 만났다.
해결책은 의외로 간단했다.

■ shutdown immediate 에러

1. 윈도우 서비스에서 재시작이 되지 않아 sqlplus를 접속하여 shutdown immediate을 시켜봤는데 다음과 같은 에러가 발생하였다.

   - sqlplus / as sysdba로 접속

   - shutdown immediate

 

2. cmd창을 닫고 재실행 후 sqlplus 재접속, shudown immediate를 실행하면 정상적으로 실행된다.

    원인은 데이터베이스가 정상적으로 종료되었을 때 발생되는 문제라고 한다.

728x90
반응형
LIST
728x90
반응형
SMALL
오라클 서버를 설치하고, DBeaver를 통하여 서버에 접속을 시도하는 중
ORA-12514: 데이터베이스에 접속할 수 없습니다. 서비스가 리스너에 등록되지 않았습니다.
라는 메시지와 함께 접속되지 않았다.
해결책을 알아보도록 하자.

 

■ 접속에러

- 오라클을 설치하고 설치할 때의 정보를 아래와 같이 입력하였다. Test Connection을 누르니 아래와 같은 메시지가 발생하였다.

 

■ 해결책

1. 오라클을 설치한 경로로 이동한다. 설치 경로에 따라 다르겠지만 기본으로 설치된 경로는 아래 경로와 비슷한 형태일 것이다.

    (C:\app\belli\virtual\product\12.2.0\dbhome_1\network\admin)

2. 위와 같은 경로로 들어가서 listener.ora 파일을 클릭한다.

3. SID_LIST_LISTENER 하단 빨간색 박스에 오라클 서버를 설치할 때의 Database 이름을 적어 넣고 저장한다.

listener 파일 내용

4. 혹시 설치할 때의 Database의 이름이 무엇인지 모르면 아래의 이미지를 보고 설치할 때의 기억을 되살려야 한다.

서버설치할때의 Database이름

5. 저장하였으면 다시 접속을 시도해 본다.

6. 접속이 되지 않으면 서비스에 가서 오라클 리스너를 재실행해본다. 그러면 접속되는 것을 볼 수 있을 것이다.

    (혹시라도 접속이 안 되는 경우 아래 OracleService부터 재실행해보자.)

728x90
반응형
LIST
728x90
반응형
SMALL

■ WSL2 Docker에 Postgresql 설치

1. PowerShell을 실행한다.

2. 아래 명령어를 입력하고 Enter를 누르면 이미지가 만들어진다.

postgresql docker 이미지 생성

(참고)

  □ --name : docker에 등록할 이름

  □ -e : POSTGRES_USER는 사용자 설정(POSTGRES_USER 설정 안 하면 기본 값은 postgres), POSTGRES_PASSWORD는 비번 설정

  □ -d : Background에서 수행

  □ -p : 서비스 포트 지정, xxxx에 넣는 것으로 지정됨(xxxx:5432)

3. docker ps -a 명령어를 입력하여 이미지가 잘 만들어졌는지, 잘 실행되고 있는지 확인한다.

docker 이미지 생성 및 상태 확인

3. postgresql에 접속하여 database를 생성한다.

database 생성

4. \l 명령어로 database가 생성되었는지 확인한다.

database 생성 확인

■ DBeaver 접속

1. DBeaver 프로그램을 실행한다.

2. 아래 이미지와 같이 왼쪽 상단에 새 데이터베이스 연결 클릭 - PostgreSQL 클릭 - 다음을 누른다.

DBeaver 접속 순서

2. Database, Username, Password를 넣고 왼쪽 하단 Test Connection... 을 클릭하면 성공하였다는 메시지가 나온다.

DBeaver Test Connection 성공

728x90
반응형
LIST
728x90
반응형
SMALL

1 컨테이너(Container)

  - 도커의 핵심 개념 중 하나로, 애플리케이션과 그 종속성을 격리된 환경에서 실행하는 단위다.

  - 호스트 시스템의 리소스와 격리되어 있어 다른 컨테이너나 호스트 시스템에 영향을 주거나 받지 않는다.

  - 각 컨테이너는 독립적인 파일 시스템, 네트워크 스택 및 프로세스 공간을 가진다.

  - 컨테이너는 가상 머신보다 가볍다.

  - 컨테이너를 개발한 환경에서 다른 환경으로 쉽게 배포할 수 있다.

  - Docker Hub와 같은 레지스트리, Docker Compose와 같은 도구, Kubernetes와 같은 오케스트레이션 시스템과 통합되어 있어,

    컨테이너 관리 및 배포를 더욱 효과적으로 수행할 수 있다.

 

2. 이미지(Image)

  - 컨테이너를 생성하는 템플릿으로, 애플리케이션 및 종속성의 스냅샷이다.

  - 이미지는 읽기 전용이며 변경할 수 없다. 변경하려면 새로운 이미지를 생성해야 한다.

  - 도커 이미지는 Docker Hub와 같은 레지스트리에 저장되며, 이미지를 기반으로 컨테이너를 생성한다.

  - 여러 애플리케이션에 공통적으로 필요한 라이브러리나 도구를 이미지로 만들어 재사용할 수 있다.

 

3. 도커 레지스트리(Docker Registry)

  - 도커 이미지를 저장하고 공유하는 중앙화된 저장소이다.

  - Docker Hub는 가장 널리 사용되는 도커 레지스트리 중 하나이지만, 개인 또는 조직 내부에 자체 레지스트리를 구축할 수도 있다.

    (Amazon Elastic Container Registry (ECR), Google Container Registry (GCR), Azure Container Registry (ACR))

 

4. 도커 컴포즈(Docker Compose)

  - 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구이다.

    컴포즈 파일(YAML 형식)을 사용하여 애플리케이션의 서비스와 설정을 정의하고, 한 번에 여러 컨테이너를 실행, 관리할 수 있다.

 

5. 도커 파일(Dockerfile)

  - 도커 이미지를 생성하기 위한 빌드 지침을 포함하는 텍스트 파일이다.

   도커 파일을 사용하여 이미지를 빌드하면 애플리케이션과 종속성이 이미지로 패키지 된다.

 

6. 도커 컨테이너 관리

  - 도커 명령을 사용하여 컨테이너를 생성, 시작, 중지, 삭제 및 모니터링할 수 있다. 컨테이너의 로그를 확인하거나 실행 중인 컨테이너에 명령을

    실행하는 등 다양한 관리 작업을 수행할 수 있다.

 

7. 도커 네트워크(Docker Networking)

  - 기본적으로 Default Bridge Network에 연결된다. 이 모드에서 컨테이너는 호스트 시스템과 연결되어 외부와 통신할 수 있다.

    또한 컨테이너 간 통신도 지원하며, 내부 IP 주소로 서로 통신할 수 있다.

  - Host Network로 실행하면 컨테이너는 호스트 시스템의 네트워크 스택에 직접 연결된다.

    이로써 컨테이너는 호스트와 동일한 네트워크 환경에서 실행되므로 호스트 포트를 사용할 수 있다.

  - Bridge Network로 실행하면 컨테이너 간 통신을 지원하는 독립적인 가상 네트워크를 생성한다. 컨테이너는 동일한 네트워크에 연결하고,

    내부 IP 주소로 서로 통신할 수 있다. 이 모드는 다수의 컨테이너를 실행하는 경우 유용하다.

  - host None Network로 실행하면 네트워크 연결을 완전히 비활성화하는 모드로, 컨테이너가 외부와 통신하지 않도록 한다.

  - Custom Bridge Network로 실행하면 컨테이너 간 통신을 제어하고 격리 수준을 조절할 수 있다.

    또한 다양한 컨테이너 그룹을 독립적으로 관리할 수 있다.

  - Overlay Network는 여러 호스트에서 컨테이너를 실행하는 경우 사용되며, 컨테이너 간에 안전한 암호화된 통신을 제공한다.

    이 모드는 도커 스웜과 같은 오케스트레이션 도구와 함께 사용된다.

 

8. 도커 볼륨(Docker Volume)

  - 호스트 시스템 또는 클라우드 스토리지와 연결되어 컨테이너 내부의 데이터를 영구적으로 보존한다.

    이로써 컨테이너를 중지하거나 삭제해도 데이터가 유지된다.

  - 여러 컨테이너 간에 데이터를 공유하고 복제할 수 있다.

  - 동일한 볼륨을 여러 컨테이너에 연결하여 데이터를 공유하거나 백업을 수행할 수 있다.

  - docker volume create 명령어를 사용하여 도커 볼륨을 생성하고, docker volume ls 명령어를 사용하여 볼륨 목록을 확인할 수 있다.

  - -v 또는 --volume 플래그를 사용하여 컨테이너에 볼륨을 연결할 수 있다. 이렇게 하면 컨테이너 내부에서 볼륨을 사용할 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL

1. debootstrap

  - Debian 기반 리눅스 시스템을 설치하고 구성하기 위한 도구이다. 주로 Debian 및 Debian 계열 배포판 (예: Ubuntu)에서 사용된다.

    Debootstrap를 사용하면 최소한의 시스템 파일 및 패키지를 포함하는 Debian 루트 파일 시스템을 생성하고,

    이를 사용하여 사용자 정의 된 시스템을 구축할 수 있다.

 

2. upstart

  - 초기화 및 서비스 관리를 위한 리눅스 시스템 초기화 시스템이다.

    이전에 init 시스템이나 sysvinit 시스템과 호환성을 가지며, 더욱 빠르고 효율적인 부팅 및 서비스 관리를 제공하기 위해 개발되었다.

    Upstart은 Ubuntu와 같은 일부 리눅스 배포판에서 기본 초기화 시스템으로 사용되었다.

 

3. nginx

  - 오픈 소스 웹 서버 및 리버스 프록시 서버 소프트웨어로, 웹 애플리케이션을 제공하고 관리하는 데 사용된다.

    Nginx는 빠르고 가벼우며 확장 가능하며, 대규모 웹 사이트 및 애플리케이션을 위한 고성능 웹 서버로 널리 사용된다.

    또한 Nginx는 부하 분산, SSL/TLS 종단 간 암호화, 캐싱, 로드 밸런싱, 보안 및 웹 애플리케이션 방화벽과 같은 고급 기능을 제공한다.

 

4. squid

  - 오픈 소스로 개발된 프록시 서버 소프트웨어로, 네트워크에서 웹 콘텐츠를 캐싱하고 필터링하는 데 사용된다.

    Squid는 대부분의 운영 체제에서 동작하며, 네트워크의 트래픽을 줄이고 사용자 경험을 향상시키는 데 도움을 준다.

 

5. cortex

  - 오픈 소스로 개발된 시계열 데이터 처리 및 분석 플랫폼이다.

    Cortex는 PromQL 쿼리 언어와 호환되며, Prometheus와 통합하여 대규모 시계열 데이터를 수집, 저장, 검색 및 시각화하는 데 사용된다.

    Cortex는 효율적인 확장성, 고성능, 그리고 신뢰성을 제공하여 대규모 시계열 데이터의 처리를 지원한다.

 

6. apache2

  - Apache HTTP Server, 더 알려진 이름으로 Apache는 가장 널리 사용되는 오픈 소스 웹 서버 소프트웨어 중 하나이다.

    Apache는 다양한 운영 체제에서 동작하며, 정적 및 동적 웹 페이지를 서비스하는 데 사용된다.

    또한 Apache는 모듈 아키텍처를 통해 다양한 기능을 확장할 수 있어 많은 웹 개발자와 시스템 관리자에게 인기가 있다.

 

7. kafka

  - Apache Kafka는 분산 스트리밍 플랫폼으로, 대용량 실시간 데이터 스트림을 처리하고 저장하는 데 사용되는 오픈 소스 소프트웨어다.

    Kafka는 이벤트 스트리밍 아키텍처(ESA)의 핵심 요소로 사용되며, 대부분의 시스템에서 로그 및 이벤트 데이터를 신뢰성 있게 수집,

    전송 및 처리하는 데 사용된다.

 

8. mysql

  - 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터베이스를 생성, 관리, 및 쿼리 하기 위한 소프트웨어다.

    MySQL은 많은 웹 응용 프로그램, 비즈니스 애플리케이션, 데이터 웨어하우스, 온라인 서비스 등 다양한 응용 분야에서 널리 사용되고 있으며,

    빠른 성능, 안정성, 확장 가능성을 제공한다.

 

9. bind9

  - 오픈 소스로 개발된 DNS(Domain Name System) 서버 소프트웨어다.

    DNS는 인터넷에서 도메인 이름과 IP 주소를 연결하고, 네트워크에서 호스트 및 서비스를 검색하는 데 사용되는 핵심 인프라 서비스다.

    BIND9는 DNS 쿼리에 대한 응답을 생성하고 DNS 데이터를 저장하고 유지 관리하는 서버 역할을 수행한다.

 

10. zookeeper

  - 분산 응용 프로그램 및 서비스의 조정, 구성 관리, 네임스페이스 및 실시간 모니터링을 위한 분산 서비스이다.

    주로 대규모 분산 시스템의 일관성과 동기화를 달성하기 위해 사용된다.

    ZooKeeper는 Apache 소프트웨어 재단에서 개발 및 관리하며, 오픈 소스로 제공된다.

 

11. prometheus

  - 오픈 소스 시스템 및 응용 프로그램 모니터링 및 경고 도구다. 이는 기본적으로 컨테이너화된 환경 및 분산 시스템에서 사용하기에 적합하며,

    대규모 환경에서 실시간으로 시스템 및 애플리케이션의 상태를 모니터링하고 경고를 생성하는 데 사용된다.

 

12. postgres

  - 오픈 소스 객체 관계형 데이터베이스 관리 시스템(RDBMS)이다.

    PostgreSQL은 신뢰성 높은 데이터베이스 관리, 고급 기능, 확장 가능성 및 데이터 무결성을 제공하며, 무료로 사용할 수 있는 소프트웨어다.

    많은 기업 및 개발자 커뮤니티에서 널리 사용되며, 대규모 웹 애플리케이션, 비즈니스 시스템, 데이터 웨어하우스 등 다양한 응용 분야에서

    활용된다.

 

13. redis

  - Remote Dictionary Server의 약자로 오픈 소스인 메모리 데이터 스토어다. 키-값 쌍을 저장하고 검색하는 데 사용된다.

    Redis는 고성능 및 대용량 데이터를 처리하기 위해 설계되었으며, 다양한 응용 프로그램에서 캐싱, 세션 관리, 메시지 브로커 및 데이터베이스로

    사용된다.

 

14. grafana

  - 오픈 소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스로부터 데이터를 가져와 시각적으로 표현하고 모니터링하는 데 사용된다.

    Grafana는 다양한 시각화 패널 및 대시보드를 제공하여 데이터를 실시간으로 모니터링하고 분석하는 데 도움을 준다.

 

15. memcached

  - 분산 메모리 캐싱 시스템으로, 데이터베이스, API 호출 또는 기타 데이터 소스에서 가져온 데이터를 메모리에 캐시 하여 빠르게 액세스 할 수

    있도록 하는 역할을 한다.

    Memcached는 오픈 소스이며, 빠른 데이터 조회와 검색 성능을 필요로 하는 웹 애플리케이션 및 분산 시스템에서 많이 사용된다.

 

16. dotnet-aspnet

  - ASP.NET은 .NET을 사용하여 최신 웹 앱 및 서비스를 구축하기 위해 Microsoft에서 만든 오픈 소스 웹 프레임워크다.

 

17. dotnet-deps

  - 종속성을 검사하고 업데이트한다.

 

18. prometheus-alertmanager

  - Prometheus 모니터링 시스템과 함께 사용되는 알림 관리 도구다.

    Prometheus는 시스템 및 애플리케이션 모니터링을 위한 오픈 소스 도구로, 서버 및 애플리케이션의 상태를 주기적으로 스크랩하고 이벤트에

    대한 경고 및 알림을 생성한다.

    Alertmanager는 이러한 경고 및 알림을 수신하고 관리하며, 사용자에게 경고를 전달하고 필요한 조치를 취할 수 있도록 도와준다.

 

19. dotnet-runtime

  - Microsoft에서 개발한 .NET 프레임워크의 일부다.

    .NET 프레임워크는 다양한 프로그래밍 언어를 지원하고, Windows 운영 체제에서 실행되는 애플리케이션 개발을 위한 플랫폼으로 사용된다.

    .NET Runtime은 .NET 애플리케이션을 실행하기 위한 런타임 환경을 제공한다.

 

20. cassandra

  - 분산형 NoSQL 데이터베이스 시스템의 하나로, 대량의 데이터를 고성능으로 저장하고 관리할 수 있는 오픈 소스 솔루션이다.

    아파치 소프트웨어 재단(Apache Software Foundation)에서 개발하고 유지보수하며, 빅데이터 및 대규모 웹 애플리케이션에서 많이 사용된다.

 

21. jre

  - Java 프로그램을 실행하기 위한 환경을 제공하는 소프트웨어다.

    JRE는 Java 언어로 작성된 애플리케이션 및 애플릿(웹 페이지에서 실행되는 작은 Java 프로그램)을 실행하는 데

    필요한 모든 런타임 컴포넌트와 라이브러리를 포함하고 있다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ Docker 설치

1. Docker 공식 홈페이지로 접속 : https://www.docker.com/

2. 홈페이지에서 오른쪽 위 Get Started를 클릭한다.

Docker 공식 홈페이지

3. Download for Windows를 클릭한다. 화살표 버튼을 누르면 os별로 다운받을 수 있다.

Docker Window 버전 다운

4. 다운로드가 완료되면 아래와 같은 파일이 생성된다.

5. 다운로드된 파일을 더블클릭하여 설치를 시작한다.

6. 아래 2개 항목을 체크하고 Ok를 클릭한다.

  - Use WSL 2 instead of Hyper-V (recommended) : Hyper-V 대신 WSL 2 사용(권장)

  - Add shortcut to desktop : 바탕 화면에 바로 가기 추가

7. 설치가 시작되고, 완료되면 Close and log out 버튼을 클릭한다. 재부팅이 되므로 주의한다.

■ Docker 설치 확인

1. 재부팅이 완료되고 아래 이미지가 뜨면, Accept를 클릭한다.

2. 오른쪽 밑 시계 옆에 Docker가 실행 중인 것을 볼 수 있다.

3. Docker를 실행하여, 설정 버튼 - Resources - WSL integration - Enable integration with my default WSL distro 체크하고,

    하단에는 설치된 배포판 버전을 활성화시킨다.

4. PowerShell을 실행하여, docker -v 또는 docker verion을 입력하여 설치가 잘 되었는지 확인한다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ WSL이란 무엇인가?

1. Windows Subsystem for Linux의 약자로 Microsoft Windows 운영 체제에서 Linux 환경을 실행할 수 있게 해준다.

2. WSL의 두 가지 버전 : WSL1, WSL2

  - WSL1 : Windows 커널과 Linux 커널 간에 가교 역할을 하는 하이퍼바이저 기술을 사용한다. 이 버전은 Linux 바이너리를 Windows에서

                 직접 실행하도록 지원하지만 파일 시스템 성능이 덜 우수하다는 단점이 있다.

  - WSL2 : Linux 커널을 Windows 시스템 위에 가상 머신 형태로 실행하는 방식이다.

                 이로 인해 파일 시스템 성능과 호환성이 향상되었으며, Docker와 같은 컨테이너 기술을 더 효율적으로 지원한다.

                 Windows10, 버전 1903, 빌드 18362 이상에서만 사용 가능하다.

3. WSL은 무료로 사용할 수 있으며, Microsoft Store에서 Linux 배포판 (예: Ubuntu, Debian)을 다운로드하여 설치할 수 있다.

 

참고) 윈도우 버전 확인 : 실행창(Ctrl + R) 입력 후, winver 입력

윈도우 버전 확인

 

■ WSL설치 방법

1. 먼저 Linux용 Windows 하위 시스템 기능이 켜져 있는지 확인한다.

    윈도우 시작에서 Windows 기능 켜기/끄기로 들어가서 확인할 수 있다.

Linux용 Windows 하위 시스템 체크 확인

2. 윈도우에서 Windows PowerShell 입력 후 관리자로 실행한다.

powershell 실행

3. Windows PowerShell에서 wsl --install를 입력 후 엔터를 누른다.

    설치 중을 보면, 리눅스 배포판 중에 Ubuntu가 설치되는 것을 볼 수 있다.

    아래와 같이 설치가 되면 기본 버전을 wsl --set-default-version 2를 입력하여 변경한다.

    이후 재부팅을 한다. 

wsl install 및 version 변경

4. 재부팅을 하면 아래 이미지와 같이 Linux용 Windows 하위 시스템 창이 뜬다.

    username, password를 설정한다. 사용자 이름은 Windows 사용자 이름과 일치할 필요는 없다.

username, password 설정 화면

5. username, password 설정이 완료되면 아래 이미지와 같이 나타난다.

username, password 설정이 완료된 화면

6. 윈도우 시작 버튼을 누르면 최근 추가한 앱에 Linux용 Windows 하위 시스템 및 Ubuntu가 나타나는 걸 볼 수 있다.

 

7. 추가적으로 다른 배포판을 설치하고 싶으면, 윈도우 시작에서 Microsoft Store에 들어가서 설치할 수 있다.

    예) Ubuntu 22.04.2 LTS

728x90
반응형
LIST
728x90
반응형
SMALL
개발자라면, 개발 전 코딩 규칙에 대해서 들어봤을 것이다.
언어마다 각기 다른 코딩 규칙이 있다.
그렇지만 코딩 규칙을 지키지 않는다고 프로그램이 실행이 되지 않는 것은 아니다.
그렇지만 알고 안 쓰는 거랑 모르고 안 쓰는 거랑 다르기 때문에

Python에서는 어떤 코딩 규칙으로 코딩하는지 알아보도록 하자!

 

■ Python 코딩 규칙 리스트

No 설명 예제
1 들여쓰기는 4개의 공백을 사용한다.
공백을 잘못 사용하면 인터프리터가 잘못된 해석을 할 수 있다.
test = 0

if test == 0:
    print(test)  # 4개의 공백
2 최대 라인길이는 79자로 제한한다. (문서 문자열/주석은 72자)  
3 배포판의 코드는 항상 UTF-8(Python 2에서는 ASCII)를 사용한다.  
4 삼중 따옴표로 묶인 문자열의 경우 항상 큰따옴표를 사용한다. """주석입니다.
2번째 줄 주석입니다.
"""
5 키워드 인수 또는 매개변수 값에는 = 기호 주위에 공백을 사용하지 않는다. def sample_function(param=None):
    (생략)....
6 함수 및 메서드 호출 시 한 줄에 하나씩 사용한다. func()
func1()
func2()
7 import는 한 줄에 하나의 모듈을 import 한다. import os
import sys
8 하나의 철자를 가진 변수명은 가능하면 피하도록 한다.
일부 글꼴에서는 구분이 안되는 문자들이 있을 수 있다.
a, b, c (X)
9 변수명, 함수명은 소문자를 사용하고 단어의 연결은 _를 사용한다. python_test
python_example
10 클래스명은 첫 글자는 대문자로 사용한다.
단어가 연결된 클래스 명은 각 단어의 첫 글자를 대문자로 사용한다.
PythonClass
11 상수명은 모두 대문자를 사용한다. MAX_NUMBER
12 인라인 주석은 자제해서 사용한다. 사용하게 되면 최소 2개의 공백, # 이후 공백하나를 준수한다. 1번 참고
13 == 를 사용하여 Bool 값을 비교하지 않는다. true_false = False

if not true_false:
    print(true_false)
14 객체 유형 비교에서는 유형을 직접 비교하는 대신 isinstance를 사용하여 비교한다. aa: int = 1

if isinstance(aa, int):
    print(True)
15 None을 is를 사용하여 비교할 때에는, not을 먼저 쓰지 않는다. aa = None

if aa is not None  # (O)
if not aa is None  # (X)
16 람다 식을 식별자에 직접 바인딩하는 할당 문 대신 def문을 사용한다. def f(x):
    return 2*x  # (O)

f = lambda x: 2*x  # (X)

(참고) Python에서 권장하는 코딩 규칙을 더 알아보고 싶으면 아래 링크를 참고하자.

https://legacy.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

728x90
반응형
LIST
728x90
반응형
SMALL
Python에서 사용되는 예약어를 알아보고,
어떻게 사용되는지 예문을 통해서 확인해 보자!

 

■ 예약어 리스트

No 예약어 설명 예문 결과값
1 and 조건 A와 조건 B가 모두 참이면 True,
그렇지 않으면 False
a = 100
b = 200

if a > 10 and b > 10:

    print("True")
else:
    print("False")
True
2 as 모듈명에 별칭을 부여할 때 사용(18번 참고) import 모듈1 as rush

rush.함수
rush.클래스
 
3 assert 디버깅을 위한 용도로 사용 test_false = [1, 2, 3, "오류", 5]
test_true = [1, 2, 3, 4, 5]


print("test_true : 시작")
for i in test_true:
    assert type(i) is int, '문자'
print("test_true : 끝")

print("test_false : 시작")
for i in test_false:
    assert type(i) is int, '문자'
print("test_false : 끝")
assert type(i) is int, '문자'
AssertionError: 문자
test_true : 시작
test_true : 끝
test_false: 시작

4 break 반복문을 중지할 때 사용 test = [1, 2, 3, 4, 5]

for i in test:
    if i == 3:
        break
    else:
        print(i)
1
2
5 class 사용자 정의 클래스를 만들 때 사용    
6 continue 새로운 반복 단계를 시작할 때 사용 test = [1, 2, 3, 4, 5]

for i in test:
    if i == 3:
        continue
    else:
        print(i)
1
2
4
5
7 def 사용자 정의 함수를 만들 때 사용    
8 del 객체를 삭제할 때 사용 test = [1, 2, 3, 4, 5]

del test[0]

print(test)
[2, 3, 4, 5]
9 elif else if의 줄임말 if 조건문:
    생략..
elif 조건문:
    생략..
else:
    생략..
 
10 else 조건문을 만들때 사용 9번 참고  
11 except 예외 상황이 발생했을 때 사용 test = [1, 2, 3, 4, 5]

try:
    print(test[4])
    print(test[5])
except:
    print("index 5 없음")
finally:
    print("finally")
5
index 5 없음
finally
12 exec 파이썬 코드를 동적으로 실행하기 위해 사용,
프로그램 사용중에 코드 생성이 가능함
   
13 finally 예외 처리에서 최종적으로 실행되는 부분 11번 참고  
14 for 반복문 3번 참고  
15 from 모듈에 특정 함수 및 변수 사용 from 모듈 import test

print(test())

모듈안에 test로 선언된 함수 바로 사용 가능
 
16 global 전역변수 선언할때 사용,
함수 안에서 사용할 때도 global이라는 이름을 명시
global gbl
gbl = "global"


def test():
    global gbl
    gbl = "test_global"

    return "test"


def test_1():
    return gbl


print(test())
print(test_1())
test
test_global
17 if 조건문을 만들때 사용 9번 참고  
18 import 모듈을 가져올 때 사용,
모듈안에 정의되어 있는 변수, 함수, 클래스 사용 가능
import 모듈1
import 모듈2, 모듈3

모듈1.함수
모듈2.클래스
 
19 in 값이 컨테이너 데이터에 포함되는지를
확인할 때 사용
test = [1, 2, 3, 4, 5]

if 6 in test:
    pass
else:
    print("값 없음")
값 없음
20 is 객체의 동일성을 확인할때 사용 3번 참고  
21 lambda 람다 함수를 만드는데 사용 func = lambda x: x + 10
print(func(2))
12
22 not not을 사용하면 조건을 반대로 해석 a = 100
b = 200

if not (a > 10 and b > 10):

    print("True")
else:
    print("False")
False
23 or 조건 A, 조건 B 둘중에 하나가 참이면 True,
그렇지 않으면 False
a = 100
b = 200

if a > 200 or b > 10:

    print("True")
else:
    print("False")
True
24 pass 특별한 행위가 없을 때 사용 19번 참고  
25 print 화면에 출력을 할 때 사용    
26 raise 사용자 정의 예외를 발생시킬 때 사용 test = [1, 2, 3 ,4, 5]

def raise_event():
    print("raise_event")

try:
    print(test[6])
except:
    raise raise_event()
TypeError: exceptions.....(생략)
raise_event
27 return 함수의 반환값을 전달하는데 사용 16번 참고  
28 try 예외 처리를 명시하기 위해 사용 11번 참고  
29 while 반복문 a = 1

while a <=3:
    print(a)
    a = a + 1
1
2
3
30 with 클래스 호출할 때 사용,
with문을 사용하면 with문 안에서만 클래스 사용이 가능,
with문이 끝나면 자동으로 클래스가 닫힘
with 클래스명 as cls:
    cls.함수명1
    cls.함수명2
 
31 yield 제네레이터를 만들기 위해 사용    

(참고) Python에서 사용하는 예약어는 식별자 (변수명,  함수명,  클래스명, 모듈명)로 사용할 수 없다.

728x90
반응형
LIST
728x90
반응형
SMALL
Python을 공부하다 보면 인공지능과 매우 밀접한 관련이 있다는 것을 알 수 있다.
왜 인공지능은 Python으로 개발할까?
다른 언어로는 인공지능을 개발할 수는 없을까?
Python이 C/C++ 보다 느린데 인공지능에 많이 사용되는 이유와
Python으로 개발하지 않았을 때의 단점을 알아보자.

 

■ Python이 AI에 가장 많이 사용되는 이유

1. 다양한 AI 및 머신 러닝 라이브러리와 프레임워크를 지원한다.

    TensorFlow, PyTorch, scikit-learn, Keras, OpenCV 등 많은 인공지능 도구와 라이브러리가 Python으로 개발되었다.

    이러한 라이브러리를 활용하여 AI 모델을 구축하고 학습시킬 수 있다.

2. 문법이 간결하고 읽기 쉬워서 비전공자와 전문가 모두가 코드를 이해하고 작성하기 쉽다. 이는 AI 모델의 프로토타입 작업 및 실험에 매우 유용하다.

3. 데이터는 AI 및 머신 러닝 작업의 핵심이며, Python은 데이터 분석 및 시각화를 위한 라이브러리와 도구를 풍부하게 제공한다.

    Pandas, NumPy, Matplotlib, Seaborn과 같은 라이브러리를 사용하여 데이터를 처리하고 시각화할 수 있다.

4. 활발한 AI 및 머신 러닝 커뮤니티를 가지고 있으며, AI 연구 및 개발에 관한 다양한 자료, 튜토리얼, 라이브러리, 오픈 소스 프로젝트가 존재한다.

    이러한 커뮤니티는 지식 공유와 협력을 촉진한다.

5. 여러 운영 체제에서 동작하므로, 다양한 환경에서 AI 모델을 개발하고 배포할 수 있다.

6. 빠른 프로토타이핑에 적합하며, 아이디어를 빠르게 구현하고 실험할 수 있다.

7. 다양한 머신 러닝 및 딥 러닝 프레임워크를 지원한다. 이러한 프레임워크를 사용하여 복잡한 AI 모델을 구축하고 학습시킬 수 있다.

8. 다른 언어와 연동하기 쉽고, 사용자 정의 라이브러리와 모듈을 개발하여 기능을 확장하기 용이하다.

9. 하나의 명령어로 여러 프레임워크를 작업 공간에 설치할 수 있다.

10. 메모리를 대신 관리한다.

 

■ Python으로 개발하지 않았을 때의 단점

1. 메모리 관리를 직접 처리해야 하며, 이로 인해 메모리 누수 및 오류가 발생할 수 있다.

2. 풍부한 라이브러리와 프레임워크를 활용할 수 없을 가능성이 있다.

3. 특정 언어나 프레임워크는 특정 플랫폼에 종속될 수 있으므로, 플랫폼 독립성이 필요한 경우에는 문제가 될 수 있다.

 

(참고) TensorFlow, PyTorch, scikit-learn, Keras, OpenCV

1. TensorFlow

  - Google Brain 팀에 의해 Python 기반으로 개발되었으며 2015년에 공개되었다. 딥 러닝 및 머신 러닝을 위한 오픈 소스 라이브러리다.

2. PyTorch

  - 딥 러닝 및 기계 학습을 위한 오픈 소스 프레임워크로 Python 기반으로 개발되었으며, 동적 계산 그래프를 사용하여 딥 러닝 모델을 구축하고 학습하는 데 사용된다.

    텐서 처리 및 자동 미분을 통한 모델 학습을 지원한다.

3. scikit-learn

  - Python에서 사용할 수 있는 머신 러닝 라이브러리로, 다양한 머신 러닝 알고리즘과 효과적인 데이터 분석 도구를 제공하여 모델 구축과 평가를 용이하게 한다.

    데이터 과학 및 머신 러닝, 예측 모델 개발 프로젝트에 활용된다.

4. Keras

  - 러닝 모델을 쉽게 구축하고 학습시키기 위한 고수준 딥 러닝 프레임워크로, 특히 신경망 모델을 쉽게 만들고 훈련시키는 데 사용된다.

    TensorFlow와 같은 백엔드 엔진을 지원하여 딥 러닝 작업을 단순화하고 가독성을 향상시킨다.

    연구, 실험, 프로토타이핑 및 실제 응용 프로그램 개발에 널리 사용된다.

5. OpenCV

  - 컴퓨터 비전 및 이미지 처리를 위한 오픈 소스 라이브러리로, 이미지 및 비디오 처리, 객체 감지, 얼굴 인식, 패턴 인식, 카메라 캘리브레이션 등

    다양한 컴퓨터 비전 작업을 지원한다.

    OpenCV는 C++, Python, Java와 같은 다양한 프로그래밍 언어에서 사용할 수 있으며, 머신 러닝 및 딥 러닝 모델과의 통합도 지원한다.

    컴퓨터 비전 연구, 로봇공학, 의료 이미지 처리, 자율 주행 자동차 등 다양한 응용 분야에서 활용된다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ Pivot - 행을 열로 변환

# Sample Query - 복사, 붙여 넣기로 테스트

select ymd, nvl(총무과, 0) as 총무과, nvl(인사과, 0) as 인사과, nvl(전산실, 0) as 전산실
  from (select a.ymd, a.dept, count(1) as cnt
              from (select '20230901' as ymd, '총무과' as dept from dual
                         union all
                         select '20230901' as ymd, '인사과' as dept from dual
                         union all
                         select '20230902' as ymd, '전산실' as dept from dual
                         union all
                         select '20230902' as ymd, '총무과' as dept from dual
                         union all
                         select '20230903' as ymd, '인사과' as dept from dual) a
            group by a.ymd, a.dept) a
            pivot (sum(cnt) for dept in ('총무과' as 총무과, '인사과' as 인사과, '전산실' as 전산실))
 order by ymd

Pivot 결과

■ UnPivot

# Sample Query - 복사, 붙여 넣기로 테스트

select *

 from (select 11 as apple, 2 as lemon, 17 as grape from dual
           union all

           select 5 as apple, 7 as lemon, 12 as grape from dual

           union all

           select 8 as apple, 6 as lemon, 7 as grape from dual

           union all

           select 9 as apple, 2 as lemon, 9 as grape from dual

           union all

           select 3 as apple, 1 as lemon, 1 as grape from dual)
unpivot (count for fruit in (apple, lemon, grape))

order by fruit

UnPivot 결과

 

728x90
반응형
LIST

+ Recent posts