목록Today I Learned (20)
ㅇ.ㅇ
가상화 기술은 현대 IT 환경의 핵심 기술로, 물리적인 컴퓨터 자원을 논리적으로 나누어 사용하거나 새로운 컴퓨팅 환경을 만드는 데 사용된다. 이번에는 가상화 기술이 무엇이고, 왜 필요한지 등에 대해 작성해보려고 한다. 가상화 기술이란?가상화 기술은 물리적으로 존재하지 않는 컴퓨터 환경을 마치 존재하는 것처럼 만들어주는 기술이다.쉽게 말해, 하나의 물리적 컴퓨터에서 여러 대의 가상 컴퓨터를 실행할 수 있는 방법을 제공하는 것이다. 이 기술을 통해 물리적인 자원을 효율적으로 활용하고, 독립적인 운영 환경을 제공할 수 있다. 왜 가상화 기술이 필요할까?하나의 컴퓨터에서 여러 프로그램을 동시에 실행할 때, 안전하고 효과적으로 설치 및 운영하는 방법을 고민해야 한다. 가령 아래의 같은 상황들이 발생할 수 있다..
엔터프라이즈 환경은 대규모 조직에서 사용하는 IT 인프라와 시스템을 의미한다. 그리고 이러한 엔터프라이즈 환경에서는 대규모 서버 운영이 필수적이고, 적합한 서버 운영 방식을 선택하는 건 효율성, 비용, 확장성에 큰 영향을 끼친다. 이번 글에서는 서버 운영 방식 세 가지인 베어메탈, 하이퍼바이저, 그리고 컨테이너 방식에 대해 살펴보도록 하겠다. 1. 베어메탈 방식베어메탈은 물리적인 서버 하드웨어를 직접 사용하여 운영 체제와 애플리케이션을 실행하는 방식이다. 가상화 계층이 없기 때문에 모든 리소스를 애플리케이션에 집중적으로 사용할 수 있다.1) 특징직접 실행 : 서버 하드웨어 위에 바로 운영 체제가 설치된다고성능 : 가상화로 인한 성능 손실이 없다제한된 유연성 : 특정 서버에 애플리케이션이 종속될 가능성이..
최근에 BiFunction을 사용해 볼 기회가 있었는데 관련 내용을 좀 더 찾아보다가 ToIntBiFunction과 함께 비교해보면 좋을 것 같아 이렇게 정리를 해보려고 한다. 우선 두 인터페이스는 둘 다 Java의 함수형 인터페이스로서, 두 개의 입력 값을 받아 하나의 출력 값을 반환하는 기능을 한다. 가장 큰 차이점은 반환값의 타입이 다르다는 점이다.1. BiFunction다양한 결과를 반환할 수 있는 다목적 함수형 인터페이스BiFunction는 두 개의 입력 값(T, U)을 받아 원하는 타입(R)의 결과를 반환한다.R 타입은 제한이 없기 때문에, 문자열, 숫자, 객체 등 무엇이든 반환할 수 있다.// 메서드 시그니처R apply(T t, U u);// 예시: 두 숫자를 문자열로 합치는 작업BiFun..
회사에서 작업하던 MyBatis 쿼리에서 처음 보는 형식의 쿼리를 발견했다. 내용을 살펴보니 JSON 연산자와 관련된 부분이었다. 현재 회사 DB에서는 리소스의 세부 속성들을 props라는 컬럼에 JSON 형태로 그대로 저장하고 있었고, 이 JSON 데이터를 추출하는 데 이 연산자가 사용되고 있었다. 이번 기회에 JSON 데이터를 다루는 필요성과 함께 PostgreSQL과 Oracle의 JSON 처리 방식을 정리해 보려고 한다. 1. JSON 데이터 처리의 필요성 JSON은 현대 애플리케이션에서 데이터 교환과 저장에 널리 사용되는 포맷이다. 유연한 구조와 가독성 덕분에 REST API, 웹 애플리케이션, 데이터베이스 등 다양한 환경에서 중요한 역할을 한다. PostgreSQL과 Oracle은 JSON ..
소스 코드를 짤 때, 하나 둘 import를 하게되면 어느순간 자동으로 wildcard(*)로 변환된다. 나는 이제껏 그게 당연하거라고 생각했는데 사실 이렇게 사용했을 시 야기되는 문제들이 있다. 와일드카드(*) 임포트의 문제점import java.util.*;와 같은 와일드카드 임포트는 java.util 패키지에 있는 모든 클래스를 임포트하겠다는 의미이다. 이 방식은 코드의 간결함 때문에 많이 사용되지만, 몇 가지 문제가 있다.가독성 저하어떤 클래스가 실제로 사용되고 있는지 명확하지 않다. 예를 들어, java.util에는 List, Map, Set 등 많은 클래스가 있는데, 코드에서 어떤 클래스를 사용하는지 한눈에 알기 어려워진다. 이로 인해 협업이나 유지보수 시 불편함이 생길 수 있다. 개발 컨벤..
이번에 천천히 TDD 공부를 해보면서 사용해봤던 테스트 관련 어노테이션을 정리해보려고 한다. 이렇게라도 한번 적지 않으면 그냥 계속 사용방법만 아는채로 사용하기 때문이다. 1. @TestJUnit5의 기본 테스트 메서드 어노테이션해당 메서드가 테스트 메서드임을 명시한다.메서드의 반환 타입이 void여야 하고, 파라미터를 받지 않는다.@Testvoid testAddition() { int result = Calculator.add(1, 2); assertEquals(3, result);} 2. @DisplayName테스트 메서드의 이름을 설명하는 어노테이션테스트를 더 직관적으로 이해할 수 있도록 이름을 지정할 수 있다.IDE에서 표시되는 이름으로, 한글이나 특수문자 사용도 가능하다.@Tes..
Utils는 아는만큼 더 빠르고 간편하게 코드를 작성할 수 있는 것 같다. 하나하나 일일이 찾아보지는 못하니까 우연히 알게되면 나중에 사용할 수 있도록 정리를 해보려고 한다. 오늘의 주인공은 FilenameUtils이다. 개념우선 FilenameUtils가 들어있는 Apache Commons IO는, 자바 언어를 위한 오픈소스 라이브러리로 다양한 기능을 제공한다. 이 라이브러리를 사용하면 파일 및 디렉토리 관리 작업을 더욱 쉽게 처리할 수 있으며, 그 때문에 다양한 자바 프로젝트에서 많이 사용되고 있다. FilenameUtils 클래스는 파일 경로, 파일명, 확장자 등을 다루기 위한 여러 유틸리티 메서드를 제공한다. 특히 Windows에서는 \를, Unix 계열 시스템에서는 /를 경로 구분자로 사용하는..
의문자바에서 말하는 Utility Class가 무엇일까? 뭔가 디렉토리상에도 자주 보이고, 가끔 내가 사용하기도 하지만 구체적으로 어떤 역할을 하는지, 어떤 형식을 가지는지 잘 몰랐기 때문에 정리해보려고 한다.답(1) 유틸리티 클래스란?인스턴스 메서드와 인스턴스 변수를 제공하지 않고, 매개 변수에 대해 작업을 수행하는 정적 메서드와 변수만을 제공하는 클래스Static 클래스, Stateless로 사용, 멀티스레드 환경에서 thread-safe대부분 final로 선언되어 상속될 수 없고, 생성자는 private으로 선언되어 초기화 가능성을 막는다(2) 유틸리티 클래스 사용 시 문제점강한 결합유틸클래스를 사용하는 클래스는 유틸클래스에 강한 의존성을 갖게 된다. 추상화 진행이 없으므로 유틸클래스 변화는 해당 ..
상황이번에 다른 피처 브랜치에서 개발한 기능을 현재 최신 브랜치에 병합하는 작업을 해야한다. 어떻게 해야할지 생각을 해보다가 책임님께서 merge와 rebase, cherry-pick을 힌트로 주셔서 실행으로 옮기기 전에 개념을 정리해보려고 한다. 뭔가 익숙하지만 확실히 알고있는게 없었다.Cherry-pick 이란?다른 브랜치에 있는 커밋을 선택해서 내 브랜치에 적용할 때 사용하는 명령어커밋 자체를 옮기는게 아니고 같은 내용을 가지고 있는 커밋을 하나 더 생성하는 것이므로 전체 히스토리를 보았을때는 커밋이 늘어나는 것이다. 그러므로 꼭 필요할 때만 사용할 것!// 체리픽 명령어git cherry-pick // 여러 커밋을 한꺼번에 하고싶을 때git cherry-pick // 연속적인 커밋일 경우 (..
HashSetSet자바의 인터페이스의 한 종류 (ADT = abstract data type = 인터페이스)그 인터페이스를 구현한 class = data structure (자료구조)중복을 허용하지 않는다순서를 보장하지 않는다method = add, contains, delete 등Set 종류(1) hashSet - 순서를 보장하지 않는다(2) sortedSet - 순서를 보장한다Hash Set 구현 방법HashSet의 구현은 HashMap을 활용해서 구현이 되어 있다Hash Mapkey : valuekey는 중복이 되지 않는다그러므로 HashSet은 HashMap의 Key부분을 활용한다.참고 : https://www.youtube.com/watch?v=1Hxm6f33VbY