본문 바로가기

모두보기

[Spring] RDB 에서 계층적인 데이터 구조 관리 전략 - Closure table 관계형 데이터베이스에서 계층적인 데이터 구조 관리 관계형 데이터베이스 (RDB) 는 계층적인 데이터 구조를 표현하기에 적합하지 않은 관계형 모델을 기초로 설계되어 있습니다. 반면에 관계형 데이터베이스를 활용하는 서버는 주로 객체지향 언어로 작성되며 내부적으로 이진트리와 같은 계층적인 데이터 구조를 자주 활용합니다. 따라서 서버에서 그래프 구조의 데이터를 계층적인 데이터 구조 관리에 적합하지 않은 관계형 데이터베이스에 어떻게든 저장하려면 아래와 같은 전략이 필요합니다. 관계형 데이터베이스에 그래프를 표현하는 전략 4 가지 Adjacency list Path enumeration Nested set Closure table 계층적인 데이터 구조를 관계형 데이터베이스에 저장하게 되면 서버가 데이터베이스의 무결..
[Spring] RDB 에서 계층적인 데이터 구조 관리 전략 - Adjacency list 관계형 데이터베이스에서 계층적인 데이터 구조 관리 관계형 데이터베이스 (RDB) 는 계층적인 데이터 구조를 표현하기에 적합하지 않은 관계형 모델을 기초로 설계되어 있습니다. 반면에 관계형 데이터베이스를 활용하는 서버는 주로 객체지향 언어로 작성되며 내부적으로 이진트리와 같은 계층적인 데이터 구조를 자주 활용합니다. 따라서 서버에서 그래프 구조의 데이터를 계층적인 데이터 구조 관리에 적합하지 않은 관계형 데이터베이스에 어떻게든 저장하려면 아래와 같은 전략이 필요합니다. 관계형 데이터베이스에 그래프를 표현하는 전략 4 가지 Adjacency list Nested set Path enumeration Closure table 계층적인 데이터 구조를 관계형 데이터베이스에 저장하게 되면 서버가 데이터베이스의 무결..
[C#] 예외처리 Best Practices 예외처리 Best Practices 1. 리소스를 사용하다가 오류가 발생했을 때 finally 를 활용하자. IDisposable 인터페이스를 구현한 리소스를 사용하다가 오류가 발생했을 때 오류만 잡고 리소스를 해제하는 걸 깜빡하는 경우가 자주 있습니다. 리소스를 사용하다가 오류가 발생할 만한 부분에 finally 문을 정의하고 리소스를 Dispose() 하여 메모리가 누수되지 않도록 합시다. try { var resource = new Resource(); } finally { resource.Dispose(); } 2. 예외를 발생시킬 때와 방지해야 할 때는 발생 빈도로 결정하자. 예외를 반드시 try/catch 문으로 해결할 필요는 없습니다. 예외의 발생 빈도가 높다면 예외가 발생하지 않도록 미연에..
건축주를 위한 건축 토막 상식 - 설계도서 건축주를 위한 건축 토막 상식 건축주가 알아두면 건축가나 시공사와 대화할 때 도움이 될 만한 토막 상식을 끄적여 봤습니다. 읽으시면서 반드시 유의하실 점은 저는 소프트웨어 개발자입니다. 따라서 건축과 일체 관련있는 업무를 해본 적이 없습니다. 따라서 아래 내용은 인터넷과 도서, 잡지 등에서 얻은 단편 정보를 제 임의대로 해석한 내용이니, 참고만 해주시길 바랍니다. 설계도서 건축물을 완성하기 위해 필요한 모든 설계 문서들 설계도서는 단독주택의 디자인과 품질을 정하는 문서입니다. 설계도서는 시공의 품질과 공사비 산정의 기준이 됩니다. 따라서 단독주택을 설계할 때도 당연히 설계도서를 작성해야 합니다. 정말 중요한 문서이기 때문에 국토교통부 건축정책과 (044-201-3763) 에서 행정규칙으로 건축물의 설계도..
[Xamarin] 픽셀 및 기기 독립 Unit (Device-Independent Units) 픽셀 및 기기 독립 Unit Xamarin 은 크로스 플랫폼, 더 나아가 모든 플랫폼을 지원하려는 야망을 가진 프레임워크입니다. 따라서 기기마다 다른 Unit 기준을 충족시켜야만 합니다. 개발자에게는 이게 무슨 소린지 감이 잡히질 않습니다. 왜냐하면 개발자는 디지털 단위인 픽셀 에 익숙해져 있기 때문입니다. 개발자에게 화면이란 픽셀로 이루어져 있는 장치이며, 픽셀만 맞추면 화면에 잘 표시될 것 같은 헛된 믿음을 가집니다. 하지만 디자이너에게 중요한건 실제 화면에 표현되는 물리적인 비율이 중요합니다. 픽셀만 맞춰서 개발을 하게 되면 화면에 따라 크기가 달라 보입니다! 특히 스마트폰의 화면 크기는 모두 제각각입니다. 심지어 화면마다 표현할 수 있는 픽셀 수도 기기마다 다릅니다. 간단한 실험으로 픽셀을 믿을 ..
[Xamarin] 성능 개선 - OneTime Binding 성능 개선 - OneTime Binding Compiled Binding 보다 성능을 더 끌어올릴 수 있는 바인딩 방식으로 OneTime Binding 이 있습니다. 이름에서 알 수 있듯이, 최초에 BindingContext가 바뀔 때만 값이 바인딩되고 INotifyPropertyChanged 이벤트를 구독하지 않는 방식입니다. 따라서 이벤트를 구독하고 처리하는 과정이 없어지므로 성능이 개선되는 원리입니다. OneTime Binding 방식이 도움이 되는 때는 UI가 처음 생성될 때만 바인딩하고 이후로는 값이 변경되지 않을 때입니다.OneTime Binding이 유용할 수 있는 사례를 아래에 소개드리도록 하겠습니다. Command를 바인딩할 때 Command 같은 경우 메서드를 바인딩하는데, 런타임에 메..
[.NET] .NET 통합과 MAUI 란? .NET MAUI 란? .NET MAUI 에 앞서, 마이크로소프트가 .NET 5 에 왜 이렇게 공을 들이는지를 이해하셔야 합니다. .NET 5 는 현재 플랫폼 별로 파편화되어 있는 프레임워크들을 통합하기 위한 노력의 산물입니다. 현재 프레임워크는 크게 플랫폼 별로 아래와 같이 나뉘어 있습니다. 이렇게 파편화된 프레임워크로 인해 지원하는 기능이 프레임워크 별로 달라지기도 하고, 공통으로 사용하고 싶은 기능이 있으면 각 프레임워크마다 지원하는지 확인해야 하는 등의 문제가 끊이지 않았습니다. 그래서 나름 임시 방편으로 제공한 프레임워크가 .NET Standard 프레임워크입니다. 이러한 상황에서 2019년 05월 06일 마이크로소프트 블로그에 .NET 5 를 소개하는 글이 올라오면서 다음과 같이 파편화된 프레..
[Xamarin] ResourceDictionary 깔끔하게 정리 ResourceDictionary 깔끔하게 정리 아래처럼 View 마다 ResourceDictionary가 있을 경우, 중복되는 XAML 코드도 발생하게 되고 같은 객체를 중복하여 생성하게 되므로, 비효율적입니다. ContentViewA.xaml #FFFFFF 따라서 먼저 아래처럼 ResouceDictionary를 분리된 파일로 만듭니다. ContentViewA.xaml ResourceDictionary.xaml #FFFFFF 하지만 ResourceDictionary.xaml 처럼 모든 리소스를 한 곳에서 관리하게 되면 불필요한 리소스까지 공유하게 되는 문제가 있습니다. 따라서 아래처럼 리소스를 자신만의 기준에 맞춰 분리하도록 합니다. ContentViewA.xaml ResourceDictionary.x..