전체 글(207)
-
TRUNCATE VS DELETE VS DROP
TRUNCATE 전체 데이터를 한 번에 삭제하는 방식 최초 생성되었을 당시의 STORAGE만 남기고 데이터가 담겨있던 STORAGE는 RELEASE됨 TRUNCATE 명령어를 실행하면 처음 테이블을 CREATE한 상태와 동일 자동 COMMIT이 되기 때문에 삭제된 데이터는 복구 불가 DELETE WHERE절을 사용하여 테입르에 있는 데이터를 하나하나 석택하여 제거하는 방법 WHERE절을 사용하지 않고 테이블의 모든 데이터를 삭제하더라도 내부적으로는 한줄 한줄 일일이 제거함 처리 속도가 느린 편이고 성능에 좋지 않은 영향을 줄 수 있음 COMMIT 명령어가 실행되기 전이라면 ROLLBACK 명령어를 통해 삭제된 데이터를 복구할 수 있음 데이터를 삭제하더라도 데이터가 담겨있던 STORAGE는 RELEASE ..
2022.11.04 -
MySQL select insert Deadlock
최근 업무 중에 시스템에 아래와 같은 에러 로그가 발생한 것을 보았습니다. java.sql.SQLException: Deadlock found when trying to get lock; try restarting transaction Query: update … 에러 로그가 발생한 쿼리는 아래의 예시와 같은 단순한 update 구문이었습니다. UPDATE `TABLE` SET `column1` = `column1` WHERE `column2` = `column2`운영환경에서 사용하는 DB는 MySQL이었고 모든 설정은 default 설정으로 되어 있었습니다. MySQL에서 deadlock 관련 로그를 확인해보니 에러가 발생한 update 구문의 테이블과 동일한 테이블을 사용하는 SELECT INSERT..
2022.10.20 -
Java 17
switch의 pattern matching Java의 표현력을 향상시키기 위해 아래와 같은 예시로 switch문의 pattern matching 기능을 강화했습니다. static record Human (String name, int age, String profession) {} public String checkObject(Object obj) { return switch (obj) { case Human h -> "Name: %s, age: %s and profession: %s".formatted(h.name(), h.age(), h.profession()); case Circle c -> "This is a circle"; case Shape s -> "It is just a shape"; c..
2022.08.23 -
서버 가상화란
서버 가상화의 개념 서버 가상화는 하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처입니다. 서버는 물리적 시스템으로부터 추상화된 서버 소프트웨어를 통해 물리적 영역을 벗어난 하나의 '가상 시스템'이 됩니다. 게스트 서버는 해당 컴퓨팅 및 메로리 리소스에서 단독으로 실행되고 있다고 스스로 인식하지만, 실제로는 서버 하드웨어의 가상 모방 서버에서 실행됩니다. 서버 가상화의 장점 하드웨어 비용과 공간의 절감 서버 가상화를 이용하면 여러 개로 운영되던 서버를 통합해 관리 포인트를 축소할 수 있습니다. 그리고 장비의 노후화로 인한 파트 교체나 장애 처리에 있어서 훨씬 수월하고 빠른 대응을 할 수 있습니다. 또한, 새로운 서버가 필요할 경우..
2022.07.29 -
String Pool
String의 생성방식 new 연산자를 이용한 방식 new를 통해 String을 생성하면 Heap Memory 영역에 존재하게 됩니다. 리터럴을 이용한 방식 String Pool이라는 영역에 존재하게 됩니다. String Pool의 개념 String Pool이란 Java Heap Memory에 있는 String 데이터 저장소입니다. 위의 그림을 통해 다음과 같은 사실을 알 수 있습니다. 리터럴로 생성한 String 객체는 String Pool에 들어갑니다. 리터럴로 생성한 객체의 값(ex. "Cat")이 이미 String Pool에 존재한다면, 해당 객체는 String Pool의 reference를 참조합니다. new 연산자로 생성한 String 객체는 같은 값이 String Pool에 존재하더라도 별개..
2022.07.22 -
Netty
Netty란 기존의 소켓 프로그래밍은 클라이언트가 접속하게 되면 스레드를 할당해야하는데, 많은 클라이언트가 접속을 하게 될 경우 그 숫자만큼 스레드를 생성해야해서 리소스가 낭비되고 문맥 교환이나 입출력 데이터에 관련한 무한 대기 현상이 발생하는 문제가 있었습니다. 이러한 네트워크 문제를 해결하기 위해 만들어진 방법이 NIO(Non-Blocking Input Output)입니다. 그리고 이러한 NIO 방식으로 동작하는 네트워크 프레임워크가 바로 Netty입니다. Selector는 시스템 이벤트 통지 API를 사용하여 하나의 스레드로 동시에 많은 IO를 담당할 수 있습니다. 즉, 적은 수의 스레드로 더 많은 Connection을 취할 수 있어서 메모리 관리에 이점이 생기고 컨텍스트 스위치에 대한 오버헤드가 ..
2022.05.26