728x90
반응형
SMALL

* Youtube Review - https://www.youtube.com/watch?v=64c0BgeCLAY&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=2

 

개발 방법론 중 기본은 폭포수 모델이다.

기획(요구사항) -> 설계 -> 개발 -> 테스트 -> 운영

운영시에도 계획/분석/설계는 매우 중요하다.

추상적의 반댓말은 구체적

전사적 (EA) 은 Enterprise Architecture 기업입장에서 본다는 의미이다.

예를 들어 전기에 대한 프로젝트가 있다면 개발자는 개발의 지식만 갖고 있고 현업에서 업무 프로세스를 주는 방식이다.

DBMS는 oracle, mysql, sql server 등 굉장히 다양한 데이터베이스가 있다. 개념적 데이터 모델링은 모든 DBMS에서 사용할 수 있다.

결과물인 ERD를 생성하는 것이다.

요구사항을 그린다.

사람들이 화면의 왼쪽 상단부터 본다고 한다.

그래서 보통 중요한 엔터티를 왼쪽 상단에 둔다.

연관이 있을 것 같은 엔터티끼리 연결해준다.

관계명은 기술되어 있지 않는 경우도 많다.

엔터티 안의 인스턴스들이 얼마나 참여하는지

필수여부는 0또는 1를 표시함으로써 표시한다.

이를 ERD라고 한다.

상세하게 그려야 한다. 그래서 업무, 속성, 관계 등 정의

재사용성이 높음, 이 모델링 한 결과물은 설계할 때만 사용하는 것이 아니다. 구축 또는 테스트시 계속 사용한다.

또한 유지보수 해야한다.

논리적 데이터 모델링은 특정 DBMS에 종속적이다.

논리적 데이터 모델링을 할 때 정규화를 수행한다.

먼저 속성을 쭉 나열하는 것이다.

식별자에 대한 요구조건이 있다.

주민등록번호보다 직원ID가 더 부합하기 때문에 직원ID를 PK로 사용한다.

만약 직원이 두개 이상의 연락처를 갖을 수 있으면, 직원 연락처로 나누어 주어야 한다.

파급효과: 초반에 엉망으로 설계하면 개발하다가 나중에 엎게 되어 힘듬

2. 간결한 설계또가 있어야 쉽게 이해 가능

3. 데이터 중복, 비유연성, 비일관성 등 이상한 데이터가 안 들어감

데이터의 중복이 일어나면 다음과 같이 한 ID에 여러 데이터가 조회되는

데이터 중복 현상이 발생한다.

사소한 프로세스(업무)의 변화에도 테이블을 바꿔야 하는 경우

연락처가 변경되면 이를 이력에 쌓아야 한다.

스키마는 각각 종속적이다.

개념 스키마와 내부 스키마의 독립성

저장공간 (하드 디스크) 등을 데이터베이스에 추가해도 개념 스키마를 변경할 필요 없다.

유일하게 인스턴스를 식별할 수 있다.

(1) 대표성 여부: 직원 ID 는 주식별자, 주민등록번호는 보조식별자

(2) 스스로 생성 여부: 내부식별자는 테이블 내부의 PK이다. 외부식별자는 외부 테이블에서 빌려온 FK이다.

(3) 단일속성여부: 단일식별자는 하나의 식별자이다. 복합식별자는 직원연락처처럼 2개이상의 식별자 조합이다. 예를 들어 직원연락처는 직원ID와 구분코드로 식별자가 조합되어 있다.

(4) 대체여부: 본질식별자는 업무 본연에 있던 대상이다. 인조식별자

예를 들어 부서명을 식별자로 사용하여도 된다. 근데 너무 길다. 인프라, 서비스, 통신. 하나 코드 따서 만들자.

D001, D002 등이다. 편의를 위해서 임의로 만든 식별자를 인조식별자라 한다.

실무 입장에서는 주민번호는 암호화가 되어야 한다.

주식별자 도출기준 특징

1. 유일성

2. 최소성

3. 불변성

4. 존재성

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=64c0BgeCLAY&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=2

 

03. 관계(Relationship) 이해하기

엔터티의 관계를 부여해서 

데이터의 의미를 가져가는 것

존재에 의한 관계

행위에 의한 관계

관계차수는 각 인스턴스들이 얼마나 참여하는지

IE 표기 방식은 1을 사용을 하고

BARKER 표기 방식은 1은 안 적으면 된다.

M:N의 관계는 1:N, N:1로 쪼개야 한다.

직원이 신입이면 부서 배정이 안 되었을 수 있다.

상태를 코드로 관리하는 것

통계성도 있다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

데이터베이스가 뭐(WHAT)지?

이 통은 하드디스크이다.

여러 데이터들이 모여있는 하드디스크다.

예를 들어 엑셀의 한 명의 정보가 바뀌면

모두가 바꿔야 하는 어려움이 발생했습니다.

데이터를 한 곳에 모아 저장하게 되면

한 명이 바꾸면 다른 사람들은 추가적으로 바꿀 필요 없다.

정보가 필요하다.

로그인 예시

이러한 정보들을 저장하는 공간이 바로 데이터베이스이다.

현실 정보를 모델링

먼저 간단하게 개념적 데이터 모델링을 하고 

이를 논리적으로 데이터 모델링을 합니다.

그리고 성능까지 고려하여 물리적 데이터 모델링을 합니다.

그리고 데이터베이스에 저장할 수 있게 세팅하면 끝입니다.

집합적으로 단순하게 표현

엔터티안에 있는 개별적인 대상

업무에 필요한 것

인스턴스별 유일하게 구분 가능

인스턴스가 2개 이상 존재

속성이 2개 이상 존재

관계가 하나 이상 존재

유형, 개념, 사건등의 엔터티의 분류가 있다.

본래 업무에 존재하는 정보

업무에 있어 중심 역할

2개 이상 엔터티로부터 발생 

가능한 협업 용어를 쓴다.

의미가 분명하면 좋다.

엔터티가 가지는 공통적인 특징

나중에 우리가 관리하고자 하는 정보

최소 단위 

속성은 각각의 인스턴스를 설명할 수 있다.

하나의 속성에는 하나의 속성값만 들어간다.

각 인스턴스를 식별할 수 있는 속성의 집합

기본은 업무로부터 추출한 속성, 제일 많이 발생

설계는 예를 들어 부서명은 기니까 이 부서명은 코드로 관리하겠다 해서 부서코드를 만드는 것이다.

파생은 부서별연봉합 처럼 데이터의 변경이 일어나면 같이 변경이 일어나야하는 부분이다.

속성은 PK나 FK로 나누어야 한다.

도메인은 속성의 특징이다. 범위를 의미한다.

각 속성마다 자료형 및 제약조건을 줄 때 결정 된다.

 

 

 

데이터베이스가 어떻게 쓰이지?

 

 

 

 

 

참고 링크 - https://www.youtube.com/watch?v=lxiEiAjp7d0&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=24f2-eJAeII

 

메모리 누수 (Memory Leak)

메모리를 꽉 채우면 컴퓨터가 뻗는다.

 

Manage language

가비지 컬렉터를 사용하는 프로그래밍 언어

 

Mark and sweep

필요한 것만 마크하고, 마트되지 않은 것들은 버리는 것

프로그래밍 적으로는 루트에서 닿지 않는 변수들을 치우는 것

 

Reference counting (참조 카운팅)

한 요소가 다른 요소에게 몇 번 참조가 되는지 세어서 그 수가 0이 되면 치우는 것이다.

 

최근에는 자바가 슬슬 멀티쓰레드로 돌면서 주어간다.

하지만 자바의 가비지 컬렉터에도 한계가 있다.

100% 주어가지는 못한다.

 

좋은 프로그래머가 되려면 메모리 관리에도 신경을 써야 한다.

각 프로그래밍 언어마다 메모리 누수를 위한 방법이 다르다.

어떤 언어에서는 성능 개선이 일어나는데, 어떤 언어에서는 성능 악화가 일어난다.

그래서 각 프로그래밍 언어에 대한 메모리 관리 방법을 알아두는 것도 좋다.

 

순환 참조

Reference가 0이 안된다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=ToO_gpWiMQc

 

 

 

 

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=vXLChm1OM8c&list=PLCkO8I_DSQ7daVh7QwAnyW3_3mpLvWiAD

 

제목: JAVA Applicatoin 성능 관리의 기초

목차:

I: 주요 성능 이슈 발생 유형

1) 잘못된 용량 산정

실제로 오픈했을 때 예상보다 많은 사용자가 들어온다든지 아니면

처음에 설정을 잘못함으로 인해서 하드웨어 처리량을 초과해서 발생하는 성능 이슈들이 종종 있다.

용량 산정을 잘못했다보니 아키텍처 자체를 구성을 잘못해서 발생할 수 있는 

그런 성능 이슈들도 있다.

2) Heap 메모리 부족

힙 메모리 부족은 요즘도 종종 발생할 수 있는 사례들이다.

크게 두 가지 이슈가 있는데

첫번째는 OutOfMemory와 관련된 이슈이다.

힙 메모리 크기를 절대적으로 작게 잡았을 때나 

어플리케이션 메모리 누수가 있었을 때 이렇게 크게 

두 가지로 나누어볼 수 있다.

아웃 오브 메모리의 경우 서비스 자체가 안 된다.

두번째는 가비지 컬렉션과 관련해서 발생하는 이슈이다.

서비스 지연이 발생하는 케이스이다.

3) DataBase 성능 이슈

 

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=AWXPnMDZ9I0

 

1. 소스 코드 작성

Person이라는 객체를 만들었다. 이름은 "이정록" 그리고 나이는 26이다.

Person이라는 객체 타입의 p 변수를 만들었다.

이 p 변수는 Person 객체의 모든 method들을 사용할 수 있다.

이클립스에서 run 버튼을 누르면 이 소스 코드들이 컴파일 되고 실행된다.

 

변수들은 어디에 저장이 되고

어떻게 구동이 되는 걸까요?

 

2. 소스코드의 바이트 코브 변환

방금 본 자바 소스 코드는 .java의 형태로 저장이 된다.

그리고 이 자바 소스 파일을 자바 컴파일러가 바이트 코드로 바꿔주는데 이것은 .class파일로 저장이 됩니다.

작성한 코드를 숨기는 1차원의 의미도 있지만

바이트 코드로 바꿨으니까 문법 검사와 같은 작업을 이후에는 하지 않게 되면서 시간을 단축시키는 의미도 있다고 합니다.

그러나 이 방식은 소스 코드 변경시마다 컴파일을 하고 실행시켜야 되기 때문에 시간이 조금 오래 걸린다.

3. 클래스 파일 (바이트 코드)

이렇게 변경된 바이트 코드 즉, 클래스 파일들은 클래스 로더가 JVM 메모리 영역 즉 Runtime Data Area로 로딩시킵니다.

Runtime Data Area는 총 5개의 영역으로 구분되어 있습니다.

메서드와 힙영역은 모든 스레드가 공유하는 영역이고

스택, PC 레지스터, 네이티브 메서드 스택은 스레드 마다 하나씩 생성되는 공간입니다.

3.1 메서드 영역

메서드 영역은 JVM이 시작될 때 생성되는 공간으로 바이트코드가 이 영역에 저장됩니다.

모드 스레드가 공유하는 영역이니까, 클래스와 변수 정보 그리고 static으로 선언한 변수가 저장되는 공간이다.

3.2 힙 영역

Heap 영역에는 동적으로 생성된 객체가 저장되는 영역이다.

즉 힙 영역에는 new 연산을 통하여 동적으로 생성된 인스턴스 변수가 저장된다.

예를 들어, 클래스의 객체 그리고 배열등이 있다.

생성된 변수는 해당 객체가 소멸되기 전이나, GC가 정리하기 전까지는 이 영역에 남아있습니다.

쉽게 소멸되는 데이터가 아니다.

3.3 힙

힙 영역은 가비지 컬렉션의 대상이 되는 공간이다.

효율적인 가비지 컬렉션을 수행하기 위해서 더 세부적으로는 다섯 가지 영역으로 나뉘게 된다.

3.4 스택

지역 변수, 메서드의 매개 변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역

메서드의 호출이 종료되면 이 안에 선언된 변수들은 사라진다.

그러니까 주로 금방 사용되고 금방 사용이 끝나는 데이터가 저장되는 영역이다.

3.5 헷갈릴 만한 이슈

- 변수의 저장 방법

객체를 생성했다.

이렇게 생성한 객체를 참조하는 변수 p는 Stack에 저장이 된다.

그리고 동적으로 생성한 Person 객체는 Heap 영역에 저장이 된다.

- 변수의 타입 이해

Primitive Type은 boolean, byte, short, int, long, char, float, double이다.

이를 제외한 나머지가 바로 Reference Type이다.

이러한 변수들이 실행될 때 마다 스택에 쌓여서 넣었다 뺐다하면 비효율적이므로 스택이 아닌

Heap영역에 그 진짜 메모리를 저장하고

그 메모리를 참조하는 주소를 stack영역에 저장하는 것이다.

3.6 PC Register

PC 레지스터는 프로그램 카운터라고 

우리가 일반적으로 알고 있는 컴퓨터를 의미하는 것이 아니다.

그리고 운영체제를 공부한 분이 아는 우리가 일반적으로 아는 CPU 레지스터 내부에 있는

다음에 실행될 명령어의 주소를 저장하는 공간을 의미하는 것이 아니라

스레드가 어떤 부분을 어떤 명령어로 수행할지 저장하는 공간이다.

스레드가 시작될 때 생성되며 현재 수행중인 JVM의 명령어 주소를 저장하는 공간이다.

3.7 Native Method Stack

자바 프로그램이 컴파일되어 생성되는 바이트코드가 아닌

 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역이다.

 

Runtime Data Area에 로딩된 클래스 파일이 Execution Engine을 통해 해석될 차례이다.

Execution Engine은 로드된 클래스 파일의 바이트 코드를 실행하는 엔진이다.

 

그리고 바이트 코드를 실행시키기 위해서는 

바이트코드를 컴퓨터가 이해할 수 있는 기계어로 바꾸는 작업이 필요하다.

여기서 두 가지의 방법이 있다.

Interpreter는 명령어를 한 줄 한 줄 해석하면서 실행한다.

그리고 JIT Compilter (Just In Time Compiler) 는 Interpreter의 단점을 해결하기 위한 방법으로 

Runtime 시간에 한꺼번에 변경하여 실행한다.

이제 이렇게 기계어로 해석된 것들이 이제 

Runtime Data Area에 배치되어 스레드 동기화나 가비지 컬렉션을 수행하게 된다.

마지막으로 Native Method Interface(JNI)와 

Native Method Library를 살펴보겠다.

Native Method Interface(JNI)는 

JVM에 의해 실행되는 코드 중 네이티브로 실행되는 것이 있다면

해당 네이티브 코드를 호출하거나 호출될 수 있도록 만든 일종의 프레임워크이다.

그리고 Native Method Libraries는 네이티브 메소드의 실행에 필요한 라이브러리이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=_23I6qDmCi4

 

1. 책

JVM은 C++ 코드입니다.

JVM 자체가 Native Code로 만들어집니다.

그래서 C++로 개발이 되었습니다.

 

Java는 C++ 

C++은 Pointer라는 Native를 갖고 있다. (RAM의 물리적 주소이다.)

그래서 참조형을 사용하면 물리 RAM에 직접 접근하는 것이다.

 

2. JVM 에 대한 추가 설명

"Microsoft processor specific -> Interface -> C, C++ -> COMPILER -> Assembly Language -> Assembler -> Machine Code"

"JAVA -> [Virtual Machine] -> Native codes -> Platform (os -> Micro pro processor -> Platform (AMD, ex)Intel))"

"Native codes -> Machine code"

 

C언어 및 C++언어는 Native codes이다.

마이크로소프트 프로세서가 있고, 그에 대한 인터페이스를 기반으로 C, C++로 코딩을 한다.

그에 반해 JAVA는 Virtual Machine이라는 것이 있어서 이러한 인터페이스 기능을 대신해준다.

JAVA의 Virtual Machine은 C++언어로 되어있다.

그리고 각 OS(AMD, 예로 Intel)로 맞는 Microsoft pro processor에 맞도록 된다.

그래서 os를 먼저 읽고, Native codes로 만들어진다.

그러면 이 Native codes가 Complier를 거쳐서 Assembly Language가 되고 

Assembler를 통해서 Machine Code가 만들어진다.

 

"Native codes has a knowledge to convert for any Platform."

"C, C++ are example of basic native codes."

C, C++언어는 Native codes이다. 그래서 어떤 플랫폼도 맞도록 Complie될 수 있도록 한다. 

Complier가 이를 가능하게 한다.

 

Hotspot JVM -> 힙에 어떻게 저장되는지

스택은 어떤지

 

3. Java Application의 구조

예를 들어서 GC 같은 경우 어떤 것을 사용해서 무엇을 했냐

JVM의 메모리 파티션 조정이 있다. 지연성이 올라가지 않으려면 어떻게 해야 하는가

Native codes에서 어떻게 바뀌어지고 

Java의 경우 모든 클래스들이 Object 클래스의 파생이죠. 

이 수준에서 논해지는 hash의 개념

JVM 디버그 수준에서 논하는 ID값 (테이블에서 이루어지는 과정)

객체를 어떻게 하는가

JVM (C++) -> Assembly(바이트 코드)

이 과정이 어떻게 이루어지는지

C++ 수준에서 보아야 한다.

 

바이트 코드 실행 엔진

-> 런타인 스택 프레임 구조

-> 스택 기반 바이트코드 해석 및 실행 엔진

 

컴파일과 최적화

 

컴파일러에 대한 지식이 있이 봐야 한다.

 

나중에 스레드 및 동시성에 대해 알아야 한다.

실행의 단위는 Thread이다.

K 수준의 Thread, Application Thread와 1:1 매핑이 된다.

 

스레드로 넘어가면 락 이야기가 나온다.

최적화에 대한 이야기가 나온다.

 

JVM 최적화에 대한 이야기이다.

 

여기서 C, C++ 언어를 알게 되면

기계어까지 가게 된다.

그런 관점에서 구조론을 논하다 보니 데이터베이스 현상에 대해서 논할 수 있다.

2차 메모리 같은 Disk에서 무언가가 걸어진다.

JVM으로 이어지면 컴파일러에 대해 이해를 해야 한다.

 

전공자의 기본기 이 다섯가지를 다 공부하고

보실 것을 추천을 드립니다.

 

감사합니다.

728x90
반응형
LIST

+ Recent posts