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

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 에러를 확일할 수 있..

Thread Dump thread dump 를 활용하는 상황은 여러가지가 있을 수 있습니다. JVM이 정상적으로 작동하는데 애플리케이션이 비정상적으로 느리다거나, 액티브 트랜잭션이 쌓이기만 하는데 메모리나 CPU가 이상현상이 없다거나, 정상 작동하면서 특정 환경에서는 TCP 에러가 발생한다거나 하는 등의 상황이 될 것입니다. 이전에 살펴보았던 Heap Dump 에서도 눈으로 확인하는 것이 중요하다는 것을 배웠습니다. 이번에는 Thread Dump 를 통해서 Thread 상태에 대해 확인하는 방법을 배워보겠습니다. https://liltdevs.tistory.com/167 JMX 와 VisualVM 그리고 Heap dump 분석하기 JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링..

자바 직렬화 (Java Serialization) 자바 객체를 바이트 스트림으로 변환하여 파일이나 네트워크 상에서 전송 가능하도록 만드는 것 자바 객체는 주소 값을 가지고 있고 이는 프로세스가 새로 실행될 때 마다 변하는 값이다. 프로세스를 새로 실행했을 때 해당 객체에 대한 주소가 같을 거라는 보장이 없다. 따라서 객체(혹은 레퍼런스 타입)에 대한 데이터를 외부에 저장하고 싶다면 직렬화가 필요하다. 직렬화된 객체는 다시 역직렬화(Deserialization)하여 객체로 변환될 수 있다. 역직렬화를 할 때에는 몇가지 조건이 필요하다. 직렬화 대상의 클래스가 class path 에 존재하며 import 되어 있어야 한다. 동일한 버전 (serialVersionId) 를 유지해야 한다. 만약 serialVe..