May 2013
1 post
MongoDB 스키마 디자인의 함정
역주: http://d.hatena.ne.jp/hiroppon/20130326/1364265864 의 글을 번역. 위의 글은 다음 글을 일본어로 번역하면서 코멘트를 추가한 것임 http://blog.serverdensity.com/mongodb-schema-design-pitfalls/  MongoDB를 간단하게 시작할 수 있는 이유 중 하나는 “스키마 디자인을 생각하지 않아도 된다”는 것이다. 단순히 데이터를 넣고 나중에 쿼리하면 된다. 따라서 초기에 개발을 시작할 때 편리하며 나중에 문서의 구조를 변경할 때에도 이점이 된다. 그러나… Schemaless가 스키마 설계를 하지 않아도 된다는 의미는 아니다! 따라서 다른 데이터베이스들처럼 성능 향상 및 확장 가능하게 하기 위해서는...
May 18th
January 2013
6 posts
exists / apply를 이용한 쿼리 비교
일별로 데이터를 집계해 넣는 테이블이 있다. 원본 데이터가 제 날짜에 들어오지 않았다면 그 날의 데이터는 빈다. 일별 데이터 건수는 몇만에서 십만단위가 될 수도 있다. (더 많을 수도 있고) 목표는 데이터가 들어온 날만 찝어서 알려주는 쿼리 작성. 처음에는 위에 있는 exists를 이용한 서브쿼리를 짰는데, 나중에 비슷한 것을 다시 만들면서 2005부터 추가된 apply 구문을 사용했다. 이게 훨씬 빠른데.. 위 exist 구문의 상관쿼리를 any 연산자를 사용하여 다음과 같이 변경할 수 있다. select dt from dbo.bdt_Date d where d.dt between @monStart and @monend and d.dt = any ( select sDate from...
Jan 31st
SQL Server Agent 작업 실행중인지 판단
필요해서 급조해봄 use msdb go -- 해당 작업이 현재 실행중인가? create function dbo.fn_JobIsRunning ( @job_id uniqueidentifier ) RETURNS TABLE AS RETURN select is_running = case when stop_execution_date is null then 1 else 0 end from msdb.dbo.sysjobactivity ja where ja.job_id = @job_id and ja.session_id = ( SELECT top 1 session_id from msdb.dbo.syssessions order by session_id desc ...
Jan 18th
저장 프로시저 레코드셋 조사
당연한 이야기지만 소스를 가지고 있거나 스펙을 받거나 하는 것이 좋다. 그러나 불가피한 경우에는 다음과 같이 조사할 수 있다. SQL Server 2012 이상: sp_describe_first_result_set SQL Server 2008 R2 이하: 바로 볼 수 있는 방법이 없어서 다음과 같이 돌아가야 함. linked server 설정 변경이므로 좀 높은 권한이 필요할 듯 아래 예제에서 서버 이름은 SERVER00, 실행시킬 프로시저는 msdb..sp_help_jobstep -- 로컬 서버에 대해 잠시 data access를 켠다. 권한 필요. exec sp_serveroption 'SERVER00', 'data access', 'true' -- 결과를 임시 테이블에...
Jan 14th
관리자 계정이 아닌 계정으로 예약된 작업 돌리기
참고 링크 http://support.microsoft.com/kb/867466/ko 도메인 멤버 서버에서 예약된 작업을 돌릴 때 Run As에 지정된 계정이 관리자 그룹에 속하지 않음 이러면 작업 스케줄러에서 실행이 안되고 로그 (c:\windows\tasks\SchedLgu.txt) 에는 다음과 같이 남게 됨 ** 오류 ** 작업을 시작할 수 없습니다.. 특정 오류: 0x80070005: 액세스가 거부되었습니다. [작업 페이지 찾기] 단추를 사용하여 응용 프로그램을 찾으십시오.. 해결: CACLS를 이용해서 CMD.EXE 사용 권한 변경 CACLS %COMSPEC% /E /G "NT AUTHORITY\BATCH":R 일괄 작업 계정 셋업 작업을...
Jan 11th
파워셸 원격 세션에 non-admin 계정 사용 연결
선결 조건 서버 (ServerA로 칭함), 클라이언트 (ClientA) 에서 같은 이름, 같은 패스워드의 계정이 필요함. ex) 서버: ServerA\AccountA, 클라이언트: ClientA\AccountA 서버 설정 (관리자 권한) WinRM으로 접근 허가 winrm quickconfig winrm set winrm/config/client @{TrustedHosts="172.16.0.1"} (파워셸이라면) set-item wsman:\localhost\client\TrustedHosts "172.16.0.1" 예제의 172.16.0.1은 클라이언트의 IP로 대체 (파워셸에서, 관리자 권한) Non-Admin 계정도 세션을 열 수 있도록 설정 set-pssessionconfiguration...
Jan 4th
js 고속화 노하우 (잡지 요약)
기술잡지를 버리려다가 JS 고속화 노하우라는게 보여서 납득이 간 것만 추려서 정리해봄. 아마 다른 곳에도 많을 거라고 생각은 하지만.. 기본 오브젝트 확장시 속도가 느려질 수 있음 Object Boolean Array Date String RegExp Number 또한 window 개체에 직접 함수나 변수를 추가하는 것을 global 오염이라고 하는데, 이 경우 기능 충돌이나 변수 덮어쓰기 등을 불러일으킬 수 있음. Array.prototype["ex1"] = function(){}; String.prototype["ex2"] = function(){}; 범위 해결 (Scope resolution) 비용 var flat = function() {}; var nest = { lv2:...
Jan 1st
1 note
December 2012
1 post
SQLSafeCmd Freeware Edition (4.9.635)
뭘 잘못먹었나 인스톨러가 꼭 Trial로만 설치하는데, FreeEdition 이라고 DWORD값을 추가하고 값은 1을 넣어주면 됨. 서버 인스턴스명으로 자동 추가된 키값은 건드리지 말 것 레지스트리 Export: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Idera\SQLsafe\Backup Agent\Licenses] "FreeEdition"=dword:00000001
Dec 4th
October 2012
4 posts
증가 추세선 구하기 (선형, 최소제곱법)
아래 예제에서 tmp_daily_db_usage 테이블은 데이터베이스의 일별 용량을 파악하여 기록한 것이며, usage_type에는 데이터 / 로그 구분이 들어간다. 구별 카테고리를 세개나 뒀더니 (DB명, 데이터/로그, 사용량/잔여량) 쿼리가 복잡해진 것은 안자랑 ㅡㅡ DECLARE @dateA CHAR(10) = '2012-10-20' DECLARE @dateB CHAR(10) = '2012-10-30' ;WITH ds (input_dt,Cat1,Cat2,Cat3,Value) AS ( SELECT input_dt,[dbname],usage_type,'used',usedspacemb FROM dbo.tmp_daily_db_usage WHERE input_dt BETWEEN @dateA AND...
Oct 30th
1 note
SQL Server Agent 작업항목 나열
컬럼 설명: job_id: 작업 UUID (추적용) schedule_id: 스케줄 ID (작업:스케줄의 관계는 1:N임) job_name: 작업 이름 job_desc: 작업 설명 Running: 실행중인가 (1/0) NextRun: 다음 실행 시각 LastRun: 마지막 실행 시각 LastStatus: 실행 결과 (sysjobhistory.run_status), 0: 실패 LastDuration: 실행 시간 (초) job_time: 실행 시점 (하루중) (ex: 오전 8시, 매 5분 등) job_freq: 실행 시점 (월중) (ex: 매일, 매주 일요일, 매 2일 등) DateStart: 이 날부터 일정 사용 DateEnd: 이 날까지 일정...
Oct 26th
파티션 현황 조회용 한방쿼리
/* fg_name: 인덱스 또는 테이블 파티션의 PS에서 지정된 파일그룹 Ps_name: partition scheme Pf_name: partition function Reserved / used: 페이지 단위 (8K) Compressed: 압축 상황 (NONE / ROW / PAGE) */ SELECT [table_name] = OBJECT_NAME(ddps.object_id) , [boundary] = prv.value , [rows] = ddps.row_count , [reserved] = ddps.reserved_page_count , [used] = ddps.used_page_count , [compressed] = p.data_compression_desc ,...
Oct 19th
(구상) 파티셔닝하면서 보관을 편리하게
2013년 1분기 (2013Q1) 데이터를 담아야 한다고 가정하자.  먼저 DWDATA_2013Q1 파일그룹을 준비한다. ALTER DATABASE XXX ADD FILEGROUP [DWDATA_2013Q1] ALTER DATABASE XXX ADD FILE (NAME = 'DWDATA_2013Q1', FILENAME = 'E:\DBDATA\DWDATA\DWDATA_2013Q1.NDF', SIZE=100MB, FILEGROWTH=100MB) TO FILEGROUP [DWDATA_2013Q1] 1분기 ‘보관용’ 데이터 전체를 담기 위해 파티션을 쪼갠다 -- Quarterly ALTER PARTITION SCHEME PS_XXX NEXT USED [DWDATA_2013Q1] ALTER...
Oct 18th
September 2012
1 post
SID to Hex
간만에 SharePoint 작업을 하고 있는데, Windows 계정으로 등록된 사용자는 Contents 데이터베이스의 UserInfo 테이블에 등록될 때 tp_SystemID 값에 SID가 들어간다. 그런데 wmic 등에서 보여주는 값은 S-1-5-21-WWWW-XXXX-YYYY-ZZZZ 인데, 저 필드에는 Binary로 바뀌어서 들어가기 때문에 이걸 바꿔주는 프로시저를 찾음.  출처는 http://jadnb.wordpress.com/2010/01/14/coverting-text-sid-to-binary-in-t-sql/ 이고, 버그가 하나 있어서 코드 중간에 int -> bigint로 바꿔준 부분이 있다. CREATE FUNCTION [dbo].[SidToHex] (@textsid...
Sep 12th
July 2012
1 post
C#의 익명 대리자 내의 변수 캡쳐
딱 다음과 같은 상황: http://ideone.com/PD1eY using System; using System.Collections.Generic;   class Test {         public static string[] tables = { "1","2","3","4","5" };         public delegate string Method();         public static void Main()         {                 var dict = new Dictionary<string, Method>();                 foreach(var name in tables)                 {                      ...
Jul 13th
June 2012
2 posts
일부 다른 기종의 눝 주파수표
new iPad WiFi + Cellular 국내 인증 신청시 3G에 대해서만 인증을 받음 (A1430) LTE Band 4 (1710-1755 / 2110-2155) 및 Band 17 (704-716, 734-746) 지원이며, 이는 미국 내에서 AT&T Mobility (Band 4 및 17), 캐나다의 Rogers, Telus, Bell (Band 4)에 해당한다. Galaxy Note (국내판) SKT (SHV-E160S) LTE UL: 824-839, DL: 869-884 UMTS UL: 1922.8-1977.2, DL: 2112.8-2167.2 KT (SHV-E160K) LTE UL: 1745-1755, DL: 1840-1850 UMTS UL: 1922.8-1977.2,...
Jun 9th
옵눝2로 본 국내 눝 주파수
SKT E-UTRA Band 5 (824-849 MHz / 869-894 MHz) LTE UL: 829-839 MHz / DL: 874-884 MHz UMTS UL: 1942.8-1977.2 MHz / 2132.8-2167.2 MHz 음성통화 방식: CSFB, Legacy 통신방식: HSPA+ 출처: LG-F160S 단말기 인증현황 자료, LG-F160S 단말기 소개 KT E-UTRA Band 3 (1710-1785 MHz / 1805-1880 MHz) LTE UL: 1745-1755 MHz / DL: 1840-1850 MHz UMTS UL: 1942.8-1977.2 MHz /...
Jun 9th
May 2012
1 post
mssql에서 읽기 전용 인스턴스 생성 간단히.
SQL Server에서 read-only DB를 만들기 위한 방법이 몇 가지가 있긴 한데, 복제 (Transactional / Snapshot) 개체 단위 (테이블, 뷰 등), 컬럼 등의 세부 지정 가능 스냅샷 생성시 복제에 참가하는 테이블에 공유 잠금이 걸림 (!!!!) → 대상 DB에 백업본을 복원하고 스냅샷 생성을 생략하도록 많이 설정함 → 복제 대상 테이블만 추려서 넣어놓고 이후 업데이트만 받거나 하는 것도 가능 3단계 구조: 게시자 (publisher) - 배포자 (distributor) - 구독자 (subscriber) 구성 → 물론 게시-배포, 배포-구독 식으로 묶을 수도 있음 구독을 여럿 두는 것도 물론 가능 Log Reader가 트랜잭션 로그를 읽어서 복제 sp 명령을 생성하여...
May 25th
February 2012
2 posts
SharePoint 2010 폼인증 제작
ASP.NET 2.0에 추가된 MembershipProvider / RoleProvider 구조를 기반으로 하며, 각각의 상위 추상 클래스를 상속해서 반드시 구현해야 하는 메소드는 다음과 같다. MembershipProvider public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords) public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) public override...
Feb 4th
SharePoint 2010 Foundation 설치하다가 늙는 중
(서버는 2008 R2 x64) Prerequisite: 요새 마소 프로그램들은 갈수록 설치 요구사항이 늘어나는 것 같다. 설치해준 것은 다음과 같다. SQL Native Client (SQLNCLI) - SQL Server 2008 SP3 feature pack 뒤져서 받음 Sync Framework Runtime - 위와 동일 Filter Pack 2.0 (x64) - 오피스 2010용 쓰면 된다 KB976462-v2-x64 - 가서 받자 보안정책상 인터넷 연결이 안되어 자동 다운로드를 쓸 수 없었다. 필요한 프로그램을 찾을 때 인스톨러 실행해보고 헤딩해도 말리지는 않겠다.  관리 사이트 구성 제품 구성 마법사로 진행하던 도중에 (새 서버팜 구성으로 함) 팜 구성 패스워드를 입력하고...
Feb 1st
January 2012
1 post
NAT 관련 급정리
Full Cone NAT All requests from the same internal IP address and port are mapped to the same external IP address and port. Furthermore, any external host can send a packet to the internal host, by sending a packet to the mapped external address. Restricted Cone NAT All requests from the same internal IP address and port are mapped to the same external IP address and port. Unlike a Full Cone NAT,...
Jan 25th
December 2011
1 post
MySQL Variants
MySQL 5.5 / 5.6 http://dev.mysql.com/ + Supports Windows MariaDB 5.2 / 5.3 http://kb.askmonty.org/en/what-is-mariadb-53 + Aria Storage Engine + Supports Windows Percona Server with XtraDB http://www.percona.com/software/percona-server/ + XtraDB Storage Engine - No Windows Support
Dec 22nd
November 2011
3 posts
오늘의 생각 정리
1. 누가 퍼날라준 디씨 명언록. 풀 버전은 http://gall.dcinside.com/wondergirls/3024720 ‘열심히 일하다보면 언젠가 보상을 받기도 한다. 하지만 게으름을 피우면 당장 확실한 보상을 받는다. ‘ ‘남들이 널 필요로 한다고 해서, 그게 니가 중요한 사람이라는 뜻은 아니다.’ ‘남들이 알아주지 않더라도 너의 일을 묵묵히 하다보면, 결국 남 좋은 일만 하게 된다.’ 중요한 사람으로 인식되기 위해서는, 잘 되기 위해서는 그냥 묵묵히 일하는 것만 가지고 안된다는 이야기렷다. 2. 권순선님의 Google+을 보다가 많은 조직에서 처하는 상황에 대한 한줄요약을 보고 감탄했다. “중요한 일보다 급한...
Nov 10th
SQL Server 2012 라이센싱 변화
요약 크게 세 가지로 요약할 수 있다. 코어 단위 라이센스로 변경 2008 R2 까지는 소켓 라이센스 - 프로세서 1개당 몇 코어든 1개만 받음 코어 단위 라이센스로 변경, 2코어 단위 판매하며 최소 구매 단위는 4코어 제품군 간략화 - 엔터프라이즈, BI, 스탠더드 Web 에디션은 남아 있음. 단 SPLA로만 제공되며 용도 한정 데이터센터 에디션은 다시 엔터프라이즈로 합쳐짐 워크그룹, 스몰 비즈니스 에디션은 스탠더드로 합쳐짐 가상화 라이센스 추가 가상화 호스팅 하드웨어의 코어 수만큼 살 필요가 없음 VM당 최소 4코어 이상 구매 필요 SA 계약을 맺은 사용자가 VM을 호스팅하는 하드웨어의 코어 수만큼 SQL...
Nov 7th
MongoDB에 대한 비판
아래는 http://pastebin.com/raw.php?i=FD3xe6Jt 를 전문번역하다가 짜증나서 대강 요약 정리한 글이다. 글쓴이는 DB는 ‘반드시 정확하거나 최대한 정확해야 한다’고 전제하고 있다. 데이터베이스에서 발생하는 오류 또는 실수는 다른 실수보다 훨씬 심각하기 때문이다. 업타임에 가장 큰 영향을 미치고, 성능, 예산, 데이터의 가치 등도 있지만 데이터베이스를 한번 정하면 다른 제품으로 교체하기가 어렵기 때문이다. ⇒ DBA로 먹고 산 입장에서, 죄다 맞는 말이다. 그런데 글쓴이가 지적하는 MongoDB는 쓰기 작업 이후에 getLastError()를 호출하지 않으면 작업 성공 여부를 확인하지 않음 당황스럽게 만드는 여러 문제를 가지고 있음 가끔 그냥 뻗거나, ...
Nov 6th
4 notes
October 2011
3 posts
Linked Server 연결을 가급적 쓰지 말아야 하는 이유
SQL Server의 기능 중에 간단히 개발해서 쓸 때 참 편한 것이 Linked Server 연결이다. 서버 간에 sp 호출을 통해 데이터를 주고받거나 원격지 테이블을 끌어다 쓸 수 있는데 별도의 서비스를 개발하지 않고도 DB 끼리만 설정하면 되니 개발자 입장에서는 당연히 편하다. 그런데 운영하는 입장에서는 정말 피하고 싶은 기능이다. 예를 하나 들어보자. 고객 상담 서비스에서 PC방 관련 정보를 체크해야 하는데, 고객 상담 업무를 자회사에서 맡고 있다고 하자. 고객 상담 서비스와 DB는 자회사 쪽의 네트워크에 있고, PC방 과금 DB는 과금 군의 네트워크 안에 있다고 치자. 그런데, 여기서 외부 서비스의 DB 접속을 위해 인터페이스 DB라는 것을 만들면서 비극이 시작된다. (DB A)...
Oct 27th
생각의 변화
원래 내가 가진 기본 자세는 Make things work.. 였다. 정책이나 기술의 한계를 넘어서 우회방법이 있다면 그렇게 해서라도 일이 잘 돌아가면 좋겠다고 생각하고 있었다. 그것이 최근에 바뀌었다. Make things work, but properly. 업무 분장은 항상 어려운 법인데, 현업에서 그렇게 목말라하는 ‘정보’에 대한 업무는 더욱 그러하다. 현재 실 정책은 ‘모든 지원은 BackOffice를 통해서’ 인데, 항상 백오피스를 통한 기능의 수정이나 리포팅의 추가는 우선순위에서 밀려난다. 반면 각종 프로모션의 추가가 우선순위가 더 높은 것이 현실이다. 따라서 프로모션의 추가로 인하여 궁금해하는 데이터가 늘어나고, 더욱 많은 데이터 요청에 정신이...
Oct 15th
1 note
인수인계
이직을 한 적은 없지만 조직을 몇 번 옮기긴 했는데, 그 때마다 업무를 정리하면서 두 개의 생각이 같이 들곤 했었다. 빨리 넘기고 잠깐이나마 쉬고 싶다 이왕 넘기는거 내가 한 고생을 내 다음 사람은 안했으면 좋겠다 난 보통 두번째 생각을 많이 하는 것 같다. 태생이 잡캐에 뒤치닥거리 전문으로 살아서 그런가? (..) 인수인계가 몇차례 일어나면서 중간 처리 이력이 사라진 시스템도 봤고, 기획서가 없거나 작업 문서가 없거나 해서 시스템은 있는데 이게 뭐하는 것인지 알 수 없었거나, 그런게 있다고는 들었는데 어떻게 만들어진 것인지 알 수 없었던 경우도 봤다. 그런 경우에는 지연된다고 한소리 들으면서도 다 까보고 다시 만들거나 고치거나 했지. 개발팀이 안해줘서 운영조직 소속인 내가 만들어서 돌린 것도 있고....
Oct 13th