본문 바로가기

수업 정리

32일차 수업정리(Maven, Data Parsing)

**자바에서 나중에 할 것 - 안드로이드 하기 전에 학습

    =>람다와 스트림

    =>GUI Programming(AWT, SWING, GRAPHIC, Java FX )

    =>Design Pattern: 자바 문법이 아니고 객체 지향 설계

 

**외부 라이브러리(3rd Party Library)

    =>자바에서 제공하지 않고 다른 개발자들이 만들어서 배포하는 라이브러리를 사용

 

1. Open Source

    =>source code를 누구나 볼 수 있게 하고 이 source code를 수정해서 애플리케이션을 만들 수 있도록 한 것

  1) Open Source의 장점

    =>시간과 노동력이 감소

    =>직접 개발하는 것 보다는 성능이 우수할 가능성이 높음

    =>신뢰성이 높음 : Linux, Python, R, Node.js 진영에서는 개발자들의 모임(CRAN)을 만들어 Open Source를 검증 후                             사용할 수 있게 해줌

        (검증전 : 제조회사가 제공하는 코드만 사용 or 검증되지 않은 코드들을 사용함으로 인한 위험성의 문제)

 

2. Maven

    =>java build tool

  1)프로그램 실행 과정

    - source Code 작성 - > Class 생성 (byte code - 중간 코드): 이 과정을 컴파일이라고 함

    (이 때는 문법 검사를 수행해서 문법에 맞지 않는 경우 Class를 생성하지 않음)

    =>개발자가 작성한 Class 와 외부 라이브러리 Class들을 가지고 StartUpCode를 추가해서 실행 가능한 코드를 생성 : 이 과정을 Build라고 합니다.

이 때는 문법 검사를 하지 않고 시작점이 어디인지 등을 확인

    =>실행 : Run

실제 데이터들의 값을 가지고 수행해서 값이 없거나 잘못되면 Exception을 발생시킵니다.

  2) java build tool

    => Maven : pom.xml에 기반한 방식 - XML이용 -예전에 Spring Project같은 곳에서 많이 사용

    => Gradle : build.gradle에 기반한 방식 - JSON 이용 -Android Studio에서 사용

    => Legacy Project(우리나라의 경우는 대기업, 금융, 공공기관 프로젝트 - 전자정부프레임워크)에서는 Maven을 많이 사용하고 Android 개발이나 소규모 Project에서는 gradle을 많이 사용

  3) Build Tool이 있는 경우과 없는 경우의 차이

    => Build Tool이 없는 경우

        - 외부 라이브러리 다운 -> 프로젝트에 추가 -> Build path에 작성

    => Build Tool을 사용하는 경우

        - build tool이 제공하는 설정파일에 외부 라이브러리 이름을 작성

        - build tool이 자신의 컴퓨터에서 외부 라이브러리가 있는지 찾아보고 없으면 다운하여 저장

        - 프로젝트에 복사하여 build path에 추가

  4) build tool의 장점

    => 외부 라이브러리의 버전 들이 변경된 경우 build tool을 사용하면 텍스트만 변경

    => 여러 개발자가 공통으로 작업하는 경우 설정 파일만 복사 하면 동일한 환경에서 개발할 수 있음

  5) pom.xml

    => maven 환경 설정 파일

    => maven 기반의 프로젝트에서는 가장 먼저 수행

    => repositories : 외부 라이브러리를 다운로드 받을 저장소 설정(미설정시 Maven Cenral Repository에서 다운)

        - 기업의 경우 아무 라이브러리나 사용할 수 없어 기업 내의 repository를 만들고 라이브러리 다운

        - CDN : Content Delivery Network - 라이브러리를 모아놓은 네트워크

                  (수업시간에는 오라클 사용시만 설정)

 

    => dependencies : 실제 사용할 라이브러리를 설정

  6) www.mvnrepository.com

    => 자바 외부 라이브러리의 maven dependency gradle repository를 검색할 수 있는 사이트

  7) MySQL 드라이버를 로드하는 코드 작성

public static void main(String[] args) {

           try {

                     Class.forName("com.mysql.jdbc.Driver");

                     System.out.println("드라이버 로드 성공");

                               

           }catch (Exception e) {

                     System.out.println("드라이버 로드 실패");

                     System.out.println(e.getMessage());

                     e.printStackTrace();

           }

}

  8) 프로젝트를 Maven 프로젝트로 변환

    => 프로젝트를 선택하고 마우스 오른쪽을 클릭

    [Configure] - [Convert to Maven Project]

    => 프로젝트 이름 상단에 M이 보임 : Maven Project

    => pom.xml 파일이 추가

  9) pom.xml 파일에 mysql의존성(라이브러리를 가져와서 build path에 추가)을 추가

<!-- 실제 사용할 라이브러리의 의존성을 설정 -->

           <dependencies>

           <!-- MySQL 사용을 위한 의존성 -->

                     <dependency>

                                <groupId>mysql</groupId>

                                <artifactId>mysql-connector-java</artifactId>

                                <version>8.0.15</version>

                     </dependency>

           </dependencies>

    => 이전에는 드라이버 파일을 다운받아 프로젝트에 복사 후, build path에 추가, maven에서는 pom.xml만 작성

  10) maven의 외부 라이브러리 사용 원리

    => pom.xml dependencies 태그를 보고 필요한 라이브러리 확인

    => 자신의 계정/.m2 라는 디렉토리에서 라이브러리가 있는지 확인하고 없으면 다운로드

        - Mac이나 Linux에서는 앞에 .이 붙으면 숨김 디렉토리

        - Mac에서는 shift + command + .을 눌러야 확인 가능

    => 다운로드 받은 파일을 프로젝트에 복사 후, build path에 추가

  11) Maven 오류

    => Maven 프로젝트를 만들었는데 가장 상단의 테그에서 plug -in 오류가 발생하는 경우

    => pom.xml 파일의 dependencies 태그에 추가

<dependency>

           <groupId>mysql</groupId>

           <artifactId>mysql-connector-java</artifactId>

           <version>8.0.15</version>

</dependency>

 

        - 프로젝트 선택 후 마우스 오른쪽 클릭 > Run As > Maven Install

        - 프로젝트 선택 후 F5(새로고침)

        - 프로젝트 선택 후 마우슨 오른쪽 클릭 > Maven > Update Project

    => dependency에 오류가 발생한 경우 : 중앙 저장소에 없거나 잘못된 의존성을 설정

        - 중앙저장소를 설정하거나 의존성을 수정

    => 의존성에는 에러가 없는데 프로그램 실행시 클래스가 없다고 에러가 나는 경우

        - 다운로드를 제대로 받지 못하여 발생

 

2. JavaDoc

    => 자바 개발 문서를 만드는 기능

    => JavaDoc 주석을 만들 때는 /**로 시작

    => 주석을 만들면 Eclipse에서 마우스를 가져다 놓으면 툴팁으로 메시지 출력

    => 클래스와 필드 그리고 메소드에 모두 주석을 만들수 있음

 

[Project] - [Generate Javadoc]를 클릭

 

명령어를 이용해서 생성

javadoc -private -encoding UTF-8 -charset UTF-8 -decencoding UTF-8 "자신의 소스파일"

javadoc -d docs *.java : 디렉토리 안의 모든 자바 파일의 doc를 생성

 

3. CheckStyle

    => 자바의 기본 규칙에 맞지 않게 작성된 코드에 경고를 표시해주는 라이브러리

  1) Plug-in 설치

    => [Help] - [Eclipse MarketPlace]에서 CheckStyle plug-in으로 검색하여 설치

  2) 사용

    => 프로젝트를 선택하고 마우스 오른쪽을 클릭한 후 [Properties]를 선택

    => CheckStyle 탭을 선택하고 오른 쪽 창에서 프로젝트에 활성화 한다는 메뉴를 선택 - CheckStyle active for this project 선택

 

4. JUnit

    => 단위 테스트를 위한 라이브러리

    => Unit Test : 프로그램을 구성하는 기본 단위 프로그램이 정상적으로 동작하는지 테스트

    => TDD(Test Driven Development) : 테스트 주도 개발

        - 프로그램을 구성하는 부분을 먼저 테스트 해보고 구현

  1) Eclipse에서 사용 할 수 있도록 설정

    => 프로젝트를 선택하고 마우스 오른쪽을 눌러서 [Properties]를 선택

    => Java Build Path를 선택 -> Add Library 버튼 클릭 -> JUnit를 선택

  2) 사용

    => TestCase로 부터 상속받는 클래스를 만들고 메소드를 생성해도 되고, 일반 클래스에 메소드를 만들고 위에 @Test 추가(포트폴리오 만들때 꼭 넣기)

  3) 실행

    => 메소드 위에서 마우스 오른쪽을 누르고 [Run As] - [JUnit Test]를 선택

 

5. CSV(Comma-Separated Values)

    => 콤마를 가지고 데이터를 구분해서 표현하는 방식

        - 콤마만 가지고 하다가 최근에는 공백, , 엔터 등을 이용하기도 함

    => 일정한 간격을 가지고 데이터를 구분하면 fwf(fixed width file)이라고 함

    => 구분자를 데이터로 사용하고자 하는 경우에는 ""로 감싸면 됨

    => 변하지 않는 데이터를 제공해주고자 할 때 많이 사용하는 포맷

    => split 메소드를 이용해서 직접 파싱하는 것도 가능하지만 대부분 외부 라이브러리를 이용

    => Java csv관련 외부 라이브러리로 많이 사용되는 것은 Super CSV

    => csv 파일을 읽어내는 방법

        - CsvBeanReader 인스턴스 생성 : 매개변수고 csv 파일의 Reader 객체와 환경 설정 옵션을 대입

        - CsvBeanReader ? = new CsvBeanReader(new BufferedReader(new InputStreamReader(

                                    new FileInputStream(파일경로))), CsvPreferences.STANDARD_PREFERENCE);

 

    => 헤더 만들기 : DTO 클래스의 프로퍼티 이름과 같아야 함

        String [] 헤더 = {작접 작성};

                      ?.getHeader(true);  //csv 파일의 첫번째 행이 열 이름일때만 가능

    => 데이터 읽어오기

        - 제약조건을 생성(각 열의 제약조건 설정)

        - 필수 : new NotNull

        - 선택 : new Optional()

        - 정수 : new ParseInt()

        - 날짜 : new ParseDate("날짜 서식")

 

    CellProcessor [] 제약조건배열 = new CellProcessor[]{  };

 

앞에서 만든 reader 객체.read(DTO클래스.class, 열이름 배열, 제약조건)을 호출하면 DTO클래스의 인스턴스를 순서대로 리턴하는데 더 이상 읽은 데이터가 없으면 null을 리턴

 

  1) 현재 프로젝트에 crimePeople.csv 파일을 생성하고 작성

  2) super-csv를 사용하기 위한 의존성을 추가

    => www.mvnrepository.com에서 검색하여 사용

    => pom.xml 파일의 dependecies 태그에 추가

  3) 한줄의 데이터를 저장 할 DTO 클래스를 생성

 

  4) main 메소드를 소유한 클래스를 만들어서 csv 파일의 내용을 읽어서 출력

 

**Data Parsing Project

    => Maven Project로 변환

        - 프로젝트를 선택하고 마우스 오른쪽 클릭 후, [Configure] - [Convert to Maven Project] 선택

    => 확인 - 프로젝트 이름 왼쪽 상단에 M이 있는지 확

1. csv 읽기

  1) pom.xml 파일에 csv

 

  2) 데이터 파일의 인코딩을 확인

    => utf-8이 아니면 파일의 인코딩을 변경해서 다시 저장

  3) 파일을 정상적으로 읽는지 확인

  4) 데이터 구조 파악

    => 첫번째 줄이 데이터인지 컬럼명인지 확인

        - 사용 데이터 파악(첫째줄이 데이터가 아님 - 첫번째 줄은 데이터가 아니라고 가르쳐줘야 함)

        - CsvBeanReader 객체.getHeaders(true);

    => 각 컬럼의 자료형이 무엇인지 그리고 몇개인지 확인

        - 구분 : String, 살인, 강도, 강간추행, 절도, 폭력 : int

    => 컬럼명을 변수명으로 사용할지, 새로운 이름을 부여할지 결정

        - 컬럼명에 특수문자가 있으므로 새로운 이름을 부여

  5) DTO 클래스를 생성

    => CrimeDTO.java 생성

  6) main 메소드에서 데이터를 읽는 부분을 추가

 

tip!

한번에 import하기 : CTRL + SHIFT + O