Web
-
[ASP.NET Core] Key Vault 사용
Azure Key Valut for ASP.NET Core 3.1 ASP.NET Core 프로젝트에서는 DB연결 문자열이나 중요 정보들을 주로 appsettings.json에 저장합니다. 하지만 소스코드를 저장소에 업로드 할 때 appsettings.json에 포함된 민감한 정보도 업로드 되기 때문에 보안 상 취약한 구조를 가집니다. Secret Manager를 사용하면 민감한 정보를 프로젝트가 아닌 운영체제에 저장되게 할 수 있습니다. 하지만 설정과정도 복잡하고 개발자 PC 마다 따로 설정을 해야하는 번거로움이 있습니다. 이 포스트에서는 Azure Key Vault를 사용하여 민감한 정보를 프로젝트나 개인의 PC가 아니라 Azure 클라우드 저장소에서 저장하는 방법을 소개합니다. Azure Key Va..
2020.05.21 19:47 -
[ASP.NET Core] 2차 인증을 위한 QR코드 생성하기
ASP.NET Core는 2차 인증기 앱을 지원합니다. TOTP(Time-based One-time Password Algorithm, 시간 기반 일회성 비밀번호 알고리즘)을 사용하는 2차 인증기 앱들은 2차 인증을 위해 사용되는 수단 중 하나입니다. TOTP 2차인증 앱을 사용하는 방법은 SMS나 이메일을 통한 2차인증 보다 선호되는 방법입니다. 사용자가 ID와 비밀번호를 입력한 후 2차인증 앱에서 생성된 6~8자리의 코드를 입력하는 방법이죠. 이 경우 사용자의 스마트폰에 인증기 앱이 설치되어 있기 마련입니다. ASP.NET Core 웹앱 템플릿은 2차 인증기를 지원하지만, QR코드 통한 인증방법은 기본적으로 제공하지 않습니다. QRCode를 통한 인증방법은 사용자가 쉽게 2차인증을 완료하도록 도와줍니..
2020.05.07 10:31 -
[Web] Push Notification 구현
W3C에서 제정한 Service Worker 표준을 통해 웹사이트에서도 Push Notification을 지원 할 수 있습니다. 웹사이트에 접속하지 않아도 브라우저가 실행 중이라면 Push Notification이 사용자에게 노출됩니다. Push Notification은 웹표준으로 IE를 제외한 Chrome, Firefox, Edge, Safari 등 최신 브라우저와 모바일 브라우저에서 지원하는 기술입니다. 여기에서는 ASP.NET MVC 5 프로젝트와 Google Firebase Messaging을 사용하여 Push Notification API 구현에 대해 정리하였습니다. 사전 준비 Push Notification은 2015년 출시된 크롬 42버전부터 지원하므로 그 이상의 버전이 필요합니다. 이 포스..
2020.04.27 23:22 -
[IIS] 무료 TLS 인증서 발급 및 HTTPS 설치
Let's Encrypt를 통해 무료로 HTTPS를 위한 TLS인증서를 발급받을 수 있습니다. 발급 자동화를 위해 ACME 프로토콜을 제공하고 있으며, 이 프로토콜을 사용하는 수많은 자동화 도구를 제공하므로 어떤 환경이든지 손쉽게 HTTPS를 설정 할 수 있습니다. 여기에서는 Windows Server 2012 환경에서 win-acme 자동화 도구를 사용하여 발급부터 재발급까지 자동화하는 과정을 소개합니다. 참고로 Let's Encrypt에서 인증서를 발급받으려면 도메인이 연결된 웹사이트가 필요합니다. 도메인이 없거나 IIS 웹서버에 대한 관리 권한이 없다면 작업을 진행 할 수 없습니다. win-acme 요구사항 공식적으로 Windows Server 2012 (IIS 8.0 이상)을 지원합니다. Wind..
2020.04.23 20:18
Database
-
[EF Core] ASP.NET Core 프로젝트에서 Maria DB 사용
이 포스트는 ASP.NET Core 3.0 프로젝트에서 EF Core를 사용하여 Maria DB와 연동하는 방법에 대해 소개합니다. 참고: Maria DB란? MySQL은 오라클에 인수된 후 상업적인 이용에 대해서는 유료로 제공되고 있습니다. MySQL의 핵심 개발자였던 마이클 몬티 와이드니어스(Michael Monty Widenius)는 이에 반발하여 기존 MySQL 소스를 기반으로 Maria DB를 개발하여 오픈소스(GPL v2)로 제공하고 있습니다. Maria DB는 MySQL과 동일한 소스코드를 바탕으로 하므로 구조나 사용방법, API들이 상당 부분 호환됩니다. MySQL이나 MariaDB는 과거와 다르게 상당부분 안정성이 검증된 상태이며 삼성, CGV, 카카오 등 수많은 기업들에 의해 사용되고 ..
2020.04.21 09:44 -
[EntityFramework.Core] Migration 오류 대응
EntityFramework.Core 마이그레이션 중에 나타나는 주요 오류에 대한 해결방안을 정리하였습니다. 오류1: Project 'Default' is not found. VisualStudio의 Package Manage Console에서 Migration 명령 실행 시 위의 문구가 출력될 경우가 있습니다. NuGet Package Manager가 선택된 프로젝트를 찾지 못한다는 의미로써, NuGet Package Manager의 버그로 보입니다. 문제 해결방안 여러가지가 있는데, 하나 하나 실행해보시고 문제가 해결되는지 확인해보세요. VisualStudio를 재시작하신 후 문제가 해결되는지 확인해보세요. 재시작 후에도 문제가 문제가 지속될 경우 관리자 모드로 VisualStudio를 실행하고 다시..
2020.03.19 19:41 -
[DB] MS SQL - XML 데이터 조회하기
XML 데이터 조회 query(): 지정된 경로의 XML을 반환합니다. -- People/Report하위 XML을 반환 query('/People/Report') value(): 지정된 값을 반환합니다. -- Attribute ID가 3인 People/Report의 Name Attribute 값을 반환 value('//People/Report[@ID=3]//@Name') exist(): 지정된 경로의 값이 NULL이면 0, 아니면 1을 반환합니다. XML 입력 XML을 Insert하기 위해서는 CONVERT 변환함수를 통해 XML type으로 변경해야 합니다. INSERT INTO People (Name, xReport) VALUES('홍길동', CONVERT(XML, N'XML데이터', 1)) Conv..
2016.05.14 17:56 -
ASP.NET 2.0 DB
ASP.NET 2.0은 다음과 같은 다양한 Provider를 제공합니다. Membership Role Management Site Map Profile Session State Web Events Web Parts Personalization Protected Configuration 이 Provider들에서 관리하는 정보는 aspnet_regsql.exe 도구를 통해서 생성됩니다. 생성된 Table이 무엇이고 목적에 대해서 정리합니다. 이름 설명 aspnet_Applications 각 Application을 구분하기 위한 Scope 데이터를 제공합니다. aspnet_Membership SQL Membership Provider가 사용하는 Membership정보를 저장하기 위해 사용합니다. aspnet_..
2016.04.23 18:33
Network
-
[HTTP] 301과 302 Redirect의 차이
HTTP Response Status Code는 요청에 대한 웹서버의 응답을 나타내는 코드를 말합니다. 이 코드를 바탕으로 웹브라우저나 검색엔진 크롤러는 요청을 어떻게 처리해야할지 판단하게 됩니다. 유명한 코드로는 404 Page Not Found가 있습니다. 301과 302 코드는 사용자를 새로운 URL로 이동시키는 코드입니다. 하지만 SEO측면에서 보면 단순한 페이지이동 외에 중요한 차이가 존재합니다.301과 302 코드란 도대체 무엇을 말하는 건가요?IANA에 등록된 레지스트리에 따르면 HTTP 상태 코드는 5개의 클래스로 구분됩니다. HTTP 상태코드의 첫번째 자리 숫자는 이 코드가 어떤 클래스에 속하는지 나타냅니다. 301과 302는 "3XX Redirection" 클래스에 속합니다.Redire..
2017.01.05 09:21 -
IP Masquerade 란?
IP Masquerade(또는 MASQ, IPMASQ)란 리눅스의 NAT(Network Address Translation) 기능으로써 내부 컴퓨터들이 리눅스 서버를 통해서 인터넷 등 다른 네트워크에 접속할 수 있도록 해주는 기능입니다. 내부 컴퓨터들이 생성한 모든 네트워크 요청은 MASQ를 통해서 리눅스 서버의 외부 공인IP로 변환되어 인터넷에 연결되기 때문에, 외부에서는 리눅스 서버의 IP만 알 수 있을 뿐, 내부 컴퓨터의 존재를 전혀 알 수 없습니다. 이는 높은 보안성이라는 장점을 제공하지만, 반면에 외부에서 먼저 내부컴퓨터와 통신을 시도할 수 없기 때문에 상당한 제약으로 작용할 수 있습니다. 이러한 제약은 포워딩(iptable 이용)을 통해서 해소할 수 있습니다. 즉, 외부에서 특정 포트나 프로토..
2014.03.19 20:58 -
Custom URI Scheme 만들기
인터넷을 하다가 URL 링크가 특정 어플리케이션과 연결되는 경우가 있다. 어떻게 이걸 구현했을까 정보를 찾아 여기에 정리하였다. 모두 URI Scheme를 통해서 구현하는 것이었고 구현도 생각보다 간단하다.URI Scheme URI는 특정 Resource에 대한 위치정보를 제공한다. 그래서 링크를 열었을 때 해당자원(HTML 문서, 이미지 등)을 찾아 내려받게 된다. 하지만 내려받은 후 해당자원이 어떤 유형이고 어떻게 처리할지는 어떻게 식별하는 것일까? 확장자로 식별할까? 여러 방법이 있겠지만 그중 하나가 바로 URI Scheme을 통한 식별이다. URI의 시작부터 ':'(콜론)까지의 정보가 URI Scheme이다. http://www.naver.com : 여기서는 http가 URI Scheme이며 이 ..
2013.01.20 12:04 -
PING 허용/차단
PING 명령어란? Ping 명령어는 해당 서버가 현재 동작 중인지 아닌지 확인할 수 있는 가장 간단한 방법으로써 지정된 일정량의 데이터를 주고 받음으로써 회선의 상태를 측정하는 간단한 명령어 입니다. Ping 명령어는 ICMP Protocol을 이용하며 이는 OSI 7 Layer 상에서 TCP 또는 UDP Protocol보다 하위인 Layer 3에 위치하며, 따라서 TCP 또는 UDP PORT와 무관하게 동작합니다. OSI 7 Layer Model Layer Name Protocol 7 Layer Application Layer HTTP, FTP, DHCP, TFTP, SMTP, DNS, SNMP, telnet ... 6 Layer Presentation Layer 5 Layer Session Laye..
2011.08.22 21:31
Mobile
-
[Flutter] 오류: Execution failed for task app:mergeDebugNativeLibs
오류내용 Flutter에서 Android 빌드 시 다음과 같은 오류가 발생했을 때 대응 방법입니다. * What went wrong: Execution failed for task ':app:mergeDebugNativeLibs'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > More than one file was found with OS independent path 'lib/x86/libprebuilt.so' 발생원인 안드로이드 시스템은 개발 성능을 향상시키기 위해 방대한 캐시를 생성하며 삭제하지 않습니다. 이러한 캐시들은 종종 문제를 일으키기도 하는데, 예를들어 캐..
2020.12.01 15:51 -
[Dart] DateTime , int, double 연산
Flutter 개발 시 DateTime, Number를 처리하기 위해 자주 사용되는 연산 DateTime DateTime 생성 var now = DateTime.now(); //현재일자 var then = new DateTime(2020, 11, 4, 15, 23, 58, 0, 0); //각 매개변수는 Optional Parameter DateFormat DateTime을 지정한 형식 문자열로 변환하려면 DateFormat Class를 사용해야합니다. (https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html 참고) /* 사전준비 1) 먼저 pubspec.yaml의 dependencies에 아래 패키지 추가 intl: ^0.16.0 2) ..
2020.11.04 17:23 -
[Flutter] Key란 무엇인가?
기본적으로 플러터의 위젯은 생성자에서 Key매개변수를 받을 수 있습니다. 하지만 그렇게 많이 사용되지는 않습니다. 위젯이 위젯트리에서 위치를 변경하더라도 Key는 상태정보를 유지합니다. 따라서 리스트의 컬렉션이 수정될 때 스크롤 위치를 기억하거나, 상태를 기억해야할 때 Key는 유용하게 사용될 수 있습니다. 이 포스트는 구글의 When to Use Key 비디오를 바탕으로 하는 내용입니다. Key에 대한 상세정보 대부분의 경우 Key가 필요하지 않습니다. Key를 사용해도 특별한 문제가 없지만 별로 필요한 것도 아니고 불필요하게 공간만 차지할 뿐이죠. new 키워드를 사용한다거나, 혹은 변수타입을 양쪽변에 기재하는 것과 같은 불필요한 일입니다. (예: Map aMap = Map();) 그러나 Key를 사..
2020.03.21 23:18 -
[Xamarin.Forms] XAML Hot Reload
이 포스트는 https://devblogs.microsoft.com/xamarin/xaml-hot-reload/를 참고하여 작성되었습니다. 2019년 7월 11일 Xamarin Developer Summit에서 Xamarin.Forms를 위한 XAML Hot Reload 기술이 공개되었습니다. XAML Hot Reload를 통해 XAML 코드 수정 결과를 빌드나 배포하는 과정없이 실시간으로 확인하실 수 있습니다. 이를 통해 UI를 수정하고 빌드하고 결과를 확인하는 반복작업에 소요되는 시간을 획기적으로 단축시킬 수 있게 되었습니다. XAML Hot Reload는 모든 Third-party 컨트롤과 라이브러리를 지원합니다. 시뮬레이터, 에뮬레이터, 모바일 장치 등 모든 Deployment Target에서 동..
2019.08.06 15:14
Others
-
Edge 브라우저 IE Mode 문제해결
Edge 브라우저의 IE Mode에서 발생할 수 있는 문제와 해결방법을 정리하였습니다. IE Mode에서 사이트 디버깅 IE Mode에서 디버깅은 F12 IEChooser를 통해서 가능합니다. F12 IE Chooser는 본래 IE 기반 오피스 애드온 디버깅 프로그램이었습니다. Windows 10과 11 부터는 기본적으로 윈도우에 추가되며 IE Mode 웹사이트를 디버깅하는데 사용할 수 있습니다. 실행하려면 키보드의 [Windows + R]을 눌러주세요. 실행 환경에 따라 다음과 같이 입력 후 [확인] 버튼을 클릭합니다. 64비트 환경 : C:\Windows\SysWOW64\F12\IEChooser.exe 32비트 환경 : C:\Windows\System32\F12\IEChooser.exe 디버깅할 사이..
2021.12.09 11:07 -
[원격데스크톱] 내부 오류가 발생했습니다
오류내용 원격데스크톱 접속을 시도하면 아래와 같은 오류가 나타날 수 있습니다. 이 오류가 발생한다면 서버에서 [이벤트뷰어]를 실행해보세요. 다음과 같은 로그가 기록되어 있다면 이 메뉴얼을 시도해보시기 바랍니다. 원본: Schannel 이벤트 ID: 36870 설명: TLS 서버 자격 증명 개인 키에 액세스하려고 할 때 치명적인 오류가 발생했습니다. 암호화 모듈에서 반환된 오류 코드는 0x8009030D. 내부 오류 상태는 10001입니다. 오류원인 서버의 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 폴더에는 로컬 RSA 암호화 키 파일이 존재합니다. 서버에서 이 RSA 암호화 키 파일에 접근할 수 없는 경우 이 오류가 발생합니다. 이러한 문제는 아래와 같은 이유로..
2021.10.13 14:34 -
Edge 브라우저의 IE Mode 활성화
2022년 6월 15일부터 Windows 10에서 IE 브라우저가 제거됩니다. 이후로는 IE 브라우저를 실행하더라도 자동으로 Edge 브라우저로 전환되게 됩니다. 만약 IE 브라우저를 반드시 사용해야하는 웹사이트나 Silverlight, ActiveX가 포함된 웹사이트는 Edge 브라우저의 IE Mode를 사용해야합니다. IE Mode는 적어도 2029년까지 지원될 예정입니다. 여기서는 IE Mode를 사용하는 방법에 대해 안내해 드립니다. IE Mode 활성화 2021년 5월 28일 기준으로, Edge 브라우저에서 IE Mode 기능은 비활성화되어 있기 때문에 활성화가 필요합니다. Edge 브라우저를 실행하고, [설정]으로 이동합니다. (또는 주소 표시줄에 edge://settings/defaultbr..
2021.05.28 13:05 -
[Azure] KeyVault Purge
Keyvault Soft delete Azure KeyVault를 생성할 때, 아래 그림처럼 Soft delete 기능을 활성화 할 수 있습니다. Soft delete 기능이 활성화되면 KetVault에 추가된 값들이 즉시 삭제되지 않으며, retention period(days)에 지정된 날짜(7~90일 사이) 동안 deleted 상태로 남아있게 됩니다. 만약 deleted 상태의 값을 완전히 삭제하고 싶다면 Purge 명령을 사용해야 합니다. Purge는 Azure Portal에서는 사용 할 수 없으며 PowerShell, CLI, REST, .NET(C#)을 통해서만 진행할 수 있습니다. 여기서는 PowerShell을 통해서 Purge 명령을 사용하는 방법을 정리합니다. PowerShell로 Azu..
2020.06.03 11:36