Mysql이 설치가 되어 있다고 가정 한다.

Step 1. 데이터베이스 생성

 생성할 사용자가 사용하는 데이터베이스를 생성 한다. 생성시 명시를 해줘야 하기 때문에 먼저 작업 한다.

 create database if not exists [데이터베이스 명]

 create database if not exists whitelife;


 Step 2. 사용자 생성

 사용자를 생성 한다. 접속을 허용할 IP를 whitelife@IP 작성 하거나 '%' 모든 접속이 허용 된다.

 grant usage on [데이터베이스 명].* to [사용자 명]@[호스트] indentified by [비밀번호];

grant usage on whitelife.* to whitelife@localhost identified by 'whitelife';
grant usage on whitelife.* to whitelife@'127.0.0.1' identified by 'whitelife';
grant usage on whitelife.* to whitelife@'%' identified by 'whitelife';


 Step 3. 권한 부여

 권한을 부여 한다. 최소한 권한만 정의 하였다. 사용자 생성시 3가지 종류로 작성 하였다면 권한도 3가지 다 부여해야 한다.

grant select, insert, update, delete, create, drop, index, alter on whitelife.* to whitelife@localhost;
grant select, insert, update, delete, create, drop, index, alter on whitelife.* to whitelife@'127.0.0.1';
grant select, insert, update, delete, create, drop, index, alter on whitelife.* to whitelife@'%';


 Step 4. 적용 하기

 아래 명령어를 실행 한다.

flush privileges;


  Step 5. 확인 하기

 생성한 사용자로 로그인하여 확인해보자. 정상적으로 접속 되는 것을 확인 할 수 있다.

C:\Program Files\MySQL\MySQL Server 5.5\bin>mysql -u whitelife -p whitelife
Enter password: *********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.5.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


'Database' 카테고리의 다른 글

Mysql Timestamp Column 생성 하기  (0) 2012.12.06
Mysql root 비밀번호 변경하기  (0) 2012.12.03
Oracle 덤프 뜨기  (0) 2012.11.26
count() 에 대해서  (0) 2012.11.16
having 사용하기  (0) 2012.11.15

 

 eclipsc에 maven을 연동 한 후, 재 시작을 했을 경우 아래와 같은 문구를 볼 수 있다.

 

 

  maven의 핵심 Plugin은 JRE가 아닌 JDK를 사용하기 때문에, eclipse가 실행 될 때 참조 하는 설정 파일 eclipse.ini를 수정해야 하고, eclipse는 기본 값으로 JRE를 참조하기 때문에 이 부분도 JDK로 변경 하는 작업이 요구 된다.

 

Step 1. eclipse.ini 파일에 -vm option을 추가 한다.

-vm
D:\Develop\jdk\jdk1.7.0_05\bin\javaw.exe

 

Step 2. window > preferences > java > Installed JREs 옵션 중 JRE를 삭제하고, JDK를 추가 한다.

 아래의 설정 창을 보자. Default로는 JRE가 활성화 되어 있는 모습을 볼 수 있다. maven을 이용할 경우에는 JDK를 권장 하기 때문에 각자 설치한 경로를 찾아서 설정 하도록 하자.

 

 위 두가지 사항을 적용 했다면, 경고 문구는 없을 것 이다.

 앞의 글에서 Ioc에 대하여 알아 보고, DI(Denpendency Injection), DL(Denpendency Lookup) 에 대하여 간략하게 알아보았다. 이번에는 DI(Denpendency Injection) 을 상세하게 알아보도록 한다.

 DI(Denpendency Injection) 는 크게 3가지로 볼 수 있다. 아래의 그림을 보도록 하자.

 



 

 Spring Ioc 글에서 사용했던 예제를 활용 한다. 아래의 표는 Annotation 기반의 @Autowired 기준으로만 설명 한다. @Autowired는 선언을 한 경우, Constructor, Method에 Instance를 주입 한다. 찾지 못한 경우 예외를 발생 시킨다.

  구분

  설명 

 Setter Injection

 

 @Autowired
 public void setService(Wservice service) {
  this.service = service;
 }

 Setter Method에 직접 선언을 하였다. Container는 Instance를 생성 할 때 @Autowired 가 Setter Method에 선언이 되어 있을 경우, Parameter로 있는 Object(Wservice) 를 target으로 주입하게 된다.

 

 Constructor Injection

 

 @Autowired
 public Wcontroller(Wservice wservice) {
  // TODO Auto-generated constructor stub
  this.service = wservice;
 } 

 Constructor에 직접 선언을 하였다. Container는 Instance를 생성 할 때 @Autowired 가 Constructor에 선언이 되어 있을 경우, Parameter로 있는 Object (Wservice) 를 target으로 주입하게 된다.

 

 Method Injection

 

 Setter Injection과 동일 하다고 볼 수 있다. 결국엔 Setter도 Method에 포함 되기 때문이다.

 

 위의 표를 보고 코드를 변경하여 실행을 하면 같은 결과를 확인 해볼 수 있을 것이다.

 실제로 ApplicationContext Container에 적용을 할 경우에는 2가지 방법으로 적용을 할 수가 있다.

  • XML

  • Annotation

 XML의 경우에는 Container의 Config 파일에 직접 명시를 하는 것이고, Annotation의 경우에는 Java 코드에 직접 명시를 하는 경우이다. 지금 까지 예제로 작성 했던 모든 부분 및 Spring Ioc 글에서 설명 했던 예제는 Annotation 기반 이였다. 예제 코드를 작성하기도 쉽고, 간단했기 때문이다. 이번에는 XML로 설명 하겠다.

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd">

 <bean class="kr.whitelife.controller.Wcontroller">
  <constructor-arg ref="service"/>
 </bean>

 
 <bean id="service" class="kr.whitelife.service.Wservice">
  <property name="dao" ref="dao"></property>
 </bean>
 
 <bean id="dao" class="kr.whitelife.dao.Wdao"/>
 
</beans>

 

 위의 XML을 보도록 하자.  Container의 Config 파일인 ApplicationContext.xml 이다. Spring Ioc 글에서 사용 하였던 Class를 설정 하는 부분이다. Class의 설정 태그는 <bean .../> 을 이용 한다. 많이 사용하는 속성은 아래의 표를 보도록 하자.

  속성

  설명 

  constructor-arg

  Class 전체 Package 명 작성 및 bean Id

  property

  Class 전체 Package 명 작성 및 bean Id

 Constructor Injection은 <constructor-arg .../> 을 이용한다. Instance가 생성 되는 시점에서 Container에게 해당 Instance를 참조 하겠다 라고, 전해주지 않을 경우 Constructor가 참조하는 Instance를 찾을 수 없기 때문에 동작 할 수 없다. Setter Injection, Method Injection의 경우에는 <property .../> 를 이용 한다.  Constructor Injection 설명과 마찬가지로 Container에게 참조할 Instance를 전해주지 않는 경우 동작 할 수 없다.

 XML 기반으로 작성 할 경우에는 3가지의 Injection 중 어떤 기법을 사용할지 잘 판단 하고, 작성 하도록 한다. 실행 할 경우 예외가 발생한다고 해서 당황하지 말자. 예외를 잘 읽어보면 Container 에게 정보 전달을 확실하게 하지 않았기 때문에 일어나는 경우가 대부분이다.

 

public class XapplicationContext {
 
 public static void main(String[] args) {
  
  ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  Wcontroller wcontroller = applicationContext.getBean(Wcontroller.class);
  wcontroller.showMsg();
  
 }
 
}

 

 Spring Ioc 글에서 사용했던 예제는 Annotation 기반의 Container를 작성 했었다. 이번에는 XML 기반의 Contatiner를 작성 해보았다. 위의 코드를 실행 해보자.

 

Wcontroller.showMsg....
Wservice.showMsg....
Wdao.showMsg....

 

 XML 설정을 확실하게 했다면, 위와 같은 결과를 얻을 수 있을 것이다. Container가 예외를 발생 시킬 경우 Container의 Config 파일인 ApplicationContext.xml을 다시 확인 하도록 하자.

 드디어 간략하게 DI(Denpendency Injection)을 XML, Annotation 기반으로 체험을 해보았다. 상세한 설정이나 고급적인 DI를 할 필요성이 있을 경우 [Spring IN ACTION / 크레이그 월즈 지음], [Spring Recipes / 게리 막 다니엘 루비오, 조시 롱 지음] 등 을 참고 하도록 하자.

 

 Spring의 Ioc에 대하여 설명 한다.

 본 글에 들어가기에 앞서 http://www.springsource.org/download/community 에서 Spring 3.x.x 이상을 다운 받고 라이브러리에 추가 하도록 한다.

 Java라는 언어를 이용하면서 new 라는 키워드를 자주 이용 한다. 이와 같은 행위는 Instance 를 생성 하는 것 이다.

 

public class Wcontroller{
 Wservice service = new Wservice();
 ....
}

public class Wservice {
 Wdao dao = new Wdao();
  ....
}

public class Wdao {
  ....
}

 

 위 Sample을 보도록 하자. Wcontroller Class는 Wservice Instance를 가지고 있고, Wservice Class는 Wdao Instance를 가지고 있다. 이런 경우는 서로 강하게 의존을 하고 있는 Code라고 볼 수 있다.

 Instance는 서로 의존(Dependency) 하는 모습을 보여주고 있다. 이런 상황의 경우에는 "의존 관계의 제어권은 개발자가 가지고 있다." 라고 말할 수 있다. Instance에 대한 LifeCycle을 개발자가 직접 관리하게 된다. 제어권을 Container에게 넘겨주는 행위를 제어권의 역전 Ioc(Inversion Of Control) 이라고 한다. 여기서 말하는 Container는 SpringFramework의 ApplicationContext 라고 봐도 된다.

 

 

 위 그림을 보도록 하자. Ioc(Inversion Of Control) 은 두 종류로 분리가 된다. 개발자가 Container 에게 제어권을 위임하게 되면 new 를 Container가 대신 한다. 첫 번째의 경우 DI(Denpendency Injection)은 Container가 직접 주입해주는 경우 이다. 개발자는 Object 선언만 하고 Container가 Instance를 주입하게 되는데, 첫번째 방법에서 많이 이용한다. 하지만 멀티 쓰레드 환경에서 Instance를 이용할 경우는 서로의 간섭이 없어야 하기 때문에,  두 번째 방법 DL(Denpendency Lookup)을 이용한다. Contaciner가 Instance를 가지고 있고, 개발자는 Instance를 직접 참조하여 이용 하는 방법 이다.  

 

@Controller
public class Wcontroller {
 
 @Autowired
 Wservice service;

 
 public void showMsg() {
  System.out.println("Wcontroller.showMsg....");
  service.showMsg();
 }
 
}

@Service
public class Wservice {
 
 @Autowired
 Wdao dao = new Wdao();
 

 public void showMsg() {
  System.out.println("Wservice.showMsg....");
  dao.showMsg();
 }
 
}

@Repository
public class Wdao {
 
 public void showMsg() {
  System.out.println("Wdao.showMsg....");
 }
 
}

 

위 Sample를 보도록 하자. Annotation으로 작성 되었고, Spring Web 환경에서 사용한다. 제일 위에 있던 Sample 과 달리 new 라는 키워드가 사라진 점을 발견할 수 있다. 개발자가 직접 Instance를 관리하지 않는다. @Autowired는 DI(Denpendency Injection)을 해주는 기준이라고 보면 된다. 여기서 끝이 아니다. 위와 같이 작성만 했다고 해서 동작하지는 않는다. Container에 대한 작업을 해야 한다.

 

public class WapplicationContext {
 
 public static void main(String[] args) {
  
  AnnotationConfigApplicationContext annotationConfigApplicationContext
  = new AnnotationConfigApplicationContext();
  
  annotationConfigApplicationContext.register(Wdao.class);
  annotationConfigApplicationContext.register(Wservice.class);
  annotationConfigApplicationContext.register(Wcontroller.class);
  
  annotationConfigApplicationContext.refresh();
  
  Wcontroller wcontroller = annotationConfigApplicationContext.getBean(Wcontroller.class);
  
  wcontroller.showMsg();
  
 }
 

 

 위 Sample를 보도록 하자. 쉽게 이해를 돕기 위하여 코드 기준으로 작성 하였다. Container는 Wdao, Wservice, Wcontroller Class를 등록함 으로써, 각각 Instance 들을 가지고 있다. getBean(Wcontroller.class)는 DL(Denpendency Lookup)을 해주는 기준이라고 보면 된다.

 

Wcontroller.showMsg....
Wservice.showMsg....
Wdao.showMsg....

 

 실행 할 경우 위와 같은 메시지가 출력 된다. 정상적으로 DI(Denpendency Injection), DL(Denpendency Lookup)이 된 것을 확인 할 수 있다.

 실제로 사용할 경우에는 SpringFramework의 AppcationContext Instance가 위의 역활을 대신해 줄 것이다. XML로 설정을 하게 된다.

 Spring을 사용하여 개발을 할 경우, Ioc에 대해서는 꼭 기억 하고 있도록 하자. DI(Denpendency Injection)에 대한 자세한 내용은 다음 글을 참고 하도록 한다.

 Eclipse, Java는 설치가 되어 있다고 가정을 하고 진행 한다. 설치가 되어 있지 않은 경우 설치부터 하도록 한다.

Step 1. File > new > Other 클릭

Maven Project 를 선택 한다. 

 

Step 2. Maven Config (1)

위 그림 처럼 체크 박스 활성화

 

Step 3. Maven Config (2)

Group Id, Artifact Id, Name 작성

packaging은 Project의 종류를 판단하는 기준이 된다.

      • Dynamic Web Project -> war
      • Java Project -> jar

위와 같이 선택을 하면 된다. 

Finish 를 누르면 아래와 같이 Project가 생성된 것을 볼 수 있다. webapp 폴더까지는 자동으로 생성 되지만, WEB-INF, web.xml 은 수동으로 생성 하여야 한다.

 

War Project 일 경우 추가 진행

Step 4. pom.xml 파일을 수정

 <build>
  <plugins>
   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
     <source>1.6</source>
     <target>1.6</target>
    </configuration>
   </plugin>

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
     <warSourceDirectory>src/main/webapp</warSourceDirectory>
     <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
    </configuration>
   </plugin>

   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>tomcat-maven-plugin</artifactId>
    <version>1.1</version>
    <configuration>
     <mode>war</mode>
     <port>9080</port>
     <path>/</path>
     <charset>UTF-8</charset>
     <uriEncoding>UTF-8</uriEncoding>
    </configuration>
   </plugin>
  </plugins>
 </build>

 plugin 설정을 추가 한다. tomcat을 maven에서는 was 의 역활을 수행 하긴 하지만, plugin 으로 간주 한다. 설정을 할 경우 pom.xml을 수정 해야 한다. 직접적으로 tomcat/conf/server.xml에 관여하지 않는다.

 

Step 4. Maven Build Condig

 Goals에 tomcat:run 으로 작성 한다.

 

Step 5. 실행

 run > run as > maven build

[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for kr.helloweb:helloweb:war:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 12, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building helloweb 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat-maven-plugin:1.1:run (default-cli) @ helloweb >>>
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ helloweb ---
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ helloweb ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< tomcat-maven-plugin:1.1:run (default-cli) @ helloweb <<<
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:run (default-cli) @ helloweb ---
[INFO] Running war on http://localhost:9080/
[INFO] Using existing Tomcat server configuration at D:\Project\study\workspace\helloweb\target\tomcat
2012. 11. 9 오후 2:40:38 org.apache.catalina.startup.Embedded start
정보: Starting tomcat server
2012. 11. 9 오후 2:40:38 org.apache.catalina.core.StandardEngine start
정보: Starting Servlet Engine: Apache Tomcat/6.0.29
2012. 11. 9 오후 2:40:38 org.apache.coyote.http11.Http11Protocol init
정보: Initializing Coyote HTTP/1.1 on http-9080
2012. 11. 9 오후 2:40:38 org.apache.coyote.http11.Http11Protocol start
정보: Starting Coyote HTTP/1.1 on http-9080

 tomcat이 starting 되는 것을 확인 할 수 있다.

 Web을 개발 하다보면, Html을 접하게 되고 <form .../> 를 접하지 않을 수 없다. 데이터를 주고 받기 위해서는 Submit 을 많이 활용 한다. 단순한 작업을 할때는 상관이 없지만, 요구 사항은 갈수록 복잡해 진다.

 예를 들어 한 페이지에서 글도 작성하고 파일도 업로드하고 여러가지 기능을 수행 할 수도 있다. 때로는 오른쪽 하단이나 왼쪽 상단에 작은 채팅방이 있기도 한다. 이런 요구사항들을 해결하기 위해서 Javascript의 XMLHttpRequest Object를 이용 했다. 줄여서 XHR 이라고 한다.

 jQuery는 Ajax 기능을 제공 한다. http://api.jquery.com/category/ajax/ 링크를 참고 하도록 한다.

 대표적으로 이해 해야할 함수로는 $.ajax 이다. 다른 함수들은 편의를 봐서 좀더 간단하게 처리해주는 함수들이 대부분 이다.

 

$.ajax({
    url: '',
    success: function(data) {

    }
});

 

 위 코드는 가장 일반적인 형태를 뛰고 있다. 추가적인 옵션은 위에 링크를 이용하여 참고 하도록 한다. 위의 경우는 비동기로 Http 요청을 처리 한다.

 비동기(Asynchronous) 는 쉽게 말해서, 동시에 여러개의 요청과 응답이 발생 하는 경우이다.

 다른 방법으로는 <form .../> 자체를 iFrame에 만들고 데이터를 생성 후 Submit 한다. 그 후 CallBack 메시지를 받고 처리 하게 된다. 해당 기능은 jquery.form.js 플러그인을 추가로 등록해야 한다. 파일은 첨부 하였다.

 

$('form').ajaxSubmit({
    url: url,
    type: 'post',
    dataType: 'json',
    statusCode: {
        400: function() {},
        500: function() {}
    },
    success: function(data) {

    }
});

 

 jQuery Selector 를 이용 Element를 가져온 후 ajaxSubmit를 호출 ajax와 사용 방법은 매우 유사 하다. 실제로 파일 업로드나, 많은 데이터를 주고 받을 경우는 위의 방법보다, 아래의 방법도 사용해볼만한 가치는 있는 것 같다.

※ 참고 사이트: http://jquery.com/
 

 

jquery.form.js

'Javascript' 카테고리의 다른 글

jQuery로 Ajax 처리시 Array 전송하기  (0) 2012.12.06
jQuery 다수의 Ajax 요청 처리 관련  (2) 2012.11.27
Date 함수 관련  (0) 2012.11.16
jQuery each  (0) 2012.11.08
jQuery Selector  (0) 2012.11.07

 요즘 IDE Tool은 Eclipse를 보편적으로 사용을 하고 있다. 최근 개발은 가면 갈수록 비지니스의 복잡도는 올라가고 있고, 라이브러리의 수도 증가하고 있다. 기존에는 Ant 라는 빌드 툴을 사용 했지만 한계 점이 다가오면서 Maven이 등장하게 됬다. 

 일일히 수작업으로 다 관리 하기에는 실수도 할수 있고, 라이브러리를 빼먹을 수 있다. Ant는 라이브러리 저장소가 없었지만, Maven은 Local 라이브러리 저장소가 존재 한다. 훨씬 수월하게 라이브러리를 관리 할 수 있고, 여러가지 Plugin 도 활용 할 수 있다. 개발을 뒤에서 지원해주는 Maven을 알아보자.

 Step1. 파일 다운로드

http://maven.apache.org 페이지로 이동하여, Binary zip 파일을 다운로드 한다.

 

 Step2. 환경 변수 정의

환경 변수를 정의 한다.

내 컴퓨터 > 속성 > 고급 시스템 설정 > 환경 변수

    • H3_HOME: D:\Developer\build\apache-maven-3.0.4
    • PATH: D:\Developer\build\apache-maven-3.0.4\bin

Windows 명령 프롬프트 창에서 확인 한다.

위 그림과 같이 확인 될 경우 정상적으로 설치 확인.


 

 Step3. m2eclipse 플러그인 설치

Eclipse, Java 는 설치 되어 있다고 가정 한다. 

상단 메뉴 Help > Install New Software 

위에 보이는 모듈을 설치 하도록 한다.

 

Step4. 기본 저장소 설정

Maven 기본 저장소는 Windows User 폴더에 .m2 로 기본값이 설정 된다.

로컬 저장소 경로를 수정 한다.

Maven 경로에 /conf/settings.xml 파일을 수정 

 <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  <localRepository>D:/m2/repository</localRepository>

본인이 원하는 경로로 수정 한다.

Eclipse의 상단 메뉴 Window > Preferences 왼쪽 메뉴 Maven > User Settings 로 이동

settings.xml 파일 경로를 지정 한 후, Update Settings 버튼 클릭.

적용이 안될 경우 재 시작

 

Step5. Hello World Project 생성

New > Maven Project 클릭 한다.

    • Create a simple project (skip archetype selection)
    • Use default Workspace location

활성화 후 Next >  

ArtifactId, Name, Group Id 작성 후 Finish

위와 같이 Project가 생성된 모습을 확인 할 수 있다.

Hello World 코드는 각자 작성 하도록 한다.



find [경로...] [수식]

find -name 'test' 필요한 파일을 검색 한다.

actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

그 후 actions 을 줄 수 있다.

find -name 'test' -exec rm -f {} \;

위 명령어를 이용시 삭제가 된다.

+ Recent posts