2010년 8월 11일 수요일

톰켓에서 일부 폴더(common, bin, webapps 등) 접근 (404 에러) 이슈

톰켓에서 일부 폴더 (common, bin, webapps, server)가

접근이 안되고 404에러가 나는 경우가 있다.

 

이유는 간단한다.

 

보통 서버 설정시에 가상호스트를 많이 사용하는데

 

<Host name="dev.domain.com">
   <Context path=""
    docBase="/data/homepage/domain"      
          reloadable="true"
          debug="true">
         </Context>
   <Alias>dev.domain.com</Alias>
  </Host>

 

이렇게들 많이 설정할 것이다.

 

이렇게 되면 Host의 appBase 속성이 빈 문자열이 되면서

자동적으로 $TOMCAT_HOME 를 바라보게 된다.

 

이로인해 $TOMCAT_HOME 하단 폴더를 먼저 바라보는 기이한 현상이 일어나게 된다.

ex) common, bin, webapps, server, conf, logs, shared, temp, work 등

 

고로 Host의 appBase 속성을 꼭 지정하도록 한다

본인은 그냥 webApps로 지정하였다.

 

<Host name="dev.domain.com" appBase="webapps">
   <Context path=""
    docBase="/data/homepage/domain"      
          reloadable="true"
          debug="true">
         </Context>
   <Alias>dev.domain.com</Alias>
  </Host>

 

* 되도록이면 지정하는 폴더는 내부에 아무런 내용이 없는 것으로 하는 것이 좋다.

그래야 또 겹치는 폴더가 없으므로 ㅇㅇ

 

 

* 참고로 본인이 개발한 환경은 apache2 + tomcat5.5 + mod_jk 연동에서 난 오류 이므로 버전이 다르거나 연동하지 않는 경우에는 어떻게 될련지 모릅니다.

 

 

이것 때문에 4시간 삽질한게 자랑 ㅠ

apache usage경로(폴더) 접근제한(403 forbidden) 이슈

 

아파치 설치 경로가 /etc/httpd 라고 할 경우

 

/etc/httpd/conf.d/webalizer.conf 파일 내용에

 

Alias /usage /var/www/usage

<Location /usage>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Allow from .example.com
</Location>

 

이런 내용이 가상 디렉토리로 잡아서 생기는 문제이다

이 부분을 주석처리 하면 된다.

 

 

2010년 7월 28일 수요일

ASP 다국어 이슈 (UTF-8)

ASP
1. Response.AddHeader "content-type","text/html;charset=UTF-8"
2. Response.Charset = "UTF-8"
3. Session.CodePage = 65001 '새로고침 대응

위 내용은 공통 Include 페이지에 포함 시킨다.

4. <%@ LANGUAGE='VBSCRIPT' CODEPAGE='65001' %>
-> 위 문장은 리퀘스트에서 넘어가는 값들(ex:Request("name"))을 UTF-8로 변환시킨다.

5. .asp 소스 파일은 꼭 UTF-8로 형식으로 저장 한다.
HTML <meta> 태크 추가
-> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

6. 단... 메일 관련된 HTML 파일의 경우 (ex: /mail/joinConfirm.html)
->내부적으로 Server.CreateObject("Scripting.FileSystemObject") 이용하여 파일 내용을 긁어올 경우
대상 HTML 파일은 일반 ANSI 형식으로 저장한다.

7. 파일 다운로드 관련....
Response.AddHeader "Content-Disposition","attachment;filename=" & Server.URLPathEncode(Realname)
다운로드 이름을 꼭 URL 인코드해야 한글 다운로드가 제대로 인식된다.

MS-SQL
1. nvarchar, nchar, ntext 형 데이터를 사용한다
-> varchar, char, text 형 데이터 사용금지.
2. 만일 커맨더 객체를 사용할 경우 nvarchar, nchar, ntext 형 맞게 수정해야한다.
3. Collate (정렬방식을 Unicode 방식으로 정의한다.)
ex)
CREATE TABLE [dbo].[t_admin](
[adminid] [nvarchar](25) COLLATE Korean_Wansung_Unicode_CI_AS

 

 

* 만약 다국어가 아니라 UTF-8 일 경우에는 마지막 MS-SQL 세팅은 굳이 nvarchar 형을 사용하지 않고 varchar 형을 사용해도 된다.

2010년 7월 21일 수요일

fedora 12 svn 설치

-SVN 설치

# yum install subversion

 

-mod_dav_svn.so 설치

# yum install mod_dav_svn

 

-sqlite 설치

# yum install sqlite

 

-저장소 만들기

# mkdir /svnroot

# cd /svnroot

# svnadmin create --fs-type fsfs svn

# svnserve -d -r /svnroot/svn

 

-svn repository 설정
# cd /svnroot/svn/conf
# vi svnserve.conf --파일을
열어서 #표시가 있는 부분은 모두 제거(authz-db= 제외)


-권한설정

# chmod -R g+w /svnroot/svn
# chown -R apache.apache /svnroot/svn

 

-사용자 아이디와 패스워드 파일 /svnroot/svn/svn-auth-file 생성
# htpasswd -cm /svnroot/svn/svn-auth-file 사용자아이디 -- 최초 생성시.
# htpasswd -m /svnroot/svn/svn-auth-file 사용자아이디 --사용자 추가시.
명령어를 입력하면 패스워드 입력 프롬프트가 발생한다.

 

Apache를 /etc/httpd에 설치했으므로 설정파일은 /etc/httpd/conf/httpd.conf 입니다. dav, dav_svn 모듈이 설정되어 있는지 확인 합니다. 주석처리 되어 있으면 주석을 없애고 없다면 아래 두줄을 추가합니다.

LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
 
- 아파치 연동을 위한 설정
# vi /etc/httpd/conf/httpd.conf

--VirtualHost 부분에 svn 설정내용을 추가한다.
<VirtualHost *:80>
<Location "/svnroot/svn"> --svn 접속경로
  DAV svn
  SVNPath /svnroot/svn
  AuthType Basic AuthName "SVN repository"
  AuthUserFile /svnroot/svn/svn-auth-file
  Require valid-user
</Location>
</VirtualHost>

-서버 재시작

# service httpd restart

-방화벽에서 80포트, 3690포트를 연다.

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

 

# service iptables restart

 

 

 

 

* 방화벽 관련

방화벽 상태 알아보기
/sbin/service iptables status

방화벽 올리고 내리기
/sbin/service iptables stop
/sbin/service iptables start

방화벽 설정 수정하기
vi /etc/sysconfig/iptables

 
※ 주의 사항 ※
selinux 가 실행중이라면 정상작동을 하지 못하는 경우가 있다.
이럴때는 #vi /etc/selinux/config
SELINUX=disabled -> 로 변경해 주거나
[GUI]
프로그램메뉴의 시스템 설정 -> 보안수준 -> SELinux -> 사용안함으로 설정하면 된다.


2010년 6월 24일 목요일

oracle create user example 오라클 데이터베이스 생성

create tablespace ts_test
  logging
  datafile '/home/oracle/oracle/product/10.2.0/oradata/gears/ts_test.dbf'
  size 32m
  autoextend on
  next 32m maxsize 2048m
  extent management local;

 

여기서 SID = gears

-테이블스페이스 생성후

사용자를 매칭

 

되도록이면 테이블 스페이스 명과 사용자명이 1:1로 매칭 되도록하자.

 

CREATE USER 사용자명
IDENTIFIED BY 패스워드
DEFAULT TABLESPACE 테이블스페이스명
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;

GRANT DBA TO 사용자명;

ALTER USER 사용자명 DEFAULT ROLE ALL;

GRANT CREATE TABLE TO 사용자명;

GRANT UNLIMITED TABLESPACE TO 사용자명;

GRANT CREATE SESSION TO 사용자명;

GRANT CREATE VIEW TO 사용자명;

 

GRANT CREATE PROCEDURE TO 사용자명;

2010년 6월 8일 화요일

MySQL console 명령어

일반적으로 mySQL 같은 경우 /usr/local/mysql 폴더에 설치가 되어있다.

 

데이터베이스 접속

$ mysql -u 사용자명 -p dbname


설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql



비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
아래 댓글에서 rukikuki님이 알려주셨습니다.
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..


불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;



데이터베이스 생성/보기


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기


mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);



SELECT

mysql> SELECT col1, col2, ... FROM tablename;


컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;


DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;


조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;


결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건



DELETE

mysql> DELETE FROM tablename WEHRE 조건



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql



mysql에서 발생한 오류나 경고 다시 보기

mysql> show errors;
mysql> show warnings;

2010년 4월 22일 목요일

오휘 컨설턴트 사이트


  1. 고객사 : (주)LG생활건강
  2. 개발환경 : AIAX, WebSphere 5, JAVA, Oracle 9i
  3. 개발기간 : 2007.07 ~ 2007.10 (본인 참여 개발 기간)
  4. URL : http://oc.lgcare.com

  • 컨설턴트, 고객과 관리자를 아우르는 사이트
  • 외부 서비스, 시스템과 연계하는 혐업이 많아서 난이도가 있었던 작업
  • 본 인은 외부 회원정보(DB2)를 조회하거나 스케줄링을 이용한 데이터교환 작업담당

2010년 4월 21일 수요일

동부렌터카



  1. 고객사 : (주)동부익스프레스
  2. 개발환경 : AIAX, WebLogic 8, JAVA, Oracle 9i
  3. 개발기간 : 2007.04 ~ 2007.06 (본인 참여 개발 기간)
  4. URL : http://www.dongburentcar.com/


  • 최초로 본인이 PL급으로 개발한 사이트
  • LG에서 개발한 라프제이 프레임워크를 사용함(단 가우스는 사용안함)
  • 랜트예매가 가장 핵심 로직이었으며, 그것을 AJAX를 이용하여 동적으로 구현
  • 물류시스템에 대한 이해를 높일 수 있는 프로젝트
  • AJAX 클래식 방법론을 이용하여 구현
  • 동부익스프레스 물류관리시스템에서 예매와 회원에 관한 인터페이스를 제공하면, 본 인이 웹으로 표현하는 작업
  • 그 외에 커뮤니티성 작업은 본 측에서 알아서 구현

엘라스틴

  1. 고객사 : (주)LG생활건강
  2. 개발환경 : AIAX, WebSphere 5, JAVA, Oracle 9i
  3. 개발기간 : 2007.04 ~ 2007.05 (본인 참여 개발 기간)
  4. URL : http://www.elastine.co.kr

  • 디자인 위주의 브랜드 사이트
  • 간단한 AJAX 효과와 화려한플래시효과 사용
  • 사내 선임과 보조로 진행하였으며 부분 메뉴별로 작업을 진행하였다



순복음교회 SMS 어드민



  1. 고객사 : 순복음교회
  2. 개발환경 : AIAX, WebSphere 5, JAVA, Oracle 9i
  3. 개발기간 : 2007.03 ~ 2007.04 (본인 참여 개발 기간)
  4. URL : 외부노출금지

  • 간단한 SMS 전송 사이트
  • 교인들의 주소록을 관리하여 해당 교인들에게 SMS를 발송
  • SMS 템플릿을 제공하는 서비스
  • 1인 개발 프로젝트

2010년 4월 19일 월요일

휴넷

휴넷


  1. 고객사 : 평생교육 휴넷
  2. 개발환경 : Windows Server 2003, .NET Framework 2.0, MS-SQL 2005
  3. 개발기간 : 2006.06 ~ 2007.02 (본인 참여 개발 기간)
  4. URL : http://www.hunet.co.kr


  •  LMS 시스템을 기반으로 하는 온라인 교육컨텐츠 제공 사이트로써 JAVA 개발자로써 회사에 입사하였으나 첫 프로젝트가 닷넷 환경이어서 인상이 남은 프로젝트.
  •  기존 시스템이 ASP + MS-SQL2000 환경으로 구현되어 있는 사이트였으며, 총 7개의 사이트를 개발하였으며 2개의 사이트는 ASP 언어 그대로 사용하되 마이그레이션 사항에 대해서만 처리하는 방식으로 하였다.
  •   이 프로젝트에 투입되는 개발인력 중에 가장 경력이 적었으며(회사 입사 최초 프로젝트) 경력에 비해 이런 큰 프로젝트에 투입되어서 배운 것도 많았으며 닷넷 프레임워크에 대한 이해도도 많이 증가한 개인적으로 참 고마운 프로젝트
  •  3티어모델을 적용하였으며 사내 자체 개발 프레임워크를 사용하여 진행하였다.
  •  본 인이 주로한 업무는 커뮤니티성 게시판 개발과 메뉴를 주로 개발하였으며, 복잡성이 높은 작업이나 비지니스 로직이 난해한 작업은 선임 개발자들이 하였다.


2010년 3월 25일 목요일

asp.net MSDTC(OraMTS) + Oracle 11g client + Windows 7

 

정말 MS와 Oracle의 궁합은 이리도 안 좋은 것인가....

 

현재 닷넷 관련 프로젝트를 진행 중인데

복 수개의 Oracle 서버 (Oracle 9I) 와 복 수개의 MS-SQL2008 서버에 접근해서

트랜젝션을 처리해야한다..

 

본 프로젝트에서 솔루션으로 생각한게

OracleClient 를 사용한 Managed Oracle Provider 1.1 을 사용하고

MSSQL과 Oracle 를 동시에 트랜젝션 처리를 하기위해서 MSDTC를

사용하게 되었다..

 

이것을 사용하기 위해서 Oracle MTS(Microsoft Transaction Service)를 사용하기로 했는데 정말 빌어먹을 DCOM의 트랜젝션에 MTS를 넣기가 엄청나게 힘든것이다..

 

우선 윈도우즈 버젼이 비스타나 Server2008 윈도우즈7 일 경우에는

서버 버전이 무엇이든 간에 오라클 클라이언트를 11g 를 깔아야합니다.

 

9i로 어떻게든 해볼려고 했었는데....  결론은 트랜젝션이 완벽하지 않게 된다..

-본 프로젝트는 TransactionScope 객체를 사용함-

 

일부 웹자료를 살펴보니 Enlist=false 옵션을 ConnectionString에 먹이면 된다고 하는데

다시 한 번 강조하지만 그렇게 되면 해당 커넥션이 트렌젝션에 참가하지 않게 되므로

사용자 Exception 이나 오류가 발생한 경우 rollback가 되지 않는다.

 

결국 찾다찾다 보니 진리의 msdn 님께서 비스타 이상에서는 oracle 11g Client 를 깔아서

MSDTC 설정을 잘하라는게 결론인데 이와 관련된 설정도 엄청나게 힘들었다...

 

첫번째 : 11g client 깔기

 

http://www.oracle.com/technology/software/products/database/oracle11g/111060_win32soft.html

 

두번째 : ODT for Visual Studiy 깔기

 

http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

 

세번째 : 환경설정

ORACLE_HOME : oracle client home 경로 ex) D:\product\11.1.0\client_1

ORACLE_HOME 경로에 Network Service, IIUser 보안 권한주기

 

네번째 : DTC 설정

 

http://msdn.microsoft.com/ko-kr/library/aa561924(en-us,BTS.20).aspx

 

1.  Set the appropriate MSDTC Security Configuration options on Windows Server 2003 SP1, Windows XP SP2, Windows Server 2008, and Windows Vista

(기본 사용설정)

 

2. If Windows Firewall is running, add an exception for the MSDTC service

(방화벽해제)

 

그리고 2008 서버일경우 레지스트리에 권한 추가

http://piliusa.tistory.com/12?srchid=BR1http%3A%2F%2Fpiliusa.tistory.com%2F12

 

그리고 재부팅....

 

만약 그래도 안 될경우..

한글 기술 문서 링크 올립니다..

http://support.microsoft.com/kb/976963/ko

 

 

 

잘 되네요 유후~