반응형
사용자 삽입 이미지

사용자 삽입 이미지

Posted by 1010
반응형
1. 스프링 프레임워크 소개

  * 스프링이란?
    - 스프링(Spring)은 간단히 말하면 엔터프라이즈 어플리케이션에서 필요로 하는 기능을 제공
      하는 프레임워크이다. 스프링은 J2EE가 제공하는 다수의 기능을 지원하고 있기 때문에,
      J2EE를 대체하는 프레임워크로 자리 잡고 있다.

  * 스프링 프레임워크 특징
    - 스프링은 경량 컨테이너이다. 스프링은 자바 객체를 담고 있는 컨테이너이다. 스프링은 이들
      자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링으로부터 필요한 객체를
      가져와 사용 할 수 있다.
    - 스프링은 DI(Dependency Injection) 패턴을 지원한다. 스프링은 설정 파일을 통해서 객체 간의
      의존 관계를 설정할 수 있도록 하고 있다. 따라서 객체는 직접 의존하고 있는 객체를 생성 하거
      나 검색할 필요가 없다.
    - 스프링은 AOP(Aspect Oriented Programming)를 지원한다.스프링은 자체적으로 AOP를 지원
      하고 있기 때문에 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통으로 필요로 하지만 실제
      모듈의 핵심은 아닌 기능들을 분리해서 각 모듈에 적용할 수 있습니다.
    - 스프링은 POJO(Plain Old Java Object)를 지원한다. 스프링 컨테이너에 저장되는 자바 객체
      는 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다. 따라서 기존에 작성한
      코드를 수정할 필요 없이 스프링에서 사용할 수 있다.
    - 트랙젝션 처리를 위한 일관된 방법을 제공한다. JDBC를 사용하든, JTA를 사용하든, 또는 컨테
      이너가 제공하는 트랙잭션을 사용하든, 설정 파일을 통해 트랜잭션 관련 정보를 입력 하기
      때문에 트랙잭션 구현에 상관없이 동일한 코드를 여러 환경에서 사용 할 수 있다.
    - 영속성과 관련된 다양한 API를 지원한다. 스프링은 JDBC를 비롯하여 iBATIS, Hibernate,
      JPA, JDO등 데이터베이스 처리와 관련하여 널리 사용되는 라이브러리와의 연동을 지원하고
      있다.
    - 다양한 API에 대한 연동을 지원한다. 스프링은 JMS, 메일, 스케쥴링 등 엔터프라이즈 어플리
      케이션을 개발하는데 필요한 다양한 API를 설정 파일을 통해서 손쉽게 사용할 수 있도록 하고
      있다.

  * IoC(Inversion of Control)란?
    - Spring 프레임워크가 가지는 가장 핵심적인 기능은 IoC(Inversion of Control)이다.자바가
      등장한 최초에는 객체 생성 및 의존관계에 대한 모든 제어권이 개발자에 있었다. 그러나,
      서블릿, EJB가 등장하면서 제어권이 서블릿과 EJB를 관리하는 서블릿컨테이너 및 EJB 컨테이
      너에게 넘어가게 되었다. Spring 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수
      있는 기능을 제공하고 있다. 이와 같은 이유때문에 Spring 프레임워크를 Spring  컨테이너,
      IoC컨테이너와 같은 용어로 부르기도 한다.
     : 물론 모든 객체에 대한 제어권을 컨테이너에게 넘겨버린 것은 아니다. 서블릿 컨테이너와 EJB
       컨테이너에서도 서블릿과 EJB에 대한 제어권만 컨테이너가  담당하고 나머지 객체에 대한 제
       어권은 개발자들이 직접 담당하고 있다. 이처럼 Spring 컨테이너 일부 POJO(Plain Old Java
       Object)에 대한 제어권을 가진다. Spring컨테이너에서 관리되는 POJO는 각 계층의 인터페이
       스를  담당하는 클래스들에 대한 제어권을 가지는 것이 대부분이다.

  * Dependency Injection
    - DI는 Spring 프레임워크에서 지원하는 IoC의 한 형태이다. DI를 간단히 말하면, 객체 사이의
      의존관계를 객체 자신이 아닌 외부의 조립기(assembler)가  수행한다는 개념이다.

      일반적인 웹어플리케이션의 경우 클라이언트의 요청을 받아주는 컨트롤러 객체, 비지니스
     로직을 수행하는 서비스 객체, 데이터에 접근을 수행하는 DAO객체 등으로 구성된다.
     만약, WriteArticleServiceImple클래스가 ArticleDao 인터페이스에  의존하고 있을 경우를 생각
     해보자

     의존관계를 형성하는 방법에는 아래와 같은 경우들이 있다.

     첫번째,  코드에 직접 의존 객체를 명시하는 경우.
   
     public class WriteArticleServiceImpl{

        private Article articleDao = new MysqlArticleDao();

     ....

     }

     이 경우 의존하는 클래스가 변경되는 경우 코드를 변경해야 하는 문제가 있다.

     두번째, Factory 패턴이나 JNDI등을 사용해서 의존 클래스를 검색하는 방법이 있다.

     public class WriteArticleServiceImpl{

        private ArticleDao articleDao = ArticleDaoFactory.create();

        ...

     }

     Factory나 JNDI를 사용하면 첫번째문제(즉,  의존  클래스가 변경되면 코드를 변경해야 하는
     문제)를 없앨 수는 있지만, WriteArticleServiceImpl클래스를  테스트하려면 올바르게 동작하는
     Factory또는 JNDI에 등록된 객체를 필요로 한다는 문제점이 있다.

     세번째, DI패턴이다. 이 방식에서는 의존관계에 있는 객체가 아닌 외부 조립기(assembler)가 
     각 객체 사이의 의존 관계를 설정해준다.
     WriteArticleServiceImpl클래스의  코드는 MysqlArticleDao 객체를 생성하거나 검색하기 위한
     코드가  포함되어  있지 않다. 대신 조립기의 역할을 하는 Assembler가 MysqlArticleDao
     객체를 생성한 뒤 WriteArticleServiceImpl객체에 전달해 주게  된다.
 
     DI패턴을 적용할 경우 WriteArticleServiceImpl클래스는 의존하는 객체를  전달받기  위한 설정
     메서드(setter method)나 생성자를  제공할 뿐 WriteArticleServiceImpl에서  직접 의존하는
     클래스를 찾지 않는다.

  * AOP(Aspect Oriented Programming)
    - 로깅, 트랙잭션처리, 보안과  같은 핵심 로직이  아닌 cross-cutting concern(공통관심사항)을
      객체 지향기법(상속이나 패턴등)을 사용해서 여러 모듈에 효과적으로 적용하는데 한계가 있었
      으며, 이런 한계를 극복하기 위해 AOP라는 기법이 소개되었다.

      공통관심사항(cross-cutting concern)을  별도의 모듈로 구현한 뒤, 각  기능을 필요로 하는 곳
      에서 사용하게 될 경우, 각 모듈과 공통 모듈 사이의 의존관계는 복잡한 의존 관계를 맺게 된다.

      AOP에서는  각클래스에서 공통 관심사항을 구현한 모듈에 대한  의존  관계를갖기보다는,
      Aspect를  이용하여 핵심 로직을 구현한 각 클래스에 공통 기능을 적용하게 된다.

      AOP에서는 핵심  로직을 구현한 클래스를 실행하기 전 후에 Aspect를 적용하고, 그 결과로
      핵심 로직을 수행하면 그에 앞서 공통 모듈을 실행하거나 또는 로직  수행 이후에 공통 모듈을 
      수행하는 방식으로 공통 모듈을 적용하게 된다.

      AOP에서 중요한 점은 Aspect가 핵심 로직 구현 클래스에 의존하지 않는다는 점이다. AOP에
      서는 설정 파일이나  설정클래스  등을 이용하여 Aspect를 여러 클래스에  적용할 수 있도록
      하고 있다.
Posted by 1010
반응형

스프링 공부를  하는데.. 아무리 이론을 봐도 무슨 말인지 하나도 모르겠고,
자바 처음 배우던 때를 떠올리며.. Helloworld를 찍어봐야겠다고 판단.
네이버에서 찾아 낸 Spring으로 Helloworld찍기.. 시킨대로 하니 화면에 뜨네. 휴.
자 그럼, 안 잊어 먹기 위해 나도 정리를 해놓자.

내 컴퓨터 환경은...
JDK1.5 + Tomcat 5.5 + SpringFramework 2.5.6 아 차,, +  Eclipse는 Europa.

우선 스프링 프레임워크를 받으려면..
http://www.springframework.org/download 로 가서
spring-framework-2.5.6-with-dependencies  파일을 받는다.
뭘 받을지 모르겠음 멜 남기시고..

자 그럼 Eclipse 실행 시키고~ Dynamic Web Project를 만든다.
프로젝트 이름은 SpringHelloWorld 라고 지정.
Target Runtime은 Tomcat으로 하고 Finish.

lib폴더에 lib파일들을  넣는다.(제일 중요!!)
스프링 다운 받아서 압축 푼 폴더에 보면
spring-framework-2.5.6\dist\spring.jar 파일
: (스프링  프레임워크 lib파일)
spring-framework-2.5.6\lib\jakarta-commons\commons-logging.jar 파일
: (로그 사용을 위한 lib파일)
spring-framework-2.5.6\dist\modules\spring-webmvc.jar
: (컨트롤러 상속받기 위해서)

그리고 태그라이브러리 사용을 위한 jar파일을 받는다.
http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
압축풀어 보면 standard.jarjstl.jar파일이있다. 

이 아이들까지전부 lib폴더에넣는다..

그럼 web.xml파일부터 수정해보자.

 <display-name>SpringHelloWorld</display-name>
   <servlet>
     <servlet-name>springapp</servlet-name>
     <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
     </servlet-class>
   </servlet>
 
  <servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.htm</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

*.htm으로 들어오는 요청에 대해서 springapp서블릿을 사용하겠다는 얘기.
서블릿은 스프링 프레임워크에 있는 DispatcherServlet 이다.

DispatcherServlet의  제어 행위를 처리하는 설정 파일이 필요한데, 이것은 서블릿 이름에
-servlet.xml 을 붙여 작성한다. 그러니까 여기서는 springapp-servlet.xml  이겠지.
/WEB-INF/springapp-servlet.xml을  작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="springappController" class="web.SpringappController"/>
 
    <bean id="urlMapping"
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     <property name="mappings">
      <props>
       <prop key="/hello.htm">springappController</prop>
      </props>
     </property>
    </bean>
 
    <bean id="viewResolver"
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="viewClass">
      <value>org.springframework.web.servlet.view.JstlView</value>
     </property>
     <property name="prefix">
      <value>/WEB-INF/jsp/</value>
     </property>
     <property name="suffix">
      <value>.jsp</value>
     </property>
    </bean>
</beans>

잘 보면 beans태그안에 bean태그가  3개가있다.
첫 번째는 Controller인거 같고,,
두 번째는 urlMapping 시켜주는데 /hello.htm으로 요청이 들어오면 springappController에게
넘기라는 거 같다.
세 번째꺼는 선행자 후위자를 정한거네.
미리  써놓으면 항상 쓰이는 WEB-INF/jsp/파일이름.jsp 에서 앞 뒤 없이 이름만 써서 가능.

그럼 SpringappController.java를 작성해 보자.
이놈은 Controller라는  인터페이스를 상속받습니다.
web이라는 패키지를 생성 후 거기에다가 class를 생성합니다.
생성할 때 New Java Class화면에서 Interface부분에 Add버튼을 클릭해서
Controller를선택하고 추가 해주면 자동으로 생성됨.

package web;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class SpringappController implements Controller {
 protected final Log logger = LogFactory.getLog(getClass());
 
 public ModelAndView handleRequest(HttpServletRequest arg0,
   HttpServletResponse arg1) throws Exception {
  // TODO Auto-generated method stub
  String now = (new Date()).toString();
  logger.info("returning hello view with " + now);
 
  return new ModelAndView("hello", "now", now);
 }
}

시간을 리턴한다. new Date()로 시간을 생성해서 그걸 String변환 후 now 변수에  넣고,
로그를 기록한 후, return할때 now라는 변수는 now라는 이름으로 쓸 수 있게 hello파일에 넘김.
이  hello는 앞  뒤  합쳐서 /WEB-INF/hello.jsp 가 됨.

이제 /WEB-INF/jsp/hello.jsp 파일을  보자.

<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Hello :: Spring Application</title>
</head>
<body>
 <h1>Hello World! - Spring Application</h1>
 <p>Greetings, it is now <c:out value="${now}" /></p>
</body>
</html>

now라는 변수를 c:out태그로 출력한다. Controller에서시간을담아서 넘겨 받았다.
그리고 jsp파일을 WEB-INF폴더에 넣는 이유는 JSP파일접근에대한권한이 아마 우리한테 없고 Spring에게 넘겨서라고 내가 찾아 본 블로그 주인장은 말했다..
즉, 직접적으로 접근하지 못하도록 하려고?

was/SpringHelloWorld로 접속시 index.jsp를 실행하는데 파일이 없으니  하나 만들자.
폴더 위치 : WebContent/index.jsp
<head>와  </head> 사이에
<script>
 location.href="hello.htm"
</script>
이렇게만 입력하면 자동으로 hello.htm으로 포워드 해준다.
그럼 실행!

사용자 삽입 이미지

이상.. Helloworld찍을 수 있게 도움 받은 블로그 Kyle's Home님께 감사드린다.
이 글의 내용도 Kyle's Home님의 글을 거의 그대로 옮겨 놓았다.
Posted by 1010
98..Etc/Tomcat2008. 8. 17. 02:48
반응형

1. jdk 1.5이상이면 아래 설정을 JAVA_OPTS안에 추가한다면 YourKit을 가지고 힙덤프를 분석할 수 있다.
 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump


 

2. Jasper 2 JSP Engine 지원을 위해 $CATALINA_BASE/conf/web.xml 설정 변경하라.
 - development : false, genStringAsCharArray : true, modificationTestInterval : true, trimSpaces : true
 - 자세한 건 여기를 참조하라.


3. 가용성 확보를 위해 Tomcat의 clustering/session replication을 사용하라.
 - 사용방법은 여기를 참조하라.


4. error pages를 작성하여 적용하라.(web.xml)
 - <error-page>
      <error-code>404</error-code>
      <location>/error/404.html</location>
   </error-page>


5. 어플리케이션에서 System.out과 System.err를 제거하고 Log4j를 사용하라.


6. application마다 같은 라이브러리는 WEB-INF/lib에서 CATALINA_HOME/shared/lib로 옮겨서 공유하라.
 - 메모리를 절약할 수 있다.


7. memory parameters를 잘 활용하라.


8. 불필요한 어플리케이션을 제거하라.


9. Manager서버의 보안을 강화하라.
 - CATALINA_HOME/conf/tomcat-users.xml
  <role rolename="manager">
   <user username="darren" password="ReallyComplexPassword" roles="manager"></user>
  </role>
 - CATALINA_HOME/conf/server.xml에 IP 블럭킹 기능도 유용하다.
  <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*"></Valve>


10. server.xml을 최적화 하라.
 - 서버 환경에 맞는 CATALINA_HOME/conf/server-original.xml, CATALINA_HOME/conf/server-minimal.xml 선택하여 server.xml로 변경하라.


11. 톰켓 업그레이드는 설치디렉토리를 분리하여 적용하라.


12. Tomcat 서버는 root로 띄우지 마라.
 - 자세한 내용은 여기를 참조하라.


13. Precompile JSPs (at build time)
 - 자세한 내용은 여기를 참조하라.


14. 디렉토리 보이는 걸 막아라.
  - CATALINA_HOME/conf/web.xml
  <servlet>
   <servlet-name>default</servlet-name>
   <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
   <init-param>
   <param-name>debug</param-name>
   <param-value>0</param-value>
   </init-param>
   <init-param>
   <param-name>listings</param-name>
   <param-value>false</param-value>  <!-- make sure this is false -->
   </init-param>
   <load-on-startup>1</load-on-startup>
  </servlet>


15. 듀얼 코어 CPU를 사용할 경우 쓰레드풀을 250개 이상 설정하라.


16. Tomcat MBeans이나 다양한 모니터링 도구를 활용하여 서버를 모니터링하라.
 - 자세한 내용은 여기를 참조하라.


17. jdk1.5, 1.6이 성능이 좋다.


18. -server JVM option을 사용하라.


19. GZIP compression을 사용하라.
 - <Connector>compression="on"
   compressableMimeType="text/html,text/xml,text/plain,application/xml"
   </Connector>
 - 자세한 건 여기를 참조하라.


20. Security Manager를 잘 사용하라.
 - 자세한건 여기를 참조하라.



출처 : http://blog.paran.com/pmang/21456729
Posted by 1010
90.개발관련문서2008. 8. 17. 02:40
반응형
사용자 삽입 이미지
새로 보는 프로그래밍 언어
개발자의 가치를 높이는 프로그래밍 언어 대백과
마이클 스콧 지음 | 민병호 김진혁 옮김 | 1004페이지 (부록CD 260페이지 추가수록)
45,000원 | 2008년 8월 21일 출간 예정

이 책을 한 마디로 표현해볼까요?
괴물!
프로그래밍 언어를 다룬 책 중에 여태까지 이런 책은 한 권도 없었습니다.
여기서 "이런"은 뭘 의미할까요? eRun? 자, 이제부터 차근차근 하나씩 설명해드리죠.

정말 몸값을 높이고 싶으신가요? 단지 코드 몇 줄을 잘 짠다고 몸값이 올라간다고 생각하시나요? 개발자로서 자신의 앎이 부족하다고 느끼신 적은 없으신가요? 학교에서 배우는 프로그래밍 언어론이 수박 겉핥기에 지나지 않는다고 느껴보신 적은 없습니까.

이 책의 원서 목차를 보고 난다긴다 하는 개발자분들이 모두 혀를 내두르셨습니다. 심지어 어떤 프로그래밍 언어를 전공하셨다는 일급 자바 개발자께선 "이런 '발칙한 책'을 봤나"라는 반응을 하실 정도였으니까요. (사실은 좀더 저급한 표현을 쓰셨지만, 여기서는 조금 정제해서 말씀드려야겠죠 -0-)
사용자 삽입 이미지
이 책에서 다루고 있는 프로그래밍 언어의 "간추린" 계보입니다. 이 책에서는 명령형 언어, 함수형 언어, 논리형 언어, 병행/병렬 프로그래밍, 그리고 최근 부쩍 떠오르는 스크립팅 언어까지 거의 "모든" 언어를 다루고 있습니다. 그저 다루는 정도가 아니라 각 언어로 구현한 코드 사례를 보여주며 그 언어의 장단점까지를 파헤치고 있습니다. 개발자가 빠지기 쉬운 함정과 오류를 낱낱이 보여줍니다.
사용자 삽입 이미지
그림이 좀 보이세요? 이 책에서 다루는 간단 목차입니다. 네, 이 책의 당초 집필 목적은 교과서입니다. 학부 3,4학년, 혹은 대학원생을 위한 아주아주 훌륭한 교과서입니다. 잠깐만요! 그렇다고 단지 교과서로 지루하게 나열된 책은 결코 아닙니다. 기존 프로그래밍 언어론 책에서는 다루지 않았던 정석과 기본기를 차근차근 쌓아가게 하는 책입니다.

1부. 프로그래밍 언어의 기초에서는 컴파일러와 컴퓨터 아키텍처, 프로그래밍 언어 설계와 구현에 대한 기본기를 닦아줍니다. 2부. 프로그래밍 언어의 핵심요소에서는 명령형 언어 C와 C++등을 중심으로 프로그래밍 언어의 공통적인 사항과 기본 개념을 다룹니다. 이어지는 3부. 다른 관점에서 바라본 프로그래밍 모델에서는 함수형 언어, 논리형 언어, 병행 프로그래밍 등과 함께 이 책의 (원서) 개정판에서 추가된 내용으로 PHP, 루비, 파이썬 등 스크립팅 언어들까지 다루며 내용을 이어갑니다. 4부에서는 드디어 로우레벨 관점에서 바라본 프로그램 되짚기가 등장합니다. 중간언어 등을 훑어보며, 프로그램을 컴파일 후 기계어로 변환된 코드를 분석해 코드를 개선하는 프로그램 최적화까지 다루게 됩니다.

그야말로 프로그래밍 언어의 개념, 이론, 설계, 구현, 최적화 등 전체적인 프로그래밍 언어의 전반을 꿰뚫고 각 사례를 모든 프로그래밍 언어로 구현해 그 언어들의 강점과 취약점을 분석해줌으로써, 결국 개발자가 프로그래밍 과정에서 가장 적절한 언어를 어떻게 선택해내 얼마나 효율적인 프로그램을 만들 수 있을까를 알려주는 것을 최종 목표로 합니다.

이제 왜 책의 제목에 "새로 보는"이라는 수식어가 붙었는지 이해가 가세요? 저희도 처음엔 아주 쉽게 "완전정복"이라든가 "완벽 가이드" "총서" 등의 아주 식상한 문구를 생각했었습니다. 하지만 이 책은 기존에는 전혀 볼 수 없었던 프로그래밍 언어론에 대한 절대(!)적이고도 상식(!)적인 프로그래밍 언어 대백과라고 할 수 있습니다. 기존 관념을 깨고 혜안을 갖게 해주는, 프로그래밍 언어의 비밀을 한꺼풀 벗겨내는 책이거든요. 자, 이 정도면 왜 자신있게 여러분의 몸값을 높여주는 책이라고 큰 소리를 쳤는지 조금은 동의를 하시나요? 아직도 이해를 못 하시겠다면 8월 21일 서점에 가셔서 직접 확인하시기 바랍니다. :)

게다가 함께 제공하는 부록CD에는 책의 분량(이미 1004페이지, 천사에요. angel ^^)이 비대해지는 것을 막기 위해 중간중간 좀더 심도깊은 심화학습에 해당하는 내용을 옮겨 담았습니다. 260페이지에 달하는 분량인데요. 이것만 해도 웬만한 책 한 권 분량은 족히 됩니다. 부록 CD에는 그밖에도 공개 컴파일러와 해석기 링크 모음, 책에 나온 300개 이상의 코드의 완전한 소스파일 등이 가득가득 들어있습니다. 지금 CD 메뉴 내비게이션까지 한글로 옮겨내는 마무리 작업 중인데요. 독자를 감동시킬 만한 세심한 작업에 최선을 다하고 있습니다. 원서보다 나은 번역서, 에이콘 책이 늘 지향하는 바죠.

이 책을 번역한 역자 민병호님과 김진혁님은 강유님과 함께 『TCP/IP 완벽 가이드』를 공역하셨던 분들인데 드디어 이제 두 분만의 멋진 작품을 만들어내셨습니다. 그때만해도 대학원생 신분이셨는데 이제 한 분은 국방과학연구소에서 한 분은 삼성전자에서 열혈 근무중인 사회인이 되셨어요. 공교롭게도 이 분들의 번역 작품 두 권이 모두 1000페이지가 넘어가는 방대한 작업이었습니다. TCP/IP 완벽 가이드가 1,600쪽이었고, 이 책 『새로 보는 프로그래밍 언어』는 CD에 담긴 내용까지 합치면 1,260쪽을 넘어서니 정말 어마어마하죠. 그간 정말 고생 많으셨어요. TCP/IP 책을 마치고 출판사를 찾아오셔서 "한우 꽃등심 사주세요"하셨었는데, 이번에 책이 나오면 뭔가 미리 준비를 해둬야 할 것 같습니다. ㅎㅎ

제조물 책임법(Product Liability Law) 일명 PL법이라는 게 있습니다. "고양이를 렌지에 넣고 돌려 털을 말리지 마세요"(전자렌지)라든가 "에어콘에서 나오는 물은 마시지 마세요"(에어콘) 등 기상천외한 경고문을 삽입해둠으로써 소비자가 제품 오용으로 인한 피해를 막기 위하고 불가피한 소송을 피하기 위함이라고 하는데요. 정말 기상천외하고 황당한 경고문이 많습니다. 세상은 요지경이잖아요. 별의별 일이 다 일어나는 별천지 세상.

저희도 판권지쪽에 문구하나를 삽입해야 할까요?

"누워서 이 책을 읽으시다가 책을 놓치시면 머리에 심각한 상해를 입을 수 있습니다"
(대처법: 반드시 엎드려서 읽으세요!)
"베고 주무시다가 목 부분에 경련이 일어나 며칠간 고생을 할 수 있습니다"
(대처법: 좀더 얇은 다른 책을 고르세요.)
"책을 읽고 났는데도 가치가 높아지지 않았다구 느끼신다구요? 제대로 꼼꼼히 읽으셨는지 다시 한번 확인해보세요. 그럴 리가 없습니다. :) "


모두 열공하셔서 정말 훌륭한 개발자 되세요! 고고싱!!
Posted by 1010
98..Etc/Anyframe2008. 8. 17. 02:32
반응형
사용자 삽입 이미지
Posted by 1010
98..Etc/Anyframe2008. 8. 17. 02:27
반응형
사용자 삽입 이미지
Posted by 1010
98..Etc/Anyframe2008. 8. 17. 01:23
반응형
  • Apache Ant 설치와 사용 (1.1 버전 기반)
  • Apache Ant는 Java기반의 빌드 도구이다.
  • Ant의 주요 기능

자바 소스파일 컴파일
jar. war. ear. zip파일 생성
javadoc을 실행하여 도움말 생성
파일이나 폴더의 이동 및 복사, 삭제
각각의 작업에 대한 의존성 설정
유닉스에서 처럼 파일이나 폴더에 퍼미션 설정
파일의 변경 날짜를 설정하는 touch 기능
외부 프로그램의 실행

  • Ant의 설치

다운로드 사이트 : http://ant.apache.org
zip파일을 적당한 디렉토리에 압축을 해제한다.
bin 디렉토리를 path에 추가합니다.
환경 변수 ANT_HOME을 Ant 인스톨된 장소의 디렉토리로 설정합니다.
추가로, 환경 변수 JAVA_HOME 을 설정합니다. 이것에는 JDK가 인스톨 된 장소의 디렉토리로 설정합니다.

  • 시스템 요구사항

Ant 는, Linux, Solaris 나 HP-UX 라고 하는 상용 Unix, Windows 9x 및 NT, Novell Netware 6 , 그리고 MacOS X 등을 포함한 수많은 플랫폼에서 잘 사용되고 있습니다. Ant를 빌드해 사용하려면, 클래스 패스에 JAXP 호환의 XML 파서가 인스톨되어 이용 가능해야 합니다.

  • PATH 설정하기

Windows OS :

      설치된 디렉토리가 c:\ant\. 로 가정했을 경우에

     set ANT_HOME=c:\ant

     set JAVA_HOME=c:\jdk1.3.1

     set PATH=%PATH%;%ANT_HOME%\bin

Unix(bash) OS :

    export ANT_HOME=/usr/local/ant

    export JAVA_HOME=/usr/local/jdk1.3.1

    export PATH=${PATH}:${ANT_HOME}/bin

---------------------------------------------------------------------------------

FreeTTS Client/Server Demo 분석 중 실행에 필요한 Ant를 설치하느라고 네이버 블로거님들이 퍼나르던 좋은 정보를 필요한 부분만 발췌하였습니다.

Posted by 1010