글쓴이 보관물: Toughman

아파트 현관용 패킹

아파트로 이사온 지 얼마 되지 않았고 가을과 겨울을 처음으로 보내게 되었습니다. 여름에는 몰랐는데 겨울이 되니 현관문이 바람이 불거나 집안 혹은 다른집의 출입문을 열고 닫을 때 들썩이며 덜컥덜컥 소리가 나는 것을 알게 되었습니다. 이러한 문제를 해결하고자 현관문용 패킹을 구매하게 되었습니다. 적당한 것이 없을까 인터넷 쇼핑몰에서 검색하다가 적합한 것 같아 이 제품을 구매하게 되었습니다.

배송된 제품의 내용물

배송된 제품의 내용물

친절하게도 설치 설명서가 동봉되어 있어서 그대로 따라하면서 설치를 완료하였습니다. 상자를 열었을 때 화학제품 특유의 냄새가 조금 나는데 심한 정도는 아니였습니다. 아마 이런류의 제품을 구매하시면 초기에 어느 정도 냄새가 나는 것은 예상하셔야 할 것 같습니다.

일단 현관문에 부착되어 있던 오래된 패킹을 떼어내었습니다. 떼면서 살펴보니 문에 닿는 부분이 눌려 있었습니다. 그래서 그 틈새로 차가운 바람도 많이 들어오고 바깥의 소음도 좀 크게 들리고 들썩대는 현상이 있었던 것 같았습니다. 거기에다가 먼지도 많이 묻어 있어서 현관문 틀 부분도 간단하게 청소한 후 설치를 시작하였습니다. 설치 시간은 대략 10분 정도 소요되었던 것 같습니다. 길이만 잘 맞추면 되고 힘이 들어가거나 하지는 않았습니다.

기존 패킹 단면

기존 패킹 단면(위쪽이 문에 닿는 부분인데 눌려있습니다)

제품의 크기가 커 보여서 현관문의 틈에 맞을까 생각했는데 실제로 설치를 해 보면 그렇지 않았습니다. 설치를 하면서 느낀 것인데 모서리 부분에서 잘라줄 때 좀 넉넉하게 하는 것이 좋을 것 같았습니다. 처음에 이정도면 되겠지 하고 잘랐는데 실제 설치하고 보니 약간 모자란 것 같았습니다. 나머지 면은 조금 여유있게 잘라서 남으면 조금씩 조절하면서 잘라 딱 맞게 설치하였습니다. 아니면 줄자로 정확하게 재서 미리 잘라 놓고 설치하는 것이 더 좋겠다는 생각이 들었습니다.

새 패킹 단면

새 패킹 단면

처음에는 몰랐는데 설치를 하다 보니 긴 패킹이 바닥에 닿게 되는데 먼지가 정말 잘 묻었습니다. 이미 먼저가 다 묻어버린 상태여서 설치 후 물티슈로 한번 닦아내었습니다. 깨끗한 거실이나 방에서 미리 잘라놓고 빨리 설치하는 것이 더 좋은 방법일 것 같았습니다.

다 설치한 후에 문을 닫아 보니 디지털도어락이 잠기다가 중간에 멈추어 경고음이 나왔습니다. 구매시에 알고 있었던 사항이었는데 패킹이 교체되면서 현관문의 틈새 간격이 좁아져서 그런 것 같았습니다. 아마도 자리를 잡으면 자연히 사라질 것이라고 생각됩니다.

이제 원래의 목표인 들썩거림을 확인해 보았는데 설치한 후로는 그런 현상이 없었습니다. 완전히 밀폐되는 정도는 아니지만 덜컥덜컥 소리가 나지 않으니 만족합니다. 처음에 나던 냄새도 금방 사라져서 불편한 것은 없었습니다.

새 패킹 설치 후

새 패킹 설치 후

비용도 많이 들이지 않고 원하던 목적에 부합하여 만족합니다.

C# – DataTable활용

C# 에서 제공하는 자료 구조가 많이 있지만 저는 DataTable을 즐겨 사용합니다.
2차원 배열과 같은 구조로 되어 있고 실제 DB Query 의 결과값을 Tool 에서 보는 것과 동일한 형태로 값을 가지고 있습니다.

DataTable을 컨트롤에 직접 바인딩할 수도 있고 배열처럼 반복하면서 출력할 수도 있어서 상황에 따라 다양하게 이용하게 됩니다.

프로젝트를 진행하면서 유용하였던 몇 가지 DataTable 활용 방법을 정리해 보았습니다.

1. DataTable의 내용을 다시 Query하여 그 결과를 DataTable로 대입하는 방법
간혹 Query 결과를 가지고 있는 DataTable을 어떤 조건으로 다시 필터링하거나 결과를 한정하여야 하는 경우가 생기게 됩니다. 물론 SQL 문이나 Procedure를 작성하여 분리할 수 있지만 번거로운 것이 사실입니다. 이때 DataTable에 람다 식을 사용하여 Query할 수 있습니다. 그 결과를 DataTable에 대입하여 다시 사용할 수 있습니다.

DataTable contactType = ContactSetting.AsEnumerable().Where(i => i.Field<String>(“contact_check_yn”) == “Y”).CopyToDataTable();

 

위의 예는 ContactSetting DataTable의 내용 중 contact_check_yn 필드의 값이 ‘Y’인 것만을 추출하여 contactType DataTable에 대입하는 구문입니다. 이런식으로 사용하여 DataTable의 내용을 별도의 DB 연결 없이 필터링하여 값을 한정할 수 있습니다.

2. DataTable의 내용 중 특정한 조건으로 필터링한 값이 있는지 판단하는 방법
DataTable 내용 중 특정한 조건의 값이 존재하는지 판단할 수 있습니다. 물론 반복문으로 특정한 필드의 값을 비교하여 판단할 수 있지만 위의 방법과 비슷하게 추출할 수 있습니다.

DataTable respondent = getRespondentDetailInfo(listNo);
var respondentEditItemRows = respondent.AsEnumerable().Where(i => i.Field<String>(“list_edit_yn”) == “Y”);if (respondentEditItemRows.Any() == false)
{
pnlRespodentEditButton.Visible = false;
}

 

위의 예는 respondent DataTable 내의 list_edit_yn 필드의 값이 ‘Y’인 행이 존재하는지 여부를 판단하는 코드 입니다. Query한 결과를 Any() 메소드로 값이 존재하는지 판단하여 그 후속 작업을 진행하는 코드 입니다.

3. DataTable내의 특정한 Row 삭제
여러가지 이유로 DataTable내의 특정한 Row를 삭제하여야 하는 경우가 있습니다. DataTable에서 값을 유일하게 구별할 수 있는 Primary key 필드를 필터링하여 삭제하는 방법입니다.

int labelSeq = Convert.ToInt32(option.columnScreenFilter.Items[i].Value);var deleteRow = columnLabelList.AsEnumerable().Where(x => x.Field<Int32>(“label_seq”) == labelSeq).Cast<DataRow>().FirstOrDefault();
columnLabelList.Rows.Remove(deleteRow);

 

1번의 예와 같이 비슷하게 columnLabelList DataTalbe의 label_seq 필드의 값이 labelSeq 변수의 값과 동일한 Row를 추출하고 그 Row를 DataTable에서 삭제하는 방법입니다.

4. DataTable을 대상으로 배열에 존재하는 값에 해당하는 Row만 가져와서 DataTable로 반환하는 방법
1번의 예와 비슷하다고 할 수 있는데 특정한 값이 아니라 배열내에 존재하는 값을 대상으로 한다는 것이 다릅니다.

string[] topBannerItemResponseValue = new string[10];for (var j = 0; j < topBannerItemResponseValue.Length; j++) { topBannerItemResponseValue[j] = Convert.ToInt32(topBannerLabelListResult.Rows[j][“response_value”]).ToString(); }

DataTable topBannerLabelListNew = topBannerLabelList.AsEnumerable().Where(x => topBannerItemResponseValue.Contains(x.Field<String>(“label_values”))).CopyToDataTable();

 

string 배열 변수 topBannerItemResponseValue에 추출하고자 하는 값을 대입합니다. topBannerLabelList DataTable의 label_values 값을 대상으로 배열변수내의 값과 같은 결과를 Query하여 topBannerLabelListNew DataTable에 대입하는 코드 입니다.

5. DataTable을 특정한 필드로 정렬
DB를 Query하여 가져온 결과를 다른 필드의 값을 기준으로 정렬하여야 하는 경우가 있습니다.

DataTable banner = getBanner();DataView dv = banner.DefaultView; dv.Sort = “sort_order”;

banner = dv.ToTable();

 

banner DataTable 내의 sort_order 필드로 정렬하여 그 결과를 다시 banner DataTable에 대입하는 코드 입니다.

DataTable을 이용하시는데 도움이 되었으면 좋겠습니다.