1. 공통점

- CHAR형과 VARCHAR형 모두 문자열 데이터 저장

 

2. 차이점

- CHAR : 지정 크기보다 작은 값 입력시 나머지 공간을 공백(화이트 스페이스)으로 채워 지정된 크기와 같게 만들어 기록

- VARCHAR : 실제로 사용된 공간만큼의 데이터만을 저장 (가변성)

 

* 어지간하면 VARCHAR 사용

Sql (Structured Query Language) : 구조적 질의 언어.

해당 질의 언어를 통해 데이터베이스를 제어하고 관리할 수 있다.

 

 

1. DDL (Data Definition Language)

DB 스키마를 정의하거나 조작하기 위해 사용한다.

명령어를 이용하여 스키마, 도메인, 테이블, 뷰, 인덱스를 정의, 변경, 삭제할 수 있다.

 명령어

설명 

 CREATE

 DB 정의

 ALTER

 DB 수정

 DROP

 DB 삭제

 TRUNCATE

 DB DROP 후 CREATE 하기

 

* Oracle 11g 이전 버전과 MySql은 DDL에 대해 트랜잭션을 지원하지 않음 (Rollback & Commit 필요 X)

 

 

2. DML (Data Manipulation Language)

데이터를 조작하기 위해 사용한다.

사용자가 응용 프로그램과 DB 사이에서 실질적인 데이터 처리를 위해 주로 사용한다.

 명령어

설명 

 SELECT

 데이터 조회

 INSERT

 데이터 추가

 UPDATE

 데이터 수정

 DELETE

 데이터 삭제

 

* 위의 4가지 외에도 LOCK, EXPLAIN, CALL 등도 DML에 표함됨

 

 

3. DCL (Data Control Language)

데이터를 제어하기 위해 사용한다.

데이터의 보안, 무결성, 회복, 병행, 수행제어 등을 제어하는데 사용한다.

명령어

 설명

 COMMIT

 트랜잭션 작업 결과를 반영 

 ROLLBACK

 트랜잭션 작업 취소 + 이전으로 복구

 GRANT

 사용자에게 권한 부여

 REVOKE

 사용자 권한 취소

 

1. 정의

- java에서 데이터베이스에 접속할 수 있도록 하는 자바 API

  (java API : java를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합)

- 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공

 

 

2. source

 <Context docBase="Ch13" path="/Ch13" reloadable="true" source="org.eclipse.jst.jee.server:Ch13">
  <Resource name="jdbc/basicjsp"
            auth="Container"
            type="javax.sql.DataSource"
            driverClassName="com.mysql.jdbc.Driver"
            username="jspid"
            password="jsppass"
            url="jdbc:mysql://localhost:3306/basicjsp"
            maxWait="5000"       
  />
 </Context>

 

 

3. 설정 방법 (2군데 설정)

ㄱ. 프로젝트 - WebContent - META-INF - context.xml

 <Context>

  <Resource name="jdbc/basicjsp"
           auth="Container"
           type="javax.sql.DataSource"
           driverClassName="com.mysql.jdbc.Driver"
           username="jspid"
           password="jsppass"
           url="jdbc:mysql://localhost:3306/basicjsp"
           maxWait="5000"      
   />

 </Context>


ㄴ. 프로젝트 - WebContent - WEB-INF - web.xml

 ...
 ...

    <resource-ref>
     <description>basicjsp db</description>
     <res-ref-name>jdbc/basicjsp</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
    </resource-ref>

 </web-app>

'Framework > Spring' 카테고리의 다른 글

MyBatis :: selectList와 selectOne  (3) 2016.02.15
MyBatis :: ConnectionFactory  (0) 2016.01.19
MyBatis :: 동적 sql (=쿼리)  (0) 2016.01.19
MyBatis :: Java app example  (0) 2016.01.18
MyBatis란?  (0) 2016.01.13

C:\> javac HelloMain.java

 

C:\> java HelloMain

 

C:\> dir

 

C:\> jar  cvf  aa.jar  Hello.class

 

C:\> dir

 

C:\> jar  tvf  aa.jar

 

C:\> del Hello.class

 

C:\> dir

 

C:\> java HelloMain

 

C:\> java -cp .;aa.jar HelloMain

Hello, World

 

 

* classpath 옵션

C:\> ren Hello.java HelloMain.java : 파일명 변경(ren = rename)

 

 

'BackEnd > Java' 카테고리의 다른 글

JAVA :: JRE 오류  (0) 2016.01.15
Maven :: 정의  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15
Java :: log4sql 과 log4jdbc  (0) 2016.01.14
CRUD 구조  (0) 2016.01.13

* [log4j 설정 후에] log4sql이나 log4jdbc 사용 가능

 

* 로깅 (Logging)

프로그램 개발이나 운영시 발생하는 문제점을 추척하거나 운영 상태를 모니터링하기 위한 텍스트.

로그를 남기기 위한 가장 쉬운 방법은 System.out.println();을 사용하는 것.

좀 더 향상된 방법은 로그를 기록하는 클래스를 만들어 사용하는 것.

 

* log4j

직접 로깅 클래스를 만드는 것보다 로깅 프레임워크를 이용하는 것이 좋음

(프레임워크 : 공통적인 작업 자동화, 개발자로 하여금 빨리 개발하도록 하기 위한 노력의 산물)

 


1. log4sql 쓰는 이유

Sql문 분석시 parameter가 바인드되지 않고 물음표로 나오거나, 개행이나 탭 문자가 전부 무시되어 가독성이 떨어질 때 log4sql을 설치하여 한꺼번에 확인이 가능함

단순히 쿼리를 화면에 출력해주는 것 뿐만 아니라 sql이 실행된 시간, 실행된 메소드, sql이 실행되는데 소요된 시간, 실행된 sql을 자동으로 들여쓰기를 해서 보여줌

쿼리가 실행되고 소요되는 시간은 실제 서비스 환경 하의 시간과 거의 일치하므로, 비효율적 쿼리를 찾아내는데 도움이 됨

서버 성능에 도움을 주지 않음

 

 

2. log4sql 다운로드 사이트

http://sourceforge.net/projects/log4sql/files/log4sql.zip
압축을 푼 후 log4sql.jar를 WEB-INF/lib/log4sql.jar에 위치시킴

 

1
2
3
4
5
6
7
8
9
10
  <dependencies>
      <dependency>
          <groupId>log4sql</groupId>
          <artifactId>log4sql</artifactId>
          <version>7.8</version>
          <scope>system</scope>
          <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/log4sql.jar</systemPath>
      </dependency>
  </dependencies>
</project>
cs

 

maven의 경우 pom.xml에 수동으로 이렇게 적어주면 dependency에 자동으로 추가된다.

 

 

3. log4jdbc와 log4sql의 특징

 

 

 log4jdbc

 log4sql

 방식

- 동적 바인딩시 sql이 ?를 포함한 sql을 출력

 

- ? 에 해당하는 동적 바인딩 변수 값을 음 줄에 출력

- 동적 바인딩시 출력되는 sql문이 동적 바인딩 되는

  변수의 값을 그대로 출력

 장점

- log4j의 기능 사용

 

- 어떤 항목이 동적 바인딩 변수인지 확인 가능

 

- sql 결과까지 출력

- 설치가 간단함


- sql로그가 직관적으로 나옴

 

- 작성한 sql문을 타 유틸리티로 확인시 sql문을 그대로

  복사하여 테스트 가능

 단점

- 한 sql에 동적 바인딩 변수가 많은 경우 log가 한줄로

  찍혀서 직관적이지 않음

 

- 작성한 sql문이 잘 작성된 것인지 다른 유틸리티

  (ex. sqlpuls)로 확인할 때 불편함

- 내부적으로 System.out.println 콘솔을 출력함

  (질의 결과 값에 대한 출력이 없음)

 

- 어떤 값이 동적 바인딩된 값인지 확인하기 어려움

 사용

 실제 운영시

 개발시

 

5. log4sql 설정 방법

WEB-INF/lib/ 경로에 jar 파일 추가

properties -> java build path로 log4sql 추가 (단축키 : Alt + Enter)

 

* log가 Console 창에 출력됨

 

 

3. log4j.jar 다운로드 (Maven pom.xml 사용)

  ㄱ. Maven 사용시

- 프로젝트의 pom.xml > http://mvnrepository.com/artifact/log4j/log4j 에서 원하는 버전의 dependancy 코드 찾기 > 파일에 추가 후 저장 > Maven Dependencies 밑에 log4j-1.2.17.jar 파일이 자동으로 import됨

   ㄴ. Maven 미사용시

    - https://repo1.maven.org/maven2/log4j/log4j/1.2.17 에서 log4j-1.2.17.jar 파일 다운

- 프로젝트 우클릭 > Build Path > Configure Build path > Libraries > Add External JARs > .jar 선택

 

* pom.xml 내부

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

 

추가로 설정 파일이 있어야 log4j가 정상적으로 초기화 되면서 사용이 가능한데, 이 설정파일은 xml과 properties 파일 2가지로 작성 가능

 

 

3. log4j.properties 위치 (설정 파일 위치)

- Java 프로젝트 우클릭 > New > SourceFolder 생성 (이름은 자유, 이 폴더 안에 위치한 파일은 프로그램 작동시 자동으로 CLASS_PATH에 추가가 됨) > 생성 폴더 하위에 log4j.properties라는 파일명으로 아래 소스 copy & paste

 

* Standalone Java App : project/classes/log4j.properties

* Java Web App (src/ 밑) : WEB-INF/classes/log4j.properties

 

 

6. log4j.properties source 내용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#Root logger option
log4j.rootLogger=DEBUG, stdout, file
 
#Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
 
#Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
 
#log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
cs

 

 

5. Java Source Code

1
2
3
4
5
6
7
8
9
10
 import 
org.apache.log4j.Logger;
 
public class MybatisMavenMain {
    final static Logger log = Logger.getLogger(MybatisMavenMain.class);    // () 안에는 클래스 이름
//  private Logger log = Logger.getLogget(this.getClass());
 
public static void main(String[] args) { 
    if(logger.isDebugEnabled()){
        log.info("Let's Log4j..."); 
cs

 

6.  Log Level

log 레벨을 All로 할건지, debug로 할건지, info로 할건지에 따라 console 창에 찍히는게 달라진다.

 

 레벨

 이름

의미 

 1

 ALL

 모든 레벨의 로그 출력

 2

 TRACE

본문 중 디버깅에 필요한 정보 출력 

 3

 DEBUG

메소드의 시작과 끝

 4

 INFO

시스템 운영에 도움을 주기 위한 정보 

 5

 WARN

자체 해결 가능

 6

 ERROR

부분적 오작동 가능성 존재

 7

 FATAL

모든 작업 중단

 8

 OFF

 모든 레벨의 로그 출력 X

 

 

 

 

 

log4sql.properties의 내용 중

1
2
#Root logger option
log4j.rootLogger=DEBUG, stdout, file
cs

 

line 2 에서 DEBUG에 해당하는 뜻은 DEBUG 이상의 레벨 log만 출력하겠다는 의미이다.
(DEBUG, INFO, WARN, ERROR, FATAL이 출력됨)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.apache.log4j.Logger;
 
/**
 * Servlet implementation class PersonServlet
 */
//@WebServlet("/PersonServlet")
public class PersonServlet extends HttpServlet {
    
    final static Logger log = Logger.getLogger(PersonServlet.class);
      
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        log.fatal("fatal 로그");
        log.error("error 로그");
        log.info("info 로그");
        log.debug("debug 로그");
        log.trace("trace 로그");
    }
cs

 

실제로 이러한 서블릿 코드를 작성하고 실행하면 이미 log4sql.properties에서 DEBUG로 설정했기 때문에

콘솔창에는 'debug 로그' 까지만 출력됨을 확인할 수 있다.

 

이를 이용하여 디버깅할 때, System.out.println("debug > ~"); 로 일일히 적지 말고

log를 이용하여 내가 원하는 부분만 콘솔창에 출력되도록 할 수 있다.

'BackEnd > Java' 카테고리의 다른 글

JAVA :: JRE 오류  (0) 2016.01.15
Maven :: 정의  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15
Java 컴파일 & jar 만들기 & Java 실행  (0) 2016.01.15
CRUD 구조  (0) 2016.01.13

 

1목표

- java 소스에서 Sql을 분리

- jdbc 프로그래밍 캡슐화 (java 코드 -> xml)

 

 

2. 개요

- xml에 서버 정보(오라클 드라이버, 주소, 아이디, 비밀번호 등)을 써놓고

- xml에 Sql 구문을 넣은 다음

- 반환값을 담을 그릇 (VO = DTO)를 써주면 DAO 구현 가능

 

* xml이 핵심

 

3. 

mybatis 실행 경로

- mybatis의 SqlSession 객체 준비. select 실행을 요청함 (select문 실행)

- Sql mapper 파일에서 아이디가 "~DAO.selectOne"인 Sql문을 찾음

- mybatis는 jdbc 드라이버를 사용하여 Sql문을 실행

- jdbc에서 리턴한 값을 가지고 값 객체를 생성 (value 값 객체)

- 준비한 값의 객체를 리턴

 

 

4. 구조

 

 

- DAO 패키지, main패키지, mybatis 패키지, vo 패키지로 이루어짐

- DAO : DAO와 DAOImp 파일로 이루어짐

   Interface 클래스를 만들고 (Imp) Interface 클래스를 상속받는 Implements클래스 (DAO)

 

ㄱ. DAO

 

 

ㄴ. DaoImp

 

 

 

ㄷ. Main : 클래스가 두 개로 나눠질 것 같으면 파일을 반드시 두 개로 나누어서 작업

 

 

 

 

ㄹ. MyBatis

 

* MyBatisConnectionFactory.java

 

 

* config.xml

 

 

* PersonMapper.xml

 

 

ㅁ. PersonVO

 

'Framework > Spring' 카테고리의 다른 글

MyBatis :: selectList와 selectOne  (3) 2016.02.15
MyBatis :: ConnectionFactory  (0) 2016.01.19
MyBatis :: 동적 sql (=쿼리)  (0) 2016.01.19
MyBatis :: Java app example  (0) 2016.01.18
JDBC :: 메뉴얼  (0) 2016.01.15

 1. VO (Value Object)

 

 

관계 데이터베이스의 레소드에 대응되는 자바 클래스

해당 변수의 Getter, Setter 메소드의 조합으로 클래스가 형성

불변성, equals()로 비교했을 때 객체의 모든 값을 비교해야 함

데이터 전달을 위해 가장 효율적이나, 클래스 선언을 위해서는 많은 코드가 필요함

 

 

2. DTO (Data Transfer Object)

 

 

- 데이터 전송 객체 (데이터 : Database, file, memory etc..)

- VO와 같은 개념

 

 

3. DAO (Data Access Object)

데이터 접근 객체

커넥션은 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근하도록 함

DB에 대한 CRUD (Insert, Update, Select, Delete)를 처리

자신이 필요한 Interface는 DAO에게 던지고 이 Interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환해줌

DB 접근을 DAO가 담당하게 하여 DB 액세스를 DAO에서만 하게 되면 다수의 원격 호출을 위한 오버헤더를 VO나 DTO를 통해 줄일 수 있고 다수의 DB호출 문제를 해결함

'BackEnd > Java' 카테고리의 다른 글

JAVA :: JRE 오류  (0) 2016.01.15
Maven :: 정의  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15
Java 컴파일 & jar 만들기 & Java 실행  (0) 2016.01.15
Java :: log4sql 과 log4jdbc  (0) 2016.01.14

+ Recent posts