C#에서 Object를 복제하는 것은 쉽고 단순해 보이지만 실제로는 복잡하고 실수가 발생하기 쉬운 작업 입니다. 여기서는 C# Object 복제에 관한 다양한 방법들을 소개합니다. 얕은복사 vs 깊은복사 객체를 복사하는 방법은 크게 얕은복사(Shallow Cloning)와 깊은복사(Deep Cloning) 2가지로 나뉩니다. 구분 값 유형 (Value Type) 참조 유형 (Reference Type) 얕은복사 값 복사 참조된 객체 공유 깊은복사 값 복사 참조된 객체 복사 두 방식 모두 값 유형(Value Type)의 멤버변수에 대해서는 동일하게 값 복사를 진행합니다. 참조 유형(Reference Type)의 멤버변수에 대해, 얕은복사는 주소 값을 공유하며 깊은복사는 객체를 복사합니다. 그림으로 나타내면..
2012년 소개된 C# 5부터 사용 가능한 CallerMemberName Attribute를 사용하면 함수 호출자의 이름을 전달받을 수 있습니다. 예를들어 다음 소스코드를 실행하면, 컴파일러는 매개변수 callerName에 함수를 호출한 "Main"을 할당합니다. [샘플코드] static void Main(string[] args) { DoWork(); } //[CallerMemberName]를 사용하면, 컴파일러는 매개변수 callerName에 함수를 호출한 "Main"을 할당함 static void DoWork([CallerMemberName] string callerName = null) { Console.WriteLine("함수 호출자 이름 : " + callerName); } [실행결과] Cal..
Language-Culture Codes 국가별 언어코드에서 대한민국은 ko-KR, 북한은 ko-KP로 표현됩니다. 여기서 앞 ko는 언어코드(한글)을 의미하며 KR, KP는 국가/지역코드로 각각 대한민국(Republic of Korea), 북한(Democratic People's Republic of Korea)을 의미합니다. 다른 예시로 영어-미국(United State)은 en-US, 영어-영국(Great British)은 en-GB를 사용합니다. C#에서는 이러한 언어, 국가/지역 코드를 바탕으로 문자열을 비교할 수 있습니다. 문자열을 비교할 때 StringComparison 매개변수를 통해서 언어, 국가/지역의 특수성을 어떻게 반영할 지 결정할 수 있습니다. StringComparison 열거형..
SMTP 프로토콜 Simple Mail Transfer Protocol의 약자로서 메일을 전송하는데 사용되는 프로토콜입니다. 주로 메일 서버 간에 메일을 송/수신할 때 사용합니다. 또한 사용자 PC에 설치된 메일 클라이언트 프로그램(아웃룩 등)이 SMTP 메일 서버로 메일을 전달할 때 SMTP 프로토콜을 사용하기도 합니다. SMTP 전송과정 SMTP 프로토콜은 TCP/IP 프로토콜을 사용하여 메일을 전송합니다. 메일을 발송하는 SMTP서버와 메일을 수신하는 SMTP서버는 주로 25번 포트를 통해 TCP/IP 연결을 맺게됩니다. TCP/IP 연결이 완료되면 메일을 발송하는 SMTP서버는 Outbound Queue에 쌓여있는 메일을 읽어 수신하는 SMTP서버로 전달하게 됩니다. 수신하는 SMTP 메일서버는 ..
OAuth 제작한 서비스를 다른 사람도 이용할 수 있게 권한을 인가(Authorization)하려면 어떻게 해야할까요? 다양한 방법들이 떠오를 것입니다. 실제로 많은 회사들이 서로 다른 인가(Authorization) 방법들을 제공했었고, 개발자들은 서로 다른 방법들을 연동하느라 많은 시간을 사용해야 했습니다. 그러던 중 2006년 블레인쿡, 크리스 메시, 래리 하프 등의 개발자들은 인가(Authorization)에 대한 개방형 표준의 필요성을 느꼈고 OAuth 표준을 개발하여 발표하게 되었습니다. OAuth는 등장 이후로 많은 관심을 받았으며, 2012년에는 IETF OAuth 워킹그룹을 주축으로 더욱 개선된 OAuth 2.0 표준이 만들어졌습니다. 이후로 수많은 기업들이 OAuth 2.0을 채택하여 ..
ASP.NET 웹개발에서는 기본적으로 Cookie를 통해 사용자를 인증합니다. 하지만 최근에는 SPA와 모바일앱 등 크로스플렛폼 개발이 늘어나면서 Token 기반 인증이 폭넓게 사용되고 있습니다. ASP.NET에서는 Cookie 기반 인증도 제공하지만, Token 기반 사용자 인증도 추가로 제공합니다. 사용자 인증에 사용되는 Cookie와 Token의 특징을 정리하면 다음과 같습니다. ASP.NET 인증 Cookie Token 플렛폼 웹(HTTP 프로토콜) 제약 없음(크로스플렛폼에 적합) 전송시점 모든 요청에는 Cookie가 포함되어 전송됨 (심지어 단순 이미지 다운로드도 Cookie가 전송됨) 개발자가 직접 전송시점, 방법을 통제함 (필요한 요청에만 Token 포함 가능) 보안 역사가 긴만큼 수많은 공..
서버는 일반 데스크톱과 달리 성능보다는 안정성을 위한 부품들로 구성합니다. (2021년 7월 기준으로 작성) CPU Xeon CPU를 사용하며 E3, E5, E7 라인업으로 나누어집니다. E3 라인업: 현재는 E3가 아니라 E2000 라인업으로 불리며, Entry Range 서버용 라인업입니다. 대략 동접자가 100명(작업에 따라 달라지겠지만) 이하인 소규모 서비스, 스타트업 서비스, 기업내부망 서버용으로 사용됩니다. ECC 메모리를 지원하지만 ECC/REG 메모리는 지원하지 않습니다. E5 라인업: Middle Range 서버용으로 주로 중대형 DB서버나 서비스에 적합합니다. 최소 수백만원에서 수천만원에 달하는 고가의 서버 제품군에서 사용되며 CPU 2~4개, 메모리 8~24개를 하나의 메인보드에 장착..
소프트웨어 공학에서 학문적으로 말하는 TDD의 장단점과 실무에서 느끼는 장단점에는 차이가 있음. 여기에서는 현업에서 실무자들의 피드백을 바탕으로 정리함 시간과 비용을 증가시킨다 TDD는 평균적으로 1.5배의 시간과 비용을 증가시킴 잘짜여진 테스트 코드를 작성해야 하기에 당연한 결과임. 비용이 높다는 것은 변화에 굼뜨다는 것이기에, 자주 빠르게 요구사항이 변화하는 부분은 TDD에서 제외하기도 함 TDD 투자비용을 회수하는 시기는 보통 2-3년 이후 현업의 연구보고서에 따르면 평균적으로 2-3년 후 부터, 극적인 효과를 볼 수 있다고 함. 예를들어 수년 후에 팀이 개편되거나 입퇴사로 사람이 바뀌는 경우 교육이나 적응기간이 필요하기 마련인데, TDD코드를 작성해두었다면 사람과 무관하게 일관된 Quality를 ..
파일에 작성된 방대한 Class들의 전체 구조를 파악하거나, 원하는 위치로 이동 할 때 Code Folding은 매우 유용한 기능입니다. 여기서는 Android Studio에서 Code Folding을 실행하는 방법을 안내합니다. Code Folding 활성화 Android Studio 상단메뉴의 File → Settings 클릭 Editor → General → Code Folding 이동 원하는 Code Folding 체크 코드폴딩 실행 전체 폴딩 : [Ctrl + Shift + Minus] 폴딩 해제 : [Ctrl + Shift + Plus] 메서드 레벨만 Folding: [Ctrl + Shift + Minus] → [Ctrl + Shift + Plus] 순으로 연속입력 코드폴딩 결과 [CodeFo..
Office365 계정이나 Exchange 계정을 아웃룩에 추가하면 데이터파일(.ost)은 C:\에 생성됩니다. 데이터파일을 용량이 넉넉한 드라이브로 옮겨야 하는 경우가 있습니다. 하지만 pst파일과 달리 ost파일은 위치 변경이 쉽지가 않습니다. 여기서는 아웃룩 2010에서 .ost파일의 위치를 변경하는 방법에 대해 안내합니다. (Office2013 이상은 추후에 다룰 예정입니다) 아웃룩 2007이나 2010에서 파일 옮기기 아웃룩을 종료하고, 완전히 종료될 때까지 기다립니다. .ost 파일은 다음 위치에 존재합니다. 파일을 옮기려는 위치에 복사합니다. C:\Users\%username%\AppData\Local\Microsoft\Outlook [제어판 → 사용자 계정 → 메일]을 클릭합니다. [전자 ..
- TypeScript
- Xamarin.Forms 요약
- React
- Xamarin.Forms eBook
- Vue
- .NET Standard
- Xamarin.iOS
- StringComparison
- Android
- Xamarin
- ios
- Xamarin.Forms
- ASP.NET Core
- c#
- VisualStudio
- npm
- material-ui
- flutter
- WPF
- MS SQL
- Total
- Today
- Yesterday