728x90
반응형
스프링프레임워크에 플렉스를 연동하는 간단한 예제를 만들어 보겠다. 

이 포스트는 머드초보님의 블로그(http://mudchobo.tomeii.com)를 기반으로 작성하였으며, 난 스프링프레임워크에 대한 지식이 많지 않다.. 물로 플렉스도.. 배우는 과정이기 때문에 그냥 따라해본다.

머드초보님 글 감사합니다.

일단 세팅부터 하자.

<< 준비물 >>
Eclipse IDE for Java EE Developers  :http://www.eclipse.org/downloads/

Flex Builder 3 Eclipse Plug-in(로그인후받을 수 있음) : 
http://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse

Spring Framework 2.5.6 : http://www.springframework.org/download

Spring과 BlazeDS연동라이브러리 : blazeds-spring-beta1.jar 현재 beta1이군요.
http://www.igenko.org/archiva/repository/igenko/com/adobe/flex/blazeds-spring/

↑ 위 링크 없졌다..그래서 Sewon On Software 블로그 ( http://sewony.tistory.com/entry/BlazeDS-와-스프링Spring-연동하기 ) 에서 다운 받았다. 외국사이트에서 구하면 된다고 하는데, 구글에서 찾다보니 이곳이 나와 난 여기서 다운 받았음..이거 말고 다른 라이브러리가 존재하는것 같지만, 일단 이것을 사용하도록 한다. 난 아무것도 모르고 하는것 이기에...;;;

설치는 모두 알아서 설치 하도록 한다. 뭐 그냥 깔고 압축풀고 ....


Blazeds 프로젝트 생성
1. File -> New -> Project선택, Flex Project선택 후 Next
Project : SpringAndBlazeds
Application Type : Web Application
Application server type : J2EE

2. J2EE 세팅 설정
Target runtime : Tomcat
설정이 안되어 있다면 New 한다음에 Apache폴더에 Tomcat 6.0을 선택하고, 해당 톰캣의 경로를 지정하고, Finish를 클릭한다.
 flex WAR파일을 선택하라고 하는데 받아놓은 blazeds.war파일을 선택한다.
Finish를 클릭하면 끝난다.


- 스프링IDE 설치

1. 이클립스메뉴에서 Help -> Software Updates -> Find And Install 선택
Search for new features to install를 선택 후 Next
New Remote Site선택 Name은 Spring IDE, url은 http://dist.springframework.org/release/IDE고 쓴다.




추가한 것만 체크된 상태에서 Finish클릭!

몇개는 설치 못하는데 설치 못하는 것은 체크해제를 시킨다...ㅡ.ㅡ;;
Dependencies에서 Spring IDE Dependencies 체크해제
Integration에서 Spring IDE AJDT Intergration 체크해제
AspectJ Development Tools도 설치하려면 하면된다. 난 사용할줄 모름...
Next -> agree -> finish하면 설치가 됩니다.
설치가 다 되면 이클립스ide를 restart하라고 나와서 리스타트^^

근데 지금 회사에서는 외부인터넷 접속에 문제가 있어서 그런지 몰라도...저 주소가 안된다...


2. 만든 프로젝트에  마우스 오른쪽버튼을 클릭해서 Spring Tools -> Add Spring Project Nature선택 하면 완료!!



3. 필요한 라이브러리를 복사한다. ( 근데 어디다가 복사 하라는거지??음...일단 WEB-INF/lib 에 복사 한다... 어찌됬건 모두 라이브러리 파일이니깐...)

dist/spring.jar : 스프링프레임워크를 쓰기 위해 꼭 필요한 놈.

dist/module/spring-test.jar : 스프링테스트 할 때 필요한 놈.

lib/jakarta-commons/commons-logging.jar : 로그찍을 때 필요한 놈.

lib/ibatis/ibatis-2.3.0.677.jar : ibatis쓸 때 필요한 놈.

lib/cglib/cglib-nodep-2.2.jar : Junit으로 테스트 할 때 필요한데, JUnit테스트를 할 때에는 Interface가 구현이 안되어있어서(aop를 사용하려면 interface가 구현이 되어있어야 한다고 하더군요) 필요한 놈. --> http://sourceforge.net/project/showfiles.php?group_id=56933

lib/aspectj/aspectjweaver.jar : aop때문에 필요한 놈 같은데-_-;  
lib/junit/junit-4.5.jar : JUnit을 사용하기 위해 필요한 놈.

mysql-connector-java-5.1.7-bin.jar : mysql Connector. db가 다른거면 다른 Connector가 있으면 돼요!
blazeds-spring-beta1.jar : 위에서 설명한 spring과 blazeDS와 연동할 때 필요한 놈.


여기까지하면 세팅완료!!
728x90
반응형
728x90
반응형

아래 글은 투윙오리(happyyhj)님의 블로그에서 퍼왔음을 알려드립니다.

원본 주소 : http://blog.naver.com/happyyhj/59943609

문제가 있을시 삭제처리 하겠습니다.

===================================================================================================

Flex2에서 할려고 했었는데 BlazeDs는 Flex3에서만 된다기에 그냥 Flex3에서 함.

이클립스에서 몽땅 다 사용하기 ㅋ

예제들을 보니 거의 플렉스 빌더(flex) + 이클립스(BlazeDs) 이렇게 사용하고 있었다.

고맙게도 어떤 분께서 이렇게 좋은 자료를 올려주셔서 보면서 따라했다.

안에 내용은 중복된다. 그냥 저거 그대로 했다고 보면 된다.

친절한 설명과 함께 그림으로도 과정샷을 설명해주신 내용을 파일로 다운받을 수 있도록

해놓으셨다. 완전 감사!

http://tong.nate.com/thesunrises/45999746

 

 

[준비작업]

1. BlazeDS를 다운 받는다.

(Binary Distribution-> 꼭 필요한 파일만 있음.

샘플이랑 바로 구동해 볼 수 있는 톰캣 포함을 원하면 Turnkey)

http://opensource.adobe.com/wiki/display/blazeds/Release+Builds

 

2. 다운 받은 압축 파일을 풀면 blazed.war 파일이 있다. 확인해 보자.

 

 < 시작 > 

1. 이클립스 띄워서 플렉스3 프로젝트 생성(New-> FlexProject)

    아래 그림과 같이 셋팅한다.

  

[Next]!

 

2. 1에서 서버타입으로 선택한 J2EE Server 셋팅작업

    콤보박스 내렸을 때 기존에 내가 등록한게 있으면 그거 선택하고

    없으면 [New...]버튼 클릭

 

 

3. 나는 톰캣 5.5 사용 ^^ -> [Installed Runtimes] 버튼 클릭

 

 

4. [Add...] 버튼 클릭 후

    톰캣 5.5 클릭 후 [Next] 버튼 클릭

 

 

5. [Browse...] 버튼 클릭해서 내가 설치해 놓은 톰캣 폴더 경로 잡아준다.

 

6. 다시 2번의 창으로 돌아와서 [Browse...]버튼 클릭 해서 아까 준비작업 1에서 다운 받았던 blazed.was파일이 있는 경로를 잡아준다.

 

7. 그림을 참고로 자기에게 맞게 수정.

 

8. src 폴더에서 오른쪽 마우스 클릭(new-> Other -> java -> package)해서 test란 이름의 패키지 만들고 만든 test란 패키지에서 오른쪽 마우스 클릭(new-> Other -> )해서 java file 생성

자바파일 생성시 파일이름만 써주고 나머지는 설정 그대로 하고 마치면 됨.

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

  

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

 

9. 자바 내용 작성

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

package test;

public class helloTest {
    public String getStr(){
        return "Welcome BlazeDS: success!";
    }
}
------------------------------------------------

 

10. WebContent/WEB-INF/flex/remote-config.xml 파일 수정

    빨간색 글자가 추가된 부분임.

    만약 위의 파일이 없다면 준비작업2에서 압축 푼 경로에서 import해온다.

    (이유는 모르겠지만 나는 없어서...)

   이클립스에서 xml여니까 트리구조로 나왔다. 오 신기 ㅡㅡ;

   각 상위 태그에서 오른쪽 마우스 클릭해서 add child나 add attribute 메뉴로 아래와 같이

   추가했다. 그게 어려우면 그냥 윈도우 탐색기로 경로 찾아가서 메모장이나 editplus

   이용해서 수정해도 된다 ㅎㅎ

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

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>

    <destination id="blaze">
     <properties>
      <source>test.helloTest</source>
 </properties>
    </destination>

</service>

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

 

11. RemoteObject_Test.mxml 파일에 작성

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:RemoteObject id="ro" destination="blaze" fault="faultHandler(event)">
  <mx:method name="getStr" result="resultHandler(event)"/>
 </mx:RemoteObject>
 <mx:Script>
  <![CDATA[
   import mx.rpc.remoting.mxml.RemoteObject;
   import mx.controls.Alert;
   import mx.rpc.events.ResultEvent;
   import mx.rpc.events.FaultEvent;

   
   //에러가 났을 경우 이벤트 발생
   private function faultHandler(event:FaultEvent):void
   {
       Alert.show("error: "+event.message.toString());
   }
   
   //제대로 실행 되었을 경우 이벤트 발생
   private function resultHandler(event:ResultEvent):void
   {
       Alert.show("result: "+event.result.toString());
   }
   
   //버튼 클릭 후 RemoteObject Call
   private function remote_object_call():void
   {
       // remoteObjecc에서 java method call
       ro.getStr();
   }
  ]]>
 </mx:Script>
 <mx:Button label="service start" click="remote_object_call()" x="159" y="127"/>
</mx:Application>

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

 

12. RemoteObject_Test 프로젝트 선택 후 오른쪽 마우스 클릭 해서 properies클릭

      context root변경 -> 프로젝트명으로

 

13. 이클립스 도구 모음 window -> show view -> other -> server -> server

      server 창안에서 마우스 오른쪽 클릭 New-> server 클릭

     3번 그림과 같이 뜬다. 3번에서는 Installed Runtimes...버튼 클릭하는데 여기서는 그냥

     사용할 서버 톰캣 5.5(아까 J2EE에서 만든 server) 선택 후 finish 버튼 클릭

 

14. server창에 나타난 톰캣서버 선택 후 마우스 오른쪽 클릭 해서

     Add and Remove Project... 선택 

     왼쪽 창에서 실행시킬 프로젝트 선택 후 add > 버튼 클릭 한 후 finish 버튼 클릭

  

 

15. 실행시킨다. 상단의 초록색 동그라미 모양의 재생버튼을 클릭해도 되고  

    최종 실행시킬 mxml파일 선택 후 마우스 오른쪽 버튼 클릭해서

    Rus As-> 2.Flex Application 클릭해도 된다. 

 

[결과 화면]

728x90
반응형
728x90
반응형
728x90
반응형
728x90
반응형

synchronized 는 method에 썼을 때에는 method 단위로, block으로 지정했을 때에는 block 단위로 배타제어가 됩니다.

 

public synchronized void func1() {

}

 

public void func2() {

  ...

  synchronized (obj) {

    ...

  }

}

 

위와 같이 두 함수가 같은 클래스에 있을 때 한 프로세스가 func1을 실행하고 있을 때 다른 프로세스는 func1을 실행할 수 없습니다. 하지만 func2는 실행이 가능하죠.

func2에서는 두 개 이상의 프로세스가 동시에 함수를 실행할 수는 있지만 synchronized 블럭은 한번에 하나씩만 실행됩니다.


===================================================================================


그럼...동시에 실행시 블록안에 있는건 기다렸다가 FIFO 방식으로 호출하는건가?? 이건 좀 알아 봐야 할듯...

728x90
반응형
728x90
반응형

 

1. 드라이버설치
해당 DB 드라이버를 JAVA_HOME/jre/lib/ext 또는 TOMCAT_HOME/common/lib 아래에 복사
 
 
2. URL 형식
url 형식의 문자열을 인자로 사용.
 
jdbc:subprotocol:subname
subprotocol -> 사용할 드라이버 이름 or 특정 데이터베이스와의 연결을 지정하는 방식
subname -> 찾고자 하는 특정 데이터베이스명
 
 
3. Database별 Driver 와 connection URL
DATABASE
VALUE
ORACLE
DRIVER
oracle.jdbc.driver.OracleDriver
URL
jdbc:oracle:thin:@hostname:port:SID
MSSQL
DRIVER
com.microsoft.jdbc.sqlserver.SQLServerDriver
URL
jdbc:Microsoft:sqlserver://localhost:1433;databasename=DB
MYSQL
DRIVER
com.mysql.jdbc.Driver
URL
jdbc:mysql://localhost:3306/DB

4. 드라이버테스트 (도스창)  
도스상에서 javap 드라이버명
ex)javap com.mysql.jdbc.Driver
 
 
5. DB 접속테스트 (JSP 테스트) 
<%@ page contentType="text/html;charset=euc-kr" import="java.sql.*" %>
<%
try {
  Class.forName("해당JDBC_DRIVER");
  String url = "해당CONNECTION URL";
  String id = "DB사용자아이디";
  String pass = "DB비밀번호";
 
  Connection conn = DriverManager.getConnection(url, id, pass); 
 
  out.println("데이터베이스연결성공")
  conn.close(); 
catch(SQLException e) { 
  out.println("데이버베이스연결실패" + e.printStackTrace());

%>

6. DB 접속테스트 (java 테스트)
 
import java.sql.*;

public class DriverTest{
       
       // mysql
       private static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
       private static String JDBC_URL = 
           "jdbc:mysql://localhost:3306/dbname?uniCode=true&characterEncoding=euckr";
       private static String DBUSER = "root";
       private static String DBUSER_PASS = "passwd";

       
/* mssql
       private static String JDBC_DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
       private static String JDBC_URL = 
                                   "jdbc:microsoft:sqlserver://localhost:1433;databasename=gmpd";
       private static String DBUSER = "sa";
       private static String DBUSER_PASS = "passwd";
       */

 
       public static void main(String args[]){
             Connection con = null;
             try {
                 Class.forName(JDBC_DRIVER).newInstance();
                 con=DriverManager.getConnection(JDBC_URL, DBUSER, DBUSER_PASS);
                 System.out.println("Success");
             } catch(SQLException ex){ 
                 System.out.println("SQLException" + ex);
                 ex.printStackTrace();
             } catch(Exception ex){ 
                 System.out.println("Exception:" + ex);
                 ex.printStackTrace();                   
             }
       }
}
728x90
반응형
728x90
반응형

계정생성 --> 데이타베이스 생성 ----> 테이블 생성 으로 하시면 될꺼 같습니다.

 


 

 

데이터베이스 접속

$ 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';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.

불필요한 사용자 삭제는

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



=============================================

1. Mysql 기본 사용법

 

->Mysql 데이터베이스 접속하기

# mysql -u root mysql

 

-> mysql 관리자 root 패스워드 설정하기

# mysql -u root mysql

mysql> update user set password = password('shcm0816') where user = ' root';

 

-> 빠져나간후 데이터베이스를 재시작

# mysqladmin -u root reload

 

->패스워드 입력

# mysql -u root -p mysql

 

< 여러가지 관련 명령어 >

 

->데이터베이스 확인

mysql> show databases;

 

->테이블 확인

msyql> show databases; 

msyql> desc user =>동일한 결과

 

2. 데이터베이스 생성 및 삭제

 

->데이터베이스 생성

① 첫번째 방법

# mysql -u root -p mysqlll

    msyql> create database TESTDB;

    msyql> show databases;

 

② 두번째 방법

# ./mysqladmin -u root -p create testdb2

Enter password:

# ./mysql -u root -p mysql

Enter passwor

 

cd /

msyql> show databases;

msyql> exit

Bye

#

 

->데이타 베이스 삭제

# ./mysqladmin -u root -p drop testdb2

Enter password:

 

mysql> drop database testdb2

 

# ./mysql -u root -p mysql

msyql> show databases;

 

3. 새로 생성한 데이터베이스 등록하기

-> 데이터베이스를 새로 생성한 후에는 mysql 이라는 관리용 데이터베이스에 등록

->mysql 이라는 데이터베이스의 db라는 테이블에 TESTDB를 등록한 것

msyql> insert into db  values('%','TESTDB','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

msyql> select host, db, user from db

 

4.  Mysql 사용자등록(데이터베이스 소유자)

->mysql 을 사용할 사용자는 반드시 user 라는 테이블에 등록을 해줘야함

msyql> insert into user (host, user, password) values('localhost', 'sspark', password('shcm0816'));

 

->정상적인 등록여부 확인

msyql> select host, user, password from user; 

 

->sspark이라는 사용자로 mysql 데이터베이스로 접속

msyql> mysql -u sspark -p

Enter password:

 

->새로운 데이터베이스를 생성하거나 새로운 사용자를 생성한 후에는 반드시 reload를 해줘야함

# mysqladmin -u root -p reload

Enter password:

 

5. 테이블 생성 및 삭제

msyql> create table testtable (

         ->uid mediumint(4) unsigned DEFAULT '0' NOT NULL auto_increment,

         -> name varchar(12) DEFAULT "" NOT NULL,

         -> email varchar (20) DEFAULT "" NOT NULL,

         -> PRIMARY KEY (uid)

         -> );

Query OK, 0 rows affected (0.00 sec)

msyql>show tables;

 

-> 필드 구조가 정의한 필드구조로 생성되었는지 확인

msyql> desc testtable;

 

-> 삭제

msyql> drop table testtable;

mysql> show tables;

 

6. 테이블속성 및 구조변경법

ALTER TABLE 테이블명 CHANGE[COLUMN] 필드명 필드타입

-> 기존 테이블에 필드 추가하기

 

mysql> er table testtable add column homepage varchar(30);

mysql> desc testtable;

 

-> 기존에 필드 속성 변경하기

ALTER TABLE 테이블명 CHANGE[COLUMN] 기존필드명 새필드명 필드타입

mysql> er table testtable change column homepage home varchar(50);

 

-> 기존에 필드 삭제

ALTER TABLE 테이블명 DROP [COLUMN] 필드명

mysql> er table testtable drop column home;

mysql> desc testtable;

 

-> 기존의 테이블삭제하기

mysql> create table sampletable

mysql> show tables;

mysql> drop table sampletable;

mysql> show tables;

 

7. 데이터 입력하기

mysql> insert into testtable (uid, name, email) values (', 'parksungsoo', sspark09@soback.kornet.net'" target=_blank>'sspark09@soback.kornet.net');

-> 주의: uid라는 필드는 auto_increment 라는 속성으로 생성했기 때문에 이 속성을 가진 필드들은 실제로 데이터값을 주지 않아도 자동적으로 1씩 증가.

 

->삽입할 필드는 생략가능

mysql> insert into testtable values(','sontaesoo','shutterbug@orgio.net');

 

->특정 필드에만 데이터를 입력할 경우에는 입력할 필드이름만을 나열 그에 해당하는 데이터 입력

mysql> insert into testtable (uid,name) values(','junwooki');

->정상적으로 입력되었는지 확인

mysql> select * from testtable;

 

8. 데이터 검색

SELECT(데이터검색하기)

->데이터검색의 일반적인 방법

 

-> 테이블의 모든 테이터를 검색

mysql> select * from testtable;

 

-> uid와 name 필드만을 조회

mysql> select uid, name from testtable;

->where문을 사용하여 특정 조건에 맞는 데이터만을 검색

mysql> select * from testtable where name = "sontaesoo";

 

->출력 결과 레코드의 중복제거하기(DISTINCT)

SELECT DISTINCT sex FROM testtable

 

->다양한 검색 방법

 

->'soo'라는 문자가 포함된 데이터를 모두 검색

->SELECT name FROM testtable WHERE name LIKE '%soo%'

mysql> select name from testtable where name LIKE '%soo%';

 

->특정한  한 문자로 시작하는 데이터만을 출력할 때에 사용하는 조회형식

SELECT name FROM testable WHERE name LIKE 'park%'

mysql> select name from testtable where name LIKE 'park%';

 

->특정 필드에 데이터가 NULL 인 경우를 조회한것

SELECT uid, name FROM testtable WHERE age IS NULL

mysql>select uid, name from testtable where age IS NULL;

 

-> 특정 필드의 데이터가 NULL이 아닌 경우

SELECT uid, name FROM testtable WHERE age IS NULL

 mysql>select uid, name from testtable where age IS NOT NULL;

 

-> SELECT name, uid, email FROM testtable WHERE savem > 5000 AND sex='M'

-> SELECT name, uid, savem FROM testtable WHERE savem >= 5000 ORDER BY savem  

     DESC

-> SELECT count(*) FROM testtable WHERE sex='M'

-> SELECT avg(savem) FROM testtable WHERE sex='M'

 

9. 데이터 수정하기

->UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE

   검색조건]

mysql> select * from testtable;

 

->uid 4 번의 데이터에 name 값과 email을 입력해 봄

mysql> update testtable set name = 'junyangmi' where age = 23;

mysql> update testtable set email = jym@superuser.co.kr'" target=_blank>'jym@superuser.co.kr' where age = 23;

mysql> select * from testtable;

 

-> uid 1 인 사람 (parksungsoo)의 나이를 25살로 수정

mysql> update testtable set age= 25 where uid =1;

 

->uid 2인 사람의 나이를 30살로 수정

mysql> update testtable set age = 30 where uid =2;

mysql> update testtable set age = 41 where uid=3;

 

-> 한해가 지났으므로 모든 사람의 나이를 한 살씩 증가

mysql> update testtable set age = age + 1;

mysql> select * from testtable;

 

10. 데이터 삭제하기(delete)

->Delete FROM 테이블명 [WHERE 검색조건]

mysql> select * from testtable;

mysql> delete from testtable where uid = 3;

 

11. 새로운 사용자 등록

-> Mysql 에 root로 접속

./mysql -u root -p

->Mysql DB 선택

mysql> use mysql;

mysql> show tables;

 

->새로운 DB 생성

mysql> create database xlare;

 

-> user 테이블에 입력 (user 라는 테이블에 새로운 사용자의 계정이름과 권한설정을 할 차례)

-> 호스팅사용자에 대한 설정 user테이블에 현재 사용장0ㅔ 대한 권한들을 모두 'N'로 설정

mysql> insert into user valuses('localhost', 'xlare', password('123'),'Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N','N');

 

->user  테이블에 입력확인

mysql> select * from user where user = 'xlare' ;

 

-> db 테이블에 입력

mysql> insert into db values('localhost', 'xlare', 'xlare', 'Y','Y','Y','Y','Y','N','N','N','N','N',);

 

-> db 테이블에 입력 확인

mysql> select * from db where db = 'xlare';

 

-> 새로운 설정을 바로 적용키위해 mysqladmin 이라는 관리자명령어로 mysql 을 재시작

->reload를 해주지 않으면 생성했던 것들이 적용이 되지 않음

# ./mysqladmin -u root -p reload;

 

12. 일반사용자 권한설정(보안사항)

#./mysql -u root -p mysql

Enter password:

mysql> show tables;

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

tables in mysql

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

columns_priv

db

func

host

tables_priv

user

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

 

->columns_priv 테이블

* 모든 특정 DB 의 특정 User 에 대한 특정 테이블의 각 컬럼에 대한 select, insert, update,

   reference 권한을 설정

mysql> desc columns_priv;

->db 테이블

* db라는 테이블에는 특정 DB에 대한 user들의 여러가지 권한들을 설정하는 테이블

mysql> desc db;

-> kebia 라는 데이터베이스의 소유자와 그 권한에 대해서 알아보고자 함.

-> kebia라는 데이터베이스의 소유자는 hyung 이라는 mysqkl 사용자이며 이 hyung 이라는 사용자

     는 이 kebia 라는 데이터베이스에 대한 각종 권한을 볼수 있음.

mysql> select * from db where db = 'kebia';

| localhost | kebia | hyung | Y  |   - - - - - ...........

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

 

->tables_priv테이블

* columns_priv 테이블처럼 각 데이터베이스와 사용자 및 그 테이블에 대한 권한 설정

mysql > desc tables_priv;

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

 

->user 테이블 : 새로운 사용자를 생성할때 이 테이블에 등록

-> 특정 사용자에 대한 Mysql에 존재하는 모든 데이터베이스에 대한 권한설정

-> 특정 사용자의 어떤권한에 대한 사항은 특정 데이터베이스가 아니라 Mysql에 존재하는 모든 데

     이터베이스에 권한이 주어짐.

-> host와 user, password 항목을 제외한 나머지 권한들은 모두 'N"로 설정

->특정한 사용자에 대한 특정한 데이터베이스에 대한 권한을 주려면 위에서 보았던 db라는 테이블

    에서 그 권한설정을 하는것이 안전함

 

13 .Mysql root 암호 변경하기

-> 방법 1:  mysqladmin 이라는 명령어 사용

# ./mysqladmin -u root -p password 12345

 

->방법 2: mysql의 set 이란 명령어로 root 암호 변경

# ./mysql -u root -p mysql

mysql> set password for root=passwd('12345678');

 

-> 방법 3: mysql 데이터베이스로 접속하여 update문을 사용하는 방법

# ./mysql -u root -p mysql

mysql> update user set password=password('12345' where user = 'root';

mysql> flush privileges;

 

->flush-privileges: 권한 테이블을 재시작한다. 권한 설정을 변경했을경우 반드시 재시작

mysql> flush privileges;

 

14. root 패스워드를 잊어버렸을 때는 어떻게?

->단계 1: 실행중인 mysql 종료

# ps -ef | grep mysqld

# killall mysqld

 

->단계 2: grant-table 미사용모드로 mysql시작 및 root로 접속

# .safe_mysqld --skip-grant-tables&

 

-> 단계 3: update문으로 root사용자 패스워드 변경

mysql> update user set password=password('12345') where user = 'root';

mysql> flush privileges;

 

-> 단계 4: 실행중인 mysql 다시 종료

# ps -ef | grep mysqld

# killall mysqld

 

-> 단계 5: 일반모드로 Mysql 재시작

# ./safe_mysqld&

# ps -ef | grep mysql

 

15. 특정 테이블의 구조보기(show columns from 테이블)

-> 특정테이블의 필드명 type, 설정값들을 보기 위한 것

-> 특정한 테이블의 칼럼(필드)구조를 보려면 "show columns from 테이블명"

-> 좀더 편리하여 많이 사용되는 명령문 " desc 테이블명"으로 확인

mysql> show columns form user;

 

->특정 테이블의 인덱스 보기

mysql> show index from user;

 

-> 데이타베이스의 설정상태 보기(show status)

mysql> show status;

# ./mysqladmin -u root -p status

 

-> 데이터베이스의 설정환경변수와 값보기(show variables)

mysql> show variables;

# ./mysqladmin -u root -p variables

 

-> 현재 데이터베이스에 연결된 프로세스들 보기(show processlist)

# ./mysqladmin -u root -p processlist

끝으로 원격에서 접근할려면 아래 내용을 참조하면 됩니다.

 

mysql 원격접속 권한 설정

 

>use mysql

>grant all privileges on *.* to 'oops'@'192.168.5.14'      

>identified by 'passwd' with grant option;

 

ip대신 % 를 주면 모든 호스트허용!

 

oops 라는 유저가 모든 권한을 부여받을 수있다 . 단 해당 아이피의 호스트 에서만.

 

이와 같은 설정은 select host,user from user; 로 확인해볼수 있다.

728x90
반응형
728x90
반응형

컴 언어를 몇개 배워본 사람이라면, 컴언어의 종류에 다음과 같은 세가지가 있음을 알것이다. 

인터프리터 : 구석기시대의 GW-BASIC, ASP, PERL, PHP, 자바스크립트 같은 대부분의 스크립트 언어 
런타임 컴파일러 : RM-COBOL, VB6, 파워빌더, 자바, 닷넷 
순수 컴파일러 : C, C++, Delphi

..인터프리터는, 실행시 프로그램 소스를 한줄 식 기계어로 번역하여 실행한다.
..런타임 컴파일러는, 소스 코드를 특수한 형태로 압축 정형화하고  실행시 이를 기계어로 번역하여 실행한다. 
..컴파일러 : 소스 전체를 번역하여 기계어화하고, 이를 실행시 즉각 실행한다. 즉 실행시 번역 과정이 필요없다.

 

 

 

보통 디버깅, 즉 개발 편의성 관점에서는 인터프리터 > 런타임 컴파일러 > 순수 컴파일러 순이며, 실행 효율 관점에서는 순수 컴파일러 >  런타임 컴파일러 > 인터프리터의 순이다. 

 

인터프리터와 런타임 컴파일러 방식으로 작성한 프로그램을 실행하려면,

번역기 역할을 하는 프로그램이 클라이언트 PC에 반드시 존재해야 하지만,

순수 컴파일러 방식은 단지 실행파일만 있으면 된다. VB의 경우,

VB 어플과 함께 배포되는  여러 DLL들이 그것이며, 자바나 닷넷의 경우, 런타임,

혹은 프레임웍이란 형태로 별도의 DLL 덩어리들이 존재해야만 실행된다.

따라써 닷넷 프로그램들은 최종 배포에서 런타임 배포라는 다소 골치아픈 문제를 수반한다.

이 런타임 배포에 대해서 MS가 신경을 무지 쓴 것은 사실이나,

델파이 실행 파일 배포와는 차원이 다른 복잡성이 분명히 존재한다.

따라서 전문 개발자들은,

C나 델파이 같은 순수 컴파일러 방식를 선호한다. 이는 순수 컴파일러 방식이

실행 효율성과 배포 편의성이 우수하기 때문이다.

또 컴파일러 방식은 다른 방식에 비해 유별난 장점이 있는데,

역디버깅, 즉 해킹이 비교적 어렵다는 것이다. 인터프리터 방식은 소스 내용을 숨길 수가 없기 때문에 소스가 훤히 보인다는 치명적 단점이 있다. 이는 상용 전문적 개발자한테는 치명적이다.

런타임 컴파일러 방식은 소스 코드를 특수 형태로 압축 정형화 하기 때문에,

소스 노출이 어려울 것 같지만, 사실 이는 기우다. 압축 코드 해석 방식만 알면,

런타임 컴파일러들의 역컴파일러 만들기는 그리 어렵지 않다.

자바나 닷넷으로 만든 프로그램의 경우, 역컴파일하면 소스의 90-100 퍼센트까지

그대로 복원할 수 있다. 이러한 자바나 닷넷 역컴파일러들은 인터넷에서

이미 공공연하게 나돌고 있다.

혹자는 델파이나 C++로 만들어도 어셈블러 레벨에서 역디버깅이 가능하지 않는가하고 물을 것이다. 어셈블러(기계어) 차원에서 역디버깅은 매우 어렵다.

이는 아무나 할 수 있을 정도의 만만한 기술이 아니다.

그러나 어떤 형태로든 소스가 훤히 보인다면, 충분히 소스 역추적이 가능하다.

자바와 닷넷의 경우, Code Obuscator라고 하여,

소스 코드를 난잡하게(?) 하는 툴들이 존재한다.

이 툴의 주역할은, 클래스, 메서드, 변수 이름을 어렵게 하고,

구조 제어문 순서를 바꾸고, 문자열을 암호화 시켜서 역컴파일러로 분석한 자바나 닷넷의 소스 코드를 이해하기 어렵게 만드는 것이다. 그런데 어지럽게 하던 말던, 소스는 훤히 보인다는 것이다. 소스가 보이면 언젠가는 분석이 가능하다는 것이다. 이는 개발경험에 비추어서 충분히 가능하다. 델파이 실행파일로부터 원래 소스를 백프로 복원했다는 이야기는 아직 들은바 없지만, 자바나 닷넷은 이것이 비교적 쉽다는 것이다. 

따라서 자바나 닷넷으로 만든 프로그램의 소스가 노출되지 않기를 바란다는 것은 불가능하다.

이 말은 클라이언트에 어떤 형태로든 설치될 경우,

닷넷과 자바 프록그램의 소스 노출은 피할 수 없다는 것이다.

그렇다면 자바나 닷넷으로 짠 프로그램의 경우에 소스 노출을 피하려면,

오로지 서버에서만 동작하는 서버 어플케이션으로만 작성해야 한다는 이야기이며,

이는 결론적으로 자바나 닷넷으로는 가급적 클라이언트 프로그램을 만들지 말라는 것과 다름 없다. 따라서 3 티어로 만든 프로그램일 경우, 어플 서버 측은 서버 쪽에서 실행되므로 이런 부분은 닷넷이나 자바로 만들어도 소스 노출은 피할 수 있을 것이다.

그런데, 서버 어플과 클라이언트 어플의 비율 중 어느쪽이 높다고 생각하는가? 인터넷 시대인 요즘에도 수많은 클라이언트 프로그램이 존재하고 있고, 서버 어플보다는 월등히 그 비중이 높다. 자바로 만든 상용 클라이언트 프로그램을 본적이 있는가? 자바 애플릿이 한때 웹브라우저에서 사용된 적이 있지만, 상용 웹사이트가 자바 애플릿으로 어떤 서비스를 제공하는 것을 본적이 있는가? 의외로 그 비중은 매우 적다. 대부분의 자바 개발자들은 자바의 GUI 개발환경이 매우 열악하고 소스 노출이라는 치명적 단점 때문에 서버 어플 개발에만 전념하는 경우가 많다.

그렇다면 대체 MS는 왜 닷넷을 순수 컴파일러 방식이 아닌, 런타임 컴파일러 방식으로 만들었을까? 사실 닷넷의 탄생 목적은 선의 자바견제가 거의 주목적이었다고 해도 과언이 아니다.

 

닷넷은 자바와는 달리 아주 막강한 GUI 라이브러리를 제공하긴 하나, 이는 닷넷의 또 다른 단점을 만들었다.

SUN이 원래 자바를 순수 컴파일러 방식이 아닌, 런타임 컴파일러로 만든 이유는 OS 호환성때문이었다. 여러 OS 환경에서 동작하려면 순수 컴파일러 방식보다는 런타임 컴파일러 방식이 매우 유리하기 때문이다. 왜냐하면 각 OS의 상이점을 런타임 환경이 보완해서, 그 OS에 맞는 적절한 API호출로 대체할 수 있기 때문이다. (사실 이러한 자바의 여러 OS 호환성은 실제로는 제대로 안되는 경우가 대부분이다. 이는 지난번 글에서도 언급했지만 호환성 유지는 매우 어렵다.) MS역시 이 OS 호환성과 언어 불문(language agnostic) 기능을 구현하기 위해 닷넷을 런타임 컴파일러로 만들었다. 

그런데 닷넷의 윈폼 라이브러리는 윈도우에서의 막강한 GUI 개발환경을 위해서

WIN 32 API에 매우 의존적으로 개발되었다.

이 때문에 윈폼 라이브러리를 다른 OS에서도 동작하게 하는 것은 엄청나게 어렵다.

닷넷 콤팩트 프레임웍이 닷넷 프레임웍과 호환성이 전혀 없는 것도 이런 이유때문이다.

닷넷 프레임웍이 Win 98 계열에서 잘 동작하지 않는 것도 같은 이유다.

즉 MS가 원래 주장했던,

 

여러 OS에서 닷넷 프레임웍이 동작하게 할 것이란 소리는 헛소리다..

 

선사와 ms사가 기술적 어쩌고를 한다는 뉴스를 이곳에서 보았는데

선사와 DM$가 얼마나 이같은짓들을 날려댈지도 두고봐야할것같다.

728x90
반응형
728x90
반응형

특정 디렉토리 이하에 대해서 접근을 제어하고자 할 때에는 .htaccess 를 사용하거나 httpd.conf 에서 <Directory> 를 이용하여 제어를 할 수 있지만, 만약 특정한 파일에 대해서 외부에서의 접근을 제한하고자 한다면 어떻게 하여야 할까? 
이때에는 Location 을 사용하면 된다. httpd.conf 파일에 아래와 같이 설정시 모든 디렉토리 이하의 secret.html 파일에 대해서는 192.168.1.1 에서만 접근이 가능하게 된다.

# httpd.conf  
#<Directory>로 안될경우가 있는데 이때 secret.html 대신 디렉토리를 써주면 디렉토리도 가능하다.
# 왜 안되는지는 잘 모르겠다...ㅡ.ㅡ;;
<Location /secret.html>
order deny,allow
deny from all
allow from 192.168.1.1
</Location>

만약 여러 도메인이 설치되어 있는 호스팅 서버의 경우 secret.tt.co.kr 도메인내 secret.html 에 대해서만 접근을 제어하고자 할 경우에는 아래와 같이 VirtualHost 설정에서 하면 된다.

<VirtualHost secret.domain.co.kr>
ServerAdmin anti@domain.co.kr
DocumentRoot /usr/local/apache/htdocs/secret/
ServerName secret.tt.co.kr
<Location /secret.html>
order deny,allow
deny from all
allow from 192.168.1.1 
</Location>
</VirtualHost>

또는 위와 같이 IP 가 아니라 특정한 ID/PW를 입력한 유저에 대해서만 특정 파일에 대하여 접근을 허용하고자 할 때가 있다. 이러한 경우에는 httpd.conf 에 아래와 같이 설정하면 된다.

<VirtualHost secret.domain.co.kr>
ServerAdmin anti@domain.co.kr
DocumentRoot /usr/local/apache/htdocs/secret/
ServerName secret.tt.co.kr
<Files secret.html>
AuthName "ID/PW 를 입력하세요."
AuthType Basic
AuthUserFile /usr/local/apache/htdocs/.htpasswd
Require valid-user
</Files>
</VirtualHost>

그리고 htpasswd –c .htpasswd id 로 .htpasswd 파일에 ID/PW를 생성하여 secret.html 에 접근시 ID/PW 를 정확히 입력한 유저에 대해서만 접근이 가능하게 된다.
 
728x90
반응형
728x90
반응형
cvs계정생성
set CVSROOT=:pserver:127.0.0.1:[/CVSROOT 디렉토리 명]
cvs login <-- 구지 안해도 된다.
컴퓨터 부팅시 암호 입력
cvs passwd -a -r Administrator 생성할아이디
비밀번호 입력
728x90
반응형
728x90
반응형

1. 데이터베이스 익스포트

 * pg_dump 데이터베이스 명 > export할 파일명;

--> 예) pg_dump mydb > mydb20050222.sql;

--> pg_dump는 순수하게 sql문을 통해서 익스포트 한다.

 

2. 데이터베이스 임포트

 * psql -f 임포트할_파일명 임포트할_데이터베이스명

--> psql -f mydb20050222.sql mydb

--> sql문 스크립트를 실행하는 방법으로 임포트

728x90
반응형

+ Recent posts