일요일, 12월 22
Shadow

미분류

#057 파일 추가적으로 쓰기

미분류
자바에서 파일 쓰기 할 때 BufferedWriter file = new BufferedWriter(new FileWriter("filename")); 대개의 경우 이런식으로 코딩을 했었는데, 이 코드는 파일을 덮어쓴다. 파일을 덮어쓰지 않고 이어쓰기하는 방법이 없을까 하고 고민하고 찾아봤다. RandomAccessFile 클래스를 사용하는 방법도 있었고 그리고 파일을 쭉 읽어서 변수에 저장을 한 뒤 새로 추가할 내용을 덧붙여서 파일에 쓰는 방법도 있었다. 하지만 뭔가 더 간편한게 있을 것 같아서 찾아봤더니 이 한문장이면 파일 이어쓰기가 가능하다.         BufferedWriter file = new BufferedWriter(new FileWriter("filename", true)); 이 코드는 파일이 없으면 새로 만들고 있다면 덮어쓰지 않고 이어서 쓰게한다. 그리고 파일에서 개행문자를 쓰려고할 때 C나 C++에서처럼 당연히 ""이 먹힐거라 생각을 하고 str = str + ""; file.write(str, 0, str.length()); 이렇게 썼는데 파일에는 줄바꿈이 되어있지 않았다. 알아본 결과 저 위에서 사용한 FileWriter가 가독성때문에 ""을 지원하지 않기 때문이었다. BufferedWriter를 통해서 개행문자를 쓸 수 있다. 바로 이렇게.. file.write(str, 0, str.length()); file.newLine(); 간단하다. 하하하;;; 이 사실을 난... 어제 알았다. 쿨럭 -_-;;; 까먹을까봐... ...

#056 java.io.File의 경로 얻어오기(absolute path와 canonical path 차이)

미분류
java.io.File의 경로를 얻어오는 방법은 여러 가지가 있다. 우선 getPath()는 File 객체를 생성할 때 넣어준 경로를 그대로 반환한다. 그리고 getAbsolutePath()와 getCanonicalPath는 getPath()와는 달리 프로그램을 실행시킨 위치 정보도 함께 반환해 준다. File file = new File("src", "test"); System.out.println("getPath: " + file.getPath()); System.out.println("getAbsolutePath: " + file.getAbsolutePath()); System.out.println("getCanonicalPath: " + file.getCanonicalPath()); 실행해보면?? getPath()는 src/test 그대로 반환한 반면, getAbsolutePath()와 getCanonicalPath()는 현재 프로그램을 실행한 경로(D:\workspace\Test)를 포함하고 있다. getPath: src\test getAbsolutePath: D:\workspace\Test\src\test getCanonicalPath: D:\workspace\Test\src\test 어라?? 그런데.. absolute path와 canonical path는 결과가 같은데 대체 왜.. 구분해서 메소드를 제공하는 걸까?? 그건 현재 경로(".")나 상위 경로("..")를 함께 사용하면 차이를 알 수 있다. File file = new File("../../workspace");...

#055 자바 코딩으로 디렉토리 생성

미분류
mkdirs() 라는 메서드(함수)로, 디렉토리(폴더)를 만들 수 있습니다. mkdirs() 는 디렉토리 생성에 성공하면 true 를 반환하기에, 실패시 에러를 출력하려면 if문 속에서 느낌표를 붙여, 논리값을 반전시켜 주어야 합니다. 같은 이름의 디렉토리가 이미 있을 때나 디렉토리명에 허용되지 않는 문자(*, ? 등)가 있을 때 에는 아래 예제의 경우, "디렉토리 생성 실패"라는 메시지가 출력됩니다. 여러 개의 중첩된 폴더를 한꺼번에 생성하려면 슬래시(/) 기호로 패스를 구분해 줍니다. mkdir() 이라는 단수형 이름의 메소드로도 디렉토리를 만들 수 있지만, 여러개를 한꺼번에 만들 수는 없습니다. 디렉토리 만들기 예제 소스 파일명: Example.java import java.io.*; public class Example { public static void main(String[] args) { // MY_TEST_DIR 이라는 하위 폴더 만들기 File f = new File("MY_TEST_DIR"); if (!f.mkdirs()) System.err.println("디렉토리 생성 실패"); // MY_TEST_DIR 이라는 하위 폴더 밑에 // 333 이라는 하위 폴더 또 만들기 // 즉, MY_TEST_DIR/333 이렇게 중첩된 폴더 한꺼번에 생성 f = new File("MY_TEST_DIR/333"); if (!f.mkdirs()) System.err.println("디렉토리 생성 실패"); }...

#001 소프트웨어 아키텍트(Software Architect)를 꿈꾸시는 분들에게

미분류
며칠전에 어느 대학교 4학년 분에게 메일 한통을 받았습니다. 그 분은 소프트웨어 아키텍트(Software Architect)를 꿈꾸시는 분이셨습니다. :-) 참 멋진 생각을 하고 계신것 같습니다. 소프트웨어 아키텍트라는 본인의 꿈을 이루기 위하여 조언을 구하시는 그분의 모습을 보면서 이러한 노력들이 나중에 훌륭한 소프트웨어 아키텍트로 성장하실 수 있는 좋은 밑바탕이 될 것이라고 생각하였습니다. 사실 저는 아직 큰 규모의 소프트웨어 프로젝트에서 소프트웨어 아키텍트로 많은 일은 하지 못하였습니다. 다만 제가 맡은 프로젝트나 아니면 중급규모의 회사의 프로젝트에서 나름 소프트웨어 아키텍트라는 역활을 수행하곤 하였습니다. 아울러 소프트웨어 아키텍트가 되기 위한 정식적인 교육을 받은 적은 없습니다. 따라서 그 분에게 제가 조언한 것은 소프트웨어 아키텍트가 되기 위한 정식적인 코스나 아니면 알아야할 지식들이 아니었습니다. 제 생각에 소프트웨어 아키텍트처럼 많은 것들을 알아야하는 직업은 없는 듯합니다. 소프트웨어 아키텍트는 고객에게는 소프트웨어 전체를 책임지는 책임자이자 컨설턴트입니다. 개발팀에게 있어 소프트웨어 아키텍트는 전반적인 구현 기술과 일정 및 인력을 책임지는 총괄 책임자입니다. 기업입장에서 소프트웨어 아키텍트는 정해진 예산과 일정 범위안에서 소프트웨어를 훌륭하게 구축하여 기업의 이익을 만들어내야 하는 책임이 있습니다. 사실 이렇게 본다면 소프트웨어 아키텍트는 알아야할 것도 많고 책임도 많은 그야 말로 슈퍼맨과 같은 존재가 아닌가 생각됩니다. 특히 우리나라의 소프트웨어...

#003 Convention over Configuration(CoC)에 관하여

미분류
Convention over Configuration(CoC) 우리나라에서는 일부 "설정 이상의 관례", "설정보다 관례", "설정을 넘은 관례" 혹은 "설정보다 규범" 등으로 번역하고 있는 Convention over Configuration는 최근 국내에서 CoC로 번역이 통일되어 가고 있는 것 같습니다. 저 역시 CoC를 어떻게 번역할까 많은 고민을 하였으며, 지인들에게도 물어보기도 하였는데, 우리나라에서 사실상의 표준(De-facto)로 CoC로 자리잡혀 가고 있는것 같으며, 저 역시 애매한 번역보다는 CoC가 표기 및 의미 면에서 독자들에게 더 쉽게 이해될 것으로 생각되어 CoC로 번역하기로 결정하였습니다. CoC의 모습이 마치 이모티콘 같아서 쉽게 기억될 것 같습니다. :-) Convention over Configuration(이하 CoC)는  Coding by Configuration이라고도 알려져 있습니다. 항상 개념이란것이 그러하듯이 CoC 개념 자체는 매우 단순합니다. CoC는 개발자가 내려야할 수 많은 결정들(decisions)을 줄여주어, 단순성(simplicity)을 확보하면서, 유연성(flexibility)을 잃어버리지 않도록 하기 위한 소프트웨어 디자인 패러다임 입니다. CoC의 단어상의 근본적인 의미는 개발자는 단지 어플리케이션에서 관습적이지않은 면(unconventional aspects of the application)만 정의할 필요가 있다는 것입니다. 예를들어 Model에 Sale이란 클래스가 있다면, 데이터베이스 내에 대응하는 테이블은 ...

#002 소프트웨어란 무엇인가?|

미분류
항상 고민했던 부분이 소프트웨어(Software)란 무었인가?라는 물음이었습니다. 정말 어려운 이 문제에 관심을 가지는 이유는 제가 소프트웨어를 좋아하고 좋은 소프트웨어를 만들어 내고 싶기 때문입니다. 출처: http://www.gnu.org/philosophy/compromise.html 즉 소프트웨어에 대한 제 자신만의 생각을 명확하게 가지고 있어야, 삶을 위한 소프트웨어에 대한 구체적인 생각을 정리할 수 있다고 생각하고 있기 때문입니다. 따라서 저는 항상 소프트웨어란 무었인가?(What is the software?)란 질문을 스스로에게 던지곤 하였습니다. 많은 문헌들과 인터넷에서도 수 많은 소프트웨어의 정의가 있습니다. 하지만 대부분 소프트웨어의 분류를 정하고 각 분류별로 소프트웨어의 특징을 설명하여 정의하거나, 아니면 소프트웨어 개발 방법론 차원에서 소프트웨어를 바라보고 있습니다. 물론 이러한 정의 역시 틀린 것은 아닙니다. 하지만 소프트웨어는 그렇게 쉽게 정의할 수 있는 것이 아니란느 생각이 많이 듭니다. 여러분들은 소프트웨어가 무었이라고 생각하시나요 :-) 한때는 소프트웨어를 생명체과 같다고 생각하기도 하였습니다. 마치 살아있는 동물과 같은 생명체 말이죠 ;-) 현재 저와 여러분들은 모두 소프트웨어를 통하여 제가 쓴 글을 보고 계십니다. 마치 생명체가 다른 생명체에게 이야기를 하듯이요~ 제가 쓴 글은 웹 어플리케이션 서버(WAS)라는 생명체에게 전달되고 이 글은 다시 DBMS라는 생명체에 전달됩니다. 그리고 DBMS는 제 글을 잘 보관하고 ...

#001 CDROM영역을 만들 수 없는 USB메모리로 XP설치하기 – WinSetupFromUSB 0.2.3 (XP편

미분류
이 포스트에서 USB를 이용해서 XP설치까지 하는 법은 크게 분류해서 3단계가 필요하고 첫번째는 USB메모리에 XP를 넣어주는 방법이고, 두 번째는 USB메모리로 부팅이 되게 바이오스를 설정하는 방법이며, 마지막은 만들어진 USB메모리를 이용해서 XP를 설치하는 방법에 대해서 다루겠습니다. Windows7에서 USB메모리에 XP를 넣어주는 경우에는 약간 다르기 때문에 혼란을 막기위해서 따로 포스팅하였으며 조금 손은 가지만 어려운 부분은 없으니 준비 되셨으면 바로 시작합니다! ① 첫번 째 작업 : USB메모리에 XP를 넣어주기 다운로드 받은 파일의 압축을 풀면 나오는 실행파일을 더블클릭합니다. Next를 클릭합니다. I accept with the... 에 체크하고 Next를 클릭합니다. Next를 클릭합니다. Start를 클릭합니다. 용량이 크지않으므로 바로 설치됩니다. Next를 클릭합니다. Exit를 클릭합니다. 확인을 클릭합니다.   Browse 버튼을 클릭합니다 (만약 USB메모리를 나중에 넣어서 두번째 칸에 안나온다면 리플래시를 클릭하면됩니다) 아쉽게도 USB리더기를 지원하지 않습니다. XP CD가 들어있는 드라이브를 선택하고 확인을 클릭합니다. RMPrepUSB 버튼을 클릭합니다. (다른 옵션엔 손대지 말아주세요!) 그 버튼 누르면 USB안에 들어있는 정보가 최기화된다 뭐 그런 내용이 가끔 나오기도 합니다. 빼먹지 말고 하나 하나 체크해줍니다. (여기 헷갈리지 마세요) FAT32 > Boot as HDD(2PTNS) >...

#013 teaming

미분류
Linux bond or team multiple network interfaces (NIC) into single interface by LinuxTitli · 46 comments Finally today I had implemented NIC bounding (bind both NIC so that it works as a single device). We have two Dell servers that need setup with Intel Dual Gig NIC. My idea is to improve performance by pumping out more data from both NIC without using any other method. This box act as heavy duty ftp server. Each night I need to transfer over 200GB data from this box to another box. Therefore, the network would be setup is two servers on a switch using dual network cards. I am using Red Hat enterprise Linux version 4.0. Linux allows binding multiple network interfaces into a single channel/NIC using special kernel module called bonding. According to official bonding docume...

#012 리눅스 dns 설정

미분류
--환경--   main - 윈도우즈XP   vmware - 리눅스(cent os) 윈도우즈 IP : 192.168.100.82 리눅스 ip : 192.168.1.100   --개요-- 1.  관련파일 설치 2. 설치된 DNS관련 확인 3. Named.conf  설정 4. Network 파일 설정 5. Hosts 파일 설정 6. Zone 파일과 역쿼리파일(rev)파일 생성 7. 윈도우 ip 설정 8. Named 실행 관련파일 설치   먼저 리눅스에서 yum - y install bind  // 소프트웨어 패키지 yum - y install bind-utils  // 관련보조 유틸리티 yum - y install libs  // 사용 라이브러리 를 설치해준다   P.S: centos 는 DNS 서버 보안을 위해 bind-chroot 를 사용 합니다. 루트디렉토리를 가상으로 만들어 해킹을 속인다 하지만 글쓴이는 chroot를 하지않고 구현하였다 (chroot를 써서 구현할경우 /etc/sysconfig/named 에서 ROOTDIR=/var/named/chroot로 변한다 그리하여 /etc/named.con에서도   options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file ...