분류 전체보기

728x90
반응형

 

 

 

 

 


 

 

들어가며

개인적인 프로젝트의 경우에는 Github를 이용해서 git Repository를 구성해서 사용하고 있습니다. 한동안 사용을 못하고 있다가 오랜만에 github 프로젝트를 접근 했었는데요. Site 상에서는 로그인이 정상적으로 진행이 되는데, 저장소 pull 을 땡기면,  failed to excute prompt script (exit code 1) 오류가 발생해서 한참을 검색했는데요. 

 

 

 

 

 

 

01. 오류화면

 

오류 메시지에 대한 내용은 아래 화면과 같았습니다. 

Logon failed, use ctrl+c to cancel basic credential prompt.

 

원인을 찾아보니, 바로 Windows의 Git 버전때문이였습니다. 

꽤 오랜시간 Git의 버전을 업데이트 하지 않은 상태이긴 했었는데요.

버전이 문제가 될 지는 몰랐네요.

 

 

 

 

 

 

 

02. Windows의 Git 버전 업데이트

Git Bash 창을 열어주고, 아래의 명령어를 입력해주면 됩니다.

 

$> git update-git-for-windows

 

해당 명령어를 입력하게 되면, 위와 같은 화면이 보여지고, 설치하겠냐는 질문에 y 를 입력해서 진행하시면 됩니다. 

그러면 일반적인 git 설치 화면이 나오게 됩니다. 

 

 

 

그리고 나서, 다시 pull 을 땡기면, 로그인 화면이 보여지고 

정상적으로 github을 이용하실 수 있습니다.!!

 

 

 

 

 

참조

 

 

 

 

 

 

 

 

 

END


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90
반응형

 

 

 

 


 

 

들어가며

IIS 서버를 이용해서 PHP 프로젝트를 설정할 경우 아래와 같은 오류가 발생했을때, 해결하는 방법을 정리했습니다. 

에러메시지는 아래와 같은데요.

Internal Server Error <handler> scriptProcessor could not be found in <fastCGI> application configuration.

 

 

 

 

 

01. 500.0 - Internal Server Error

IIS에 PHP로 구성된 프로젝트를 설정하고 있던 도중, 위와 같은 에러메시지가 나타 났는데요. 

"<handler> scriptProcessor를 <fastCGI> 애플리케이션 구성에서 찾을 수 없습니다."

 

자세한 오류 정보:
모듈    FastCgiModule
알림    ExecuteRequestHandler
처리기    PHP FastCgi
오류 코드    0x80070585

 

처음 보는 에러 메시지여서, 차근차근 확인해 봤는데요. 

web.config 파일에 대한 이슈인 듯 해서 해당 부분에 대해서 확인 했습니다. 

 

 

 

02. web.config 파일 확인

FastCgiModule 를 설정 하는 파일에 위치가 잘못 되었을까 해서, 확인 했는데 정상적이였습니다. 

그래서 혹시나 싶어 web.config 파일을 열어봤는데요!

 

Fast CGI 경로를 설정하면서, Web.config 파일에 경로가 잘못 들어갔으며, 중복으로 두개가 들어가 있었습니다.

 

 

 

 

03. php-cgi 경로 수정

중복으로 들어가있던, 하나의 CGI 경로는 주석처리를 했고요.

나머지 하나의 php-cgi 경로는 실제 존재하는 위치로 수정했더니, 500.0 에러 없이 정상적으로 접속이 가능했습니다!

 

 

 

 

 

 

참조

 

 

 

 

 

 

 

 

 

END


 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90
반응형

 

 

 

 


 

들어가며

Jenkins를 이용해서 간단한 DevOps 환경을 구성하다 보면, 권한을 부여해서 컨트롤 할 수 도 있지만, 시스템 자동화를 위해서 외부에서 API를 이용해서 Jenkins를 호출 해야 하는 상황이 발생하기 도 합니다. 

간편하게 Plug In을 설치하면, 외부에서 Jenkins를 호출 할 수 있습니다. 

 

 

 

 

 


01 Jenkins 플러그인 설치

 

외부에서 Jenkins 를 호출하기 위해서는 먼저, Build Authorization Token Root Plugin 을 설치해야 합니다. 

Jenkins 관리 > 플러그인 관리 메뉴에 들어가서, Available Plugins 를 선택해서
"Build Authorization Token Root" 해당 플러그인을 검색해서 설치 해 줍니다.

 

 

 

 

 


02 빌드 유발 수정

 

플러그인 설치가 준비가 되었다면, 외부에서 호출을 하려는 프로젝트 관리메뉴에 접속합니다.

중간에 위치한 빌드 유발 설정 부분에 "빌드를 원격으로 유발" 을 선택해주고, 

Authentication Token 을 작성해 줍니다. 

 

그러면서, 원격 빌드 유발에 Sample URL 이 명시가 되어 있는데요. 

예를 들면 아래와 같은 형태입니다. <> 괄호안에 내용은 각 프로젝트에 맞게 변경되어야 합니다.

http://<JENKINS_URL>/job/<PROJECT_NAME>/build?token=<TOKEN_NAME>

 

 

 

 

 


03 외부에서 호출시 로그인 화면 출력

 

원격환경에서 URL을 호출하게 되면, 위와 같이 로그인 화면이 출력되어, 원하는 Jenkins가 정상적으로 호출 되지 않는데요. 

 

https://plugins.jenkins.io/build-token-root/

 

Build Authorization Token Root

Lets <code>build</code> and related REST build triggers be accessed even when anonymous users cannot see Jenkins.

plugins.jenkins.io

해당 플러그인 사이트에 방문하게 되면, URL 형식이 다르다는 것을 알 수 있습니다. 

 

 

 

 

 

 


04 호출 URL 변경

 

http://<JENKINS_URL>/buildByToken/build?job=<PROJECT_NAME>&token=<TOKEN_NAME>

호출하는 URL을 Build Authorization Token Root 에서 제공하는 방식으로 변경했더니, 별도의 로그인 없이도 Jenkins를 외부에서 호출 할 수 있었습니다. 

 

 

 

 

 

 

 

참조

https://plugins.jenkins.io/build-token-root/

 

 

 

 

 

 

 

END


 

 

 

 

 

 

 

 

 

728x90
728x90
반응형

 

.

 

 


 

들어가며

.NET Framework 4.8 개발 환경에서, 기본적인 TLS 전송에 대한 프로토콜 버전이 1.0으로 전송된다는 얘기를 전해들었습니다. 이와 관련해서 서버에서는 1.2 를 지원하고 있어서 원활한 통신이 안되고 있다는 얘기에, 관련상황을 정리하였습니다. 

 

 

 

 

 

 

TLS란?

TLS(전송 계층 보안) 프로토콜은 인터넷을 통해 전달되는 개인 정보를 보호하는 데 도움이 되도록 설계된 업계 표준입니다. 

TLS는 국제 표준 기구인 IETF(Internet Engineering Task Force)에 의해 제안되었으며 프로토콜의 첫 번째 버전은 1999년에 발표되었습니다. 가장 최신 버전은 2018년에 발표된 TLS 1.3입니다.

TLS는 Netscape가 개발한 SSL(Secure Sockets Layer)이라고 불리는 이전의 암호화 프로토콜에서 발전한 것입니다. 
TLS 버전 1.0은 SSL 버전 3.1로서 개발을 시작했지만 Netscape와 더 이상 연관이 없음을 명시하기 위해 발표 전에 프로토콜의 이름이 변경되었습니다. 
이러한 역사 때문에 용어 TLS와 SSL은 가끔 서로 바꿔서 사용됩니다.

 

 

 

 

 

 

.NET Framework TLS 1.2에 대한 지원

 

앱이 TLS 1.2를 협상하려면 OS 및 .NET Framework 버전이 모두 TLS 1.2를 지원해야 합니다.

https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12

 

  • TLS 1.2의 경우 앱에서 .NET Framework 4.7 이상 버전을 대상으로 하고, WCF 앱에서 .NET Framework 4.7.1 이상 버전을 대상으로 합니다.
  • TLS 1.3의 경우 .NET Framework 4.8 이상을 대상으로 합니다.

 

 

 

 

 

현 상황

 

위에 표를 보게 되면 Windows Server 2012 상위 버전은 기본적으로 사용하도록 설정된다고 하였으나,

실질적으로 테스트 했을때는 그러지 않았습니다. 

동일한 현상에 대해서 테스한 코드가 있어서 참조하였습니다. 

 

string url = "https://www.google.com";
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
 
var resp = req.GetResponse();
var outStream = resp.GetResponseStream();
string output = "";
using (StreamReader rdr = new StreamReader(outStream))
{
    output = rdr.ReadToEnd();
}

http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp

 

저희 코드의 개발환경은 2016 Server에 .NET Framework 4.8 이였습니다. 

 

 

 

 

 

 

 

TLS 1.2 활성화

 

위에 처럼 진행했을 경우, TLS 가 1.0 버전으로 통신이 되어, 아래처럼 코드를 수정해서 테스트 했습니다. 

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
 
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
...
...

 

http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp

(HttpWebRequest)WebRequest.Create(url) 이전에 

추가로 프로토콜을 명시해 줌으로써, TLS 1.2 로 통신하는 모습을 확인 할 수 있었습니다. 

동일한 현상을 겪었으나, 이미지 캡쳐본이 사라져서 타 blog 의 이미지를 첨부하였습니다. 

 

 

 

 

 

MSDN

MSDN 에서는 .NET Framework 애플리케이션이 안전하게 유지되도록 하려면, TLS 버전을 하드 코드 하면 안된다고 합니다. .NET Framework 애플리케이션에서는 OS가 지원하는 TLS 버전을 사용해야 한다고 하지만, 

기본적으로 사용하도록 설정된다고 하는데, 실질적으로는 코드상에서 프로토콜을 명시해줬어야 했습니다. 

추가적으로 설정이 필요한것인지는 모르겠으나, regist 파일까지 수정해가면서 하고싶진 않아서, 코드상에서 처리하였습니다. 

 

 

 

 

 

 

 

참조

http://csharp.tips/tip/article/802-using-tls-1-2-in-csharp

https://learn.microsoft.com/ko-kr/dotnet/framework/network-programming/tls#support-for-tls-12

 

 

 

 

END


 

 

 

 

 

 

 

728x90
728x90
반응형

 

 


 

들어가며

Python을 공부 하면서 그때마다의 내용을 정리하고, 복습해보려고 합니다. 전반적으로 내용을 정리해서 작성하는게 아니여서 중복된 내용이 작성될 수 있습니다. 참고해주세요.

 

 

 

 

 

 

input()

 

input("Age : ")

print("Age is " + input("Age : "))


//결과화면
Age : 16
Age : 16
Age is 16

파이썬에서 데이터에 대한 입력은 input() 메소드를 이용해서 진행합니다.

input 메소드에 문자열 형태의 prompt가 있는 경우, 줄바꿈 없이 화면에 출력됩니다. 그런 다음 입력에서 한 줄을 읽고 문자열로 변한 후 반환합니다. (자동적으로 줄바꿈 제거)

 

그렇기 때문에 input 으로 입력받은 데이터는 기본적으로 문자열 형태여서, 형 변환 후 이용해야 합니다. 

 

 

 

 

변수를 이용한 입력

 

위에 입력에 대한 부분은 input() 메소드에 대한 기본적인 내용이며, 변수를 이용해서 입력된 내용을 사용 할 수 있습니다.

name = input("Age : ")

print("Age is " + name)


// 출력
Age : 16
Age is 16

 

 

 

 

 

 

참조

https://docs.python.org/3/library/functions.html?highlight=input#input

 

 

 

 

 

END


 

 

 

 

728x90
728x90
반응형

 

 

 

 

 


 

들어가며

Python을 공부 하면서 그때마다의 내용을 정리하고, 복습해보려고 합니다. 전반적으로 내용을 정리해서 작성하는게 아니여서 중복된 내용이 작성될 수 있습니다. 참고해주세요.

 

 

 

 

 

print()

 

print ( * objects , sep = ' ' , end = '\n' , file = None , flush = False )

print 메소드는 위와 같은 인자를 가지고 있습니다. 

 

객체를 텍스트 스트림 파일 에 인쇄하며, sep 로 구분 하고 end 가 뒤에 옵니다.

sep , end , file 및 flush 는 키워드 인수로 제공되어야 합니다.

키워드가 아닌 모든 인수는 str()  같은 문자열로 변환되고 스트림에 기록되며 sep 로 구분되고 뒤에 end 가 옵니다.

sep 와 end는 모두 문자열이어야 합니다. None의 경우 기본 값의 사용을 의미합니다.

file 인수는 write(string) 메서드 가 있는 객체여야 합니다. None 또는 값을 제공하지 않는 경우 sys.stdout을 사용합니다.

인쇄된 인수는 텍스트 문자열로 변환되기 때문에 print()는 바이너리 모드 파일 객체와 함께 사용할 수 없습니다. 이를 위해 file.write(...)를 대신 사용하십시오.

출력이 버퍼링되는지 여부는 일반적으로 파일에 의해 결정되지만 flush 키워드 인수가 true이면 스트림이 강제로 플러시됩니다.

버전 3.3에서 변경: flush 키워드 인수를 추가했습니다 .

 

 

 

 

 

기본 print() 출력 샘플

 

print("Hello world")
print("My Name is \"Jeff\"")
print('My Name is "Jeff"')
print("My Name is 'Jeff'")
print("My Name is " + "Jeff")
print(1, 2, 3, 4, 5)
Hello world
My Name is "Jeff"
My Name is "Jeff"
My Name is 'Jeff'
My Name is Jeff
1 2 3 4 5

 

 

 

 

 

sep, end  인자값을 이용한 출력

 

 

print(1, 2, 3, 4, 5, sep=" : ", end=",")
1 : 2 : 3 : 4 : 5,

중간의 구분되는 문자열을 sep 인자로 설정 할 수 있으며, end 인자로는 출력의 마지막 문자열을 설정 할 수 있습니다. 

 

 

 

 

file 인자값의 이용

 

with open('test.txt', 'w') as file:
    print('Hello World!', file=file)

file 인자값을 이용할 경우, 위에서 언급한 대로, 표준출력이 아닌, 파일에 해당

 

 

 

 

 

flush 인자값의 이용

 

대부분의 입력의 경우 buffer의 영역에 데이터가 입력이 되고, 일정양, 혹은 일정 시간동안 보관된 buffer 의 내용이 화면에 노출이 되게 됩니다. flush의 인자값을 사용할 경우, buffer에 보관하지 말고 바로 출력하라는 의미로 해석 될 수 있습니다. 

해당 내용을 어떻게 샘플링 할 수 있을까 했는데, 다른 블로그 분이 샘플링 한게 있어서 URL을 참조 영역에 첨부 하오니 참고 부탁드립니다. 

 

import time
for i in range(10):
    print(i, end=' ', flush=False)
    time.sleep(0.1)

해당 인자가 False의 경우에는 한번에 화면에 출력되지만, True 일 경우에는 0 ~ 9까지 순차적으로 표기됩니다. 

 

 

 

 

참조

https://docs.python.org/3/library/functions.html?highlight=print#print 

https://velog.io/@janeljs/python-print-sep-end-file-flush

 

 

 

 

END


 

 

 

 

 

728x90

+ Recent posts