일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Algorithm
- Galera Cluster
- design pattern
- 컴퓨터구조
- C
- redis
- 파이썬
- 백준
- spring webflux
- OS
- Data Structure
- Proxy
- c언어
- 디자인 패턴
- 네트워크
- MSA
- react
- MySQL
- 알고리즘
- IT
- JavaScript
- 자바
- Kafka
- Heap
- 운영체제
- mongoDB
- Java
- 자료구조
- JPA
- Spring
- Today
- Total
목록Java (49)
시냅스
HikariCP 설정과 유의사항 maxLifetime 커넥션을 최대 얼마동안 연결 유지 할지에 대한 설정 maxLifetime 에 도달한 커넥션이 사용 중(in-use)이지 않고, 풀에 반납된 상태에서 제거된다. 만약 커넥션이 제거되어 부족한 경우 부족한 커넥션 만큼 새로 생성한다. 이러한 방식은 wait_timeout 에 의해 커넥션이 끊어졌을 경우를 대비한다. 즉 wait_timeout 으로 커넥션이 끊기기를 대비하여 커넥션을 새로 맺는 것 HikariCp 는 네트워크 지연을 고려하여 maxLifetime 을 db의 wait_timeout 설정보다 2 ~ 3초 정도 짧게 줄 것을 권고한다. wait_timeout 이 60초라면 maxLifetime 은 58초가 된다. 만약 maxLifetime 이 w..
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 동작..
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..
CSRF Cross-Site Request Forgery 공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식 사용자가 특정 사이트에 로그인한 상태로 악의적인 웹사이트에 방문하여 로그인한 특정 사이트에 악성 요청을 보내도록 유도 사용자가 인증한 세션에서 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용 쿠키와 같은 정보를 포함하고 있기 때문에 XSS와 비슷하지만 XSS는 세션이 없어도 가능하다. 예시 bank 라는 사이트에서는 타인에게 송금할 때 위와 같은 url을 사용한다. 공격자가 위와 같은 HTML을 사용자에게 전송한다. 위의 폼을 통해 공격자에게 1000000 원을 이체하게 된다. 이때 서버는 인증된 세션값을 올바른지, 올바른지 인식하지 못하므로 송금을 수행하게 된..
JNI C/C++ 등의 네이티브 언어로 작성된 코드와 상호작용할 수 있도록 하는 프로그래밍 인터페이스 JNI를 통해 네이티브 언어와 함수 호출 및 데이터 전달이 가능하게 한다. 메시지 및 자바 객체 하드웨어 제어를 쉽게할 수 있게 한다. DLL 을 사용한다. DLL은 라이브러리에 대한 linking 만 해 두었다가 특정 메모리영역을 할당 받아서 필요한 내용만 loading 한다. 또한 특정 메모리 영역은 프로세스 간에 공유가 가능하다. 바이트 코드와 네이티브 코드를 동일한 바이너리 파일에 혼합할 수 없기 때문에 독립적으로 컴파일 / 실행 (JVM / GCC(or else)) 하고 메시지를 주고 받는다. 사용할 함수를 native 키워드를 통해 선언하고 가져올 DLL 을 static block 에 선언한다..