본문 바로가기

전체 글

(49)
[Java] 멀티스레드와 동시성 CPU 코어 실제로 스레드를 동작시키는 주체입니다. 이 CPU 코어는 정말 빨라서 여러 스레드를 번갈아가며 실행시켜도 사람이 느끼기에는 동시에 스레드가 동작하고 있다고 착각할 정도로 빠릅니다.이때 실제로 동시에 실행시키진 않지만 동시에 실행시키는 것 처럼 느끼게 하는것이 병렬성입니다.이와 반대로 실제 다수의 CPU 코어로 동시에 스레드를 동작시키는것은 동시성입니다. CPU 스케줄링운영체제는 내부에 스케줄링 큐라는것을 가지고있습니다. 이 스케줄링 큐안에 스레드가 들어가 대기하고 있으면 CPU 코어가 스케줄링 큐안에 들어있는 스레드를 가져다가 동작시키는 원리입니다. Context Switching병렬성을 설명할 때, 여러 스레드를 하나의 코어에서 번갈아가며 실행시킨다고 했습니다. 이때 CPU 코어가 스레드를..
[Java] 자바의 Compiler Compiled 언어 vs Interpreted 언어우리가 작성한 코드가 실행이 되기 위해선 각 Target OS 에 맞는 기계어로 번역이 되야합니다. 컴파일 언어는 모든 코드를 한번에 기계어로 바꾸는 언어이고,인터프리터 언어는 프로그램을 실행하는 도중 코드를 줄별로 변환하여 실행하는 언어입니다. 그럼 장단점이 명확해집니다.Compile : 프로그램을 빌드하는 시간이 오래걸리는 대신 모두 기계어로 변환되어 있기 때문에 실행속도는 상대적으로 빠릅니다.하지만 코드가 조금만 변경된다면 전체를 재 빌드해야합니다.Interprete : 프로그램을 빌드하는 시간이 짧은대신 실제 프로그램이 실행할 때 상대적으로 느립니다.하지만 코드가 수정되었을 때 전체를 빌드할 필요가 없습니다.또한 Byte Code 와 Machin..
[Infra] Docker Network 개념 Docker Network각자만의 격리된 network 공간을 할당받은 Container 끼리 통신을 주고받기 위해 만들어진 개념docker0docker Host를 설치하고, "ifconfig" 를 통해 network interface 를 확인하면 docker0를 확인할 수 있다.이 interface는 docker 내부 로직에 의해 자동으로 할당받는 가상의 이더넷 브릿지이다. 가상이더넷 브릿지가 뭐고 왜 생겨난것일까 ?각각의 컨테이너는 격리된 네트워크 공간을 할당받는다. 그럼 컨테이너가 외부와의 통신을 하려면 외부와 연결되어 있는 무언가의 도움이 필요한데, 이를 가상이더넷 브릿지가 관리하게 된다.위의 그림처럼 가상이더넷 브릿지는 각각의 컨테이너마다 가상 네트워크 인터페이스을 만들어 컨테이너의 네트워크 인..
[Spring] UnknownNamedQueryException 빌드를 하던중 다음과 같은 로그를 마주했는데요. 2024-01-03 14:43:12 [main] DEBUG o.s.d.j.repository.query.NamedQuery - Did not find named query ServiceType.findByNameEquals 2024-01-03 14:43:12 [main] DEBUG o.s.o.j.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler - Creating new EntityManager for shared EntityManager invocation 2024-01-03 14:43:12 [main] DEBUG o.s.d.j.repository.query.NamedQuery - Looki..
[Spring] Annotation Processor mapstruct processor 를 implementation 을 통해 의존성을 부여하였을 때 다음과 같은 예외가 발생하였습니다.  우선 문서에 나와있는대로 annotationProcessor 를 통해 의존성을 받아오니 정상동작은 하였지만 두 방식의 차이에 대해 알고있어야겠다는 생각이 듭니다.Annotation Processor 정의Annotation Processor 란 컴파일 시 끼어들어 특정 annotation 이 붙어있는 소스코드를 참조하여 추가적인 소스코드를 삽입하는 코드입니다.Annotation Processor 특징컴파일 단계에서 모든 동작을 수행하고, 런타임에는 사용만 하는 것이기 때문에 런타임시 추가적인 리소스가 들지않습니다. 따라서 런타임 예외도 발생시키지 않습니다.다만 프로젝트의 ..
[DataBase] Query 비교 및 개념 SubQuery 와 Join SubQuery 가 일으킬 수 있는 문제들 SubQuery는 테이블과 같은 형태의 결과값을 만들어내지만, 실제 데이터는 저장하지않기때문에 성능저하를 야기할 수 있습니다. → SubQuery 를 접근할 때마다 Select 가 실행 SubQuery로 만들어지는 데이터는 테이블과 다르게 데이터를 설명하는 메타 정보를 가지고 있지않습니다. → 옵티마이저가 최적화를 하지 못함 SubQuery 를 꼭 사용해야한다면? MySQL 5.6 이상의 버전은 서브 쿼리가 최적화를 진행하는 조건이 생겼습니다. 그럼에도 위와같은 문제 때문에 비교적 Join 을 사용하는것이 더 좋긴합니다. 하지만 SubQuery 를 꼭 사용해야하는 상황이 있을 수 있기에 최적화가 되는 조건에 대해 알아보겠습니다. IN..
[DataBase] DBCP DBCP 커넥션 풀이란 일정량의 Connection 객체들을 미리 만들어서 pool 에 저장했다가, 클라이언트 요청이 오면 Connection 을 빌려주고, 해당 객체의 임무가 완료되면 다시 반납해서 pool에 저장하는 기법입니다. Hikari CP 동작원리 Connection 요청 이전에 사용했던 Connection 정보가 존재하는지 확인합니다. 이전 사용했던 Connection 목록 중 사용 가능한 Connection 이 있는지 확인 전체 Connection 목록 중 사용 가능한 존재 여부 확인 Connection 반환 만일 사용가능한 Connection 이 없다면 HandOffQueue 를 Polling 하면서 Thread 가 반납할 때까지 기다립니다. (지정한 TimeOut 시간까지 대기하다가 시..
[Network] IPSec VPN 해당 내용은 실제로 NCP, AWS - VPN 연동을 하며 알아야하는 기초지식과 실제 사례를 작성한 글입니다. IPSec 이란IPSec 은 장치간 암호화된 연결을 구성하는데 사용되는 프로토콜 세트입니다.주로 공용네트워크를 통해 전송되는 데이터를 안전하게 보호하는데 도움이 됩니다. (네트워크 계층) IPSec 프로토콜은 표준화된 3계층 터널링 프로토콜로 종종 VPN 을 구성하는 데 사용됩니다.IP 패킷을 암호화하고 해당 데이터의 출처를 인증하는 방식으로 작동합니다. IPSec 의 터널 동작모드Transport Mode : IP Packet에서 Payload 만 보호Turnel Mode : IP Packet 전체를 보호  IPSec 의 구성인증 헤더(AH) :AH 프로토콜은 변조를 방지하는 프로토콜로 해당 ..