코딩을 하다 보면 반복되는 구문이 사용되는 경우가 많다. 그래서 Visual Studio에서 제공하는 것이 코드조각 기능이다. mbox, try 등이 기본적으로 제공되지만, 개발자들이 XML 파일로 만들어서 사용할 수 있는 기능도 있다. 이 포스팅에서는 XML파일로 만들지 않고, 코딩 도중에 바로 만들어서 사용할 수 있는 방법을 알아보도록 하자.
■ Visual Studio 2022에서 Snippet Designer 2022 설치 방법
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를 실행해 보면, 접속이 되는 것을 확인할 수 있다.
프로젝트를 시작할 때, 가장 먼저 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부터 실행이 되는데, 이런 것들처럼 강제성을 띠고 흐름을
Oracle 서버를 설치 후, 쿼리툴(DBeaver, PL/SQL Developer 등)을 이용하여 접속까지 되는 것을 확인하였다. 이후 C#에서 DB를 접속하였으나, [ORA-01017: 사용자명/비밀번호가 부적합, 로그온 할 수 없습니다.] 라는 메시지가 나오면서 접속이 되지 않았다. 해결책을 찾아보도록 하자.
어느 날 잘 되고 있던 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에 따라 달라진다.)
오라클 설치 후, 데이터 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
Windows Server 2016에 DB를 세팅하고 Ping 테스트를 진행하였으나, Ping 테스트가 안 되는 현상이 발생하였다. DB 접속에는 문제가 되지 않았으나, 단지 Ping 테스트가 안 되는 경우, 해결책을 알아보도록 하자. 또한, Ping 테스트가 안되게 설정하는 이유도 알아보도록 하자. (환경 : Windows Server 2016)
■ Windows Ping 테스트 안될 때 해결 방법
1. Client에서 DB 서버로 Ping을 날려 보았으나, Ping이 날라가지 않았다. (모자이크 부분은 IP 주소)
2. 시작 - 검색어에 con을 입력하면, Control Panel이 나오는 것을 볼 수 있다. Control Panel을 클릭한다.
3. Windows 방화벽을 클릭한다.
4. 고급 설정을 클릭한다.
5. 인바운드 규칙을 클릭하면 하단에 파일 및 프린터 공유(에코 요청 - ICMPv4-In)에서 우클릭 후, 규칙 사용을 클릭한다.
6. 1번과 동일한 방법으로 다시 Ping을 날려보면, 아래 이미지와 같이 Ping이 정상적으로 테스트되는 것을 볼 수 있다.
■ Windows Ping 테스트를 안되게 설정하는 이유
1. 외부에서의 트래픽을 최소화하고 보안을 강화하기 위해 ping 응답을 차단한다. 이는 외부 공격이나 스캐닝 시도로부터 시스템을 보호하기 위하여 사용한다.
2. ping 테스트는 대상 호스트에서 일부 리소스를 사용할 수 있다. 트래픽이 과도하게 발생하는 경우 이를 방지하기 위해 ping을 차단하는 것이 일반적이다.
3. 결론적으로 네트워크와 시스템 보안을 강화하거나 관리 목적으로 테스트를 안되게 설정하는 것이다.
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를 재실행한다. 그러면 오라클 서버에 잘 접속되는 것을 확인할 수 있다.