목록전체 글 (332)
삶 가운데 남긴 기록 AACII.TISTORY.COM
커널 오브젝트(kernel object) 프로세스나 스레드, 파일 같은 리소스를 관리하기 위한 정보들을 모아놓은 구조체가 메모리에 로딩되어 블록 형태로 존재하고 있는데 이를 가리켜 커널 오브젝트라고 부릅니다. 각각의 리소스 별로 따로 커널 오브젝트들이 존재하게 됩니다. 예를들어 하나의 프로세스가 생성되면 그 프로세스를 위한 커널 오브젝트가 운영체제에 의해 생성됩니다. 오브젝트 핸들(kernel object handle) 운영체제는 커널 오브젝트의 간접적인 조작을 위해 여러 가지 시스템 함수를 제공합니다. 오브젝트 핸들은 커널 오브젝트 식별을 위해 할당되는 값를 말합니다. int _tmain(int argc, TCHAR* argv[]){ //GetCurrentProcess(): 현재 프로세스의 오브젝트 핸..
GetLastError() 윈도우즈 시스템 함수들은 에러가 났을 때 리턴 값이 대개 NULL 이기 때문에 에러 원인을 알 수 없습니다. 이럴 때 사용하는 함수가 GetLastError 함수를 사용하면 에러코드를 획득할 수 있습니다. 이 에러코드는 MSDN을 참고하면 무슨 에러인지 알 수 있게 됩니다. #include #include #include int _tmain(void) { HANDLE hFile = CreateFile(_T("TEST.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { _tprintf( _T("error co..
마이크로소프트 윈도우즈 시스템은 16비트(9X) 부터 32비트(XP)를 거쳐 64(vista~)비트 기반으로 설계되어 있습니다. 변수를 저장하는 자료형의 크기가 변하는 관계로 포인터를 다룰때 문제가 생깁니다. define 매크로를 이용하여 빌드시 실행 환경에 따라 빌드를 비교적 쉽게 바꿀 수 있지만, 소스가 매크로로 가득하게되면 가독성이 매우 떨어지게 됩니다. 이에 대한 대안이 Polymorphic 자료형을 이용하는 것입니다. 아래 예제에 사용된 것 처럼 Unsigned Integer 자료형을 PTR 키워드를 붙이게 되면 실행환경에 따라 그 자료형의 크기가 결정됩니다. #include #include #include //64비트 환경 32비트 환경에 따라서 다르게 선언되는 자료형 UINT_PTR UINT..
MFC 문자열 처리 c언어와 c++ 에서는 string이라는 자료구조를 컴파일러 차원에서 지원하고 있지 않습니다. (가장 많이 쓰는 자료구조형임에도 불구하고 옛날 언어라...) 그래서 c/c++에서는 string을 char 의 배열에 끝에 널문자(\0)를 넣어 포인터로 관리합니다. Windows 에서는 이런 string처리를 위해 char* 를 대신해 LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 같은 자료형을 지원하고 있습니다. (안그래도 불편한데 더 불편하게 만들었습니다. 헝가리안 표기법의 유산이지요.) 그래서 이 암호같은 약자들의 뜻을 알아보도록 하겠습니다. LP는 long pointer 16bit 시절 포인터는 모두 16bit였고 24bit 메모리를 lon..
string class Header string s, s1, s2, s3; .assign(): 문자열 할당 //인수로 지정된 문자열을 할당 s1.assign("ABCDEFGH"); //s1="ABCDEFGH" //문자를 특정 개수 만큼 문자열에 할당 s2.assign(3, 'A'); //s2 = "AAA" //문자열의 지정된 인덱스 부터 특정 개수를 복사해서 할당 s3.assign(s1, 2, 4) //s3 = "CDEF" .append(): 문자열 추가 //기존 문자열 뒤에 추가 s.append("ABCDEF"); //s = "ABCDEF" //문자를 특정 개수 만큼 기존 문자열 뒤에 추가 s.append(3,'a'); //s = "ABCDEFaaa" //문자열의 지정된 인덱스 부터 특정 개수를 복사해..
SNI 차단 2019년 2월 11일 DNS 차단에 이어서 SNI(https) 차단이 시작되었습니다. 통신을 차단하는 방법은 IP로 차단, DNS로 도메인이름으로 차단, http 헤더로 차단 하는 방법 등 이 있습니다. 여기서 SNI 필터링은 HTTPS 암호화 통신을 하더라도 핸드쉐이킹 과정에 에 host 이름이 표기 되는데 ISP업체가 이 내용을 보고 필터링하는 방법입니다. Goodbye DPI GUI https://github.com/Include-sys/GUI-for-GoodbyeDPI/releases Releases · Include-sys/GUI-for-GoodbyeDPI Anti Cencorship Application. Contribute to Include-sys/GUI-for-Goodbye..
Quartz 1.8.6 Spring3.X 프로젝트에서는 Quartz 2.X 이상을 지원하지 않아서 보통 Quartz 1.8.6을 많이 사용합니다. http://www.quartz-scheduler.org/downloads/ Downloads www.quartz-scheduler.org Maven pom.xml org.springframework spring-core 3.1.2.RELEASE org.springframework spring-context-support 3.1.2.RELEASE org.springframework spring-tx 3.1.2.RELEASE org.quartz-scheduler quartz 1.8.6 Spring 3.X 에서 quartz를 사용하기 위해 1.8.6 버전으로 사용..
MySQL 콘솔 접속 mysql -u root -p :루트 패스워드 입력 데이터베이스(DB) 확인 show databases; 사용자(user) 확인 select * from mysql.user; tester 계정 추가 create user 'tester'@'localhost' identified by 'testerpw'; -- localhost에서만 접속 가능한 아이디:tester 패스워드: testerpw 으로 계정 생성 create user 'tester'@'%' identified by 'testerpw'; -- 모든 아이피에서 접속 가능하도록 아이디:tester 패스워드: testerpw 으로 계정 생성 create user 'tester'@'192.168.0.100' identified by ..
MySQL Event Scheduler MySQL 5.1 부터 자바의 Quartz나 리눅스의 Crontab 처럼 이벤트 스케줄러를 통해 배치작업을 할 수 있게 되었습니다. 아래의 작업들은 콘솔에서 root 계정으로 접속하여 작업하는 것을 추천드립니다. mysql -u root -p 이벤트 스케줄러 상태 확인 SHOW VARIABLES LIKE 'event%'; 이벤트 스케줄러 ON/OFF SET GLOBAL event_scheduler = ON; SET GLOBAL event_scheduler = OFF; 만약 event_schedule 변경중에 에러코드 1227 이 나오는 경우 mysql을 root 권한으로 접속 후 다음을 실행하십시오. UPDATE mysql.user set Super_Priv='Y'..
증상 톰캣은 정상적으로 구동이 되었지만, catalina.out의 로그를 살펴보았을 때, ... is exceeding the 65535 bytes limit 메시지와 함께 특정 jsp 화면이 에러가 나는 경우가 있습니다. jsp 파일 사이즈가 초과된 경우에 발생합니다. 조치 tomcat 경로 안에 있는 web.xml을 열어서 태그 안쪽에 아래의 내용을 추가합니다. mappedfile false web.xml 내용을 저장하고 tomcat을 재시작 합니다.
개요 우리는 자바 3rd-party 라이브러리(jar)를 사용할 때 보통 maven이나 gradle 같은 빌드 도구를 사용합니다. 빌드 도구들은 해당 라이브러리에 대한 의존적인 클래스나 라이브러리를 같이 컴파일 및 실행을 해주기 때문에 보통 문제가 없습니다. 하지만 운영을 하다가 수동으로 라이브러리를 추가하거나 업데이트할 일이 있는 경우가 있는데, 이때 우리는 종종 ClassNotFoundException과 NoClassDefFoundError을 만나게 되는 경우가 있습니다. 저는 JDBC, SOAP통신용 라이브러리나 REST Client 용 라이브러리를 추가하거나 업데이트 시에 이런 문제가 생겼기 때문에 해당 오류를 따로 조사를 해봤습니다. Class Loader(JAVA8 이하) JVM이 class의..
MySQL 계정정보 DB name: testdb 테이블: testtable 사용자계정: testuser 패스워드: 1234 으로 가정하겠습니다. DB 백업 mysqldump -u testuser -p testdb > backup.sql password: 1234 DB 복원 mysql -u testuser -p testdb backuptable.sql password: 1234 테이블 복원 mysql -u testuser -p testdb < backuptable.sql password: 1234
1. English is stress-based language 영어는 강세 중심 언어입니다. 여기서 강세란 말할 때 (크게+길게+높게) 발음하는 부분입니다. 극단적으로 원어민은 발음이 엉터리여도 강세가 있는 부분을 크고 길고 높게 발음해야 알아듣습니다. ※ 강세가 없는 부분(단어, 모음, 자음)은 schwa sound라고 해서 약하고 얼버무린 소리가 되어 생략하는 것처럼 됩니다. 반대로 강세가 있으면 장(긴) 모음이 되는데 한국어보다 입술과 턱을 크게 해서 [애] 발음 비슷하게 되는 경향이 있습니다. ex) what a goal! 에서 a에 보통 강세가 없기 때문에 [와러 고울]로 발음하며 a 가 schwa sound [어]가 되지만 감탄사 이기 때문에 각각의 단어 모두에 강세를 주어서 끊어서 발음할 ..
특정 테이블의 내용으로 테이블을 업데이트할 때가 있습니다. 이럴 때 join 을 이용하여 update 할 수 있습니다. UPDATE 업데이트할테이블명 AS A INNER JOIN 데이터를가져올테이블명 AS B ON A.조인키 = B.조인키 SETA.업데이트할컬럼 = B.가져올데이터컬럼 WHERE 절 예제) 테이블(TBL__WRK)에 수정 일자(MODDATE)가 null 인 행들만 등록일자(REGDATE)로 업데이트 UPDATE TBL_WRK AS A INNER JOIN TBL_WRK AS B ON A.WRKID = B.WRKID SET A.MODDATE = B.REGDATE WHERE A.MODDATE IS NULL 테이블 내용을 기초로 DELETE 할 때는 조금 다릅니다. DELETE FROM TBL1..
대항해시대 위키의 내용으로 분석해 보았을 때 1. 파도가 높은 구간에서 2. 일정한 항해거리 이상의 항로를 3. 가속도/속도 높은 배로 4. 빠르게 항해하여 입항하여 입항 경험치 획득 하는 것이 가장 조타 랭크가 빨리 오르는 방법입니다. 전통적으로 호바트에서 출항하여 호바트로 입항하는 남극 세계일주 루트를 추천하는데 왜냐하면 1. 파도가 높으며 2. 항해 거리도 약 60일 가량 걸리며 3. 노젓기 운전 배로 4. 노젓기 랭작과 함 께 빠르게 항해 하여 조타 랭작의 최적화 조건을 모두 만족하는데다가 5. 일직선 코스로 항하해기 때문에 방치해도 관계없는 코스이며 6. NPC 해적도 존재하지 않기 때문에 기습만 막는다면 걸리적 거리는 것이 없는 편한 코스이기 때문입니다. 번개 사용시 노젓기 스킬은 1일 4점씩..