본문 바로가기

Programming109

[.NET] Google Gmail SMTP 설정 방법 & 전송 기능 사이드 프로젝트에 이메일 전송 기능을 구현해야 하는 상황이다. SMTP 서버를 구축하기는 귀찮고 돈이 들어가서 하루에 2,000개 정도면 충분할 것 같아서 Gmail SMTP를 사용하기로 했다. 참고 링크 예전에 이용했을 때와 많이 달라져서 달라진 부분이 있는 것 같다. - Gmail IMAP access 설정은 사용으로 바꾸지 않아도 동작한다. Gmail > 설정 > 전달 및 POP/IAMP > IMAP 액세스 Gmail > Settings > Forwarding and POP/IAMP > IMAP access - "보안 수준이 낮은 앱 및 Google 계정 사용 설정"은 더 이상 지원하지 않는다(참고). 1. Gmail SMTP 설정 방법 a. Google 계정 페이지로 이동한다(https://mya.. 2022. 11. 7.
[git] .gitignore 파일이 적용되지 않을 때 git rm -rf --cached . git add . 어느 시점부터 repository에. gitignore가 제대로 동작하지 않고 있어서 rider의 .idea 폴더가 커밋되고 있었다. 위 명령어로 해결했다. https://stackoverflow.com/a/25436481/19392359 Gitignore not working My .gitignore file isn't working for some reason, and no amount of Googling has been able to fix it. Here is what I have: *.apk *.ap_ *.dex *.class **/bin/ **/gen/ .gradle/ build/ local.properties... stackoverf.. 2022. 11. 6.
[SQL] WHERE 절 조건에 IF/ELSE 조건 넣기 누군가 물어봤다. "WHERE 절에 IF/ELSE 조건을 넣으려면 어떻게 해?" 처음에는 T-SQL의 IF, ELSE를 말하는 줄 알았는데 어떤 조건이 TRUE 일 때는 조건 1을 적용하고, FALSE 일 때는 조건 2를 적용하고 싶다는 것이었다. SELECT * FROM #TEMP_TABLE WHERE ( Condition = TRUE -- IF AND ColumnA = 'A' -- 조건1 ) OR ( Condition = FALSE -- ELSE AND ColumnB = 'B' -- 조건2 ) 대충 표현하면 아래 조건이 적용된 결과가 조회된다. if (Condition == TRUE) { ColumnA == 'A' } else { ColumnB == 'B' } 기본적인 질문이었는데 몇 분간 뇌정지를 .. 2022. 11. 2.
[.NET Core] Razor 파일 코드 변동사항 바로 적용되도록 설정하기 .NET 프레임워크에서 aspx 파일은 소스코드 변경 후 저장하면 디버깅 브라우저에서 새로고침을 하면 즉시 변동사항이 잘 적용되었다. .NET Core에서 cshtml 파일은 소스코드 변경 후 저장하면 디버깅 브라우저에서 새로고침해도 변동사항이 적용되지 않는다. VS 2022의 hot reload 기능을 사용해도 3~4번에 한 번 정도 제대로 동작하는 현상이 있었다. 😥 드디어 오늘 해결 방법을 찾았다. 먼저 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation Nuget package를 설치한다. 그리고 Program.cs에 아래 코드를 추가하면 된다. var mvcBuilder = builder.Services.AddRazorPages(); // 혹은 // var .. 2022. 10. 26.
[git] git flow 설정 제거하기 최근 개발팀의 branch 관리 전략이 git flow에서 github flow로 바뀌었다. Gitkraken에 여전히 git flow 섹션이 남아있는 것을 볼 수 있다. git bash에서 아래 명령어로 제거할 수 있다. git config --remove-section "gitflow.path" git config --remove-section "gitflow.prefix" git config --remove-section "gitflow.branch" 다시 git flow를 설정하려면 아래 명령으로 다시 설정하면 된다. git flow init 2022. 10. 25.
[C#] Closure 문제 아래 코드는 어떤 결과가 출력될까? 정답은 "10"이 10번 출력된다. 클로저(Closure) Lexical scope 내의 변수를 사용하는 일급 함수를 말한다. Lexical scope 변수가 참조될 수 있는 영역. 일급 함수(first-class functions) 함수가 다른 변수를 다루는 것처럼 취급할 수 있을 때 그 언어는 일급 함수를 갖는다고 한다. C#에서 anonymous method, lambda expression로 일급 함수를 지원한다. 다시 예시로 돌아가자. List list = new(); for (int i = 0; i Debug.WriteLine($"{i}")); } list.ForEach(action => action()); .. 2022. 10. 21.
[.NET Core] wwwroot 폴더 밖에 있는 file download wwwroot 폴더 밖에 있는 파일을 download 해야 하는 경우가 있다. 그럴 땐 아래와 같이 PhysicalFile() 를 통해 PhysicalFileResult 를 리턴하면 된다. return PhysicalFile(filePath, contentType); // [참고] 파일명이 fileName인 첨부파일 return PhysicalFile(filePath, contentType, fileName); https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile?view=aspnetcore-6.0 ControllerBase.PhysicalFile Method (Microsoft.As.. 2022. 10. 19.
[C#] Any() vs Count() 성능 비교 50,000 records 테스트 결과 Any(), Count() 모두 Condition 없이 사용했을 때 빠르고 Condition을 사용하는 경우 Any()가 성능이 훨씬 좋았다. 하지만, Count property를 사용하는 경우가 가장 빠르다. Count() method는 모든 element들을 iteration 해야 하기 때문에 O(n)이다. 반면에 Count property는 _size private 변수를 직접 사용하므로 O(1)이다. 결론: Count property를 사용할 수 있으면 사용하고, 그렇지 않으면 Any()를 사용하자. https://code-maze.com/any-vs-count-dotnet/ 2022. 10. 12.
[MAUI] 생체인증 라이브러리 적용하기 이제 모바일에서 거의 필수로 자리잡은 생체 인증. 쉽게 구현할 수 있는 라이브러리를 발견했다. https://github.com/smstuebe/xamarin-fingerprint GitHub - smstuebe/xamarin-fingerprint: Xamarin and MvvMCross plugin for authenticate a user via fingerprint sensor Xamarin and MvvMCross plugin for authenticate a user via fingerprint sensor - GitHub - smstuebe/xamarin-fingerprint: Xamarin and MvvMCross plugin for authenticate a user via fingerpr.. 2022. 9. 5.