우연치 않은 기회가 되어, 각 프로젝트에서 사용하는 HTTP를 호출하는 상황에 대해서 여러 코드를 보게 되었습니다. 몇개의 프로젝트 및 툴들을 조사하다 보니 정말 다양한 방법으로 HTTP를 요청하고 있었는데요. 기회가 된 김에 정리를 한번 해보려고 합니다. 정리를 하다 보니 더 다양하게 알게 되는거 같아서 좋았습니다. .NET Framework에서 사용하는 방식에 대해서만 정리를 했습니다. .NET Framework에서 작업할 때 HTTP 요청을 사용하기 위해서는 세가지 방법이 있습니다. WebRequest (HttpWebRequest) WebClient HttpClient 위 class들을 어떻게 사용하는 것이 좋은가? 세가지 class가 다 필요한 것인가? 에대한 질문을 스스로 던져보았는데요. 결론은..
한글을 2byte로 계산하기위해서 기본적으로 이해를 하셔야 하는 부분은 바로 Unicode 입니다. 해당 부분에 대한 이해없이 단순히 Encoding을 이용해서 Byte 수를 계산한다면, 한글자당 2~3 으로 byte수가 변하는 것을 경험하시게 될겁니다. 한줄로 요약한다면, 유니코드는 국제표준 문자표이고 UTF-8은 인코딩 방식입니다. Unicode는 전세계 언어를 모두 표시할 수 있는 표준코드 입니다. 그래서 언어자체의 의미로 byte 수를 계산하려고 한다면 Unicode로 인코딩 해서 계산하여야 합니다. 그렇지 않다면, 아래와 같은 오류를 범하실 수 있습니다. string str = "헬로우월드다"; byte[] data = Encoding.Default.GetBytes( str ) int count..
List 혹은 Dictionary 자료구조를 이용해서 Referance Class를 Add 할 경우, 간혹 실수 하는 부분이 있습니다. Add 시점에 값을 변경할 경우, 기존에 Add 한 영역까지 참조 값이 바뀌는 부분인데요. new 키워드를 이용해서 반복적으로 Add할 경우에는 문제가 없지만, foreach ( var item in listData ) { gamePlayData.Add( new Item{ Index = eventCount++, Score = score } ); } 부득이하게, Global로 선언된 변수를 Add 하는 시점에 값을 변경하는 경우가 발생합니다. foreach ( var item in listData ) { item.Index = eventCount++; item.Score ..
.NET Framework 4.8 환경에서 개발을 진행 하던 도중, 기본 리터럴 기능을 사용할 일이 있었습니다. 직접 사용한 것은 아니지만, 다른 분이 작업한 내용을 우연히 가지고 오는 과정에서 빌드 오류가 발생해서 찾아본 내용이였습니다. Visual Studio 에서는 정상적으로 빌드가 진행이 되지만, MSBuild 를 이용해서 빌드를 진행하는 과정에서 .NET Framework의 버전은 같으나, 언어 버전이 발생해서 빌드 오류가 발생했습니다. 1. 기본 리터럴 구문의 사용은 C# 7.0 에서는 사용 불가! public DataModel GetData() { return default( DataModel ); } '기본 리터럴' 기능은 C# 7.0에서 사용할 수 없습니다. 언어 버전 7.1 이상을 사용..
C# 에서는 일반적으로 포인터를 사용하지 않지만, 간혹 C++ 에서 사용하던 Class를 가져오면서 포인터를 사용해야 하는 경우가 발생한다. 포인터를 사용하면 CLR에서 안전성을 책임지지 못하고, 불완전한 코드가 된다고 하며 에러를 발생하는데, 이렇게 예전 코드를 사용해야 할 경우, 빌드 속성을 변경해줌으로써 unsafe 코드를 사용 할 수 있다. 1. 사용 방법 형식 또는 멤버 선언에서 unsafe 한정자를 사용할 수 있으며, 이렇게 선언해줄 경우 안전하지 않은 컨텍스트로 간주됩니다. unsafe private uint reload() { uint s0 = 0, s1 = 0; int j = 0; fixed (uint* p0 = &mt_state[0]) { uint* pS = p0; uint* p1 = ..
SQL Injection 이란 Web hacking 기법 중 하나입니다. 웹 애플리케이션의 뒷단에 있는 Database에 쿼리를 보내는 과정 사이에 일반적인 값 외에 악의적인 의도를 갖는 구문을 삽입하여 공격자가 원하는 SQL 쿼리문을 실행하는 기법입니다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못했을 경우에 발생하며, 요즘의 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 하는 것을 방지하기 위해 Escape 함수와 Prepared Statement를 제공한다. SQL Injection 공격의 종류 인증 우회 (AB : Auth ByPass) 데이터 노출 (DD : Data Disclosure) 원격 명령 실행 (RCE : Remote Command Excute) ..