내가 보려고 쓴 공부 정리
31 Jan 2021네트워크
그 외
-
Nagle Algorithm
조금씩 여러번 대신 한번에 많이 보내기, TCP 기본값 on
데이터를 보내고 ACK를 받을 때까지 출력 버퍼에 저장 했다가 ACK를 받으면 한번에 보냄 -
DNS round robin 방식 하나의 IP 주소를 응답하는 것이 아닌, 여러 서버에 대응하는 IP 주소 목록을 응답한다.
간단하게는 1->2->3->1 이런 식으로, 돌면서 리스트 순서를 바꿔 distributing.
하지만, 서버 로드나 혼잡도는 생각하지 않고, health check도 하지 않기에 load balancing에 알맞지는 않음. -
TCP 와 UDP 의 차이점 TCP
- 연결형 서비스, 메시지 형테
- 3-way handshaking, 4-way handshaking
- 흐름 제어, 혼잡 제어
- 전송 순서 o
UDP
- 비 연결형 서비스, 데이터그램 방식
- 보내거나 받는다는 신호 절차 x
- 신뢰성 x
- 전송 순서 x
Java
그 외
-
Anonymous Class
마치 함수 형처럼 이미 있는 클래스를 상속하거나 인터페이스를 구현해서 일회용으로 쓰는거
익명 객체에 새롭게 정의 된 필드는 익명객체의 내부에서만 가능 -
Checked Exception & Unchecked Exception
Checked = 예외처리 필수, 롤백 안됌, IOException, SQLException
unchecked = 예외처리 안해도 됌, 롤백, null Pointer exception -
제네릭
클래스를 정의 할때는 데이터 타입을 확정하지 않고, 인스턴스를 생성할때 지정하는 기능
쓰는 이유, 컴파일 단계에서 오류 검출, 중복 제거와 타입 안정성
extends로 올수 있는 데이터 타입 제한 가능 - Collection
-
Annotation
-
Access Modifier(접근 제어자)
private default protected public 클래스 내 패키지 내 패키지 + 상속 전부 - Wrapper class
- Multi-Thread
스프링
-
스프링 컨테이너 스프링 프레임워크의 코어. 컨테이너는 객체를 만들고, 연결하고, 구성하고, 생성되고 없어질 때까지 라이프 사이클을 관리함.
-
Spring BeanFactory Container 기본 DI 제공. 서드 파티 프레임워크들이 스프링에 적용될 수 있도록, backward compatibility 제공
-
Spring ApplicationContext Container 프로퍼티 파일에 textual message를 엔터프라이즈 기능을 추가하고, 어플리케이션 이벤트를 이벤트 리스너에 제공.
-
DL(Dependency Lookup) IoC 컨테이너는 객체들을 관리하기 위한 별도의 저장소를 가짐. Bean에 접근하기 위해 컨테이너 제공 API이용 Bean을 Lookup
-
Bean Life-Cycle 참고
-
@Transactional class에 선언하면, public 매소드에만 적용, private or protected는 적용되지 않음 method에 선언하면, 해당 메소드에만 적용 같은 클래스안에서 호출하는 메소드는 적용 x, because of spring proxy pattern
자료구조
-
Array와 LinkedList
Array
논리적 & 물리적 저장 순서가 일치하는 연속적인 데이터의 집합
찾고자 하는 원소의 인덱스 값을 안다면 O(1)로 접근 가능
하지만 삽입과 삭제에서 shift로 인한 worse case O(n)LinkedList 노드의 연결로 나타낸 데이터의 집합, 논리적 != 물리적 저장 순서
삽입과 삭제가 O(1)만에 해결 할 수 있지만
search과정에서 O(n)이 필요 -
Hash Table & HashFunction
Open Address & Separate Chaining -
Java HashFunction
hashCode에 M(hash bucket) 크기 % 계산
M은 소수 일때 성능 최고, 부족해지면 M*2, LoadFactor 0.75 일때까지
Java 8이전에는 보조 해시 함수로 복잡, 하지만 8이후는 커지면 레드블랙트리로 바꾸기에 간단하게 상위 16비트 값 XOR연산
String의 경우 Horner’s Method로 해쉬에 31을 재귀로 곱한 값에 각 문자열 더하기 - Tree
- Perfect Binary Tree 모든 레벨이 꽉 찬 이진 트리
- Complete Binary Tree 왼쪽에서 오른쪽으로 순서대로 채워진 이진 트리
- Full Binary Tree 모든 노드가 0개 혹은 2개의 자식 노드를 갖는 이진 트리
Binary Tree, Full Binary Tree, Complete Binary Tree, BST (Binary Search Tree), Binary Heap, Red-Black Tree
- Graph Graph 탐색, Minimum Spanning Tree, Kruskal algorithm, Prim algorithm
디자인 패턴
운영체제
데이터 베이스
디비 커넥션 풀
WAS의 디비 접근시 가장 많은 코스트를 발생하는 곳은 첫 연결을 맺는 것
그렇기 때문에 미리 커넥션을 맺어 놓고 Pool에 저장,
HTTP 요청에 따라 필요할 떄 pool에서 connection 객체를 쓰고 반환
WAS의 스레드 수는 커낵션 풀의 갯수보다 여유롭게 설정
Left join
outer join으로 조건 항목이 있으면 묶고 아니면 내비둠
정규화
한 릴레이션에서 여러 엔티티의 애트리뷰트들을 혼합하게 되면 중복 저장에 갱신 이상이 생길수 있다
중복을 최소화하기 위해 데이터를 구조화 하는 작업
1 정규형 - 모든 애트리뷰트가 도메인에 속하는 하나의 값, 복합 애트류뷰트 x
2 정규형 - 모든 비주요 애트리뷰트들이 주요 애트리뷰트에 오나전 함수 종속적
3 정규형 - 기본키에 대해 이행적으로 종속되지 않는 관계
문제점 = 릴레이션의 분해로 JOIN연산이 많아짐
NoSQL
관계형 데이터 모델 지양, 스키마없이 사용하거나 느슨한 스키마, 저장 조회에 특화
종류
Key-value Model, Document Model(Mongo DB), Column Model
- mysql json 입력
-
table maintenance statements sql
-
MySQL Strict Mode 컬럼 크기보다 큰 스트링 테이터를 입력하면, 디비는 사이즈보다 큰 데이터를 truncate 하고, unsigned 에 negative를 넣으면 0으로 만듬. 여기에 Strict Mode로 전환 하게 되면, 컬럼에 맞지 않은 데이터는 오류로 처리됌
-
ORM 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것, Persistant API라고도 할 수 있음
- MyBatis Java Persistance 프레임워크, xml을 사용 SQL 문으로 객체를 연결
그 외
DI
한 객체가 다른 객체를 참조하고 있다면 해당 객체는 다른 객체에 의존성을 가짐
원래는 개발자가 인스턴스를 생성하면서 해당 의존성 주입 했지만,
IoC(Inversion of Control)로 프레임워크가 의존성을 주입함
Bean Container가 Bean을 생성하고 주입 함
의존성 주입 세가지
생성자, 매소드(세터), 필드
CAP 이론
Consistency - 모든 노드가 같은 순간에 같은 데이터를 볼수 있다
Availability - 모든 요청이 성공 또는 실패 결과를 반환 할수 있다
Partition tolerance - 메시지 전달이 실패하거나 일부가 망가져도 시스템이 계속 동작할 수 있다
세 가지를 모두 만족할 수 없다
클라우드 환경, 마이크로서비스 구조
이전에 모노폴릭 구조에서는 하나의 서버에 하나의 서비스가 올라가고
여기에 서비스를 쪼개서 올린다면 낭비되는 자원 + 추가 비용이 발생
하지만 클라우드 환경에선 그런게 없음
-
OOP 데이터를 상태와 행위를 가진 객체로 만들고, 그 객체들간의 상호작용으로 로직을 구성하는 프로그래밍 기법
-
SOLID
- Single Responsiblity Principle, 모든 클래스는 하나의 책임을 가져야한다.
- Open Closed Principle, 기존의 코드를 수정하지 않으면서 기능을 추가할 수 있게
- Liskov Substituion Principle, 자식클래스는 부모 클래스를 대체할 수 있다, 부모 자리에 자식을 넣어도 잘 작동하도록
- Interface Segregation Principle, 하나의 일반적인 인터페이스가 아닌 여러개의 구체적 인터페이스, 자신이 사용하지 않은 인터페이스 구현 x
- Dependency Inversion Principle, 거의 변화가 없는 것에 의존하라, 구체적 클래스보다 인터페이스나 추상 클래스와 관계