Studio u by kingjakeu This is hello from jakeu

내가 보려고 쓴 공부 정리


네트워크

그 외

  • 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


자료구조

  • Map & Set 비교 + 그래프

  • 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, 거의 변화가 없는 것에 의존하라, 구체적 클래스보다 인터페이스나 추상 클래스와 관계