일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 운영체제
- MSA
- IT
- react
- Kafka
- C
- 백준
- mongoDB
- Data Structure
- Algorithm
- Proxy
- 자료구조
- Galera Cluster
- Spring
- design pattern
- 자바
- c언어
- OS
- 디자인 패턴
- spring webflux
- 알고리즘
- 컴퓨터구조
- MySQL
- JPA
- redis
- Java
- 파이썬
- Heap
- JavaScript
- 네트워크
- Today
- Total
목록분류 전체보기 (214)
시냅스
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..
개발자에게 장애 상황에 대한 판단 및 해결 조치는 매우 중요합니다. 이 글에서는 장애 상황을 판단하는 방법에 대해 알아보고자 합니다. 웹 애플리케이션에서 장애 상황은 크게 2가지로 구분할 수 있습니다. JVM 관련 Network 관련 이번에는 각각을 모니터링 및 테스트 하기 위하여 Visual VM과 nGrinder를 활용하여 보겠습니다. https://liltdevs.tistory.com/167 JMX 와 VisualVM 그리고 Heap dump 분석하기 JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링 관리를 위한 표준 API 이다. 애플리케이션의 상태, 성능 및 리소스 사용 등과 같은 정보를 수집하고 이를 모니터링, 관리 및 제어하는 데 liltdevs.tistory.com..
nGrinder JMeter 와 같은 부하 및 성능 테스트 도구 JMeter 와 차이점은 JMeter 는 단일 데스크톱 컴퓨터에서 수행되는 반면에 nGrinder 는 컨트롤러 및 에이전트로 구성된 분산 아키텍처로 수행된다. nGrinder는 jython 또는 Groovy 같은 스크립트 언어를 사용하여 스크립트를 작성한다. 클라우드 환경에서도 실행 가능하다. Controller 테스트를 생성하고, 실행하고, 테스트 결과를 수집하고 분석한다. 단일 머신에 설치된다. Agent 컨트롤러가 생성한 테스트를 수행하는 실행 환경. 각 에이전트는 분산된 머신 또는 가상 머신에 설치된다. 에이전트가 테스트에 필요한 부하를 생성하고, 데이터를 수집하여 컨트롤러에 전송한다. 설치 https://github.com/nave..