회고

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

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

    자바 4주차 스터디 회고

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

    스프링 스터디 3주차 회고

    1주차때 배운 개념과 연결지으며 공부해야겠다고 생각했다 예를 들어 쓰레드를 생성할 때 어떤 오버헤드가 발생하나요? 라는 질문에 대한 모범적인 답은 컨텍스트 스위칭으로 인한 오버헤드가 발생하고 쓰레드의 어떤 영역을 차지하는지 (힙 스택) 등 힙을 차지하긱 때문에 GC발생 확률이 올라가고 언젠간 GC의 대상이 됨 자바에서 스레드는 OS의 스레드와 1대1 매핑이 된다. 결국 OS에서 관리할 스레드도 늘어나게 되는 것이다. 그래서 미리 정해진 갯수만큼 생성해서 재활용 하는 것이다. 이처럼 명확하게 설명할 줄 알아야 한다. 특히 JVM에 대해서 구체적으로 알아야 한다. 이해가 부족하다고 생각한 개념 : 블락킹 큐 -> 이게 무엇이고 언제쓰지? 풀이 넘치면 어떤 예외가 발생하는지 디비용 스레드 풀 블락킹 개념 Lo..

    스프링 스터디 2주차에 공부한 것들

    힙덤프 OOM는 메모리 누수 상황이 발생했을 때 일어남 OOM의 종류 Java heap space : 힙 공간에 새로운 객체를 생성할 수 없는 경우. 지정한 힙크기가 애플리케이션에 충분하지 않을 경우 발생. 혹은 생명주기가 긴 애플리케이션의 경우. 혹은 finalize를 과도하게 사용하는 애플리에키션에서 발생하기도 함. GC Overhead limit exceede : GC에서 자바 프로그램이 느려지는 경우 발생함. GC후 자바 프로세스가 컬렉션 수행하는데 걸리는 시간의 약 98% 이상을 소비하고 힙의 2% 미만이 복구된 상태에서 지금가지 수행하는 과정에서 GC중 OOM이 5번 이상 생성되는 경우 발생. 힙의 크기를 늘리면 해결됨. -XX:-UseGCOverheadLimit 선택사항을 추가하여 GC제한 ..

    스프링 스터디 1주차에 공부한 것들

    CPU, RAM, DISK의 정의 및 역할 CPU : 중앙처리장치. 사용자가 입력한 명령어를 해석하고 자료를 연산하여 그 결과를 제어하는 역할 구성 요소 ALU 산술논리장치 : 연산을 수행 CU컨트롤 장치 : 제어 명령을 전달. 레시스터 사이의 데이터 전송을 제어 레지스터 : 값을 일시적으로 기억. 메모리중 저장 속도가 가장 빠름. 내부 버스를 통해 연산장치와 연결되어 있음 하이퍼스레딩 : 한개의 코어를 두개의 쓰레드로 나눔으로서 두가지 작업을 동시에 할 수 있게 만든 기술. RAM : Random Access Momory의 줄임말고 CPU가 빠른 엑세스를 하기 위해 데이터를 단기간에 저장하는 구성 요소 응용프로그램의 로딩 데이터의 일시적 저장 등에 사용 *Random Access : 어느 곳에 저장된 ..