일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- c언어
- redis
- 알고리즘
- Heap
- design pattern
- JavaScript
- Spring
- 디자인 패턴
- JPA
- MySQL
- MSA
- 운영체제
- Algorithm
- 컴퓨터구조
- 자바
- mongoDB
- spring webflux
- Proxy
- 파이썬
- Kafka
- C
- react
- 자료구조
- OS
- IT
- Galera Cluster
- Data Structure
- 네트워크
- Java
- Today
- Total
목록분류 전체보기 (214)
시냅스
Java에서 HTTP 요청을 보내는데 사용되는 대표적인 라이브러리로는 RestTemplate, HttpClient 등이 있습니다. 이 글에서는 이러한 라이브러리를 사용하지 않고 Java의 기본 소켓을 이용하여 직접 HTTP 요청을 구현해보겠습니다. (HTTP 는 그냥 String 덩어리입니다!) 아래에서 코드로 살펴보겠습니다. GET 요청 public static void simpleGetRequest() { try { Socket socket = new Socket(host, port); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStream..
https://liltdevs.tistory.com/100 입출력 시스템, I/O System 입출력 시스템, I/O System Web, File 수정, Youtube 시청, game 등 컴퓨터는 입출력 작업을 주로 한다. PCI 버스로 모든 Device 와 연결한다. 메모리 맵드 입출력 Memory-mapped I/O 모든 컨트롤러는 레지스터(제어 liltdevs.tistory.com 위의 글을 참고하시면 도움이 될 수 있습니다. Java NIO 는 기존 IO 가 갖고 있는 문제점들을 해결하기에 나온 패키지입니다. 기존 IO 에서의 불필요한 과정이나, Thread block 을 해결하기 위함입니다. 아래에서 기존 IO 의 동작 원리를 살펴보며 어떤 것을 해결하였는지 알아보겠습니다. Java IO 동작..
https://liltdevs.tistory.com/128 Blocking vs Non-blocking , Synchronous vs Asynchronous Blocking 요청한 작업을 마칠 때까지 계속 대기한다. return 값을 받아야 끝난다. 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만드는 것 e.g. liltdevs.tistory.com https://liltdevs.tistory.com/130 옵저버 패턴 Java로 구현 옵저버 패턴 Observer Pattern 객체 사이에 일대다의 의존 관계가 있고, 어떤 객체의 상태변하게 되면 그 객체에 의존성을 가진 다른 객체들이 변화의 통지(notify or update)를 받고 자동으로 갱신될 수..
Connection Pool https://liltdevs.tistory.com/136 Java 커넥션 풀과 데이터 소스 커넥션 풀, Connection Pool 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다. 커넥션을 liltdevs.tistory.com Connection pool 은 데이터베이스와의 연결을 효율적으로 관리하기 위한 기술입니다. 미리 생성된 일정 개수의 데이터베이스 커넥션을 재사용하여 데이터베이스에 대한 연결 및 해제에 소요되는 시간과 리소스를 절약하여 전체 성능을 향상시킬 수 있습니다. Hikari CP HikariCP 는 SpringBoot 2.0 이후부..
무소유란 아무것도 갖지 않는다는 것이 아니라 불필요한 것을 갖지 않는다는 것이다. 비우지 못하면 채우지 못한다던, 시대의 존경을 받았던 법정스님의 말씀이셨습니다. 미련한 중생은 비우는 것에 미련이 남아 OOME 를 발생시켰고 해탈하지 못해 VisualVM 을 통해 꼭 눈으로 확인하였으며 원인을 찾아 성불하게 되는 디지털 서유기입니다... 제어하지 않으면 짐승과도 같습니다. 손오공의 이야기이지만 GC 또한 마찬가지 입니다. 이 괴물같은 녀석은 자기 마음대로 지웠다가 없앴다가 하기 때문입니다... 그러니 아래와 같은 기준을 명확히 해야할 것입니다. https://liltdevs.tistory.com/182 Java 참조 유형 과 GC (strong, soft, weak, phantom reference) 참..
Java 로 구현하는 In-Memory Cache 캐시는 성능을 위해 매우 중요한 장치입니다. 디스크보다 빠른 접근시간을 가지며, 일시적으로 어떤 값을 저장/접근하기에 용이합니다. 자바에서 연산을 하는 것 또한 메모리 위에서 이뤄지는 것이므로, 애플리케이션에 사용할 캐시를 직접 만들어 볼 수 있겠습니다. (이를테면 Caffeine 같은 라이브러리를 저희가 만드는 것입니다!) 이를 위해 자바의 참조 유형과 캐시에 대해서 알고 계시면 진행이 수월할 것입니다. https://liltdevs.tistory.com/182 Java 참조 유형 과 GC (strong, soft, weak, phantom reference) 참조 유형 자바에서는 명시적으로 메모리를 해제할 수 없습니다. 그러한 일들은 GC 가 대리 수..
참조 유형 자바에서는 명시적으로 메모리를 해제할 수 없습니다. 그러한 일들은 GC 가 대리 수행하고 있는데요. https://liltdevs.tistory.com/161 Java 가비지 컬렉션 Garbate Collection 정리 GC stop the world GC를 실행하기 위해 JVM이 애플리케이션의 실행을 멈춤 gc를 실행하는 쓰레드를 제외한 나머지 쓰레드는 작업을 멈춤 어떤 GC 알고리즘을 사용하더라도 꼭 발생 대개의 GC 튜닝은 이 liltdevs.tistory.com 어떠한 객체가 gc 의 대상이 되려면 스택 영역에서 참조하지 않아야 합니다. gc 가 메모리를 관리를 대신해준다는 편의성과는 반대로 개발자가 메모리를 해제하고 싶을 때에도 해제할 수 없게 됩니다. 개발자는 이를 위해 아래에서 ..
Parallel Stream Stream api 의 일종 컬렉션, 배열, 파일 등의 데이터 소스를 처리할 수 있다. 스트림을 병렬 처리하여 처리 속도를 높이는 효과가 있다. 내부적으로 배열을 가지고 있고, 배열을 쪼개어 각 스레드가 처리하게 된다. 요소들이 여러 개의 스레드에 분산되어 병렬 처리된다. 분할 정복과 비슷하다. 이때 stream api 에서는 스레드 풀을 사용하여 스레드의 생성 및 관리를 담당한다. 내부적으로 fork/join 프레임 워크를 사용하여 요소들을 분할하고 각각의 스레드에서 병렬 처리한다. 각각의 작업은 스레드 풀의 작업 큐에 추가되고 스레드 풀은 작업 큐에서 작업을 가져와 스레드에 할당한다 // Parallel Stream을 사용한 합계 계산 int sumParallel = Ar..
System.out.println() System 에서 out 은 static 변수로 PrintStream 클래스로 할당됩니다. out 은 jvm 이 시작될 때 intializeSystemclass 함수를 사용하여 jvm 의 standard outputstream(os 로 부터 받은 standard output 을 PrintStream 으로 구현한 것) 으로부터 생성되어 할당됩니다. 고로, 우리는 PreamStream.println() 을 사용하고 있는 것이 됩니다. 혹시 initializeSystemclass() 함수가 궁금하다면 더보기를 참고해주세요... 더보기 private static void initializeSystemClass() { props = new Properties(); initPr..
HMAC, Hash-based Message Authentication Code HMAC 은 메시지 인증 코드 (message authentication code) 를 생성하기 위한 알고리즘입니다. 송신자와 수신자만이 알고있는 secret key 값을 가지고 해싱하여 요청을 신뢰할 수 있는지 판단합니다. checksum 의 아이디어에서 기인합니다. checksum 송신자는 데이터를 송신하면서 데이터의 일부분 혹은 전체의 합 또는 XOR 등의 연산으로 데이터와 함께 전송 수신자는 데이터를 받아 checksum 을 다시 계산하여 송신측에서 보낸 값과 일치하는지 확인한다. 다만 checksum은 오류 검출에만 사용되며 데이터의 정확성을 보장하지는 않는다. 다음과 같이 동작합니다. 송신할 메시지와 공유 비밀키를..