| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Heap
- 운영체제
- 네트워크
- Galera Cluster
- 백준
- 알고리즘
- MSA
- Data Structure
- OS
- spring webflux
- Algorithm
- 자료구조
- redis
- JPA
- c언어
- JavaScript
- IT
- Kafka
- mongoDB
- react
- 컴퓨터구조
- design pattern
- 자바
- Spring
- 디자인 패턴
- C
- MySQL
- 파이썬
- Proxy
- Java
- Today
- Total
목록분류 전체보기 (211)
시냅스
InnoDB Locking MySQL 의 InnoDB 에서 사용하는 Locking 기법 Shared Lock, S-Lock 특정 레코드를 읽을 때 사용되는 Lock Shared Lock 끼리는 동시 접근이 가능하다. 하나의 레코드를 여러 트랜잭션이 동시에 읽을 수 있다. 어떤 자원에 Shared Lock 이 하나라도 걸려있으면 Exclusive Lock을 걸 수 없다. 동시에 읽기는 가능하지만, 변경은 불가능하게 한다. e.g. SELECT ... FOR SHARE Exclusive Lock, X-Lock 변경(write) 작업을 할 때 사용되는 lock 이다. Exclusive Lock 이 걸린 레코드에는 다른 트랜잭션에서 변경이나 삭제가 불가능하다. 특정 레코드에 Exclusive Lock 이 걸려있..
Spring MVC Spring MVC 는 웹 애플리케이션 개발을 쉽게하기 위해 지원하는 모듈입니다. Model-View-Controller 패턴을 기반으로 FrontController 패턴을 구현한 DispatcherServlet 을 활용하며 매번 Servlet 을 생성하거나 소멸시켜도 되지 않게 합니다. 흔히 Spring 이라고 하면, Spring MVC 를 떠올리게 되는 경우가 많습니다. Spring 은 전체적인 프레임워크 자체를 말하고, Spring MVC 는 웹 애플리케이션을 위한 모듈이라고 지칭하는 것이 옳은 표현일 것입니다. 그렇다면 Spring MVC 의 정체성을 결정하는 것에는 무엇이 있을까요? 구성요소 DispatcherServlet 모든 클라이언트의 요청을 받아 적절한 컨트롤러로 분배..
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..