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

■ LLM 정의

1. "LLM(Large Language Model, 거대언어모델)"은 엄청나게 방대한 양의 텍스트 데이터를 학습하여, 인간처럼 글을 읽고, 이해하고,

    생성할 수 있는 AI의 두뇌이다.

    - 엄청나게 방대한 양의 텍스트는 "크롤러(Crawler)"라는 소프트웨어 로봇이 인터넷을 돌아다니면서 닥치는 대로 데이터 수집

2. 스스로 생각하는 자아가 있는 것이 아니라, 학습된 데이터를 바탕으로 문맥을 파악하고 다음에 올 가장 확률 높은 단어를 예측하여 이어 붙이는

    초고속 끝말잇기 계산기다.

3. ChatGPT(OpenAI), Claude(Anthropic), Gemini(Google)가 LLM이다.

4. "Vector DB"는 도서관(책장)이고, LLM은 책을 읽고 답변해 주는 사서(사람)라고 생각하면 된다.

    엄청나게 큰 도서관을 통째로 읽은 AI라고 생각하면 된다.

  - Vector DB 없이도 LLM은 단독으로 작동 가능하다. 우리가 쓰는 챗GPT(무료버전)은 Vector DB 없이 LLM혼자서 자신의 암기력으로만 답변한다.

 

■ LLM 학습 및 작동 원리

1. LLM이 학습하는 핵심 원리는 다음 단어 맞히기(Next Token Prediction)다.

    이것을 전문 용어로 "자기 지도 학습(Self-Supervised Learning)"이라고 한다.

2. 사람이 일일이 정답을 알려주는 게 아니라, 원본 글(데이터) 자체가 정답지가 되는 방식이다.

    2.1. 정답지가 되는 과정

         - 이미 거대한 양의 정보가 담겨 있는데, 예를 들면 개발자는 프로그램으로 제일 많이 나오는 단어 순서로 "1번부터 5만 번까지 번호 좀 매겨

           봐"라고 하면 번호가 부여됨. (컴퓨터가 자주 뭉쳐 다니는 글자끼리 알아서 조각을 내고 번호를 부여함)

    2.2. 예제 - 아래표를 기준으로 문장을 번호를 부여하였다.

번호 단어 번호 단어
10 대한민국 50 입니다
11 60
20 수도 70 2
30 80 인가요
40 서울 90 ?
45 부산 99 아니요

         - 정보) 대한민국의 수도는 서울입니다. [10, 11, 20, 30, 40, 50]

                   대한민국의 제2의 수도는 부산입니다. [10, 11, 60, 70, 11, 20, 30, 45, 50]

         - 질문) 서울의 수도는 부산인가요? [40, 11, 20, 30, 45, 80, 90]

    2.3. 계산과정

         - AI는 40(서울)과 20(수도)의 관계를 집중적으로 계산한다.

         - 10(대한민국) + 20(수도) → 아주 자연스러움 (확률 높음)

         - 40(서울) + 20(수도) → "어? 뭔가 이상한데?" (확률 낮음)

         - AI는 "서울은 '수도' 그 자체지, '수도'를 가지고 있는 나라가 아닌데?"라는 판단과 함께 이 문장은 전제 조건이 틀렸다고 수학적으로

           감지한다. (이 단어 조합의 확률값이 뚝 떨어짐)

         - 그다음 45(부산)와 80(인가요)을 본다.

         - 질문: "부산이 맞냐?" (Yes/No 질문)

         - "서울의 수도"라는 개념 자체가 없으므로, 부산이 나올 확률은 0%을 수렴한다.

         - 이제 AI는 다음 단어로 올 가장 적절한 숫자를 예측해야 한다.

         - "네" (Yes): 서울이 나라여야 하고, 수도가 부산이어야 함. → 확률 0.001% (탈락)

         - "부산입니다" (Copy): 앵무새처럼 따라 하기. → 문맥상 이상함. 확률 5% (탈락)

         - "아니요" (No): 전제가 틀렸을 때 가장 많이 나오는 패턴. → 확률 95% (당첨)

         - AI의 답변 생성 시작:

         - 첫 단어 예측: "아니요" (99번)

         - 그다음 단어 예측: (왜 아닌지 설명해야 함)

         - 40(서울)은 10(대한민국)의 20(수도)이기 때문이다.

         - AI는 계산된 숫자들을 다시 글자로 바꿔서 보여준다.

         - AI의 답변: "아니요, 서울은 대한민국의 수도입니다. 부산은 제2의 도시입니다."

3. 찍고, 틀리고, 고치는 과정을 수천억 번 반복하면, 나중에는 문맥을 파악하는 거대한 패턴(확률 통계)이 생기게 된다.

4. 프로그래밍 필요 여부: 사람이 지식을 직접 넣어주진 않지만, AI가 데이터를 읽고 스스로 수정하는 방법(메커니즘)은 사람이

    완벽하게 코딩해 둬야 작동함.

 

■ LLM 한계

1. 환각 현상 (Hallucination): "숨 쉬듯이 하는 거짓말"

  - LLM은 '사실(Fact)'을 말하는 게 목적이 아니라, '말이 되게(Fluent)' 하는 게 목적이기 때문이다.

2. 최신 정보의 부재 (Knowledge Cutoff): "냉동 인간"

  - 학습이 끝난 AI의 뇌는 '얼음(Frozen)' 상태이다. 재학습을 시키지 않는 이상 최신 정보를 모른다.

3. 논리 및 산술 능력 부족 (Math & Logic): "수포자 문과생"

  - LLM은 '언어 모델'이지 '계산기'가 아니다. 텍스트의 패턴은 기가 막히게 알지만, 정확한 숫자 계산이나 복잡한 인과관계 추론에는 약하다.

4. 설명 불가능성 (Black Box): "왜?라고 물으면 대답 못 함"

  - '근거(Evidence)'가 생명인데, AI는 자기가 왜 그런 판단을 내렸는지 명확히 설명을 못 한다.

5. 편향성 (Bias): "인터넷의 편견을 그대로 배움"

  - AI는 인터넷 데이터를 먹고 자랐다. 인터넷에 있는 인종차별, 성차별, 지역 차별이 AI의 뇌에도 그대로 스며들어 있다.

6. AI는 완벽한 신(God)이 아니라, 엄청나게 똑똑하지만 가끔 엉뚱한 실수를 하는 조수(Intern)이다.

 

■ LLM 성능 고도화(Advancement) 및 최적화 전략

1. 쓰레기 데이터를 걸러내고, 영양가 있는 지식만 먹인다.

  - 단순히 많은 양의 텍스트가 아니라, 문법이 정확하고 논리적인 고품질 데이터(책, 논문, 잘 쓴 기사)를 선별하여 학습시켜야 기본 지능이 높아진다.

2. 단어 이어 말하기 선수를, 대화가 통하는 비서로 만든다.

  - LLM이 단순히 다음 단어를 예측하는 것을 넘어, "요약해 줘", "번역해 줘" 같은 사용자의 명령(Instruction)을 이해하고 수행하도록 별도의 훈련을

    시킨다.

3. 사람이 직접 채점하여 눈치를 길러준다.

  - AI의 답변에 대해 사람이 "이건 좋은 답변, 이건 나쁜 답변"이라고 점수를 매겨서, 기계적인 말투를 버리고 사람이 선호하는 방식으로 말하도록

    미세 조정한다.

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

■ sqlplus / as sysdba 가 안될 때 해결 방법

1. 정상적이지 않을 경우, sqlplus / as sysdba 실행 시 아래와 같은 메시지가 발생한다.

# 명령 프롬프트 실행화면

C:\Windows\System32>sqlplus / as sysdba

 

# 실행 결과

SQL*Plus: Release 12.2.0.1.0 Production on 월 11월 24 12:54:50 2025

Copyright (c) 1982, 2017, Oracle. All rights reserved.

 

ERROR:

ORA-12560: TNS:프로토콜 어댑터 오류

 

사용자명 입력:

 

2. 해결을 위해서는 먼저 오라클 서비스가 실행 중인지 확인한다.

    (서비스가 2개씩 뜨는 이유는 서버를 2개 설치했기 때문이다. 1개면 1개씩 나오는 게 정상)

 

3. 서비스가 실행 중이면, ORACLE_SID를 확인한다.

    ORACLE_SID가 없으면 DB 인스턴스를 못 찾으므로, 아래와 같은 명령어로 확인한다.

C:\Windows\System32>echo %ORACLE_SID%

 

# 실행 결과

%ORACLE_SID%

 

# 위의 값이 안 나오고, 만약에 빈 값이면 아래의 명령어로 설정이 필요하다. (ORCL은 최초 SID 이름 - 설정값에 따라 다를 수 있음)

C:\Windows\System32>set ORACLE_SID=ORCL%

 

4. 위 2개가 모두 해당되지 않는다면, sqlplus가 2개 이상 설치 되었는지 확인한다.

    (현 PC에서는 Oracle Client와 Oracle Server의 sqlplus.exe 2개가 설치되어 있다.)

 

5. 위와 같이 2개가 설치되어 있으면 문제가 발생할 가능성이 있다. 아래 명령어로 우선순위를 확인한다. (... 은 pc 로그인 이름)

C:\Windows\System32>where sqlplus

 

# 실행 결과

D:\app\client\...\product\12.2.0\client_1\bin\sqlplus.exe

C:\app\...\virtual\product\12.2.0\dbhome_1\bin\sqlplus.exe

 

6. dbhome_1에 있는 sqlplus.exe로 실행이 되어야 하는데, 우선순위가 client_1의 sqlplus.exe로 실행이 되어서 오류가 발생한 것이다.

7. 경로를 지정하여 아래와 같이 실행하면 성공적으로 접속되는 것을 볼 수 있다.

C:\Windows\System32>"C:\app\...\virtual\product\12.2.0\dbhome_1\bin\sqlplus.exe" / as sysdba

 

# 실행 결과

SQL*Plus: Release 12.2.0.1.0 Production on 월 11월 24 13:02:34 2025

Copyright (c) 1982, 2016, Oracle. All rights reserved.

 

다음에 접속됨:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

8. 위와 같이 직접 지정이 아닌 환경 변수에서 우선순위를 바꿔서 하는 방법도 있다.

    환경변수에 있는 우선순위로 sqlplus.exe가 실행된다. 

   

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

■ Oracle 19C 설치 방법

1. 오라클 다운로드 사이트 : https://edelivery.oracle.com/osdc/faces/Home.jspx

2. 다운로드를 위해서는 계정이 있어야 한다. 계정이 있으면 Sign In, 없으면 계정을 생성한다.

3. 로그인이 완료되면 Oracle 19C를 검색하고 아래 항목을 선택한다.

4. 선택하면 우측 상단에, Continue를 클릭한다.

5. 클릭하면 하단에 Oracle 19C에 관련된 항목들이 보인다.

    원하는 항목을 클릭 후, Platforms / Languages를 Microsoft Windows x64 (64-bit)를 선택하고, Continue를 클릭한다.

    (필자는 1개만 필요해서 1개만 다운로드하였다.)

6. 각 항목에 대한 설명

항목 설명
Oracle Database 19.3.0.0.0 - Long Term Release Oracle Database 19C의 장기 지원 버전
Oracle Database Client 19.3.0.0.0 Oracle DB 서버에 접속하기 위한 클라이언트 프로그램
Oracle Database Global Service Manager
19.3.0.0.0
Oracle Sharding, Global Data Services(GDS) 환경에서 사용되는 서비스 라우팅/로드밸런서 기능
Oracle Database Grid Infrastructure 19.3.0.0.0 Oracle RAC 클러스터 및 ASM(Automatic Storage Management)을 구성하기 위한 클러스터 소프트웨어
Oracle HTTP Server 12.2.1.3.0 Oracle이 제공하는 웹 서버(Apache 기반)
Oracle NoSQL Database Basic Edition 19.5 Oracle의 분산 Key-Value/Document NoSQL DB

7. 아래와 같이 체크하고 Continue를 클릭한다.

8. 아래와 같이 체크하고 Download를 클릭한다. 아래와 같은 경고 메시지는 무시하면 된다.

    대략적으로 고급 기능들이 기본 설치에는 포함되어 있지만, 사용하면 비용이 발생한다는 내용이다. 대부분 옵션은 비활성 상태이다.

9. 다운로드를 하고 아래와 같이 Setup까지 실행한다. Setup은 혹시 모르니 관리자 권한으로 실행한다.

10. 아래 이미지와 같이 설치를 진행한다.

 

  - Oracle Base와 데이터베이스 파일 위치는 원하는 경로로 설정한다. 전역 데이터베이스 이름도 변경 가능하다.

  - 나머지는 아래 이미지와 같이 진행하면 설치가 완료된다.

728x90
반응형
LIST
728x90
반응형
SMALL
Oracle 19C 서버를 설치하려고 보니, Enterprise Edition과 Standard Edition2가 있었다.
그 외 다른 버전도 있었으나, 이 2개 중에 한 개를 설치하면 될 거 같았지만,
정확히는 뭘 설치할지를 몰라서 이 2개의 차이점을 비교해 보았다.

 

■ Enterprise Edition

1. 대용량, 고성능, 고가용성, 확장성, 보안 등 미션크리티컬한 환경을 겨냥한 풀기능 에디션이다.

2. 라이선스 및 하드웨어 제한에 있어서, 소켓·코어 제한이 거의 없다. 큰 서버, 다중 소켓 환경 지원을 지원한다.

3. 파티셔닝, RAC, 멀티테넌트, 고가용성 옵션 등을 제공한다.

4. 비용이 Standard Edition2보다 상대적으로 더 높다. 코어/프로세서 기반 라이선싱, 옵션별 추가 비용이 발생한다.

5. 대규모 OLTP, DW (데이터웨어하우스), 글로벌 서비스, 고가용성 요구 환경에 적합하다.

 

■ Standard Edition 2

1. 중소 규모, 비용 민감한 환경 등을 겨냥한 절약형 에디션. 기능이 제한되어 있다.

2. 라이선스 및 하드웨어 제한에 있어서, 소켓 서버 제한 등이 있다.

3. 기본적인 데이터베이스 기능 중심이다. RAC 지원이 없거나/혹은 제한적이며, 대형 클러스터링 환경에는 적합하지 않다.

4. 비용이 Enterprise Edition보다 저렴하고, 라이선스 구조가 단순하다.

5. 부서/웹 애플리케이션, 중소 규모 시스템, 비용 절감이 중요한 환경에 적합하다.

 

■ 실무에서의 비교

- Enterprise Edition (EE), Standard Edition 2 (SE2)

구분 설명 EE SE
RAC(Real Application Clusters) 두 개 이상의 서버에서 하나의 데이터베이스를 동시에 공유하는 기술 지원 지원 안됨
Active Data Guard Standby DB를 읽기 전용으로 운영하여 고가용성과 성능 향상을 제공하는 옵션 유료 옵션 사용 불가
Partitioning 대형 테이블을 여러 조각으로 나눠 관리하는 기술 유료 옵션 사용 불가
In-Memory 옵션 데이터를 메모리에 컬럼 방식으로 올려 초고속 분석 성능 제공 유료 옵션 사용 불가
Compression 옵션 데이터/인덱스를 압축해 저장 공간 절감 유료 옵션 사용 불가
Parallel Query / DML 쿼리를 여러 CPU에서 동시에 병렬 처리하는 기능 유료 옵션 사용 불가
Materialized View Query Rewrite MV를 사용해 쿼리 자동 최적화하는 핵심 성능 기능 사용가능 대부분 제한
Advanced Security(TDE / Redaction) DB 파일을 암호화하는 기술 사용가능 제한
Database Vault / Label Security DB 보안/접근 제어를 강화하는 고급 보안 옵션 옵션 일부 불가
전문 OLAP / 고급 분석 기능 분석 전용 엔진 및 MDX 기반 분석 기능 지원 없음
Automatic Storage Management
(ASM)
Oracle 전용 스토리지 관리 기능 (볼륨 매니저 + 파일시스템 역할) 지원 가능
본 백업(Data Pump, RMAN) 오라클 기본 백업·복구 도구 지원 지원

 

■ 어떤 환경에서 무엇을 선택해야 하나?

1. 대기업, 금융, 국가기관, 대용량 시스템은 거의 무조건 EE를 선택해야 한다.

2. 작은 회사, 사내 시스템, ERP, 그룹웨어 등에 적합하다.

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

■ Inno Setup 설치하는 방법

1. https://jrsoftware.org/isinfo.php에 접속한다.

2. 접속하면 아래 이미지와 같은 화면이 뜨는데 Download Inno Setup을 클릭한다.

 

3. 아래 US를 클릭하면 파일이 다운로드된다.

 

4. 다운로드된 파일을 클릭한다.

 

5. 클릭하면 설치 언어 선택 창이 뜬다. 필요한 언어를 선택하여 확인을 누른다.

 

6. [동의합니다(A)] 를 선택하고 다음을 누른다.

 

7. 설치할 경로를 선택하고 다음을 누른다.

 

8. 바로가기 위치를 선택 후 다음을 누른다.

 

9. 추가 작업 선택창이 뜨면 기본 체크된 것을 건드리지 말고 다음을 누른다. 바탕 화면에 바로가기 만들기가 필요하면 체크한다.

 

10. 지금까지 선택한 것을 확인하는 창이 뜬다. 확인하고 설치버튼을 누른다.

 

11. 설치 진행 상항이 나타난 이후에, 설치가 완료되면 아래와 같은 이미지가 뜬다. 마침을 누르고 종료한다.

 

728x90
반응형
LIST
728x90
반응형
SMALL
Json파일을 문자열로 조합하여 잘 사용하고 있었는데, 어느 순간 역슬래쉬가 들어오면서 에러가 발생하였다.
Json문자열에 이런 특정 문자가 들어왔을 때,
즉, Json파일에 오류가 생기게 하는 문자를 처리하는 방법을 알아보도록 하자.

 

■ Json 파일 만드는 법

1. 직접 문자열 조립

- 데이터에 역슬래시(\), 따옴표("), 개행(\n), 탭(\t) 등이 들어 있으면 JSON 문법상 이스케이프 처리가 안 되어 있어 오류

string json = $"{{\"NAME\":\"좌표\", \"X\":{100}, \"Y\":{100}}}";

json = JsonConvert.DeserializeObject(json).ToString();     # Newtonsoft.Json 패키지 설치 필요

 

# 변수 json 출력

{

     "NAME": "좌표",

     "X": 100,

     "Y": 100

}

 

2. JsonSerializer로 생성 (System.Text.Json 사용)

  - System.Text.Json.JsonSerializer 가 내부적으로 모든 문자를 안전하게 이스케이프 처리

var options = new JsonSerializerOptions

{

     Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,

     WriteIndented = true

};

 

var data = new

{

     NAME = "좌표",

     X = 100,

     Y = 100

};

 

string json = JsonSerializer.Serialize(data, options);

 

# 변수 json 출력

{

     "NAME": "좌표",

     "X": 100,

     "Y": 100

}

 

3. 결론은 직접 문자열 조립은 위험하므로, 이스케이프 처리가 되는 JsonSerializer를 사용한다.

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

■ 프린트 공유 시 액세스 권한 문제

1. 탐색기에서 \\IP를 입력하면 공유된 항목 리스트가 보인다. 그중에서 프린터를 선택하여 연결 버튼을 누른다.

 

2. 연결 버튼을 누르면 연결하는 중...이라는 메시지가 뜬다.

 

3. 그리고 자격 증명창이 뜨면, 사용자 이름/암호를 클릭하여 확인 버튼을 누른다.

 

4. 확인을 누른 후, 아래창이 뜨면 [예]를 누르고 새 자격 증명을 지정한다.

    이 창이 아니고, 연결 중에 권한 오류가 날 수도 있다.

 

5. 연결이 안 된다면, 제어판 - 사용자 계정을 클릭한다.

6. Windows 자격 증명 관리를 클릭한다.

 

7. Windows 자격 증명 추가 버튼을 클릭한다.

 

8. 네트워크 주소, 사용자 이름, 암호를 입력하고 확인을 누른다.

 

9. 다시 프린터를 연결하면 연결하는 중이라는 창과 함께 프린터가 연결된다. 이렇게 해도 계속 똑같으면 재부팅 후 다시 프린터를 연결한다.

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

■ Oracle 원격 EXP, IMP 하는 법

1. 서버에 있는 DataBase파일 Export 하기

# 명령프롬프트를 실행한다.

# 원하는 테이블만 Export 하려면 tables를 쓰고, 아니면 안 쓰면 된다. (옵션)

# Sample

# C:\Windows\System32>exp test/test123@//192.168.0.1:1521/serviceback tables=(department) file=D:\test.dmp

C:\Windows\System32>exp ID/비밀번호@//서버IP:서버PORT/서비스명 tables=(테이블명,테이블명,...) file=백업파일명.dmp

 

# 위의 명령어를 실행하면 아래와 같은 메시지가 뜬다. (오라클 버전에 따라 다름)

Export: Release 12.2.0.1.0 - Production on 토 10월 18 13:54:06 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

 

# 비밀번호를 비우고 명령어를 실행했을 경우, 비밀번호 입력하라는 메시지가 나온다. 비밀번호를 위와 같이 입력했으면 안 나옴

# 비밀번호에 특수문자가 들어간 경우 에러가 날 수 있는데, 그런 경우에 비밀번호를 입력하지 않고 아래와 같이 따로 입력하는 방법으로 한다.

비밀번호:

 

# 완료되면 아래와 같은 메시지가 나온다.

다음에 접속됨: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production

KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 익스포트가 종료되었습니다

지정된 테이블을 익스포트 하려고 합니다 via 규정 경로...

.. (테이블명) 테이블 익스포트 중 (Export 된 행 개수) 행이 엑스포트 됨

익스포트가 경고 없이 정상적으로 종료되었습니다.

 

C:\Windows\System32>

 

2. Export가 경로에 가서 파일을 확인한다. (위에서 설정한 경로 - D:\test.emp)

3. Export 된 파일을 가지고 Import를 한다.

# 명령프롬프트를 실행한다.

# 원하는 테이블만 Import 하려면 tables를 쓰고, 아니면 안 쓰면 된다. (옵션)

# ignore=y는 이미 테이블이 있으면 무시하고 데이터 삽입, 기존에 있던 데이터는 지워지지 않고 ADD 됨, ignore=n(기본값) (옵션)

# 아래의 ID/비밀번호/서비스명은 import 할 DB정보를 넣어야 한다. (Export 할 때의 정보가 아님, 그리고 DB서버에서만 진행)

# Sample

# C:\Windows\System32>imp testimport/testimport123@localservice tables=(department) file=D:\test.dmp ignore=y

C:\Windows\System32>imp ID/비밀번호@서비스명 tables=(테이블명,테이블명,...) file=백업파일명.dmp ignore=y

 

# 위의 명령어를 실행하면 아래와 같은 메시지가 뜬다. (오라클 버전에 따라 다름)

Import: Release 12.2.0.1.0 - Production on 토 10월 18 13:54:06 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

 

다음에 접속됨: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

익스포트 파일은 규정 경로를 거쳐 EXPORT:V12.02.00에 의해 생성되었습니다

경고: 객체는 다른 사용자 xxx(이)가 엑스포트 한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다

IMP-00403:

경고: 이 임포트는 권한 문제로 인해 실패한 DDL이 포함된 개별 SQL 파일 "import_sys"을(를) 생성했습니다.

. xxx 객체를 xxx(으)로 임포트 하는 중입니다

. xxx 객체를 xxx(으)로 임포트 하는 중입니다

.. 테이블 "xxx"(를)을 임포트 중 xxxxx 행이 임포트 되었습니다

경고와 함께 임포트가 정상 종료되었습니다.

 

C:\Windows\System32>

 

4. DB에 접속하여 데이터가 제대로 들어왔는지 확인한다. (완료)

 

■ 주의사항

1. Export 할 Oracle 버전과 Import 할 Oracle 버전이 기본적으로는 맞아야 한다.

2. 맞지 않는다면, Import 할 Oracle 버전이 Export 할 Oracle 버전보다 상위버전이어야 한다.

3. 그것도 아니라면, Import 할 Oracle Client버전으로 받아서, 그 Client로 Export를 해야 한다.

    (Oracle Client가 2개 이상일 경우, 환경 변수에서 우선순위를 조정해야 한다.)

4. Import가 완료된 이후, 조회했을 때 한글이 깨진다면 언어도 맞춰야 한다.

    (참고 : https://200-rush.tistory.com/entry/Oracle-DB-Dumpexpimp)

728x90
반응형
LIST
728x90
반응형
SMALL
C#으로 프로그램을 만들 때 Font를 Custom Font를 사용하면,
사용자 PC에 Custom Font가 없는 경우가 있을 수 있다.
이런 경우는 Font는 기본 Font가 적용되어, Custom Font를 사용한 의미가 없어진다.
이를 위해서는 사용자가 프로그램을 실행할 때, 자동으로 Custom Font를 설치가 되어야 한다.
그럼 Custom Font를 자동으로 설치하는 로직을 알아보도록 하자.

 

■ Font를 자동으로 설치하는 방법

1. 제일 먼저 실행되는 프로젝트 파일에 로직을 넣는다.

  - 예) FontProject라는 프로젝트 Program.cs 파일에 로직을 넣는다.

  - 초기화면은 아래와 같다. (다 똑같지는 않음)

# Program.cs

namespace FontProject

{

     internal static class Program

     {

           /// <summary>

           ///   The main entry point for the application.

           /// </summary>

           [STAThread]

           static void Main()

           {

                 // To customize application configuration such as set high DPI settings or default font,

                 // see https://aka.ms/applicationconfiguration.

                 ApplicationConfiguration.Initialize();

 

                 // Custom Font를 설치한다. 경로는 Custom Font 파일이 있는 모아둔 폴더로 지정             

                 // 이 부분은 추가해야 한다!

                 CustomFontInstall.InstallFontsFromFolder(@"C:\Font");                 

 

                 Application.Run(new Form1());

           }

     }

}

 

2. Program.cs에서는 호출만 할 것이기 때문에, Font와 관련된 Class파일을 만든다.

# CustomFontInstall.cs

using Microsoft.Win32;

using System.Drawing.Text;

using System.Runtime.InteropServices;

 

namespace FontProject

{

     public static class CustomFontInstall

     {

           [DllImport("gdi32.dll")]

           private static extern int AddFontResource(string lpFilename);

 

           [DllImport("user32.dll")]

           private static extern bool SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

 

           private const int WM_FONTCHANGE = 0x001D;

 

           public static void InstallFontsFromFolder(string pSourceFolder)

           {

                string sFontPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts";

                string sFontsFolder = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);

 

                // Windows에서 Font 설치 정보를 관리하는 레지스트리 경로

                RegistryKey regFontRegKey = Registry.LocalMachine.OpenSubKey(sFontPath, false);

 

                foreach (string file in Directory.GetFiles(pSourceFolder, "*.ttf"))

                {

                     string sFontFileName = Path.GetFileName(file);

                     string sFontDestPath = Path.Combine(sFontsFolder, sFontFileName);

                     string sFontDisplayName = GetFontDisplayName(file);

 

                     // 파일 Font이름은 같을 수 있기 때문에, 내부 Font이름을 가져온다. - Font설치 Skip방지를 위해서 자세하게 비교

                     string sFontStyleName = Path.GetFileNameWithoutExtension(file);                

 

                     if (string.IsNullOrWhiteSpace(sFontDisplayName))

                     {

                          // 폰트이름을 가지고 올 수 없음. 여기 로직은 알아서 처리. (나는 로그 남기고 Continue 시킴, 나머지라도 설치)   

                     }

 

                     string sRegistryFontName = $"{sFontDisplayName} ({sFontStyleName}) (TrueType)";

                     bool isAlreadyInstalled = regFontRegKey.GetValue(sRegistryFontName) != null;

 

                     // 이미 설치된 Font는 Skip

                     if (isAlreadyInstalled || File.Exists(sFontDestPath))

                          continue;

 

                     try

                     {

                          File.Copy(file, sFontDestPath);

 

                          // 레지스트리 등록

                          using (RegistryKey regWrite = Registry.LocalMachine.OpenSubKey(sFontPath, true))

                          {

                               regWrite.SetValue(sRegistryFontName, sFontFileName);

                          }

 

                          AddFontResource(sFontDestPath);

 

                          // 시스템 전체에 Font가 변경되었다는 것을 알림 - 이것을 안 하면 재부팅될 때까지 Font가 안 나올 수 있음

                          SendMessage((IntPtr)0xFFFF, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);

                     }

                     catch (Exception ex)

                     {

                          // 설치 실패

                     }

                }

           }

 

           private static string GetFontDisplayName(string pFontPath)

           {

                try

                {

                     using (PrivateFontCollection pfc = new PrivateFontCollection())

                     {

                          pfc.AddFontFile(pFontPath);

                          pfc.AddFontFile(pFontPath);

 

                          if (pfc.Families.Length > 0)

                               return pfc.Families[0].Name;

                     }

                }

                catch

                {

                     // 에러가 나도 그냥 실행하기 위해서

                }

             

                return null;   

           }

     }

}

 

3. 이렇게 하고 프로그램을 실행하면 Custom Font가 설치된 것을 확인할 수 있다.

4. Custom Font가 적용되지 않으면, app.manifest파일을 만들어 관리자 권한으로 실행할 수 있도록 한다.

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

■ C#에서 WinSCP를 이용하여 sFTP를 접속하는 방법

1. 인터넷에서 WinSCP를 다운로드한다. (https://winscp.net/eng/download.php)

 

2. 접속하면 아래 이미지와 같이 나오는데 사각형 부분을 눌러 설치한다.

 

3. 설치된 경로에 가서 WinSCP.exe, WinSCPnet.dll를 복사한다. 그리고 C#으로 만든 프로그램 실행파일 위치로 옮겨준다.

    실행하는 데 있어, 따로 dll을 모아놓은 곳이 있으면 그쪽으로 옮겨준다. (사용자들이 프로그램 만든 구조에 따라 위치가 다름)

 

4. 아래와 같은 코드를 작성한다.

// 서버 접속

Session session = new Session();

SessionOptions session_options = new SessionOptions();

 

session.ExecutablePath = @"D:\WinSCP.exe";               // WinSCP.exe 가 있는 경로

 

session_options.Protocol = Protocol.Sftp;

session_options.HostName = Host;                                  // 서버의 Host 넣기

session_options.PortNumber = Port;                                // 서버의 Port 넣기

session_options.UserName = UserName;                         // 서버의 UserName 넣기

session_options.Password = Password;                            // 서버의 Password 넣기

session_options.SshHostKeyFingerprint = FingerPrint;    // 서버의 FingerPrint 넣기

 

session.Open(session_options);                                        // 접속 완료

 

session.GetFiles(서버파일경로, 로컬파일경로, false).Check();    // Download

session.PutFiles(로컬파일경로, 서버파일경로, false).Check();    // Upload

 

// Download 하지 않고, 이미지 바로 가져오는 방법

using (Stream remoteStream = session.GetFile(RemoteFullPath))    // RemoteFullPath : 이미지 파일이 있는 경로

using (MemoryStream ms = new MemoryStream())

{

    remoteStream.CopyTo(ms);

    ms.Position = 0;

 

    Image imgReturn = Image.FromStream(ms);

}

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

■ FTP

1. FTP(File Transfer Protocol)는 파일을 전송하기 위한 통신 프로토콜이다.

    즉, 네트워크를 통해 파일을 서버와 클라이언트 간에 주고받을 수 있게 해주는 표준 방식이다.

2. 텍스트 모드 또는 바이너리 모드로 전송한다.

3. 포트는 20, 21을 사용한다.

4. 대부분의 FTP 서버는 사용자 인증을 요구한다. (아이디/비밀번호)

5. 윈도우 탐색기에서 바로 접속 가능하다.

 

■ sFTP

1. sFTP는 Secure File Transfer Protocol 또는 SSH File Transfer Protocol의 약자로, 이름처럼 보안이 강화된 파일 전송 프로토콜이다.

    기존의 FTP와는 다르게 SSH(Secure Shell) 프로토콜을 기반으로 하여 모든 데이터 전송을 암호화한다.

2. SSH로 암호화되어 전송한다.

3. 포트는 22를 사용한다. (SSH와 동일)

4. 별도의 데이터 포트가 없이 하나의 연결(SSH 채널)을 통해 모든 작업 수행한다.

5. ID/비밀번호 또는 공개키 기반 인증이 가능하다.

6. 윈도우 탐색기에서 바로 접속 불가능하다. (WinSCP, FileZilla, Cyberduck을 이용하여 접속)

 

■ 그러면 왜 sFTP가 나왔을까?

1. 결론은 보안 문제다. FTP는 1970~80년대에 만들어졌고, 다음과 같은 심각한 보안 취약점이 있었다.

  - 로그인할 때 ID와 비밀번호를 평문(암호화 없이) 전송

  - 파일이나 디렉터리 정보도 모두 암호화 없이 전송

  - 패시브/액티브 포트 방식으로 인해 방화벽 설정이 매우 복잡하고 위험

 

※ 결과적으로 도청, 세션 가로채기, 중간자 공격 등에 쉽게 노출되었다.

 

2. 그래서 sFTP란 것이 나오기 전에, FTP에 SSL을 얹은 FTPS가 먼저 나왔다. 이것 또한 문제점이 있었다.

  - FTP 특유의 데이터 포트와 제어 포트가 분리된 구조 유지

  - 방화벽이나 NAT(Network Address Translation) 환경에서 연결 문제 많음

  - 서버와 클라이언트 간에 인증서 설정도 번거로움

 

※ 결과적으로 복잡하고 신뢰하기 어려운 구현으로 인해 FTPS는 널리 쓰이지 못하였다.

 

3. 그래서 나온 것이 sFTP

  - 1990년대 후반, SSH(Secure Shell)가 원격 로그인용 보안 프로토콜로 이미 널리 사용

  - 대부분의 서버는 이미 SSH 서버(포트 22)를 운영

  - SSH는 단일 포트, 강력한 암호화, 공개키 인증, 세션 보호 등을 기본 제공

  - 이 기반 위에 파일 전송 기능을 얹는 것이 훨씬 자연스럽고 효율적임

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

■ Visual Studio 주요 버전 타임라인

Visual Studio 버전 출시일 주요 특징 / 지원 언어
VS 2002 (.NET 1.0) 2002.02 최초의 .NET 통합 개발환경
VS 2003 (.NET 1.1) 2003.04 안정화 및 성능 개선
VS 2005 (.NET 2.0, C# 2.0) 2005.11 제네릭, 익명 메서드 등
VS 2008 (.NET 3.5, C# 3.0) 2007.11 LINQ, 자동 프로퍼티
VS 2010 (.NET 4.0, C# 4.0) 2010.04 dynamic, optional 파라미터
VS 2012 (.NET 4.5, C# 5.0) 2012.08 async/await 도입
VS 2013 (.NET 4.5.1, C# 5.0) 2013.10 UI 개선, Roslyn 베타 시작
VS 2015 (.NET 4.6, C# 6.0) 2015.07 nameof, string interpolation
VS 2017 (.NET Core 지원 시작, C# 7.x) 2017.03 Tuples, pattern matching
VS 2019 (.NET Core 3.1, C# 8.0) 2019.04 switch 개선, nullable reference
VS 2022 (.NET 6~8, C# 10~12) 2021.11 64비트 IDE, Hot Reload
VS 2022 17.9 (C# 13 프리뷰) 2024.03 .NET 9, C# 13 일부 기능 사용 가능
VS 2025 (예정) 2025.11 (예정) .NET 9 정식 대응, C# 13 완전 지원
728x90
반응형
LIST
728x90
반응형
SMALL
C#, Oracle을 사용한 프로그램을 만들면서 Oracle Connection에 대해 궁금점이 생겼다.
1. 최초 Connection을 한번 맺어놓고, 프로그램 종료 시 Connection을 끊는 경우
2. CRUD를 실행할 때마다 Connection/Disconnection을 하는 경우
두 가지 경우에 대해 장단점과 어떤 것을 요즘 많이 사용하는지도 알아보도록 하자.

 

■ 지속적인 Connection 유지 (Persistent/Open Connection)

1. 프로그램 시작 시 OracleConnection을 열고, 종료 시까지 계속 열어두는 방식이다.

2. 장점

  - 빠른 응답 속도: 매번 Connection을 열고 닫는 오버헤드가 없다.

  - 빈번한 DB 접근에 유리: 수많은 쿼리를 주기적으로 실행하는 경우 성능이 향상된다.

3. 단점

  - 자원 낭비: 사용하지 않는 시간에도 Connection이 유지되므로 DB 서버의 자원을 계속 점유하게 된다.

  - DB Connection Full 고갈 위험: 여러 클라이언트가 동시에 Connection을 유지하면 Connection Full이 부족해질 수 있고,

    그로 인해 접속자체가 안될 경우가 생긴다.

  - 에러 발생 시 복구 어려움: 중간에 네트워크나 DB 문제가 생기면 Connection이 죽고 전체 프로그램이 영향을 받을 수 있다.

  - 동시 작업 대응 시, 직렬 처리만 가능하다.

    즉, 하나의 커넥션은 한 번에 하나의 쿼리만 실행할 수 있으므로, 동시에 여러 쿼리를 해당 Connection에서 병렬로 실행할 수는 없다.

    이 말은 async/await를 사용하는 경우 동시에 병렬로 쿼리를 2개 실행하는 경우, InvalidOperationException에러가 발생할 수 있다.

 

■ 필요시 Connection 열고 작업 후 닫기 (Open on Demand)

1. CURD 할 때마다 Connection, Disconnection 한다.

2. 장점

  - 자원 효율적: Connection을 오래 점유하지 않기 때문에 서버 자원을 절약할 수 있다.

  - 안정성: 네트워크 문제가 있어도 Connection을 짧게 쓰기 때문에 문제가 생겨도 영향이 제한적이다.

  - 스케일 확장 유리: 다수의 사용자에게도 Connection Full이 효율적으로 배분된다.

3. 단점

  - 응답 속도 약간 느릴 수 있다. : 매번 Connection을 여닫기 때문에 약간의 오버헤드가 발생한다.

  - 빈번한 호출 시 성능 저하를 초래할 수 있다. : 짧은 시간에 수백 번 Connection을 열고 닫으면 오히려 비효율적이다.

 

■ 요즘의 트렌드

1. 필요시 Connection 열고 작업 후 닫기 (Open on Demand) + Connection Pooling을 많이 사용한다.

2. .NET의 OracleConnection은 자동으로 Connection Pooling을 사용하므로, Connection을 자주 열고 닫아도 실제 Connection은 재사용되기

    때문에, 지속적인 Connection 유지 (Persistent/Open Connection)와 성능 및 속도 차이는 크게 나지 않는다.

3. 단, 배치 처리나 실시간으로 수천 번 DB를 호출하는 특수 상황에서는 Connection을 열어두는 방식이 더 효율적일 수 있으므로,

    케이스에 따라 판단해야 한다.

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

■ VS 2005 (.NET 2.0, C# 2.0)의 주요 특징

1. 제네릭

# 과거 방식

ArrayList list = new ArrayList();

list.Add("Alice");

string name = (string)list[0];    # 형변환 필요, 문자형 숫자형이 동시에 들어갔을 땐, 런타임 오류 가능성 있음


# 제네릭 도입 후

List<string> names = new List<string> { "Alice", "Bob" };

string name2 = names[0];    # 형변환 불필요, 타입 안전

 

2. 익명 메서드

# 과거 방식

delegate void Print(string msg);    # 델리게이트 선언

 

# 반드시 메서드를 선언해야 한다.

private void MyPrint(string msg)

{

    MessageBox.Show(msg);

}

 

# Form에 Button1을 올려놓고, 클릭 이벤트에서 호출한다고 하면..

private void Button1_Click(object sender, EventArgs e)

{

    Print print1 = new Print(MyPrint);

    print1("Hello from C# 1.0");

}


# 익명 메서드 이후 - 메서드를 따로 선언한 필요 없이 한 번에 처리가 가능하다.

delegate void Print(string msg);    # 델리게이트 선언 (C# 1.0과 선언하는 방법은 동일함)

 

# Form에 Button2를 올려놓고, 클릭 이벤트에서 호출한다고 하면..

private void Button2_Click(object sender, EventArgs e)

{

    Print print2 = delegate(string msg)

    {

        MessageBox.Show(msg);

    };

    print2("Hello");

}

 

3. Nullable 값 형식

# 과거 방식

int age = 0;    # 0이나 -1로 'null'처럼 처리했음 (명확하지 않음)


# Nullable 이후 - ?를 사용하여 null도 대입이 가능하다.

int? age2 = null;

bool? isActive = true;

 

4. foreach 개선

# 과거 방식

string[] names = new string[] { "가", "나", "다" };

 

for (int i = 0; i < names.Count(); i++)

{

    MessageBox.Show(names[i]);

}


# 개선 후

string[] names = new string[] { "가", "나", "다" };

 

foreach (string n in names)

{

    MessageBox.Show(n);

}

 

5. 속성 접근자 분리

# 과거 방식

public int Age { get; set; }    # 모든 곳에서 set 가능


# 개선 후

public int Age { get; private set; }    # 외부에서 읽기만 가능 - get, set 따로 public, private을 설정할 수 있다.

 

6. static class 도입

# 과거 방식 - public static class라는 게 없었음, 그래서 아래와 같이 선언하여 사용

public class MathHelperOld

{

    private MathHelperOld()

    {

    }

 

    public static int Square(int x) => x * x;

}


# static class 이후

public static class MathHelper

{

    public static int Square(int x) => x * x;

}

 

7. partial class

# 과거 방식 - partial이라는 게 없었음


# 개선 후 - class 이름이 같더라도 앞에 partial을 쓰면 하나의 파일로 인식한다.

partial class Customer

{

    public string Name { get; set; }

}

 

partial class Customer

{

    public int Age { get; set; }

}

 

8. 이터레이터 (yield)

# 과거 방식 - IEnumerable 직접 구현, IEnumerator 구현 필요


# 개선 후

IEnumerable GetNumbers()

{

    yield return 1;

    yield return 2;

    yield return 3;

}

 

9. TryParse 패턴

# 과거 방식

try

{

    int value = int.Parse("123");

}

catch

{

    # 예외 처리

}


# 개선 후

if (int.TryParse("123", out int result))

{

    MessageBox.Show(result);

}

 

10. Nullable 관련 연산자

# 과거 방식

string user = null;

string displayName = (user != null) ? user : "(이름 없음)";


# 개선 후

string user = null;

string displayName = user ?? "(이름 없음)";

 

11. 명시적 인터페이스 구현 개선

# 과거 방식 - 인터페이스 충돌 시 불명확

interface IPrintable { void Print(); }

interface IExportable { void Print(); }

 

class Report : IPrintable, IExportable

{

    public void Print()    # 어떤 인터페이스의 Print인지 불명확

    {

        MessageBox.Show("불명확");

    }

}


# 개선 후 - 명시적 인터페이스 구현으로 명확화

class ReportImproved : IPrintable, IExportable

{

    void IPrintable.Print() => Console.WriteLine("Printable report");

    void IExportable.Print() => Console.WriteLine("Exportable report");

}

728x90
반응형
LIST
728x90
반응형
SMALL
C#에서 Oracle.ManagedDataAccess.Client를 사용하고 있는데,
C#에서 프로그램 실행 시, 아래와 같은 예외가 발생하는 것을 볼 수 있었다.
'OracleInternal.NotificationServices.ONSException'(Oracle.ManagedDataAccess.dll)
프로그램에는 크게 지장은 없는 거 같지만 거슬리기에 예외 안 나게 처리하는 방법을 알아보도록 하자.

 

■ 방법 1 - ConnectionString을 바꾸는 방법

1. 아래 문자열 맨 뒤에 load balancing=false; ha events=false; 를 추가한다.

  - "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = xxxx)) (CONNECT_DATA = (SERVER =

      DEDICATED) (SERVICE_NAME = xxx))); User Id = xxx; Password = xxx; load balancing=false; ha events=false;"

 

■ 방법 2 - 소스에서 직접 추가

1. Connection 하는 소스 부분에 아래 소스를 추가한다. (하여튼 최종 접속 전에만 코딩해 주면 된다.)

  - OracleConfiguration.HAEvents = false;

  - OracleConfiguration.LoadBalancing = false;

 

■ ONS란?

1. ONS(Oracle Notification Services)는 Oracle Real Application Clusters(RAC) 및 Data Guard 환경에서 이벤트를 전달하는 기능이다. 

    즉, 데이터베이스 노드의 상태를 모니터링하여 장애 조치(Failover)나 상태 변경을 빠르게 알리기 위한 푸시 알림 시스템이다.

2. ONS를 사용하기 위해서는 ons.conf 파일을 구성해야 한다.

 

■ 예외 원인

1. Oracle ONS(Notification Services)가 정상적으로 구성되지 않았거나 필요하지 않은데 로드되었기 때문이다.

2. 단일 데이터베이스와 같은 경우, 위와 같이 처리하고, 그렇지 않으면 ons.conf파일을 구성하여 예외 처리를 해결해야 한다.

728x90
반응형
LIST
728x90
반응형
SMALL
Oracle 19C Procedure에서 Where 조건에 In 값을 넘겨야 하는데,
문자열을 만들어서 넘기니 원하는 결과 값이 나오지 않았다.
알고 보니, 받는 부분에서 처리를 해줘야 된다는 것을 알았다.
이럴 경우, 어떻게 처리해야 되는지 알아보도록 하자.

 

■ Where 조건에 In 값 넘기는 방법

1. 아래의 Procedure를 만들었다고 가정했을 때, In에 넘길 파라미터 값을 바로 사용하지 않고 아래와 같이 변경하면 된다.

CREATE OR REPLACE PROCEDURE TEST    -- TEST라는 프로시저 생성

(

    PARAM    IN        VARCHAR2,

    RESULT    OUT    SYS_REFCURSOR

) AS

 

    PROCNAME VARCHAR2(100);

 

BEGIN

    PROCNAME := $$plsql_unit;

 

    OPEN RESULT FOR

        SELECT *

          FROM TEST_TABLE A    -- TEST_TABLE은 사용자의 TABLE에 맞게 변경

      --  WHERE A.CLASS IN (PARAM);    처음에 이렇게 만들었는데, 원하는 결과 값이 나오지 않아 아래와 같이 변경하였다.

        WHERE A.CLASS IN (SELECT REGEXP_SUBSTR(PARAM, '[^,]+', 1, LEVEL)

                                            FROM DUAL

                                           CONNECT BY REGEXP_SUBSTR(PARAM, '[^,]+', 1, LEVEL) IS NOT NULL);

 

    EXCEPTION

    WHEN OTHERS THEN

    DBMS_OUTPUT.PUT_LINE('ERROR MESSAGE: ' || PROCNAME || ' - ' || SQLERRM);

 

END TEST;

 

2. PARAM에 넘길 값은 '11', '22' 이런 식으로 넘기는 것이 아니라 11, 22로 넘기면 원하는 결과 값을 받을 수 있다.

  - 싱글쿼터(') 값은 프로시저 안에서 처리하고 있다.

 

■ 결론

1. PARAM이라는 파라미터는 하나의 문자열로 취급하므로, '11', '22'를 넘기더라도 '11, 22'로 인식하기 때문에 올바른 값이 나오지 않는다.

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

■ .Net Framework와 .Net 8.0 차이점

.NET Framework .Net 8.0
출시 시기: 2002년 출시 시기: 2023년
Windows에 특화되어 있기 때문에
Linux나 macOS 같은 다른 운영 체제에서는 실행할 수 없음
Windows, Linux, macOS 등 다양한 운영 체제에서 실행 가능
클라우드 환경에서도 Windows 기반의 서버에서만 실행 가능 Docker 컨테이너 및 Kubernetes와 같은
클라우드 네이티브 환경에서 최적화됨
오픈소스가 아님 오픈소스
CLR(Common Language Runtime)을 사용 CoreCLR 및 Mono 런타임, AOT(Ahead-of-Time) 컴파일 지원
Windows 환경에서 동작하도록 최적화되었으나,
최신 기술 적용이 제한적
최신 기술을 적극적으로 수용하여, 속도, 메모리 효율성, 및
스케일링 능력이 뛰어남
새로운 기능 업데이트는 사실상 중단.
(마지막 버전: .NET Framework 4.8.1)

새로운 API나 기술(예: 최신 C# 기능, 성능 개선 등)은
지원하지 않음
지속적인 업데이트와 성능 개선

 

■ .Net 버전별 지원 상태

버전 출시일 지원 종료일 지원 상태
.NET 5.0 2020년 11월 2022년 5월 지원 종료
.NET 6.0 2021년 11월 2024년 11월 LTS, 현재 지원 중
.NET 7.0 2022년 11월 2024년 5월 Current, 지원 중
.NET 8.0 2023년 11월 2026년 11월 LTS, 최신 장기 지원
728x90
반응형
LIST
728x90
반응형
SMALL

■ HeidiSQL Download

1. https://www.heidisql.com/download.php 사이트에 접속한다. 또는 검색어를 통하여 사이트로 진입한다.

2. Installer, 32/64 bit combined를 클릭하여 다운로드한다.

 

■ HeidiSQL 설치 방법

1. 다운로드한 파일을 클릭하고, 아래 이미지와 같이 순서대로 실행하면, 최종적으로 서버에 접속할 수 있는 창이 뜬다.

2. 접속할 수 있는 창이 뜨면 호스트명/IP, 사용자, 암호, 포트, 데이터베이스를 입력한다.

    세션이름은 마우스 우클릭을 누르면 이름을 변경할 수 있다.

 

3. 올바르게 입력하면 아래 이미지와 같이 이제 쿼리를 실행할 수 있는 화면이 뜬다. (완료)

728x90
반응형
LIST
728x90
반응형
SMALL
코딩을 하다 보면 반복되는 구문이 사용되는 경우가 많다.
그래서 Visual Studio에서 제공하는 것이 코드조각 기능이다. mbox, try 등이 기본적으로 제공되지만,
개발자들이 XML 파일로 만들어서 사용할 수 있는 기능도 있다.
이 포스팅에서는 XML파일로 만들지 않고, 코딩 도중에 바로 만들어서 사용할 수 있는 방법을 알아보도록 하자.

 

■ Visual Studio 2022에서 Snippet Designer 2022 설치 방법

1. Visual Studio 2022을 실행하면 상단에 [확장 - 확장관리] 클릭하고, Snippet Designer 2022를 검색한다.

    검색하면 아래 항목이 검색되는데, 설치버튼을 클릭한다.

2. 설치버튼을 클릭하고, 아래와 같이 예약메시지가 나오면, Visual Studio 2022를 종료한다.

3. 종료하면 아래 이미지 순서대로 진행된다. 진행 후에 Visual Studio 2022를 다시 실행한다.

 

■ Visual Studio 2022에서 Snippet Designer 2022를 이용하여 코드조각 만들기

1. 테스트로 아래 이미지와 같이 Test 메서드 안에 MessageBox.Show를 코딩하자. 위의 Messagebox.Show는 기본적으로 내장되어 있는

    코드조각을 사용하여 생성한 소스다. 아래는 기본 MessageBox.Show 뒤에 Caption, MessageBox 버튼 및 아이콘을 넣었다.

    이 MessageBox.Show를 코드조각으로 만들려면, 만들 소스 Drag → 마우스 우클릭 → Export as Snippet를 클릭한다.

2. 아래와 같이 코드조각 세팅하는 화면이 나타난다.

  - Snippet : 코드조각 이름 (코드조각 파일 이름)

  - Language : 코드조각을 사용할 언어

  - Shortcut : 단축키 (코딩에 사용할 것이므로 가장 중요)

2. 각 항목을 설정하고 저장을 누르면 아래와 같이 저장 창이 뜬다. 저장을 누른다.

3. 이제 방금 코드조각을 실행해 보자. pm까지만 눌러도 코드조각 리스트에 나오는 것을 볼 수 있다. 

2. 두 번 탭을 누르면 아래와 같이 소스가 자동으로 생성된 것을 볼 수 있다.

3. [도구 - 코드 조각 관리자]를 클릭하여, 관리되는 코드 조각을 확인할 수도 있다. 

 

※ Visual Studio 2019도 마찬가지로 동일하게 진행하면 코드조각을 쉽게 만들 수 있다. 단, Snippet Designer로 검색하여야 한다.

 

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

■ Visual Studio 2022 Community 설치 방법 

1. 아래 사이트로 가서 Visual Studio 2022 Community 파일을 클릭한다.

    https://visualstudio.microsoft.com/ko/vs/

2. 클릭하면 아래 화면과 같은 사이트로 이동하며, 별다른 클릭 없이 파일 다운로드가 시작된다.

3. 다운로드가 완료되면, 다운로드된 파일을 클릭한다. 아래와 같이 Visual Studio Installer 설치가 시작된다.

4. 설치 이후에 아래와 같이 설치할 항목을 체크한다. (C#을 할 것이기 때문에 아래 .NET 데스크톱 개발을 체크)

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

6. 설치가 완료되면 아래 이미지 순서에 따라 설정한다. (완료)

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

■ VirtualBox에 윈도우를 설치한 이후 해상도 늘리는 방법

1. 윈도우를 설치하면, 아래와 같이 가상머신 화면에 빈 공간이 발생한다.

2. 해상도를 보면, 아래와 같이 선택할 수 있는데, 가장 높은 해상도를 선택해도 가득 차지 않는 것을 볼 수 있다.

3. 가상머신의 탐색기로 들어가서, CD 드라이브에 VirtualBox Guest Additions이 있는지 확인한다.

    만약에 아래와 이미지와 같이 드라이브가 없거나, VirtualBox Guest Additions이 아닌 경우, 장치 - 게스트 확장 CD 이미지 삽입을 클릭한다.

4. 클릭을 하게 되면 아래 이미지와 같이 CD 드라이브 VirtualBox Guest Additions가 활성화되는 것을 볼 수 있다.

    VirtualBox Guest Additions - VBoxWindowsAdditions를 클릭하여, 설치를 진행한다.

5. 아래 이미지와 같이 계속 Next를 누르면서 설치를 진행한다.

6. 설치를 완료하였으면 재부팅을 진행한다.

7. 아래 이미지와 같이 가득 찬 화면을 볼 수 있다. 만약에 화면이 가득 차게 나오지 않는다면, 가상머신 창의 크기를 강제로 조절하면, 화면이

    사이즈에 맞춰서 자동적으로 가득 차는 것을 볼 수 있을 것이다.

 

※ 혹시 그래도 안된다면 아래와 같이 설정값을 바꿔보도록 하자. (아래 설정을 안 해도 거의 됨)

 

■ VirtualBox에 윈도우를 설치한 이후 공유폴더 설정하는 방법

1. 아래 이미지와 같이 가상머신 선택 - 설정 - 공유폴더 - +버튼 클릭을 클릭하면 공유 추가 화면이 뜬다. 정보를 입력하고 확인을 누른다.

2. 확인을 누르면 가상머신 탐색기를 들어가면 드라이브가 생성된 것을 확인할 수 있다.

3. 공유방법은 로컬 폴더 세팅한 곳에 파일을 넣으면, 가상머신에 생성된 드라이브를 통해서 공유를 할 수 있다.

 

728x90
반응형
LIST

'ETC' 카테고리의 다른 글

Inno Setup 설치 하는 방법  (0) 2025.10.21
Ftp vs sFtp  (1) 2025.08.09
Framework vs Library 개념 설명  (0) 2024.07.11
VitualBox 7.0.18 설치 방법 및 사용법  (3) 2024.05.11
HL7 FHIR란 무엇인가?  (0) 2024.04.16
728x90
반응형
SMALL

■ Ubuntu Desktop과 Ubuntu Server차이점

1. Ubuntu Desktop

  1.1. 일반 사용자가 사용한다. 그래픽 사용자 인터페이스(GUI)를 제공한다.

  1.2. 다양한 애플리케이션과 도구가 포함되어 있다. 예를 들어, 웹 브라우저, 오피스 소프트웨어, 미디어 플레이어 등이 기본적으로 설치된다.

  1.3. 그래픽 인터페이스와 다양한 사용자 애플리케이션이 실행되기 때문에 상대적으로 더 많은 자원을 사용한다.

  1.4. 일반 사용자 용도로 설계되었기 때문에 보안 설정이 덜 엄격할 수 있습니다.

 

2. Ubuntu Server

  2.1. 서버 환경에서의 사용을 목적으로 하며, 보통 네트워크 서비스, 데이터베이스 관리, 웹 호스팅 등의 작업을 위해 최적화되어 있다.

          GUI가 기본적으로 포함되지 않고, 명령줄 인터페이스(CLI)로 관리된다.

  2.2. 서버 자원을 절약하고 보안을 강화하기 위해 CLI를 사용하여 관리한다. 필요에 따라 GUI를 설치할 수는 있지만 일반적이지 않다.

  2.3. 서버 운영에 필요한 패키지들이 포함되어 있다. 예를 들어, Apache, MySQL, Samba 등의 서버 소프트웨어가 설치될 수 있으며,

          이를 통해 다양한 서버 역할을 수행할 수 있다.

  2.4. 최소한의 패키지만 포함되므로 상대적으로 자원 사용이 적다. 이는 서버 성능을 최적화하는 데 도움이 된다.

  2.5. 서버 운영의 특성상 높은 보안이 요구되며, 이에 따라 기본 보안 설정이 더 엄격합니다.

 

■ 서버로 관리되는 PC에 Ubuntu Desktop을 설치할 경우의 문제점

1. GUI가 시스템 자원을 소비하여 서버 성능이 저하될 수 있다. 특히, CPU와 메모리를 많이 사용하는 GUI 환경은 서버 작업에 불리하다.

2. 데스크톱 애플리케이션과 GUI는 보안 취약할 수 있다. 데스크톱 사용자가 필요로 하지 않는 기능들이 서버 환경에서는 보안 위협이 될 수 있다.

3. GUI로 인해 CLI를 사용한 표준화된 관리가 어려워질 수 있다.

    이는 서버 관리 작업의 효율성을 떨어뜨리고, 특히 원격 관리 시 불편함을 초래할 수 있다.

4. 불필요한 데스크톱 애플리케이션이 설치되면서 시스템 충돌이나 불필요한 업데이트로 인한 문제가 발생할 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
Oracle 서버 설치, 추가적으로 클라이언트까지 설치하고, DB를 Import 하기 위해서 SQLPLUS를 접속하였으나,
ORA-12560: TNS:프로토콜 어댑터 오류가 났다.
열심히 구글링을 하였으나, 리스너를 재시작하라는 말뿐, 리스너는 정상적으로 잘 작동되고 있었다.
이럴 경우, 확인해야 할 사항이 있는데 지금부터 알아보도록 하자.

 

■ Listener가 정상적으로 작동하고 있을 때 확인해야 할 사항

1. 명령 프롬프트를 실행하여, sqlplus를 접속한다.

C:\Users> sqlplus / as sysdba

2. ORA-12560: TNS:프로토콜 어댑터 오류

  - 원래 이 오류는 Listener가 정상적으로 작동하고 있지 않을 때 나온다고 한다.

3. 오라클 서버, 클라이언트를 모두 설치하였기 때문에, sqlplus가 서버 sqlplus로 실행되는지, 클라이언트 것으로 실행되는지 확인해야 한다.

    파일을 검색해 보면 아래와 같이 2개가 있는 것을 확인할 수 있다. (위의 것이 클라이언트, 아래의 것은 서버)

4. sqlplus로 실행해 보면, 서버는 정상적으로 접속이 되고, 클라이언트는 처음 이미지와 같이 오류가 발생하는 것을 확인할 수 있다.

위의 것은 클라이언트, 밑에 것은 서버 (경로를 보면 확인할 수 있다.)

5. 그럼 이제 명령 프롬프트로 실행했을 때, 서버 sqlplus로 접속되게 하는 방법은 환경변수를 수정하는 것이다.

    시작에서 시스템 환경 변수 편집 메뉴로 들어간다.

6. 시스템 속성 - 고급 - 환경변수 버튼을 클릭한다.

7. 시스템 변수에서 편집 버튼을 클릭한다.

8. 환경변수 순서를 보면 클라이언트가 서버보다 위에 위치한 것을 볼 수 있다.

    서버를 클라이언트 위로 이동한다.

9. 저장 후, 다시 명령프롬프트로 sqlplus를 실행해 보면, 접속이 되는 것을 확인할 수 있다.

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

■ Visual Studio 2022가 Visual Studio 2019보다 좋아진 점

1. Visual Studio 2019는 32비트 프로세스 기반으로 작동하여 메모리 사용이 4GB로 제한되지만, 2022는 64비트 프로세스 기반으로 작동하기

    때문에 더 많은 메모리를 활용할 수 있다.

2. 더 많은 메모리를 활용할 수 있기 때문에 프로젝트 로드, 코드 탐색, 솔루션 빌드 시간이 단축되었다.

3. 새로운 아이콘과 테마, 더 나은 검색 기능과 코드 편집기 성능이 향상되었다.

4. 향상된 IntelliCode 기능을 제공하여 더 정확하고 효율적인 코드 완성을 지원한다. AI 기반 도구와 개선된 코드 분석 기능이 포함되었다.

    예를 들어, IntelliCode는 반복적인 코드 패턴을 학습하여 더 나은 코드 제안을 제공한다.

5. 디버깅 및 진단 도구가 더욱 개선되어, 복잡한 문제를 더 쉽게 해결할 수 있다.

    예를 들어, Hot Reload 기능을 통해 코드 변경 사항을 즉시 적용할 수 있어 더 빠른 디버깅이 가능하다.

6. ARM64 기반 개발 환경을 지원하여 더 많은 디바이스에서 개발할 수 있다.

7. Visual Studio 2019는 .NET 5 이상의 버전에 대한 최신 기능 및 최적화는 제공하지 않으며,

    이후 버전의 Visual Studio 2022에서는 .NET 6 이상의 최신 기능을 보다 원활하게 지원한다.

■ Hot Reload 이란 무엇인가?

1. 개발자가 코드 변경 사항을 애플리케이션을 다시 시작하지 않고도 즉시 적용할 수 있게 해주는 기능이다.

    이 기능을 사용하면 개발자는 애플리케이션을 중단하지 않고, 변경 사항을 실시간으로 반영하여 빠르게 피드백을 받을 수 있다.

2. UI 요소를 수정하고 즉시 결과를 확인할 수 있어, 사용자 인터페이스 개발이 더 효율적이다.

3. 많은 웹 프레임워크(예: React, Vue.js 등)에서도 Hot Reload 기능을 제공한다.

 

■ ARM64 이란 무엇인가?

1. ARM은 Advanced RISC Machine의 약자로, RISC(Reduced Instruction Set Computer) 기반의 프로세서 아키텍처이다.

2. 64비트 주소 공간을 사용하여 더 많은 메모리를 활용할 수 있다. 이는 대규모 데이터 처리와 고성능 애플리케이션에 유리하다.

3. 전력 소비를 최소화하면서 높은 성능을 제공하여 배터리 수명이 중요한 모바일 장치나 임베디드 시스템에서 많이 사용된다.

4. 스마트폰, 태블릿, 노트북, 서버, IoT 장치 등 다양한 디바이스에서 사용된다.

728x90
반응형
LIST
728x90
반응형
SMALL
프로젝트를 시작할 때, 가장 먼저 Framework 또는 Library를 작업을 진행한다.
그런데 여기서 어떤 사람은 Framework라고 부르고, 어떤 사람은 Library라고 부른다.
그럼 어떻게 부르는 것이 맞을까?
Framework와 Library의 차이점을 알아보도록 하자.

 

■ Framework

1. 애플리케이션 개발을 위한 구조와 기본 기능을 제공한다.

2. 개발자가 특정한 방식으로 코드를 작성하고 구조를 따르도록 강제성을 띤다.

3. 개발의 일관성을 유지하고, 생산성을 높이며, 유지보수를 쉽게 만든다.

4. Framework가 애플리케이션의 흐름을 제어하고, 개발자는 Framework가 호출하는 방식으로 코드를 작성한다.

5. 예: Spring, Django, Angular

 

■ Library

1. 특정 기능을 수행하는 코드의 집합이다.

2. 필요할 때 개발자가 선택적으로 호출하여 사용할 수 있다.

3. 특정 작업을 간편하게 처리할 수 있도록 한다.

4. 다른 시스템과 독립적으로 동작할 수 있다.

5. 예: NumPy, Lodash, Pandas

 

■ 차이점 

1. Framework는 애플리케이션의 구조와 흐름을 제어하는 반면, Library는 특정 기능을 개발자가 필요할 때 사용할 수 있도록 하는 도구이다.

2. Framework는 개발자가 프레임워크의 구조와 규칙에 따라 코드를 작성한다.

 

■ 결론

1. 컨트롤을 상속받아, 자주 사용하는 기능을 메서드로 만드는 것, 또는 기능을 추가하는 것들은 Library이다.

2. C# 기준으로 봤을 때, 솔루션 - 프로젝트 - program.cs가 있으면 program.cs부터 실행이 되는데, 이런 것들처럼 강제성을 띠고 흐름을

    제어하는 것들을 만드는 것은 Framework이다.

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

■ Oracle 설치 후 Port 변경 방법

 

1. Oracle이 설치된 경로에서 listener.ora, sqlnet.ora 파일이 있는 곳으로 이동한다.

  - 경로 예) D:\app\test\virtual\product\12.2.0\dbhome_1\network\admin

 

2. listener.ora 파일에서 아래 이미지 표시된 부분에 변경할 Port번호를 입력한다.

 

3. 마찬가지로 sqlnet.ora 파일에서 아래 이미지 표시된 부분에 변경할 Port번호를 입력한다.

 

4. 2개의 파일을 저장하고, 윈도우 - 시작에서 서비스로 들어간다.

 

5. Listener 서비스를 중지하고, OracleService... 를 재시작한다.

    재시작이 완료되었으면, Listener 서비스를 재시작한다.

    여기까지 완료되었으면, 변경된 포트번호로 접속이 가능하다.

    접속이 안되면 혹시 tnsnames.ora에도 변경했는지 확인한다.

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

 

■ PL/SQL Developer 설치 후 가장 먼저 하는 설정

1. Configure - Preferences - User Interface - Fonts로 들어가서 Fonts 설정

  - Browser 설정 시, 아래 이미지와 같이 설정 값이 변경된다.

 

  - Grid 설정 시, 아래 이미지와 같이 설정 값이 변경된다.

 

  - Editor 설정 시, 아래 이미지와 같이 설정 값이 변경된다.

 

2. Configure - Preferences - User Interface - Editor로 들어가서 Syntax Highlighting 설정

  - Keywords : select, from, where

  - Comment : 주석

  - String : ''(싱글쿼터) 안에 쓰이는 문자

  - Numbers : ''(싱글쿼터)가 없는 숫자

  - Symbols : 조건(=) 등의 문자

 

3. Configure - Preferences - User Interface - Editor로 들어가서 Keyword case 설정

  - Keyword 입력 시 대문자로 자동 변환할지 설정 (이미지는 2번 참고)

 

4. Configure - Preferences - User Interface - Code Assistant로 들어가서 Delay (ms) 설정

  - table을 alias로 지정하고, 칼럼 Assistant 이용 시 Delay 속도, 숫자가 낮을수록 빠르게 이용할 수 있다.

 

5. Configure - Preferences - Oracle - Output로 들어가서 Save to file 설정

  - 아무 경로에 .txt파일을 만들고, 만든 파일을 지정한다. 이렇게 지정해 두면, DBMS_OUTPUT.PUT_LINE() 내용을 .txt파일에서 확인할 수 있다.

 

6. Configure - Preferences - Oracle - Logon History로 들어가서 Store with password 체크

  - 로그인할 때, 비밀번호를 항상 입력해야 하는데 체크를 하면 비밀번호를 입력하지 않고 로그인할 수 있다.

  - 단, 체크를 한다고 바로 적용되는 것은 아니며, 프로그램을 종료했다가 비밀번호를 입력하고 로그인을 다시 한번 해야 한다. (이때 저장됨)

 

  - 저장된 이후 다시 한번 실행하면 아래 이미지와 같이 자동으로 바로 로그인은 되지 않는다.

    Username 오른쪽에 ...을 클릭하고, 접속해야 하는 곳을 클릭하면 비밀번호를 입력 안 하고 로그인할 수 있다.

 

7. Configure - Preferences - Window Types - SQL Window로 들어가서 AutoSelect statement, Show gutter (line numbers) 체크

  - Default 값으로 사용할 시, Select 쿼리가 2개에 세미콜론(;)으로 분리되어 있을 때, 실행하면 쿼리 2개가 모두 실행되지만,

    체크를 하게 되면 현재 커서가 있는 Select 쿼리만 실행한다.

  - Show gutter를 체크하면 줄 번호를 볼 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
Oracle 서버를 설치 후, 쿼리툴(DBeaver, PL/SQL Developer 등)을 이용하여 접속까지 되는 것을 확인하였다.
이후 C#에서 DB를 접속하였으나,
[ORA-01017: 사용자명/비밀번호가 부적합, 로그온 할 수 없습니다.]
라는 메시지가 나오면서 접속이 되지 않았다.
해결책을 찾아보도록 하자.

 

■ C#에서 DB접속 시, ORA-01017 에러 해결책

1. 이전에 포스팅했던 내용을 일단 먼저 숙지한다.

  - ORA-01017: 사용자명/비밀번호가 부적합, 로그온 할 수 없습니다.

 

2. 여기서 순서가 중요하다. 포스팅 내용대로 해도 안된다고 하면, 대소문자 구분 안 하게 설정값을 다시 변경한다.

SQL> alter system set sec_case_sensitive_logon=FALSE;

 

3. 그리고 비밀번호를 다시 설정한다. (꼭 비밀번호를 다른 것으로 설정 안 해도 된다. 즉 비밀번호를 동일한 것으로 다시 해도 된다는 소리)

SQL> alter user system identified by abcde;

 

4. C#에서 접속이 되는지 확인한다. - 해결되었음

 

결론: sec_case_sensitive_logon = TRUE (대소문자 구별함)에서 비밀번호를 abcde로 설정했더라도, 비밀번호가 다른 게 인식된다는 것을 확인

 

 

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

+ Recent posts