상세 컨텐츠

본문 제목

[인턴 OJT 1일차] 개발환경 구성, maven, Log4j, coding standard

인턴

by 리잼 2022. 12. 12. 17:38

본문

반응형

 

1. 개발 환경 구성

개발환경 : 이클립스 2022-09

JDK : 1.8

https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2022-09/R/eclipse-inst-jre-win64.exe

이미지 썸네일 삭제
Eclipse downloads - Select a mirror | The Eclipse Foundation

The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.

www.eclipse.org


2. 환경변수 설정

내 PC -> 속성 -> 고급 시스템 설정 -> 환경 변수 -> 새로만들기 -> 변수이름 : JAVA_HOME, 변수 값 : C:\Program Files\Java\jdk1.8.0_351 -> Path 편집 -> 새로만들기 -> %JAVA_HOME%\lib

대표사진 삭제
대표사진 삭제

자바 환경변수 설정

대표사진 삭제

자바 버전 확인


3. Maven과 log4j

3.1 Maven

- Application을 개발하기위해 반복적으로 진행해왔던 작업들을 지원하기 위한 도구

- 빌드, 패키징, 문서화, 테스트, 테스트 리포팅, git, 의존성 관리, 배포 등 작업을 손쉽게 가능하게 해준다.

3.1.1 Maven의 장점

- 편리한 의존성 라이브러리 관리

- 컴파일과 빌드를 동시에 수행가능하다.

- IDE에 종속된 부분들을 제거할 수 있다.

3.1.2 Maven의 단점

- 기본적으로 지원하지 않는 빌드 과정을 추가해야하는 경우 상당히 복잡해진다.

- 특정 플로그인 설정이 조금만 달라지면, 해당 설정을 분리해서 중복 기술할 때가 발생한다.

- 위와 같은 상황이 생기면 설정이 길어지고 가독성 저하가 발생하여 재사용성 및 확장성을

떨어뜨려 유지보수가 어려워진다.

3.1.3 Maven의 구조

 

 
사진 삭제

Maven의 구조

3.2 Pom ( Project Object Model )

- 프로젝트 필수 정보

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.barunsw.ojt</groupId>

<artifactId>OJT</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>.신입사원OJT</name>

</project

 
사진 삭제

사진 설명을 입력하세요.

[ dependencies ]

- 필수사항

- 의존성을 정의하는 라이브러리를 불러오는 부분

- 프로젝트에서 import되는 dependency 모음

[ dependencies - dependency ]

- 하위에 groupId, atrifactId 필수

- maven repository 들어가서 필요한 dependency 검색 usage가 가장 높은 것 권장

[ dependencies - dependency - groupId ]

- 프로젝트의 그룹 Id, 도메인이나 특정한 정보로 식별

- ex) import org.apache.logging.log4j.Logger;

[ dependencies - dependency - artrifactId ]

- 프로젝트의 artifactId

- version.packaging의 형태로 artifact 파일 생성

[ dependencies - dependency - version ]

- 프로젝트의 버전

 

3.3 log4j 란?

- Apache에서 만든 로깅을 위한 자바 기반의 오픈소스 라이브러리로 디버그용 도그로 주로 사용한다.

- Log4j의 약자는 Log for java로 jakarta-project에서 Java를 위한 프로젝트 중 하나로 처음부터

Java예외를 위해 설계되었다.

3.4 로깅이란?

- 시스템을 작동할 때 시스템의 작동상태 기록, 보존 및 시스템 동작의 분석 등을 하기위해 작동 중의

각종 정보를 기록하여 둘 필요가 있다. 이 때 생기는 문제를 개발자가 알 수 있게 도와준다.

3.4.1 Logger : 로깅 메세지를 Appender에게 전달

3.4.2 Appender : 전달된 로깅메세지를 파일에 기록할 것인지 콘솔에 출력할지 매개체 역할을 한다.

3.4.3 Layout : Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할지 Layout을 결정한다.

 

※ log4j.xml이 들어있는 resource폴더 까지 빌드에 포함시켜야 코드가 실행된다. ※

OJT-master폴더 선택 - Build path - configure Build Path - Add class Folder - resources

 
사진 삭제
 
사진 삭제

사진 설명을 입력하세요.

레벨 값

- ALL : 모든 로깅

- TRACE : 세밀한 로깅

- DEBUG : 디버그 로깅

- INFO : 강조 로깅

- WARN : 경고 로깅

- ERROR : 오류 로깅

- FACTAL : 심각한 오류 로깅

- OFF : 로깅 해제

패턴 ( 대소문자 구분 )

- %c, %logger : 해당 로그를 쓰는 로거의 이름.

- %C, %class : 해당 로그를 요청한 클래스 이름

- %d, %date : 해당 로그가 발생한 시간

- %enc, %encode : 특정 언어에서의 출력을 위한 문자 인코딩

- %ex, %exception, %throwable : 예외 로그. 길이를 설정할 수 있음.

- %F, %file : 해당 로그가 발생한 클래스 파일명

- %l, %location : 해당 로그가 발생한 클래스명.메소드명(파일:라인)

- %L, %line : 해당 로그가 발생한 라인 번호

- %m, %msg, %message : 로그문에 전달된 메시지

- %n : 줄바꿈

- %p, %level : 로그 레벨

- %r, %relative : 로그 처리시간

- %t, %thread : 해당 로그가 발생한 스레드명

- %style{pattern}{ANSI style} : ANSI를 사용해 특정 패턴을 스타일링함

- %highlight{pattern}{style} : 로그 레벨명을 ANSI 색깔로 하이라이트

 

4. Coding Standard

4.1 포맷 형식

- 내용은 80자 이내로 작성해야 하며, 이를 위한 줄 바꿈은 논리적으로 구분되어야 한다.

- 클래스 선언은 한 줄로 하되, 논리적으로 나눌 수 있을 경우 80자 룰을 따른다.

ex ) class SomeClass extends AnotherClass implements SomeInterface { ... }

- 메소드 선언 형식은 프로젝트마다 둘 중 하나의 방식으로 일관성 있게 작성한다.

1. 메소드 선언 후 중괄호를 바로 여는 경우

ex ) Braces at end of declaration public void someMethod () {

...

}

2. 메소드 선언 후 개행하여 중괄호를 여는 경우

ex ) public void someMethod ()

{

...

}

- 메서드 이름 뒤에는 공백이 있으면 안된다.

doSomething(currentFile); <<< doSomething (currentFile);

- 연산자 사이에는 공백을 사용한다.

a = (b + c) * d; <<< a=(b+c)*d;

- 자바 예약어 뒤에는 공백이 있어야 한다.

while (true) <<< while(true)

- 콤마( , ) 뒤에는 공백이 있어야 한다.

doSomething (a, b, c, d); <<< doSomething (a,b,c,d);

- 콜론 ( : ) 의 앞뒤는 공백이 있어야 한다.

case 100 : <<< case 100:

- 문장의 세미콜론 뒤에는 공백 문자가 와야 한다.

for (i = 0; i < 10; i++) for (i=0;i<10;i++)

- 메소드 사이에는 한 줄의 공백을 두어야 한다.

- 탭의 크기는 4칸의 공백으로 한다.

- 조건문에는 항상 중괄호를 사용한다.

 
사진 삭제

사진 설명을 입력하세요.

4.2 주석

- 패키지 이름 아레에 회사에서 정해진 주석 템플릿을 따른다.

- 클래스 안에 있는 모든 메소드는 자바 doc generation의 규칙에 맞게 헤더를 작성하는것을 권장한다.

- 코드 안에서 /* */ 주석은 사용하지 않는것이 좋다. ( // 사용 )

- 오픈소스 라이센스 명시사항을 임의로 바꾸거나 지워서는 안된다.

 

4.3 작명 규칙

- 패키지 이름은 소문자이고 단수여야 한다.

- 관련된 기능으로 패키지를 묶어야 한다.

- 패키지 이름은 com.회사명.제품명.하위시스템.[컴포넌트.[어플리케이션]] 으로 지어야한다.

com.barun.ojt.jmlee.day01

- 클래스 이름은 명사로 짓고, 명사의 첫 글자는 대문자로 한다.

FilePrefix

- 예외 클래스는 Exception을 붙여야 한다.

class AccessException

- 메소드 이름은 동사로 짓고, 소문자로 시작해야한다.

computeTotalWidth()

- 일반적인 약어는 첫 글자만 대문자로 한다.

exportHtmlSource(); <<< exportHTMLSource();

- 변수의 이름은 소문자로 시작한다.

fileFrefix

- 범위가 크기에 따라 이름의 길이를 결정한다.

int i = 0; int iIndex = 0;

- final변수는 모두 대문자를 사용하고 단어사이를 _ 로 구분한다.

MAX_LENGTH

- 연관된 final 변수는 같은 접두사를 가지게 한다.

final int COLOR_RED = 1;

final int COLOR_GREEN = 2;

- 오브젝트의 이름을 메소드 안에 사용하는 것을 지양한다.

line.getLength(); line.getLineLength();

- 약어를 사용하는 작명을 지양한다.

Average <<< Avg

- 제네릭 변수는 타입과 같은 이름을 갖는다.

void setTopic (Topic topic) <<< void setTopic (Topic value)

 

4.4 좋은 코딩 습관

- 클래스 메소드는 범위나 접근성 보다는 기능을 중심으로 묶여야 한다

- get / set / is 용어들은 직접적인 접근이 가능할 때 사용해야한다.

- 일시적으로 큰 메모리를 사용하는 오브젝트는 사용 후 null을 참조하게 하여 메모리를 절약한다.

big_splash_image = null;

- static 메소드를 사용할 땐 때는 클래스명으로 접근한다.

- 최적화 할 필요 없는 코드까지 최적화 하지 않는다.

k = i + j ; <<< d = ( k = i + j ) + r;

d = k + r;

- switch 구문에서 꼭 default 조건을 사용한다.

- switch 구문에서 break를 사용하거나 주석을 달아줘야 한다.

- String을 비교할 때는 equals나 compareTo를 사용한다.

- String을 비교할 때는 null Pointer Exception을 방지하기 위해 변하지 않은 문자열을 기준으로 비교한다.

- String + 연산을 지양한다.

- 반복문 안에서의 String + 연산을 피해야 한다.

- public 인스턴스 변수는 사용을 지양한다.

- 메소드의 리턴 값으로 변경 가능한 오브젝트의 사용을 지양한다. 필요하다면 이유를 문서로 작성한다.

- 클래스 멤버의 가시성을제한해야 한다.

- if문의 중첩을 제한한다.

- 복잡한 반복문은 피해야 한다.

- 문자열에 문자를 추가할 때는 StringBuffer의 append를 통해 추가해야한다.

- 0과 1이 아닌 다른 수는 매직넘버를 쓰는 것을 고려해봐야 한다.

- 변수의 범위를 줄인다. ( 변수는 메서드가 시작할 때 정의하지 않고 필요할 때 정의한다. )

- 다중 문자열 연결은 피한다.

 

 

반응형

관련글 더보기

댓글 영역