도커란?
컨테이너 기반의 오픈소스 가상화 플랫폼
서버에서의 컨테이너란?
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
컨테이너
이미지
데이터 베이스(DB)는 공유되어 사용될 목적으로 관리되는 데이터 집합
관계형 데이터베이스(RDBMS)
비 관계형 데이터베이스(Non-relational database)
DB를 왜 사용할까?
애플리케이션에서 데이터는 램에 존재하는데, 애플리케이션 종료시 메모리에 존재했던 데이터를 다시 읽을 수 없다.
데이터를 장기 보관하기 위해서 DB를 사용한다.
관계형 데이터베이스 관리 시스템
관계형 데이터 모델에 기초를 둔 데이터베이스 시스템
관계형 데이터 : 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터
SQL(Structured Query Language)로 관계형 데이터베이스의 데이터를 관리한다.
관계형 데이터베이스의 특징
테이블
테이블끼리의 연결에는 3가지 종류가 있다.
테이블을 나누고 연결하는 이유?
테이블들은 Foreign Key(외부 키)라는 개념을 사용하여 연결한다.
트랜잭션(Transaction)이란?
ACID(Atomicity, Consistency, Isolation, Durability)
ACID는 트랜잭션의 4가지 속성
비관계형 데이터베이스(Non-Relational DataBase)
SQL과 NoSQL 비교
MySQL 기초 문법 정리 / SQL DDL 이해 및 실습 (SQL 명령어)
MySQL에서 키워드와 구문, 문자열은 대소문자를 구분하지 않는다.
테이블 명과 필드의 이름은 대소문자를 구분한다.
SQL DDL(Data Definition Language) 이해 및 실습
데이터 베이스
테이블
mysql> CREATE TABLE 테이블명 (
컬럼명 데이터형,
컬럼명 데이터형,
.
.
Primary Key 가 될 필드 지정
);
mysql> CREATE TABLE tablename {
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
id : 컬럼명, 가능한 영어 소문자 중심으로 명명
INT : 컬럼에 대한 데이터 타입
UNSIGNED : 옵션 사항
NOT NULL : 데이터 입력시, 해당 컬럼 데이터에 값이 할당되지 않는 경우를 허용하지 않는다는 의미
AUTO_INCREMENT : 테이블에 데이터 등록시 해당 컬럼은 자동으로 숫자가 1씩 증가하여 저장됨, 테이블 안에서 AUTO_INCREMENT 컬럼은 하나만 지정 가능함
숫자형 데이터 타입
문자 타입의 컬럼 정의
mysql> CREATE TABLE tablename {
-> name VARCHAR(50),
name : 컬럼명, 가능한 영어 소문자 중심으로 명명
VARCHAR(n) : 컬럼에 대한 문자형 데이터 타입 선언
문자형 데이터 타입
이후 내용은 내일 마저 학습하고 정리하기
자바의 정석 12장 지네릭스 학습
static 멤버에 타입변수 사용 불가
→ 타입 변수에 대입은 인스턴스별로 다르기 때문
class Box<T> {
static T item; // 에러!!!
static int compare(T t1, T t2) {...} // 에러!!!
}
Box<Apple> appleBox = new Box<Apple>();
Box<Grape> grapeBox = new Box<Grape>();
지네릭 타입의 배열 생성 불가능
지네릭 배열 타입의 참조변수 선언은 가능하지만, 'new T[10]'와 같이 new 연산자를 사용하여 배얼을 생성할 수 없다.
class Box<T> {
T[] itemArr; // OK.
T[] toArray() {
T[] tmpArr = new T[itemArr.length]; // 에러!!! 지네릭 배열 생성 불가
...
return tmpArr;
}
}
new 연산자 뒤에 오는 타입은 확정되어 있어야 하는데 T는 아직 확정된 것이 아니여서 안됨
타입 문자로 사용할 타입을 명시하면 한 종류의 타입만 저장할 수 있도록 제한할 수 있지만, 새로운 객체를 생성할 때 여전히 모든 종류의 타입을 지정할 수 있다.
→ 클래스 선언 시 타입 매개변수 T에 지정할 수 있는 타입의 종류를 제한할 수 있다.
class FruitBox<T extends Fruit> {
ArrayList<T> list = new ArrayList<T>();
...
}
class FruitBox<T extends Fruit & Eatable> { ... }
Fruit의 자손이면서 Eatable 인터페이스도 구현해야 한다면 & 기호로 연결한다.
예제
public class FruitBoxEx2 {
public static void main(String[] args) {
FruitBox<Fruit> fruitBox = new FruitBox<>();
FruitBox<Apple> appleBox = new FruitBox<>();
FruitBox<Grape> grapeBox = new FruitBox<>();
// FruitBox<Toy> toyBox = new FruitBox<Toy>(); // 에러!!!
fruitBox.add(new Fruit());
fruitBox.add(new Apple());
fruitBox.add(new Grape());
// appleBox.add(new Grape()); // 에러!!! Grape는 Apple의 자손이 아님
}
}
class FruitBox<T extends Fruit & Eatable> extends Box<T> {}
class Box<T> {
ArrayList<T> list = new ArrayList<>();
void add(T item) {
list.add(item);
}
T get(int i) {
return list.get(i);
}
int size() {
return list.size();
}
public String toString() {
return list.toString();
}
}
class Fruit implements Eatable {
public String toString() {
return "Fruit";
}
}
class Apple extends Fruit {
public String toString() {
return "Apple";
}
}
class Grape extends Fruit {
public String toString() {
return "Grape";
}
}
class Toy {
public String toString() {
return "Toy";
}
}
interface Eatable {}
Docker란? 컨테이너? 이미지?
데이터 베이스의 기초 학습
DB 사용이유? 관계형 DB와 비관계형 DB? 테이블 연결의 종류? 테이블을 나누고 연결하는 이유? 트랜잭션? ACID(트랜잭션의 네가지 속성)? SQL과 NoSQL의 장단점?
→ 이 내용들을 완벽히 알 정도로 학습한 것은 아니고, 이런것들이 있구나 하고 이해할 정도로만 학습했다.
MySQL 데이터베이스 생성, 삭제, 조회, 테이블 생성하는 법, 숫자형 컬럼 정의, 숫자형 데이터 타입, 문자형 컬럼 정의, 문자형 데이터 타입 학습
자바의 정석 지네릭스 학습
하루만에 공부한 것 치고 양이 엄청 많네요! 잘했어요!