스토리지 시스템 1. DAS (Direct-Attached Storage) DAS는 컴퓨터에 직접 연결되어 있는 저장 장치를 의미합니다. Direct Attached라는 뜻 그대로 장치에 스토리지를 붙인 형태입니다. 단일 컴퓨터를 위한 저장소 개념입니다. DAS의 예시로는 SSD, HDD, CD, USB 드라이브 등이 있습니다만, 그렇다고 단일 PC 사용자를 위한 스토리지 시스템 개념은 아닙니다. 기업용으로도 사용되는 구성입니다. 예를 들어 서버 장비에 스토리지를 직접 붙이는 것도 DAS로 볼 수 있고 이런 경우 해당 서버의 서비스를 사용하는 사용자들에게 모두 영향을 줍니다. DAS는 네트워크가 필요하지 않아 네트워크 지연 시간과는 무관하게 사용할 수 있습니다. 2. NAS (Network-Attache..
RMI 자바 언어에서 RMI(Remote Method Invocation)는 약자가 가진 뜻대로 원격으로 메소드를 호출하는 기술입니다. 쉽게 말해, 한 JVM에서 실행 중인 객체가 다른 JVM에 있는 객체를 마치 로컬에서 호출하듯이 실행할 수 있게 합니다. 때문에 분산 애플리케이션 개발에 활용할 수 있습니다. java.rmi 패키지에서 사용합니다. RMI 사용 이유 RMI는 객체가 분산되어 있을지라도 객체 지향적으로 개발을 구현할 수 있게 만듭니다. A 서버에서 구동 중인 JVM이 B 서버의 JVM 객체를 호출해서 쓸 수 있으니 객체 지향을 원격 장비 간 구현할 수 있는 것입니다. 이 과정은 네트워크 작업을 수반하지만 RMI는 개발자가 네트워크 상세 구현에 신경 쓰지 않아도 기능을 쓸 수 있게 만듭니다...
AWS에는 클라우드로 서버를 구성하기 위해 필요한 컴퓨팅, DB, 스토리지, 로드밸런서 등 거의 대부분의 것이 있습니다. 각 역할을 하는 구성 요소별로 AWS에서 부르는 명칭이 있는데, EC2는 서버의 핵심인 컴퓨팅 용량을 제공하는 서비스입니다. EC2에 대해 한 가지 특이사항이 있다면, EC2는 사설 IP를 가질 수 있다는 겁니다. AWS로 구축한 서버는 인터넷을 통해 어디서든 접근 가능한 이미지가 있지만, 회사에 물리적으로 구축하는 사내 네트워크와 마찬가지로 AWS에도 사설 네트워크 개념이 있습니다. 가상의 네트워크 안에서 인스턴스에 사설 IP를 부여하고 사용하는 것입니다. EC2의 주요 기능으로는 인스턴스 생성, AMI, 키 페어, EBS 등이 있습니다. 인스턴스 : AWS 클라우드로 생성한 가상 ..
자바에서 ibatis.exceptions.toomanyresultsexception 에러는 iBatis에서 쿼리 실행 결과로 예상한 것보다 더 많은 결과가 반환될 때 발생합니다. 데이터베이스와 객체를 매핑해 주는 iBatis가 쿼리의 결과로 한 개가 나오길 기대하는 상황에서 여러 개의 결과가 반환되었을 때 해당 에러가 발생합니다. 예를 들어, 아래의 쿼리를 했을 때 department_id가 1인 직원은 한 명이어야 하는데, 2개 이상의 행이 출력되면 ibatis.exceptions.toomanyresultsexception 에러가 발생합니다. SELECT * FROM employees WHERE department_id = 1; 해결을 위해서는 먼저 실제로 결과 값이 두 개가 나오는지 데이터베이스에서 ..
DR 서버란? DR(Disaster Recovery) 서버는 운영 중인 서버에 문제가 생겼을 때 이를 대체하여 서비스를 문제없이 수행하기 위해 대기하는 서버입니다. 보험으로 구성해 놓고 유사시 사용하기 위함입니다. 사용자 규모가 어느 정도 큰 곳들은 대부분 DR 서버를 갖추어 놓습니다. Active-Standby 이중화 구성을 떠올리면 이해가 쉽습니다. 평소엔 서비스되지 않고 대기하다가 Active 서버가 작동하지 않을 때 서비스되는 Standby 서버가 일종의 DR 서버입니다. 장애 발생 시 기존의 운영 서버와 동일하게 서비스되기 위해서는 평소 Active 서버와 데이터를 동기화해야 합니다. 이를 위해 DR 서버는 운영 서버로부터 실시간 또는 주기적으로 데이터를 복제받아 최신 상태를 유지합니다. 서비스..
NGINX에서 개별 Worker Process당 Worker Connection을 수행할 수 있습니다. 쉽게 말해 Worker Process는 CPU core이고, Worker Connection은 하나의 코어가 처리할 수 있는 연결 개수를 의미합니다. NGINX Connection NGINX는 기본적으로 하나의 Worker Process당 1024개의 커넥션을 처리합니다. 예를 들어, Worker Process가 2면 2048개의 커넥션을 처리할 수 있고, 3이면 3072개, 4이면 4096개를 처리합니다. 즉, 커넥션이 부족한 상황이라면 worker connections 또는 worker Process를 늘려줘야 합니다. worker_connections worker process에서 열 수 있는 최..
자바에서 no in java.library.path는 자바 코드를 실행하기 위해 컴퓨터에 있어야 할 라이브러리를 찾지 못했다는 에러입니다. 여기서 라이브러리란 주로 리눅스는 .so 파일, 윈도우는 .dll 파일을 의미합니다. 자바가 사용할 라이브러리 경로를 잡아주면 대부분 문제는 해결됩니다. java.library.path를 지정하는 방법은 자바를 실행할 때 경로를 지정해주거나, 시스템의 환경변수에 넣는 것입니다. java.library.path 명령행 옵션 사용 -D 옵션을 사용합니다. java -Djava.library.path=/path/to/libs 실행클래스명 환경변수 사용 환경변수는 윈도우와 리눅스에서 다르게 작동합니다. 윈도우의 경우 별도로 라이브러리 환경변수를 잡지 않아도 알아서 잘 찾습니..
일반적으로 웹 애플리케이션의 자바(Java) 소스 또는 xml 등의 설정을 수정하는 경우 웹 애플리케이션 서버(WAS)를 재기동해야 수정 내용이 반영됩니다. 그러나 JSP 파일은 서버 재기동 없이도 수정이 반영됩니다. html 소스를 수정하는 게 재기동 없이 반영되는 건 이해가 되는데, 컴파일이 필요한 자바 소스를 수정하는데 어떻게 즉시 반영이 가능한 걸까요? JSP 수정 즉시 반영 이유 JSP(Java Server Pages)와 일반 자바 코드(class 파일) 간 차이를 이해하려면 JSP의 작동 원리를 알아야 합니다. JSP 파일은 요청 시에 웹 애플리케이션 서버에서 자바 코드로 변환되고(컴파일) 실행됩니다. 웹 애플리케이션 서버는 JSP 파일에 변동이 감지되면 자동으로 이 파일을 재컴파일합니다. 때..
스프링 프레임워크(Spring Framework)는 자바(Java) 개발에 가장 많이 사용되는 오픈 소스 프레임워크입니다. 스프링은 웹 개발에 특화된 여러 기능을 제공하는데요. 그중에서 가장 중요한 개념 중 하나인 빈(Bean)과 핸들러(Handler)라는 개념을 이해해 보겠습니다. 이 개념을 이해하면 소스 코드에 붙은 @RestController, @RequestMapping 같은 어노테이션의 의미를 보다 정확히 이해할 수 있습니다. 빈(Bean)과 핸들러(Handler) 빈 (Bean)은 IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체를 말합니다. 말이 좀 어렵긴 하지만 애플리케이션의 비즈니스 로직을 담당하는 서비스 클래스, 데이터를 처리하는 DAO 클래스, 컨트롤러 같은..
자바(Java) 패키지 구성을 보면 ***Impl.class 형태의 파일들을 볼 수 있습니다. 예를 들어, DatabaseService.class가 있으면 DatabaseServiceImpl.class 같은 클래스 파일도 함께 있는 식입니다. implementation Impl은 구현(implementation)의 줄임 표현으로, 종종 자바 클래스 이름의 일부로 사용됩니다. 주로 인터페이스를 구현하는 클래스를 만들 때 이런 방식으로 클래스 이름을 만듭니다. 예를 들어, List라는 인터페이스가 있을 때, 이를 구현하는 클래스는 ListImpl이라는 이름으로 생성해서 사용합니다. Impl이라고 표시함으로써 인터페이스를 구현을 위한 클래스라는 걸 명확히 보여줍니다. 물론 네이밍 방식은 정해진 게 없으니 Im..