일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- JavaScript
- Proxy
- Algorithm
- 백준
- 자료구조
- spring webflux
- 알고리즘
- 운영체제
- C
- Data Structure
- MySQL
- Java
- IT
- 파이썬
- MSA
- JPA
- Galera Cluster
- 자바
- 디자인 패턴
- 컴퓨터구조
- mongoDB
- OS
- Spring
- 네트워크
- design pattern
- react
- redis
- Heap
- Kafka
- Today
- Total
목록Java, Spring (75)
시냅스

참조 유형 자바에서는 명시적으로 메모리를 해제할 수 없습니다. 그러한 일들은 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은 오류 검출에만 사용되며 데이터의 정확성을 보장하지는 않는다. 다음과 같이 동작합니다. 송신할 메시지와 공유 비밀키를..

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 에 선언한다..

Spring 과 Ulimit tomcat 에서는 별도의 설정이 없다면 max connection 은 10,000개 max thread는 200개로 설정됩니다. 네트워크 장애가 발생될 떄 was의 현황에 대해서 가장 먼저 살펴보며 connection pool 에 문제가 없고 computing power (CPU, Memory 등)에도 문제가 없다면 무엇을 가장 의심해야 할까요? File Descriptor https://liltdevs.tistory.com/70 C언어 fd : 파일 디스크립터 (File Descriptor) 파일 디스크립터 (File Descriptor) Unix OS에서 모든 것은 파일로 관리되는데 이러한 파일에 접근할 때 파일 디스크립터 라는 개념을 이용한다. 파일은 일반적인 정규 파..

JVM -Xmx, -Xms option java -Xms2048m -Xmx2048m -jar app.jar Xmx 와 Xms 는 사용할 최대, 최초 힙 크기를 지정하는 데 사용됩니다. Xmx Java 프로세스에서 사용 가능한 최대 힙 크기 설정 설정하지 않으면 기본적으로 시스템 물리적 메모리 크기에 따라 결정 Xms Java 프로세스에서 사용 가능한 최초 힙 크기를 설정 설정하지 않으면 Xmx 와 동일하게 설정 Xmx 와 Xms 는 왜 지정해야 할까? JVM은 메모리가 부족하게 되면 OS에 메모리를 추가 요청하는 방식으로 힙 사이즈를 조정합니다. 이때 GC 가 발생하게 되고, JVM은 필요한 만큼 힙사이즈를 늘려가게 됩니다. 이렇게 조정하다가 만약 머신의 물리 메모리 사이즈를 넘어가게 되면 가상 메모리를..

GUID GUID 는 Globally Unique Identifier 의 약자입니다. 특정한 난수를 사용하며 유일성을 보장하기 위해 임의로 생성됩니다. 많은 곳에서 사용되고 있지만 오늘은 Network 통신을 하며 사용되는 사례를 살펴볼까 합니다. GUID 혹은 UUID 는 중복 요청을 방지하는 데 사용될 수 있습니다. 클라이언트가 서버로 어떤 request 를 보낼 때 혹은 서버에서 서버로 보낼 때 고유한 식별자를 사용해서 해당 request가 중복된 요청인지 여부를 판가름 할 수 있습니다. 따라서 같은 요청을 100번 보내도, 서버에서는 1번만 처리하게 되는 것입니다. 어떨 때 사용할까? 앞서 timeout 에 대해 알고 계시면 더욱 읽기 수월합니다. https://liltdevs.tistory.co..

Connection timeout handshake 시도 중 서버로부터 응답이 없어서 연결 시간이 초과됨 서버와의 handshake 과정에서 연결이 성립되지 않은 경우라고 볼 수 있다. @Test void ConnectionTimeOut() throws IOException { Socket socket = new Socket(); SocketAddress unavailableHost = new InetSocketAddress("3.3.3.3", 99); socket.connect(unavailableHost, (int) Duration.ofMillis(1000).toSeconds()); } 1초 동안 연결을 시도하고, 연결이 되지 않는다면 위와 같이 Connection timeout 에러를 확일할 수 있..