동시성 문제 - 여러 프로세스나 스레드가 동일한 데이터를 조작하는 경우 필연적으로 발생한다. - 문제의 원인을 미리 알기 어렵다. - 테스트하기도 어렵다. 오프라인 동시성 - 여러 데이터베이스 트랜잭션에 걸쳐 조작되는 데이터에 대한 동시성 제어 손실된 업데이트 - 같은 파일을 작업하는 경우 뒤에 파일을 업데이트한 사람의 내용으로 덮어쓰기가 되어 버리는 경우 일관성 없는 읽기 - 올바르지만 한편으로 올바르지 않은 정보의 두 조각을 읽은 경우 발생한다. - 동시성 문제는 정확성 충족만으로는 충분하지 않다. - 동시 작업이 얼마나 많이 진행될 수 있는지를 나타내는 활동성 또한 충족해야 한다. 실행 컨텍스트 - 외부 세계와 상호작용하는 관점에서 중요한 두 가지 컨텍스트로 요청과 세션이 있다. - 운영체제와 관련..
분류 전체보기
초록색 바탕은 추가적으로 찾아봐야하는 부분이다. 데이터 읽기 데이터를 읽는 메서드를 넣을 위치는 인터페이스 패턴에 따라 달라진다. 데이터베이스와 상호작용하는 클래스가 테이블 기반인 경우 데이터베이스의 테이블마다 클래스 인스턴스가 하나씩 있으므로 읽기 메서드를 삽입 및 업데이트와 결합하는 방법을 쓸 수 있다. 반면 행 기반인 경우 데이터베이스의 행마다 상호작용 클래스가 하나씩 있으므로 이러한 방법을 쓸 수 없다. 행 기반 클래스를 사용하는 경우 검색 작업을 정적으로 만들 수 있지만, 그러면 데이터베이스 작업을 대체할 수 없게 된다. 즉, 테스트 시 데이터베이스를 서비스 스텁으로 대체할 수 없다. 이럴땐 검색기 객체를 별도로 만드는게 가장 좋은 방법이다. 왜냐하면, 각 검색기 클래스는 SQL 쿼리를 캡슐화하..
아키텍처 패턴 1. 도메인 논리가 데이터베이스와 상호작용하는 방법을 좌우하는 아키텍처 패턴 이러한 패턴을 선택할 때는 충분한 주의를 기울여야 한다. 왜냐면 전체 설계에 미치는 파급효과가 크고 리팩터링하기 어렵기 때문이다. 이러한 이유로 SQL 접근을 도메인 논리와는 별도로 분리하고 개별 클래스에 배치하는 것이 좋다. 데이터베이스 테이블당 클래스 하나를 가지도록 구성하는 방법이 좋다. 이러한 클래스는 테이블에 대한 게이트웨이가 된다. 게이트웨이를 사용하는 두 가지 방법 1. 행 데이터 게이트웨이 - 쿼리가 반환하는 각 행마다 인스턴스 하나를 만드는 것 2. 테이블 데이터 게이트웨이 - 레코드 집합 - 테이블식 특성을 흉내 낸 테이블과 행의 범용 자료구조이다, 각 테이블마다 클래스가 하나만 있으면 된다. 중..
트랜잭션 스크립트 도메인 논리를 저장하는 가장 간단한 방식이다. 프레젠테이션에서 입력 받고, 유효성 검사와 계산을 통해 입력을 처리하고, 데이터베이스에 데이터를 저장하고, 다른 시스템에서 작업을 호출하는 프로시저다. 그런 다음 필요에 따라 응답을 구성하고 서식을 지정하는 계산을 수행하고 프레젠테이션에 응답한다. 기본 구성은 사용자가 수행할 각 작업마다 프로시저를 하나씩 만드는 것이다. 장점: 트랜잭션 스크립트는 대부분이 이해할 수 있는 간단한 절차 모델이다. 데이터 원본 계층과 함께 사용하기에 적합하다. 트랜잭션의 경계를 설장하기가 쉽다. 단점: 복잡도가 상승한다. 코드가 많이 중복된다. 결과적으로 명확한 구조가 없어진다. 도메인 모델 복잡한 논리를 객체로 해결하기 위한 모델이다. 한 루틴이 한 가지 사..
계층의 발전 일괄 처리 시스템 시절에는 계층을 적용할 필요가 없었다. 필요한 형식의 파일(ISAM, VSAM 등)을 조작하는 프로그램을 작성하면 충분했기 때문이다. 90년대에 클라이언트-서버 시스템이 등장하면서 계층은 조금 더 중요해졌다. 클라이언트-서버 시스템은 클라이언트가 사용자 인터페이스와 다른 애플리케이션 코드를 포함하고 있어야 하고 서버는 관계형 데이터베이스를 포함하는 2 계층 시스템이다. 애플리케이션의 기능이 주로 데이터를 표시하고 간단한 업데이트를 수행하는 것이라면 클라이언트-서버 시스템은 상당히 잘 작동한다. 문제는 도메인 논리를 수행하는 경우에 일어난다. 일반적으로 클라이언트에 이러한 논리를 추가하였고 논리가 복잡해지면 코드를 작업하기가 매우 어려워지는 문제가 있었다. 게다가 화면에 삽입..
계층화(layering)는 복잡한 소프트웨어 시스템을 분할하는 데 사용하는 일반적인 기법이다. 네트워킹에서 OSI 7 계층을 예로 들 수 있다. 이렇게 나눈 계층은 불투명한 구조를 가진다는 특징이 있다. 상위 계층은 하위 계층이 정의하는 다양한 서비스를 사용하지만, 하위 계층은 상위 계층을 인식하지 못한다. 이러한 체계를 불투명한 구조라고 한다. 계층화의 이점 1. 다른 계층에 대한 정보 없이도 단일 계층을 하나의 일관된 계층으로 이해할 수 있다. 예) 이더넷이 작동하는 방법을 자세히 몰라도 FTP 서비스를 구축할 수 있다. 2. 동일한 기본 서비스를 가진 대안 구현으로 계층을 대체할 수 있다. 예) FTP 서비스는 이더넷, PPP 또는 케이블 회사에서 제공하는 다른 프로토콜 기반에서 변경 없이 작동할 ..
·TIL
vi 시작 명령어 파일 열기 vi {파일명} 예시) vi text.txt 커서 이동 키 설명 h(←) 왼쪽으로 이동 j(↓) 아래로 이동 k(↑) 위로 이동 l(→) 오른쪽으로 이동 e 오른쪽 한 단어의 끝으로 이동 w 오른쪽 한 단어의 앞으로 이동 b 왼쪽 한 단어의 앞으로 이동 Enter 한 행 아래로 이동 Back Space 한 문자 왼쪽으로 커서 이동 Space Bar 한 문자 오른쪽으로 커서 이동 ^ 행 맨 왼쪽으로 이동 $ 행 맨 오른쪽으로 이동 H 화면 맨 위로 이동 M 화면 중간으로 이동 L 화면 맨 아래로 이동 숫자G 숫자만큼 줄 이동 Ctrl + i 한 화면 위로 이동 Ctrl + b 한 화면 아래로 이동 Ctrl + d 반 화면 위로 이동 Ctrl + u 반 화면 아래로 이동 Ctrl..
·TIL
현재 생성한 ec2 인스턴스의 메모리 용량은 1gb이다. 4gb의 메모리 정보가 담긴 스왑 파일을 만들어서 서버의 메모리를 총 5gb로 할당해보겠다. 먼저 ec2 인스턴스에 접속했다. 우선 dd 명령을 사용해서 루트 파일 시스템에 스왑 파일을 만든다. sudo dd if=/dev/zero of=/swapfile bs=128M count=32 bs는 블록 크기이오 count는 블록 수이다.(128MB x 32) 조금 기다리면 4.3 GB copied 라는 문구가 나오면 스왑 파일이 생성된다 스왑 파일의 읽기 및 쓰기 권한을 변경해준다. sudo chmod 600 /swapfile Linux 스왑 영역을 설정한다. sudo mkswap /swapfile Setting up swapspace version 1..