Reference : ASP.NET Core 애플리케이션 개발 p.355. <표 14-1> ASP.NET 서비스 컨테이너 수명 옵션

Transient 서비스가 요청될 때마다 새 인스턴스가 생성된다. 경량 서비스에 이 수명을 사용한다.
Scoped 단일 인스턴스가 HTTP 요청당 생성된다.
Singleton 단일 인스턴스가 첫 번째 서비스 요청이 발생할 때 생성된다.
Instance Singleton과 유사하지만 인스턴스가 StartUp에서 컨테이너와 함께 등록된다

등록할때 LifeCycle을 고민해야하는데, 일종의 전역으로 항상 떠있어야 하는 클래스는 Instance로 등록하고, 그 외는 알아서 맞춰서 가는게 좋을듯.

(.Net 5에서는 Instance 옵션이 없다....그럼 Singleton으로 써야한다는건데 확인필요..)

컨테이너를 사용할꺼면 위를 고려해야하고, 그게 아니면 동작마다 생성하던지.

문제는 메모리 사용 및 성능 개선에 대한 고민이 필요할때면 이를 고려해야할 듯 하다.

'개발 > Server-BackEnd' 카테고리의 다른 글

[C#] ConnectionString Password 증발현상  (0) 2021.07.08
OpenAPI - 설계  (0) 2021.02.07
VS2019-Docker-SwaggerUI 경로 문제 바로 잡아주기  (0) 2021.02.04
알람 봇  (0) 2021.01.11
API - Status  (0) 2020.12.28

vs2019에서 docker에 올릴 api를 .net 5등으로 만들어 빌드해서 실행하면 그냥 

https://localhost:0/swagger

로 나와서 일일히 다시 수정해서 확인해야할때가 있다.

그럴때는 

솔루션탐색기에서

launchSettings.json을 열어보면 아래쪽에 "Docker"쪽 설정부분이 있고,

여기서 launchUrl이 실행시 swagger가 뜨는 경로가 되는데 이부분에 Scheme가 https, ServicePort가 port number이다.

아래에 useSSL을 false로 (http로 붙겠다는 뜻)

그리고 httpPort를 특정포트(docker 옵션상의 포트로 설정하는것이 좋다. 기본은 49157인가?)

이렇게 해서 수정을 해주면 바로된 경로로 실행시 swagger가 출력된다

'개발 > Server-BackEnd' 카테고리의 다른 글

OpenAPI - 설계  (0) 2021.02.07
[asp.Net core]컨테이너 수명 옵션  (0) 2021.02.07
알람 봇  (0) 2021.01.11
API - Status  (0) 2020.12.28
API - Return 구분  (0) 2020.12.28

AWS의 codeCommit 이나 다른 ssh로 git repository를 접근할때 소스트리에 SSH를 설정하는 부분이 있습니다.

소스트리 : 도구 -> 옵션 -> [일반] SSH 클라이언트 설정

에 가셔서 OpenSSH로 해야 CodeCommit 에서 설정하는 openssh 방식으로 인증되어 repository에 접근 및 push가 가능할 겁니다.

putty/plink로 하시면 안됩니다.

  • 서버 데본이나 배치 프로세스가 서버내에서 동작
    • 상위 서버로 메시지를 전송?
    • UDP로 비연결성으로 가능한가?
  • 일정 시간 동안 신호를 받지 못할때 
    • 메시지를 전송?
    • 슬랙 봇이나 텔레그램 등으로 메시지 전송이 가능할까?
    • 그 알람 봇이 문제가 생기면??

'개발 > Server-BackEnd' 카테고리의 다른 글

OpenAPI - 설계  (0) 2021.02.07
[asp.Net core]컨테이너 수명 옵션  (0) 2021.02.07
VS2019-Docker-SwaggerUI 경로 문제 바로 잡아주기  (0) 2021.02.04
API - Status  (0) 2020.12.28
API - Return 구분  (0) 2020.12.28
  • 현재의 API 서비스들의 상태를 보여주는 API Status Window
  • 상태분류
    • 정상/지연/응답없음(오류)/이용시간아님/...
    • 응답시간(배치를 통해 기준단위로 응답시간을 저장하여 출력)
    • 위 상태가 최종 저장된 '최종 업데이트 시간' 출력

 

'개발 > Server-BackEnd' 카테고리의 다른 글

OpenAPI - 설계  (0) 2021.02.07
[asp.Net core]컨테이너 수명 옵션  (0) 2021.02.07
VS2019-Docker-SwaggerUI 경로 문제 바로 잡아주기  (0) 2021.02.04
알람 봇  (0) 2021.01.11
API - Return 구분  (0) 2020.12.28
  • 응답코드
    • 요청에 대한 상태 : HTTP의 상태코드
    • 에러에 대한 정보 : 에러코드
      • 위 200 코드 이외의 에러에 대한 정보를 리턴
      • 코드와 (상세)메시지로 구현
        • (내부적으로 설정된)상세 코드 추가 출력
      • 에러에 대한 내부 코드 스펙이 정해져 있어야 함
        • 다른 서비스들(카카오, 네이버 등등)을 참고하여 예외상황을 미리 추가하여 구분해 놓는것이 좋음

 

'개발 > Server-BackEnd' 카테고리의 다른 글

OpenAPI - 설계  (0) 2021.02.07
[asp.Net core]컨테이너 수명 옵션  (0) 2021.02.07
VS2019-Docker-SwaggerUI 경로 문제 바로 잡아주기  (0) 2021.02.04
알람 봇  (0) 2021.01.11
API - Status  (0) 2020.12.28

만일 이미지를 어느 패널에 출력한다고 할때나,

음악파일을 출력하고자 할때,


그 파일들이 어느 폴더에 있는데 여러 종류의 컨텐츠들이 섞여있는 폴더일때는 가려서 음악파일만 출력한다던지, 이미지 파일만 출력한다던지 해야한다.


예를 들어서,

내 그림 폴더에 있는 이미지 파일들만 불러서 출력하려고 하는데, 

string strPicPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

로 내 그림 폴더의 경로를 받아서

DirectoryInfo asd = new DirectoryInfo(strPicPath);

FileInfo[] arrFiles = asd.GetFiles();

m_strArrjpgPath = new string[arrFiles.Length];

int nCount = 0;

foreach(FileInfo File in arrFiles)

{

    m_strArrjpgPath[nCount++] = File.FullName;

}

이렇게 작성 한 후

윈폼.m_pnlMainBase.BackgroundImage = Image.FromFile(m_strArrjpgPath[0]);

이렇게 하면 m_strArrjpgPath[0]에는 어떤 파일이 들어가는지 아는가?


바로 "DeskTop.ini". 윈도 탐색기에서 따로 설정을 하지 않은 이상 숨김파일이라 보이지도 않을, 폴더 설정 파일이 불려지게 된다.

저렇게 바로 Image.FromFile에 경로로 들어가면 Exception이 발생하며 이미지 파일이 아닌 일반 텍스트 파일임에도 불구하고 로드를 실행하며 OutOfMemory Exception이 발생하는 예상과는 다른 예외를 뱉어낸다.


어찌됐든, 

1. 해결방법 첫번째는 위의 상황에서 Exception이 발생하니 catch로 상황을 잡아주면 되는거고(안잡아주면 에러발생으로 팝업 경고뜸)

2. 아님 try~catch로 꼭 처리 안하더라도 검증된 이미지 파일만 넘겨주면 되는것이므로 컨텐츠의 헤더를 분석하여 이미지파일인지를 확인 후 넘겨주는 방식이 있다. 

하지만 넘겨줄때마다 파일을 분석해야하는 오버헤드가 생길 수 있고, 또한 이미지 파일이더라도 이미지 출력이 안될수 있는 정말 어이없는 예외상황을 처리해야하는 try~catch가 필요하다면 결국은 try~catch 하나만으로 처리하는것이 오버헤드를 줄일 수 있는 나은 방법이 아닐까.


string strTempPath = Path.GetTempPath();


이거 쓰세요......

돌겠눼.......


.........................................................................................................................

사용자 계정 폴더 하위의 temp에 직접 임시파일을 기록할 일이 있다.

이 폴더는 윈도가 관리하는 폴더라 나중에 디스크 정리 때 같이 정리할 수 있으며,

윈도가 다중 사용자 계정일 상태에는 단일 사용자마다 temp가 따로 주어지므로 보안(?)이나 관리측면에서 용이한 면이 있다.


C#에서는 전역 클래스로 Environment클래스가 제공되며 이 클래스를 통해 실행되는 시스템의 OS관련 정보, 실행 프로그램에 대한 위치 등에 대한 관련 정보, 그리고 윈도가 제공하는 시스템 디렉토리등에 대한 정보들을 제공하는데 


보통 C:\Documents and Settings\{USERNAME}\ApplicationData 경로는 Environment.SpecialFolder의 열거자중에 골라서 리턴받을 수 있으며 다양하게 제공하기도 한다.


하지만  정작 {USERNAME}\Local Settings\Temp 의 경로, 즉 Temp 폴더는 열거자에서 찾아볼 수 없다.

그러나 다른 방법으로 Temp경로를 얻을 수 있는데


바로

Environment.GetEnvironmentVariable("temp");

을 통해 얻을 수 있다.

(이걸 그대로 출력하면 C:\Document~1\ ~~" 이런식으로 Dos에서의 출력처럼 8.3자 제한에 짤려서 출력이 된다(시샵 Console용으로 출력시. 그래서 아래를 참고)


위 메소드를 통해 

"C:\Documents and Settings\{USERNAME}\Local Settings\Temp"까지 얻을 수 있고 이걸 그대로 사용하면 파일로 인식되는 모호성이 발생하기 때문에 나는  


Path.GetFullPath(Environment.GetEnvironmentVariable("temp") + "\\");


로 static선언을 통해 리턴받아 사용한다.


그렇게 되면 정확하게 

"C:\Documents and Settings\{USERNAME}\Local Settings\Temp\"

이 출력되며, 그 뒤에 파일이나 하위 디렉토리를 추가하여 다른 작업을 할 수 있다.


Temp 의미상 임시로 즉각적인 임시파일의 기록이나 폴더를 사용하기 위한 용도로만 사용해야 맞는것이며 부팅하거나 다른 작업시 운영체제가 임의로 정리 가능한 권리를 가지는 폴더이기 때문에 파일의 일정기간의 저장을 위한 용도로는 사용하지 않는것이 좋다.


특정 프로그램에서 일정 기간의 저장, 예로 config.xml같은 실행시에만 초기에 프로그램의 환경설정 변수를 잡아주는 용도로 사용하는 파일을 저장할때는 C:\Documents and Settings\{USERNAME}\ApplicationData 같은 ApplicationData의 하위폴더에 대표하위폴더를 생성해서 그 안에서 작업하는것이 일반적이다.


한글 MSDN : http://msdn.microsoft.com/ko-kr/library/system.environment(v=vs.80).aspx (System.Environment 클래스) (.net v2.0)



요즘 좀 프로젝트 말미라 빡시게 돌아간다.


하면서 개인 스터디를 하고 있는데, 하면서 알게된 기초적인 프로그래밍 문법





다들 if문과 switch문이 비슷한 용도로 쓰이는것을 알것이다.

물른 다르지만 비슷하다.


즉 조건식으로 분기를 하기위해 사용되는데 개발자에 따라, 회사간의 정책에 따라 사용하는 방법은 다 다르겠지

Whatever!


나는 vs2005를 사용(.Net 2.0)


if문과 switch문에서 int a = 10을 주고

if( a == 0) ~

else if (a == 1) ~

else if (a == 2) ~

else if (a == 3) ~

~~~


이렇게 흘러가는데 만약 조건에 맞는 식이 저 밑에 있다고 치면 if문을 위에서부터 하나씩 전부 검사하고 내려온다.

이것을 어셈블리어로 확인할 수 있다.


if문에 진입하기 직전에 BreakPoint를 걸고 실행하면 if문앞에서 걸리면서 소스가 나올것이고,

소스화면에서 마우스 오른쪽 -> Go to Disassembly를 통해 확인할 수 있다.


대충 보면(나도 어셈블리어는 모른다 갸초보라 ㅠㅠ) jmp가 그 주소로 이동한다는  소리인데,

if문은 각 else if 문이 끝나는 지점에서 다음 else if 문의 주소로 jmp를 한다.(왜 jmp명령어를 사용하는지는 어셈블리어를 몰라서 모름. return 도 아닌데..)

if문은 이런식이고.....


switch문도 BreakPoint를 직전에 걸고 실행한 후 Disassembly를 통해 보면 switch인 조건식 검사 구문에서 다음 첫 case를 넘어가기 전까지 여기서 조건을 검사한 후 바로 해당 case로 넘어간다. case가 없으면 default가 지정되어 있으면 거기로 넘어가고  아니면 switch문 밖으로 jmp해버린다.


이것이 바로 if문과 switch문의 차이이기 때문에 실제 실행 속도면에서도 조건식이 많을경우 switch문이 빠른것을 알 수 있다.


무슨 키가 입력되는지
몇번 입력됐는지
마우스의 유효픽셀 이동거리는 얼마인지
-> 이거슨, 문제가 있는게, 1920x1680모니터에서 화면 끝으로 마우스를 한번에 빨리 움직이면 1680픽셀이 다 인식이 되는것이 아님. 하지만 천천히 움직이면 다 인식됨

 c#으로 만들었고,
윈도xp에서는 트레이로 축소시키면 몇초간의 딜레이가 있음
윈도7 에서는 딜레이 없이 작동 잘 되는듯


차후예상 추가기능 
마우스 클릭 세기
키보드의 키중 제일 많이 입력된 키 랭크 매기기
마우스 픽셀 이동거리 통한 모니터 크기를 받아서 실제 이동거리를 구하기(하루에 몇 m를 갔니 이런거)
 

ClicknTouch.exe

+ Recent posts