**Log 기록
=> 작업의 내역 같은 내용을 콘솔이나 텍스트 파일, 데이터베이스에 기록하는 것
- 콘솔 : 코드 작성시 예외나 에러내역 확인을 위해 출력
- 텍스트 파일 : 빈번히 발생하는 작업을 기록
=> 이전에는 작업 내역 확인 용도로 사용, 최근에는 데이터 분석분야에서 많이 사용
=> 이러한 로그를 전문적으로 수집해주는 Fluentd, Logstash 같은 수집기 프로그램도 있음
- 웹 로그 : Google Analytics에서 수집, 통계 분석까지 수행
=> 대부분의 기업은 자체적으로 로그 수집을 수행
=> Log 파일은 일정한 주기를 가져야 함
- 주기는 다양하지만 가장 많이 사용되는 주기는 날짜 별(Log파일 제작시)
- 누구나 읽을 수 있는 텍스트 파일, 클래스가 없으면 읽지 못하는 Serializable을 이용할 것인지 결정(BlackBox)
**어제 프로젝트에서 오늘 날짜.log파일에 전체보기와 데이터 삽입이 발생한 경우 발생한 시간과 작업명 기록
=> 파일입출력
1) 파일 입출력 스트림을 생성, 이 스트림을 이용하는 버퍼 스트림 제작
=> 파일에 문자단위로 기록하는 스트림 : FileWriter -> PrintWriter(버퍼)
2) 파일에 기록시 write나 print메소드를 이용하고 마지막은 flush
=> 오늘 날짜를 문자열로 얻어내는 방법
- java.util.Date 객체를 만들어서 나짜부분만 추출
- java.util.Calendar 객체를 만들어서 날짜 부분만 추출
- java.sql.Date 객체를 만들어서 toString()을 호출
1. 텍스트로 기록
<소스코드>
// 현재 날짜를 포함한 파일 결로를 만들기
// java.sql.Date 인스턴스 생성
Date today = new Date(System.currentTimeMillis());
String filepath = "./" + today.toString() + ".log";
// try() 안에서 만들면 close를 호출하지 않아도 됨
// true 를 대입한 것은 없으면 만들지만, 있으면 데이터를 뒤에 추가
try (PrintWriter pw = new PrintWriter(new FileOutputStream(filepath, true))) {
java.util.Date date = new java.util.Date();
pw.print(date.toString() + "\t" + "ID조회\n");
//버퍼에 내용이 남아있지 않도록 버퍼의 내용을 모두 출력
pw.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2. Serializable 로 기록
=> Serializable 을 구현하기 위해서는 ObjectInputStream과, ObjectOutputStream에 FileInputStream이나 FileOutputStream 인스턴스를 매개변수로 받아서 생성
1) 데이터를 묶어서 표현할 클래스를 생성 - Serializable 인터페이스를 implements
=> java.util.Date와 String 1개를 갖는 클래스를 생성
//Log.java
import java.io.Serializable;
import java.util.Date;
public class Log implements Serializable {
private Date date;
private String task;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
@Override
public String toString() {
return "Log [date=" + date + ", task=" + task + "]";
}
}
2) DAO 클래스의 필요한 메소드에 작성
=> 전체보기에 추가
// Serializable 방식 로그
Date curdate = new Date(System.currentTimeMillis());
String filename = "./" + curdate.toString() + ".dat";
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename, true))) {
Log log = new Log();
log.setDate(new java.util.Date());
log.setTask("전체보기");
oos.writeObject(log);
oos.flush();
}
=> 삽입에 읽는 부분 추가
//Serializable 된 데이터 읽어오기
Date today = new Date(System.currentTimeMillis());
String filename = "./" + today.toString() + ".dat";
try(ObjectInputStream oos = new ObjectInputStream(new FileInputStream(filename))) {
Log log = (Log)oos.readObject();
System.out.println(log);
}catch (Exception e) {
System.out.println(e.getMessage());
}
**Modeling 순서
1. 개념적 모델링 : 고객의 요구사항을 개략적으로 도식화(그림)
2. 논리적 모델링 : 실제 구축하기 직전의 모형(테이블, 키, 관계등을 모델링)
3. 물리적 모델링 : 실제 구현
**좋은 모델링
1. 완전성 - 고객이 필요로하는 모든 업무의 데이터가 전부 정의
2. 중복 배제
3. 확장성이 있어야 함
**관계형 데이터베이스 모델(RDBMS)
=> 테이블의 집합으로 데이터를 표현하고, SQL을 이용하여 사용하는 데이터 베이스
<대표적인 관계형 데이터베이스 관리 시스템>
- Oracle : 대기업, 공공기관등
- MySQL : MariaDB라고도 하며, 소규모 개발에 많이 사용
- MS-SQL Server : Window Server에 설치가능한 데이터베이스 미국에서 많이 사용
- Splite : Smartphone이나 브라우저에 내장되서 로컬에 저장할 목적으로 사용
- PostgreSQL : 무료
- HANA DB : sybase - 최근에 대기업에서 많이 채택 - SQL
- Tibero : 우리나라 제품으로 공공기관에서 주로 이용
- DB2 : 금융기관에서 많이 사용등
1. 6가지 특징
1) 하나의 컬럼은 하나의 값만 가져야 한다
2) 하나의 컬럼에 저장되는 데이터는 성격이 같아야 한다
3) 하나의 행은 다른 행과 구별되어야 한다(구별속성 - 기본키)
4) 열의 순서는 없다 - select 나 insert할때 열 이름을 기재해 주는 것이 좋음
5) 행의 순서는 없다 - 2개 이상의 행이 리턴되는 경우 order by를 이용하여 정렬
6) 하나의 테이블에서 컬럼명은 중복되서는 안됨
2. Data Integrity(무결성)
1) Entity Integrity(개체 무결성)
=> Primary Key는 NULL 이거나 중복 될 수 없음
=> 값을 갱신하면 안됨
2) Referential Integrity(참조 무결성)
=> Foreign Key는 NULL이거나 참조할 수 있는 값만 가져야 한다
=> 입력 규칙 : Foreign Key는 참조하는 테이블에 존재하는 값만 가져야 함
=> 삭제 규칙 : Foreign Key는 부모 테이블에서 삭제될 때 같이 삭제되거나 NULL로 변경되야 함
3) Domain Integrity(도메인 무결성)
=> 처음 설정된 도메인(Data Type, Length, Permitted Value, Range Value) 값만을 가져야 함
3. Data Model의 3요소
1) Entity : 테이블
2) RelationShip : 테이블간의 관계
3) Attribute : 테이블내의 속성(컬럼, 필드등)
4. Data Model 표현법 : ER-Diagram
=> Entity : 사각형
=> RelationShip : 마름모
=> Attribute : 원
=> 연결은 선, 기본키는 밑줄을 긋거나 색칠
5. 개념 모델링
=> 하나의 Entity에 성격이 다른 Attribute가 같이 있으면 안됨
=> Entity는 반드시 하나 이상의 관계를 가져야 함
**Plug-in
=> 독립적으로 실행하지 않고, 다른 프로그램의 일부분으로 설치하여 실행하는 프로그램
**eXERD
=> Database Model Tool
=> 이런 용도로 사용되는 프로그램 중에서 가장 유명한 프로그램은 ERWin
1. 모델링
=> 릴레이션(Entity, Table)
=> 속성(Attribute, Column, Field)
=> 관계(RelationShip)
1) 테이블 만들기 : 도서, 출판사, 고객
2) 컬럼 만들기 : 테이블을 선택하고, 스페이스바를 선택
3) 관계 만들기 : 식별관계를 선택하고, 1쪽의 테이블에서 M쪽으로 드래그
-> M:M 관계의 경우 : 별도의 테이블 제작 후 1:M 관계 2개를 생성
2. Forward Engineering
=> 일반적인 개발 순서대로 작업
=> 모델링 -> 데이터베이스에 구현
3. Reverse Engineering(역공학)
=> 일반적인 개발 순서의 반대로 작업
=> 구현된 데이터 베이스에서 설계 정보를 가져오는 것
포트폴리오 참고사항
1. 설명 + 왜 만들었나
2. 사용한 기술
3. 클래스, 데이터베이스 다이어그램
(상속은 꼭 들어가야 함 - 그래야 보이니까)
4.
5. 마지막으로는 내가 뭘 추가할건지
'수업 정리' 카테고리의 다른 글
32일차 수업정리(Maven, Data Parsing) (0) | 2020.05.23 |
---|---|
31일차 수업 정리(MongoDB- Connect) (0) | 2020.05.21 |
29일차 수업 정리(MySQL 데이터베이스 연결작업 - 후-) (0) | 2020.05.19 |
28일차 수업 정리(MySQL) (0) | 2020.05.18 |
27일차 수업 정리(MySQL) (0) | 2020.05.15 |