1. 클래스명은 반드시 대문자

- MyClass (o), myclass(x), myClass(x)

 

 

2. 패키지를 표현하는 이름은 모두 소문자

- com.daybyday (o)

- 반드시 도메인 이름으로 소문자를 사용해야 함

- 충돌 방지를 위해 패키지명은 보통 도메인 역순으로 함

  (도메인이 www.myhouse.com 이면 패키지명은 com.myhouse)

 

 

3. 변수 이름은 반드시 소문자로 시작하고 카멜(낙타)명명법 이용

- 카멜 (낙타)처럼 중간에 혹이 볼록(凸)하게, 두 단어 연결시 중간 단어 앞글자만 대문자 작성

            (Account account (o))                                    (evenHandler(o))

 

 

4. 일반적인 변수의 이름은 타입의 이름과 동일하게 지정

- public void setTopic(Topic topic) => (o)

- 코드의 복잡도를 줄여줌

- 변수 이름만으로 타입을 손쉽게 유추 가능하게 해줌

 

 

5. 넓은 범위에 영향을 미치는 변수 : 긴 이름 / 좁은 범위 변수 : 짧은 이름

- 임시 저장 공간이나 인덱스로 사용되는 변수 : 짧은 이름

 

 

6. 메소드 이름은 반드시 소문자로 시작, 카멜 (낙타) 명명법 이용

- getName (o), computeTotalWidth (o)

- 메소드와 변수 구분을 위해 변수는 명사 단어, 메소드는 동사 단어

 

 

7. 타입을 표현하는 이름은 대소문자를 혼용할 수 있지만, 반드시 명사를 사용하고 시작 글자를 대문자로 지정

- Account (o), EvenHandler (o)

 

 

8. 상수를 표현하는 (final) 이름은 반드시 모두 대문자로 지정하되, '_'를 사용하여 단어 구분

- MAX_ITERATORS (o), COLOR_RED (o)

- 자바의 일반적 관습

- 하지만 대다수는 상수 변수를 메소드로 구현하는게 더 나음

   (  public int getMaxIterations() {

return 25;

} (o)

      보다 읽기 편하고 클래스 값을 참조하는 일관된 인터페이스를 제공

 

 

9. 축약형과 두문자어형을 이름에 사용할 경우 전부 대문자로 지정하지 않음

- exportHtmlSource(); (o), openDudPlayer(); (o)

- 모두 대문자로 지칭시 상수에 대한 명명 지침과 충돌 간으성 있음

- 가독성 저하

 

 

10. private 접근 제한자를 갖는 클래스 변수에 '_' 접미사 사용

- class well {

private int depth_;

  } (o)

- 로컬 변수와 private 접근 제한자가 갖는 클래스 변수를 쉽게 구별 가능

- 부가적으로 setter 메소드에서의 이름 충돌 문제를 해결해줌

 

* 자바 예약어 : 기능이 이미 정해져 있는 키워드들 

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

JAVA :: JRE 오류  (0) 2016.01.15
Maven :: 정의  (0) 2016.01.15
Java 컴파일 & jar 만들기 & Java 실행  (0) 2016.01.15
Java :: log4sql 과 log4jdbc  (0) 2016.01.14
CRUD 구조  (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. 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