분류 전체보기

    C10K부터 Event-Driven까지

    하드웨어 자원이 충분함에도 불구하고 IO 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 문제. BSD 소켓을 처음 설계할 때 10K 클라이언트를 처리할 하드웨어 여력이 되지 않았다. 그래서 이를 고려하지 않고 설계함. 10K가 붙으면 네트워크 대역만 해도 기가비트급이고 당시에 상상도 못할일. 이걸 감당할 하드웨어도 없었다. 처음에 OS 커널을 수정하는 방식으로 해결하려고 했음. 그 이후에는 event-driven 서버(Nginx, Node.js)를 통해 해결하려는 시도들이 등장. 무어의 법칙 : 18개월마다 반도체 직접회로의 성능이 2배로 증가 에 비해 소프트웨어의 한계로 인해 발생한 문제. 스레드는 서버 CPU 코어수에 종속적이다. 하나의 Connection당 하나의 스레드가 처리하는 모델 ..

    Lombok의 동작원리

    Lombok은 컴파일 시점에 바이트코드를 변환하여 원하는 부분을 주입해주는 방식으로 동작한다. 아래에서 더 자세히 알아보자. Lombok이 처리되는 과정은 다음과 같다 1. javac는 소스파일을 파싱하여 AST트리를 만든다. 2. Lombok은 AnnotaionProcessor에 따라 AST 트리를 동적으로 수정하고 새 노드(소스코드)를 추가하고 마지막으로 바이트 코드를 분석 및 생성한다. (컴파일 과정에서 생성된 Syntax Tree는 com.sun.source.tree.*에서 public accesss를 제공한다.) 4. 최종적으로 javac는 Lombok Annotation Processor에 의해 수정된 AST를 기반으로 Byte Code를 생성한다. 코드레벨에서 더 자세히 알아보자 우선 아래의..

    java.util.collections 총정리 set편

    java.util에 존재하는 collection들을 이번 글에서는 Set부터 정리해보자. javadoc, 구현 코드를 중심 분석해볼 예정 간단하게 java.util에 존재하는 Collection들을 알아보고 Set에 대해서 알아보자. 우선 상속과 구현된 구조를 살펴보자 인터페이스 구조 Collection 인터페이스 Set SortedSet NavigableSet Queue Deque List AbstractCollection Collection 인터페이스를 구현한 추상 클래스 중복을 허용함 실제 저장 구조와 관계된 함수는 미구현됨. AbstractSet HashSet LinkedHashSet TreeSet EnumSet AbstractList ArrayList AbstractSequentialList L..

    Lombok 이란?

    공식문서 : "Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more." 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리 장점 코드 자동생성을 통한 생상성 향상 반복되는 코드를 줄여 가독성 및 유지보수성 향상 빌더패턴이나 로그 자동 생성 등 다양한 방면으로 활용 가능 단점 ..

    mixin이란

    특정 행동을 실행해주는 메소드를 제공하는데 단독으로 쓰이지 않고 다른 클래스에 행동을 더해주는 용도로 사용됨. 특정 기능만을 담당하는 클래스, 단독 사용이 아닌 다른 클래스에 사용될 목적으로 작성된 부품 같은 클래스를 의미. 전통적인 다중상속을 클래스의 부분부분으로 쪼개서 조립하는 것. 클래스들을 재조립하여 새로운 클래스 타입을 만드는 것. 즉 각각의 기능을 컴포넌트처럼 구현하고 원하는 기능들을 조합하여 새로운 타입을 만들 수 있음

    hashCode()

    /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * * The general contract of {@code hashCode} is: * * Whenever it is invoked on the same object more than once during * an execution of a Java application, the {@code hashCode} method * must consistently return the same integer, provided ..

    부동소수점이란

    고정 소수점 특정 위치에 소수점을 고정하고 정수부와 소수부를 나눠 표현하는 방식 간편하고 계산이 빠르지만, 표현할 수 있는 범위가 굉장히 제한적임. 부동 소수점 IEEE에서 표준으로 제한한 방식 부동(不動) 소수점이 아니라 부동(浮動) 소수점이다. 영어 "floating = 떠 있는" 을 해석한 것 표현할 수 있는 범위가 넓지만 연산속도가 다소 느리다. 부동 소수점의 표현 방식은 "(가수) X(밑수)(지수)" 형태로 표현한다. ex) 12.3 -> 123 x 10-1 IEEE754에 정의된 것들 비트구조 부호비트 sign bit (1비트) : 0이면 양수, 1이면 음수 지수비트 exponent (8비트) : 10000111 127 + 8 = 135, 2 ^ (k - bias) 에서 k값을 나타냄. 가수비..

    상속과 조합

    상속 : 장점 재사용, 중복을 줄 일 수 있음 변화에 대한 유연성 및 확장성이 증가함 개발 시간이 단축됨 단점 : 캡슐화를 깨뜨린다. (상위 클래스와 하위 클래스가 의존하게 된다) 상위 클래스의 변경이 어려움 하위 클래스에 영향을 주기 때문에 최악의 경우 상위 클래스의 변화가 모든 하위 클래스의 영향을 줄 수 있다. 하나의 기능을 추가하기 위해 필요 이상으로 많은 수의 클래스를 추가해야 한다.(이를 클래스 폭발 문제라고 함) 다중상속을 지원하지 않음. protected로 선언할 경우 변수 메소드 까지 노출됨. 이로써 캡슐화가 중단됨 이럴 때 사용하자 확장을 고려하고 설계한 확실한 Is-a 관계일 때 확실한 is-a 관계일 때, 상위 클래스는 거의 변할 일이 없다. 하지만 is-a관계 일지라도 확장이 고려..

    스프링 스터디 5주차 때 공부할 것들

    상태란 클래스 변수 혹은 인스턴스 변수 함수가 상태를 갖고 있느냐를 따질 때는 함수 외부에서 영향이 있는지 함수와의 디펜던시가 있으면 테스트 코드 짜기가 어려워짐. 상태가 없는 함수 = 순수 함수 매개변수에 의해 상태가 있을 수 있다. 결국 외부 요인이 작용할 수 있다고 하면 상태가 있다고 본다. 테스트 관점과 멀티스레드 관점에서 상태값을 이해하고 있어야 한다. 함수형 프로그래밍 부수효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임 주어진 값 이외의 외부 변수 및 프로그램이 실행에 영향을 끼치지 않아야 된다는 의미, 부수효과를 만족하는 함수를 순수함수라고 한다. 순수함수 : 모든 입력이 입력으로만, 모든 출력이 출력으로만 사용. 변경 가능한 데이터 및 사이드 이팩트를 피하는 기본..

    자바 4주차 스터디 회고

    수업 때 배운 내용. Hash에 대해 아는대로 설명 서버 느리면 어떻게 할 것인가? 서버가 느리면 어떻게 할것인가? 스레드 덤프와 힙덤프를 떠본다 스레드 덤프는 TIMED_WAITING 대신 WAITING, BLOCKED를 집중적으로 볼것이다. 서버 죽었는데 어떻게 모니터링 할거에요? 라는 질문을 서비스 회사에서 많이 받는다고 한다. OOM문제인지, 프로세스의 응답이 없는건지, 리퀘스트 톰캣에 스레드 풀을봐야 할것같다. WAITING, BLOCKED는 누군가가 이 상태를 깨워줘야 하므로 이 부분을 중점적으로 봐야할 것 같다. 키워드를 명확하게 하는 것이 좋다. JVM의 런타임 데이터 영역에 스택안에 스레드에 대한 정보가 담겨 있다. 두리뭉실한 질문은 역질문으로 좁혀가야 함. 서버가 응답을 하는데 느린 경..