'분류 전체보기'에 해당되는 글 1012

  1. 2009.03.11 [웹보안] 웹 어플리케이션 기본 모듈 제거
  2. 2009.03.10 iPod App - iDoodle
  3. 2009.03.08 NetBeans 설정
  4. 2009.03.07 야구란 무엇인가
  5. 2009.03.06 [IBM dWs] Grails 마스터하기: 첫 번째 Grails 애플리케이션 구축하기
  6. 2009.03.03 문제 해결의 시작은 에러메세지
  7. 2009.03.03 작업관리자를 시작프로그램에 등록하기
  8. 2009.03.02 작업 스케줄러
  9. 2009.03.02 비교 프로그램
  10. 2009.03.01 jad
  11. 2009.03.01 [Excel] 시트명 알아내기
  12. 2009.03.01 유지보수 - 소스
  13. 2009.02.28 한국근대미술걸작전
  14. 2009.02.28 문자열 함수
  15. 2009.02.28 ASCII Table
  16. 2009.02.28 log4sql 1
  17. 2009.02.28 갑자기 발생하는 일에 대한 대처
  18. 2009.02.27 자바스크립트 문자열에 특수문자가 들어가서 에러가 나는 경우
  19. 2009.02.24 JSTL 제약사항 - 상수
  20. 2009.02.23 하루 30분 시간내는거 어려운거 아니다. 습관을 들이자.
  21. 2009.02.22 Eclipse WTP
  22. 2009.02.22 java.math.BigDecimal
  23. 2009.02.22 iPhone App : Ocarina
  24. 2009.02.22 一不, 三少, 五宜, 七過
  25. 2009.02.21 이클립스 플러그인
  26. 2009.02.21 Eclipse 3.4 Ganymede
  27. 2009.02.20 인간관계?
  28. 2009.02.20 동일한 이름의 자바스크립트 함수
  29. 2009.02.20 10MB = 10 * 1024 * 1024 byte
  30. 2009.02.19 백업의 생활화

[웹보안] 웹 어플리케이션 기본 모듈 제거

 

웹 어플리케이션 서버 관리 또는 예제 모듈 제거

아래는 Tomcat Manager 를 이용해서 웹 어플리케이션을 배치해서 공격당한 경우임.

관리자 계정과 암호가 기본값으로 되어 있었을 것으로 예상됨.

 

관리 모듈(manager, admin) 및 예제 모듈(jsp-examples 등)을 삭제

기본 사용자를 삭제하고 관리자 아이디와 암호를 변경한다.

관리 모듈을 사용해야 한다면 모듈명을 변경하고 특정 아이피에서만 접근가능하도록 하는 등의 조치가 필요하다.

 

 

 

iPod App - iDoodle

간단한 그리기 어플
지원이하고 장거리 외출시 바라밤 동영상과 더불어 필수

지원이가 좋아하는 꼬꼬


지원양 첫 작품

NetBeans 설정

- http://www.netbeans.org

- 글꼴 : 새굴림 14(Eclipse 가 Courier New 인데 이 글꼴을 사용하면 넷빈즈에서는 한글이 깨짐)
- Keymap을 Eclipse로 둔다.
- Ctrl+Q 이거 좋네

- Editor - Formatting
Tab Size 4
Right Margin 100

야구란 무엇인가


이미지는 yes24

[IBM dWs] Grails 마스터하기: 첫 번째 Grails 애플리케이션 구축하기

- Installation

- Sample
> grails create-app trip-planner
> cd trip-planner
> grails create-domain-class Trip
Add member variable to grails-app/domain/Trip.groovy
> grails generate-all Trip
> grails run-app

Browse to http://localhost:8080/trip-planner
- 포트 변경




- 동적 스캐폴딩
trip-planner/grails-app/controllers/TripController.groovy
class TripController{
    def scaffold = Trip
}
전체 코드 15줄(grails stats 로 확인가능)로 CRUD 기능을 처리하는 웹어플리케이션을 작성할 수 있다.

- 참고자료
IBM developerWorks : Grails 마스터하기
NetBeans : Introduction to the Grails Web Framework

[Grails1.0 사용자 가이드] 전체 목록
Grails Korean Home

문제 해결의 시작은 에러메세지

03-03 17:26:59 ERROR xxx.sm.model.XX1234DAO.insertDetail(XX1234DAO.java:395) - com.microsoft.sqlserver.jdbc.SQLServerException: 고유 인덱스가 'PK_XX_DETAIL'인 개체 'dbo.XX_DETAIL'에 중복 키 행을 삽입할 수 없습니다.

테이블 구조를 살펴봤다.
PK 가 중복될수가 없는데...
넘어오는 데이터를 모두 비교하고 데이터베이스에 들어간 데이터를 점검해봐도 중복될 수가 없는데...
나중에는 클래스 디컴파일까지.


Unique Index 가 걸려 있었다.
에러메세지를 천천히 잘 읽어봤으면 금방 해결했을건데.
PK_XX_DETAIL 라고 하니 당연히 테이블 디자인에서 만 확인했다.

해당 테이블에서 PK 가 변경되었는데 ERWin 에서 작업하다 보니 이전 PK 가 Unique Index 로 남아 있었다.

작업관리자를 시작프로그램에 등록하기

1. 바로가기 만들기
2. 대상 : C:\WINDOWS\system32\taskmgr.exe
3. 실행 : 최소화
4. 아이콘 변경
5. 작업관리자 - 옵션 - 최소화할 때 숨기기 선택
6. 시작프로그램에 추가

- Windows 7 시작프로그램 위치
C:\Users\pantarei\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

작업 스케줄러

- Windows 2008 작업 스케줄러


비교 프로그램

diff

 

WinMerge

http://winmerge.org

?관리자 권한으로 실행해서 설치할 것.

 

gvim

 

Tortoise Merge

 

beyond compare

http://shiyoul.egloos.com/4360208

 

Notepad++ Compare

https://pantarei.tistory.com/8765

 

Eclipse

Compare With - Each Other

 

 

jad

> jad -sjava -8 -lnc CLASS

-프로그램 연결
제어판/폴더 옵션



- 한꺼번에 여러개의 클래스를 디컴파일하기[각주:1]
classes> jad -sjava -r -dsrc **/*.class //디컴파일된 소스는 src/에 패키지구조대로 저장한다.

  1. 2009-09-11 [본문으로]

[Excel] 시트명 알아내기

=REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")

새 엑셀파일을 생성한뒤 파일을 저장해야 한다.

유지보수 - 소스

- 아주 긴 클래스에서 개발자가 소스를 수정하다가 현재 작업중인 부분과 전혀 상관없는 아래 코드를 잘못 수정했다.
이런 실수를 방지할 수 있는 방법은 없을까?
- 아래와 같은 JSTL 이 지금까지 에러 안나고 있었음
이전 환경 : Tomcat 5.0 이나 Resin 3.0.25
Tomcat 6.0.18 에서 에러 발생

한국근대미술걸작전


문자열 함수


=-=> oracle?


ASCII Table

log4sql

http://log4sql.sourceforge.net

로그를 출력한 정확한 위치가 나오지는 않는다. 설정을 변경해서 로그를 출력하는 위치를 지정할 수 있다.
그러나 간단한 설정으로 쿼리문을 로깅할 수 있어 편하다. (2009-08-28)[각주:1]
P6Spy 도 있음.

- Add log4sql.jar

- Change driver class name
 oracle.jdbc.drirver.OracleDriver  core.log.jdbc.driver.OracleDriver
 com.mysql.jdbc.Driver - or - org.gjt.mm.mysql.Driver
 core.log.jdbc.driver.MysqlDriver
 org.hsqldb.jdbcDriver
 core.log.jdbc.driver.HSQLDriver
 org.apache.derby.jdbc.ClientDriver
 core.log.jdbc.driver.DerbyDriver
 net.sourceforge.jtds.jdbc.Driver
 core.log.jdbc.driver.JTdsDriver
 sun.jdbc.odbc.JdbcOdbcDriver
 core.log.jdbc.driver.JdbcOdbcDriver
 com.microsoft.jdbc.sqlserver.SQLServerDriver
 core.log.jdbc.driver.MssqlDriver
 com.microsoft.sqlserver.jdbc.SQLServerDriver
 core.log.jdbc.driver.Mssql2005Driver

- Select Fix를 False로 두고 Select Position을 지정한다.

기본 설정(Select Position이 9)
[2009-08-28 12:18:51] [DEBUG]『xxx.fw.common.ControlServlet:perform(84)』 Elapsed Time [0:00:00.001] //정확한 위치가 나오지 않는다.
SELECT Top 5 seq, title, ...
FROM TB_NOTICE
WHERE use_yn = 'Y'
...

Select Fix를 False로 둔다.
[2009-08-28 12:26:50] [DEBUG]『『xxx.fw.common.ControlServlet:perform(84)』 Elapsed Time [0:00:00.000]
SELECT Top 5 seq, title, ...
FROM TB_NOTICE
WHERE use_yn = 'Y'
...
############## BELOW MESSAGE IS TRACE. NO ERROR! ##############
    [0] at core.log.logger.SL.getMessageThrowableForThread(SL.java:196)
    [1] at core.log.aop.handler.DaoInfo.log(DaoInfo.java:132)
    [2] at core.log.aop.handler.DaoInfo.doAround(DaoInfo.java:101)
    [3] at core.log.aop.reflection.profiler.AroundProfiler.invoke(AroundProfiler.java:19)
    [4] at $Proxy0.executeQuery(Unknown Source)
    [5] at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108)
    [6] at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108)
    [7] at xxx.aa.model.XxxDAO.getMainNoticeList(XxxDAO.java:135)
    [8] at xxx.aa.command.XxxCommand.execute(XxxCommand.java:43)
    [9] at xxx.fw.common.ControlServlet.perform(ControlServlet.java:84)
    [10] at xxx.fw.common.ControlServlet.doGet(ControlServlet.java:60)
    [11] at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
    [12] at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
    [13] at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
    [14] at xxx.fw.common.EncodingFilter.doFilter(EncodingFilter.java:44)
    [15] at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    [16] at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:170)
    [17] at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
    [18] at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    [19] at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
    [20] at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)
    [21] at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
    [22] at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
    [23] at java.lang.Thread.run(Thread.java:595)

Select Position을 7로 둔다.
[2009-08-28 12:36:25] [DEBUG]『xxx.aa.model.XxxDAO:getMainNoticeList(135)』 Elapsed Time [0:00:00.000] //쿼리문의 위치가 정확히 나오게 된다.
SELECT Top 5 seq, title, ...
FROM TB_NOTICE
WHERE use_yn = 'Y'
...
  1. log4sql 웹사이트에 설정방법이 나오는데 이해를 하지 못했다. 행자님의 댓글을 보고 다시 해보았다. [본문으로]

갑자기 발생하는 일에 대한 대처

맡고 있는 업무 특성상 갑자기 일이 들어오는 경우가 많다.
불쑥 전화와서는 이거 안되요... 이거 너무 불편한데...

갑자기 들어오는 업무를 제어하지 못하면 밀려드는 일정에 치여 야근을 해야만 한다.
우선순위를 무시하고 이런 업무를 바로 처리하게 되면 현재 하고 있는 일이 영향을 받게 된다.
급한 상황이 아니라면 별도의 시간을 정해서 한다. 그래야 현재 하고 있는 일을 진행할 수 있다.

고객사에 에러났다고 그거 하루종일 잡고 있어서 일정이 많이 틀어졌다.
별도의 시간으로 돌려야 계획대로 일을 진행하고 야근을 안한다.

가용한 시간을 적고 거기에 일을 하나씩 넣어야지 ...일에 따라 움직이니깐 매일 야근이다.
일을 너무 많이 받아서는 안된다.
안되는건 딱잘라서 안된다고 해야 함.

자바스크립트 문자열에 특수문자가 들어가서 에러가 나는 경우

\로 처리해 주면 된다.

- 파일 인코딩이 잘못된 경우에도 발생할 수 있다.

JSTL 제약사항 - 상수

간단하지만 편리한 기능때문에 JSP에서 JSTL 사용을 적극 권장하고 있다.
그러나 JSTL은 Java Bean에만 접근이 가능하고, 인자없는 getter만 사용가능하다.
상수를 참조할수도 없다.
Constants.TYPE_ADMIN 이라는 상수가 있는데 참조할 수가 없다.
그래서 하드코딩을 해야 한다.

- 그래서 isAdmin()을 추가한다.
- JSTL 구문에서 상수를 직접 사용할수 있도록 하자.

- 설계시점에 고려를 해서 뷰레이어가 단순해지도록 해야 한다.
뷰레이어에 Java코드를 사용하거나 상수를 사용하지 않는 것이 좋다.

하루 30분 시간내는거 어려운거 아니다. 습관을 들이자.

갑자기 일이 생겨서 바쁜거지.
하루 30분 시간내는게 힘든건 아니다.

일에 끌려서 이것저것 하다보면 바쁘게 한건 많지만 뭘했는지도 모르게 된다.

Eclipse WTP

- 3.4 기준

- Dynamin Web Project 생성시 지정한 Context Root, Content Directory, Java Source Directory를 수정하기
Context Root는 Properties for PROJECT - Web Project Settings에서 수정가능
(Servers View - 해당 서버 Properties - Modules 탭에서도 가능)[각주:1]
Java Source Directory는 Build Path에서 수정가능
Content Directory는 PROJECT/.settings/org.eclipse.wst.common.component 파일을 수정하면 된다.

deploy-path가 설정되어 있어서 src/에 있는 프로퍼티 파일이 WEB-INF/classes/로 배포된다.
이걸 이용하면 다른 곳의 설정 파일도 쉽게 배포할 수 있을거 같네.

- Servers
포트를 다르게 하면 여러개의 서버 인스턴스를 실행시킬 수 있다.

예) 서버1
Tomcat admin port 8101
HTTP/1.1 8081
AJP/1.3 8201

서버2
Tomcat admin port 8102
HTTP/1.1 8082
AJP/1.3 8202

- Tomcat 과 연동시 server.xml 을 수정하고 나서 변경된 사항이 적용이 안되면 이클립스를 재시작한다.
  1. 여러 곳에서 변경할 수 있는데 상관 관계가 어떻게 되는지는 모르겠다. 2010-07-27 [본문으로]

java.math.BigDecimal


2009-11-09 추가

- 소수점 없애기

iPhone App : Ocarina

상상력의 한계가 있을까요?





http://ocarina.smule.com/

一不, 三少, 五宜, 七過


이클립스 플러그인

http://eclipse-plugins.2y.net/eclipse/index.jsp


===groovy, PMD

Eclipse 3.4 Ganymede

Eclipse IDE for Java EE Developers
Tools for Java developers creating JEE and Web applications, including a Java IDE, tools for JEE and JSF, Mylyn and others.

이클립스 V3.4 완전 정복, Part 1: 이클립스 IDE 워크벤치

Ganymede에 배포된 WTP 3.0에는 JSDT(JavaScript Development Environment)가 포함되어 있다.
이클립스 프로젝트에서 지원되니깐 계속 발전될 것이다.
자바스크립트 개발환경으로는 Aptana도 있다.(Europa에서 설치했다가 써보지는 못했는데 이클립스 플러그인말고 어플리케이션도 있음)
- JavaScript Development Toolkit (JSDT) Features를 참고할 것.
- 자바스크립트(JavaScript) 개발환경 확장하기
 
* Synchronize with Repository에 단축키를 할당했는데 안먹는다. Category가 CVS지만 3.3 에서는 되었는데...
대신 "마우스 오른쪽 - e - 엔터"

인간관계?

"개발" 이라는 업을 하며 입에 풀칠하고는 있지만
가장 중요한 것은 사람이라고 생각합니다.
고객과의 관계도 마찬가지이고, 시스템을 다루고, 개발하는 주체도 사람입니다.

그동안은 너무 좋은 사람들과 일을 했던 것일까요?
요즘 정말 힘듭니다.[각주:1]

문제가 뭘까요?
꽤 자존심이 강한 친구라고 생각되어지는데 계속되는 말대꾸, 변명 ...
타일러도 보고, 자존심을 건드려도 보고, 압박을 주기도 했는데요.
습관이나 행동이 한순간에 바뀌는건 아니지만 변화가 없어서 힘드네요.
나만 그렇게 생각하는 것이 아닙니다.

내가 잘못 생각하고 있나? 내가 문제인가?
그 친구를 대하는 내 태도가 굉장히 신경질적입니다.

내 태도를 바꿔볼려고 합니다.
스스로 해결하도록 그냥 내버려두고
좀 더 ... 휴~~~

사람을 대하는게 더 힘듭니다.

2016-09
들리는 풍문에 아주 甲질을 제대로 한다고 하는데, ㅎㅎ



  1. 작년 이맘때도 힘들었지만 이정도는 아니었습니다. [본문으로]

동일한 이름의 자바스크립트 함수

동일한 함수명이 있어도 된다.
자바스크립트에서는 함수도 변수처럼 사용될 수 있기 때문에 마지막에 선언된 함수가 실제 호출되는거 같다.
인자의 개수는 상관없다.
 

10MB = 10 * 1024 * 1024 byte


백업의 생활화

2009-02-11
지원양이 부산에서 오더니 부쩍 나를 많이 찾는다.
오늘까지 처리해야 하는 일이 있는데 일찍 퇴근했다.

퇴근전에 윈도우즈 업데이트를 하고 노트북을 챙기는데...가방이 넘어지면서 바닥으로 떨어졌다.
가방에 있어서 괜찮겠지 했는데 부팅이 되다 멈춘다.
허거걱...
최종 작업물을 서브버전에 언제 올렸지? 오늘 너무 바빠서 기억이 나지 않는다.
무슨 일이 있어도 살려야 한다.

두번 시도하다 안전모드로 부팅한뒤 다시 시작...안된다.
안전모드로 들어가서 시스템 복원을 했다.
공포의 블루스크린...
윽~

다시 전원을 넣었다.
한참 지난 뒤에 부팅이 되었다. 진짜?
휴~

앞으로는 백업을 정기적으로 하고 디스크 조각모음도 해야겠다.
이거 영 불안해서.

2009-02-1?
부팅이 되지 않는다.
안전모드로 부팅후 윈도우즈 업데이트하기전으로 시스템복원을 하면 부팅은 된다.
불안해서 중요한 데이터를 백업해서 다른 파티션에 두었다.

2009-02-16
부팅할 때마다 시스템복원을 해야 한다.
작업하느라 시간이 없어서 시스템을 다시 설치하지도 못했는데 오늘 오후 외근나간 동안 회사동료에게 윈도우즈 재설치를 부탁했다.
C 드라이브에 복구시디로 설치하면 될거라고...
복구시디로 설치하면 불안하다고 하더니 C, D, E 모두 날렸다.[각주:1]
헐...

여튼 데이터를 최대한 살려야 했다.
내일 제출할 보고서도 있고, 지원이 사진과 동영상이 꽤 되는데.
Final Data 를 하루종일 돌려서 복구가능한 파일을 찾았는데 손상된 파일이 많았다.
DiskInternals ZIP Repair 로 보고서를 복구했다.[각주:2]
지금 작업중인 소스는 회사 서버 Subversion 에 있고 외근 가기전에 커밋을 시켜서 다행이었다.
E 드라이브에 넣었던 백업파일이 있긴 했지만 보고서 빼고는 별 도움이 안되었고
며칠전 회사 서버에 백업을 해서 작업파일은 대부분 살렸다.
사진과 동영상은 복구해야 할 파일이 많다.[각주:3]

주기적으로 백업하고
이를 다른 곳에 저장시켜야 한다. 반드시
  1. 어떻게 된거냐니깐 주절주절 말이 많았다. 그냥 C 드라이브에 윈도우즈를 재설치하는 건데... 어쨌든 백업을 다른 곳(물리적으로)에 저장하지 않은 내 잘못이다. [본문으로]
  2. 오피스파일이나 음악파일 복구 등 다양한 프로그램이 있다. Office Recovery 는 유료다. [본문으로]
  3. 사진, 동영상 복구하는 좋은 프로그램 없나요? [본문으로]