일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링
- K8S
- 플러터 개발
- 플러터 공부
- 자바공부
- 코테준비
- 기술면접공부
- 스프링 공부
- JPA
- 스프링부트공부
- 프로그래머스
- 알고리즘공부
- nestjs스터디
- Flutter
- JPA공부
- nestjs공부
- Axon framework
- JPA예제
- 기술공부
- 스프링부트
- 자료구조공부
- 카프카
- DDD
- JPA스터디
- Kafka
- 스프링공부
- 코테공부
- JPA 공부
- querydsl
- nestjs
- Today
- Total
목록Language (93)
DevBoi
모든 자바 클래스의 최상위 부모 클래스는 Object클래스이고, finalize메소드가 존재한다. Java API에는 이 메소드는 가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출한다. 이 메소드는 객체 인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야할때도 요긴하게 사용할 수 있는 메소드이다. GC발생시에 즉각적으로 Collection되지 않는다. Finalize가 선언되어있으면, Finalization Queue에 들어간 후, Finalizer에 의해 정리가 된다. finalize 메소드를 수행하는데 오래걸리면, 그만큼 객체가 오랫동안 메모리를 점유하게 되고, 이는 OOM이 발생확률이 높아진다. 대부분 종료자의 주요목적은 메모리에서 제거되기 전에 개체에..
[53. Null 대신 빈 배열이나 컬렉션 사용] Null처리를 해줘야 하는데, 이를 잊은 경우 클라이언트 측에서 오류 발생가능 [3. private 생성자나 열거 타입으로 싱글턴임을 보증하라] 1. public final 을 이용하는 방법 private 생성자는 public static final 필드인 Instance를 초기화 할때 한번만 호출된다. 리플렉션기능을 통해 private 생성자를 호출할수 있다 -> 두번째 객체 생성 부터는 예외 처리 필요 2.정적 팩토리를 이용하는 방법 싱글턴에 대한 이해가 빠르다 API 를 변경하지 않고, 싱글턴 패턴을 포기할 수 있다. (싱글턴에 대한 직렬화는, serializable impl 과 transient와 readResolve를 추가해야 가능하다, 아니면 ..
하나의 객체마다 하나의 모니터를 결합할 수 있다. 모니터가 결합된 객체는 동시에 두개 이상의 스레드에 의해 접근 할 수 없도록 막는 잠금 기능을 제공한다. 객체에 모니터를 결합하면 하나의 스레드가 그 데이터를 사용하는 동안, 다른 스레드 들이 그 데이터를 사용할 수 없다. 자바에서는 동기화 메소드가 선언된 객체와 동기화 블럭에 의해 동기화 되는 모든 객체에 고유한 모니터가 결합이 되어 동기화 작업을 수행한다. 모니터의 구성 -스레드 단위로 모니터락을 획득하거나 반환한다. -동기화 코드를 수행할 때는 동기화 대상 인스턴스와 결합된 모니터락을 획득한 후에 진입이 가능하며, 동기화 코드를 벗어날 때에는 모니터 락을 반환하게 된다. -동기화 대상 인스턴스 별로 이와 결합된 Monitor가 존재하며, 현재 락을 ..
문맥교환 , Context Switching 이란 멀티 프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행할때 운영체제의 스케줄링에 따라 인터럽트 요청이 발생해서 다음 프로세스가 실행 되어야 할 때 각 프로세스 들은 메모리를 공유하지 않기 떄문에 기존 프로세스의 상태를 저장하고 다음 프로세스의 상태를 교체하는 작업을 문맥교환이라고 한다. OS에서 Context는 CPU가 프로세스를 실행하기 위한 프로세스 정보들을 말한다. 이 Context는 프로세스의 PCB에 저장된다. 문맥 교환이 발생하면, CPU는 해당 프로세스의 PCB 정보를 받아와서 이전 작업을 수행한다. PCB에 저장되는 내용들 -process상태 : CPU를 할당해도되는지 여부를 결정하기 위해 필요함 -PC값 : 다음에수행할 명령어의위치를..
멀티쓰레드란? 멀티쓰레드란, 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화 하여 수행능력을 향상 시키는 것을 멀티쓰레딩이라고 한다. 하나의 프로그램에서 동시에 여러개의 일을 수행할 수 있도록 해주는 것이다. 멀티쓰레드를 사용하는 이유는? -프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우 메모리 공간과 시스템 자원소모가 줄어들게 된다. -쓰레드 간의 통신이 필요한 경우 별도 자원을 이용하는 것이 아니라 전역 변수공간, 동적으로 할당된 공간인 힙영역을 이용하여 데이터를 주고 받을 수 있다. -쓰레드의 문맥교환은 프로세스 문맥교환과는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다 -시스템의 처리량이 향상 되고 자원소모가 줄어들어 자연..
Rest란 웹의 기존 기술과 Http 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다 구체적으로는 HTTP URI를 통해 어떤 자원인지 명시하고, HTTP method(Get,post,put,patch,delete)를 통해 자원을 처리하도록 설계된 것이다. 6가지 원칙 - 인터페이스 일관성 URI로 지정된 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 것을 말한다. HTTP표준 프로토콜에 따르는 모든 플랫폼에서 사용이가능하다. -무상태 세션 정보나 쿠키를 별도로 저장하고 관리하지 않기 떄문에, API서버는 들어오는 요청만 단순 수행한다. 이전 요청이 다음 요청의 처리에 연관 되면 안된다. -캐시처리 가능 웹 표준 HTTP프로토콜을 그대로 사용해서, 웹..
쓰레드 데드락이란? 멀티 쓰레드 프로그래밍에서 동기화를 통해 락을 획득하여 동일한 자원을 여러곳 에서 함부로 사용하지 못하도록 하였다. 하지만 두개의 쓰레드에서 서로가 가지고있는 락이 해제되기를 기다리는 상태가 생길수 있고 이걸 교착상태, 즉 데드락이라고 한다. 서로 다른 두개의 쓰레드가 상대방의 작업이 끝나기를 기다리는 상태이다. 데드락 발생조건 (모두 충족 시) - 상호 배제 : 한 자원에 대해 여러 쓰레드 동시 접근 불가 - 점유와 대기 : 자원을 가지고 있는 상태에서 다른 쓰레드가 사용하고있는 자원을 반납하길 기다림 - 비선점 : 다른 쓰레드의 자원을 실행 중간에 강제로 가져올 수 없음 - 환경 대기 : 각 쓰레드가 순환적으로 다음 쓰레드가 요구하는 자원을 가지고있는 것 해당 데드락은 프로세스,쓰..
JUnit이란 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. Junit4 - Java 5이상 , All in one Junit5 - Java 8이상, Junit Platform,Junit Jupiter, JUnit Vintage JUnit5의 구성요소 -Junit Platform JVM에서 동작하는 테스트 프레임워크이다. 테스트를 발견하고 계획을 생성하고 결과를 보고하는 Test Engine인터페이스를 정의한다. -Junit Jupiter Junit5 TestEngine의 실제 구현체입니다. Junit5기반의 테스트를 실행시키기 위한 TestEngine을 Platform에 제공한다. -Junit VIntage TestEngine에서 Junit3및 Junit4기반 테스트를 실행하기 위한 기능을 제공한..
대용량 또는 사용자의 잦은 요청이있는 컨텐츠를 Cache 서버에 분산 배치하여, 컨텐츠의 전송 중 발생하는 트래픽 집중과 병목현상 및 데이터 손실을 해결하기 위해 등장한 컨텐츠 전송 기술이다. 작동원리 -웹 브라우저가 실행되는 PC나 모바일 기기의 사용자 에이전트가 특정 주소에 접근하여 HTML,이미지,CSS,JS파일 등 렌더링하는데 필요한 컨텐츠를 서버로부터 요청합니다. DNS는 컨텐츠에 대한 각 요청이 발생하면, End User와 가장 가까운 위치에 최적으로 배치된 CDN서버에 End User가 매핑되고 해당 서버는 요청된 파일의 캐싱된 버전을 응답한다. 서버가 파일을 찾는데 실패하는 경우, CDN 플랫폼의 다른 서버에서 컨텐츠를 찾은 다음 End User에게 응답합니다. 향후 요청에 응답할 수 있도..
기존 날짜 APi의 문제점 날짜를 의미하는 Date라는 클래스는 이름과 달리 특정 시점을 날짜가 아닌 밀리초단위로 표현한다. 1) 불볍 객체가 아니다. 불변 객체의장점인 스레드 안정성, 여러객체에서 안전한 공유가 아니라, 가변 클래스이다. 그래서 setter메서드가 존재하여, 객체 공유시에 부작용이 생길 수 있다. 2) 0부터 시작하는 월 지정 인덱스 Date클래스는 1월을 0으로 표현한다. 이는 실수를 유발하게 된다. Date.getDay()메서드로 요일을 가져오면, 0부터 시작하고 Calendar를 통해 가져오면 일요일이 1로 시작한다. 둘 사이에도 일관성이 없다. 3) 확장성 문제 Date는 JVM의 기본 시간대인 (CET)를 사용한다. 또한 Date클래스가 자체적으로 시간대 정보를 알고 있지도 않..