패러다임 불일치란? 애플리케이션은 발전하면서 그 내부의 복잡성도 점점 커진다. 지속 가능한 애플리케이션을 개발하는 일은 끊임없이 증가하는 복잡성과의 싸움이다. 복잡성을 제어하지 못하면 결국 유지보수하기 어려운 애플리케이션이 된다. 객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다. 비즈니스 요구사항을 정의한 도메인 모델도 객체로 모델링하면 객체지향 언어가 가진 장점들을 활용할 수 있다. 문제는 이렇게 정의한 도메인 모델을 저장할 때 발생한다. 객체는 속성(필드)과 기능(메서드)을 가진다. 객체의 기능은 클래스의 정의되어 있으므로 객체 인스턴스의 상태인 속성만 저장했다가 필요할 때 불러와서 복구하면 된다. 객체가 단순하면 객체의 ..
영속성(Persistence) 영속성은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다. 결국 영속성은 특정 데이터 구조를 이전 상태로 복원할 수 있게 해 주어 프로그램의 종료와 재개를 자유롭게 해 준다. 이는 Layered Architecture에서 도메인 모델과 데이터베이스사이에 존재하며, 프로그램의 객체 정보를 DB에 저장하고, DB의 정보를 객체로 담아와 사용할 수 있도록 한다. Java에서는 영속성을 위해 JDBC를 지원해 주는데, JDBC에서 DB에 접근하여 SQL을 수행하고, 결괏값을 다시 데이터타입으로 매핑시켜 주는 작업을 개발자가 일일이 수행해야 ..
스프링(Spring)이란? 스프링은 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 정의를 하나씩 뜯어보자면 다음과 같다. 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 기업에서 운영하는 웹 서비스에는 비즈니스 로직이라는 것이 있다. 비즈니스 로직이란, 기업이 제공하는 서비스를 코드로 구현한 것으로, 사용자의 요구사항을 해결하기 위한 실질적인 코드를 의미한다. 스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했다. 비즈니스 로젝을 구현하는 기술 자체가 복잡하고 어려웠기 때문이다. 그러나, 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡하다. 따라서, 개발..
POJO(Plain Old Java Object)란? Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로써 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용하게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로써 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. 특정 '기술'과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었습니다. 이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것입니다. 그래서 POJO라는 개념이 등장했..
메모리 불연속 할당(Noncontiguous memory allocation) 메모리 불연속 할당은 하나의 프로세스가 메모리의 여러 위치에 분산되어 올라갈 수 있는 메모리 할당 기법을 말한다. 들어가며 이전 게시글에서 운영체제 메모리 할당 방식과 스와핑, 스레싱, 페이지폴트와 같은 개념을 알아보았다. https://brightstarit.tistory.com/16 운영체제(OS) 메모리 관리 - (1) 연속 메모리 할당 가상 메모리 가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 이 brightstarit.tistory.com 이번 포스팅에서는 메모리 불연속 할당 중 페이징 방식에 대해..
가상 메모리 가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 이때 가상적으로 주어진 주소를 가상 주소(logical address)라고 하며, 실제 메모리상에 있는 주소를 물리 주소(physical address)라고 한다. 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다. 물리 메모리를 사용하는 최소 크기 단위를 프레임(frame)이라고 하고 가상 메모리를 사용하는 최소 크기 단위를 페이지(page)라고 한다. 스와핑(Swapping) 만약 가상 메모리에는 존재하지만 실제 메모리인 RA..
캐시란? 캐시(cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다. 실제로 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도 차이를 해결한다. 이렇게 속도차이를 해결하기 위해 계층과 계층사이에 있는 계층을 캐싱 개층이라고 한다. 예를 들어 캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 할 수 있다. 지역성의 원리 캐시 계층을 두는 것 말고 캐시를 직접 설정할 수 있다. 이는 자주 사용하는 데이터를 기반으로 설정해야 한다. 그렇다..
메모리 계층 구조(Memory Hierarchy)란? 메모리 계층 구조는 메모리를 속도, 용량, 비용간의 절충 관계를 고려하여 필요에 따라 여러 가지 종류로 나타낸 구조를 의미합니다. 계층 구조에서 위쪽으로 올라갈수록 CPU 코어에 가까워지기 때문에 CPU가 메모리에 더 빨리 접근할 수 있지만, 그만큼 비용이 많이 들며 저장 용량이 적습니다. 레지스터 CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치이다. 프로세서에 위치한 고속 메모리로, 프로세스가 바로 사용할 수 있는 데이터(소량의 데이터, 처리 중인 중간 결과)를 담고 있는 영역이다. 컴퓨터에서 4대 주요 기능(기억, 해석, 연산, 제어)을 관할하는 장치이다. CPU는 자체적으로 데이터를 저장할 방법이 없으므로 메모리로 직접 데..