본문 바로가기

전체 글333

DDIA - 데이터를 위한 질의(query) 언어 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 데이터를 위한 질의 언어 관계형 모델이 등장했을 때 데이터를 질의하는 새로운 방법이 등장하였다. SQL 은 선언형 질의언어인 반면 IMS와 코다실은 명령형 코드를 사용해 DB 에 질의한다. 동물의 종 목록중에서 상어만 반환하는 코드를 작성한다고 가정해보자. 이를 명령형 코드로 작성하면 아래와 같이 작성할 수 있다. public List getSharks(List animals) { List sharks = new ArrayList(); for(Animal animal : animals) { if("Sharks".equals(animal.getFamily())) { sharks.add(animal); } } retur.. 2021. 10. 31.
이펙티브 자바 - 변경가능성 최소화 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 변경 불가능(immutable) 클래스 변경 불가능 클래스란 수정할 수 없는 클래스를 말하며, 객체가 생성될 때의 정보가 살아있는 동안 그대로 보존된다. 우리가 자주 사용하는 String, 기본 자료형(primitive type), Big Integer, Big Decimal 등이 모두 변경 불가능 클래스에 해당한다. 변경 불가능 클래스는 설계와 구현이 쉬우며 Client 가 사용하기도 쉽다. 그리고 오류 발생가능성이 적어 훨씬 안전하다. 변경 불가능 클래스가 지켜야 할 5 가지 규칙은 아래와 같다. 상태 변경 메소드(ex - setter, mutator) 를 제공하지 않는다. 계승(extends) 를 막아야 한다. 보통은 final.. 2021. 10. 30.
DDIA - 관계형 모델과 문서 모델 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 데이터 모델은 S/W 가 어떻게 작성되었는지와 문제를 어떻게 생각해야하는지에 대해서도 영향을 미친다. 대부분의 애플리케이션에서는 각 계층마다 데이터 모델에 대한 관점이 다르다. App. 개발자는 현실을 보고 객체, 데이터 구조, API를 모델링 한다. 데이터 구조를 저장할 때는 JSON, XML, RDB 테이블, 그래프와 같은 모델로 표현한다. DB S/W 엔지니어는 데이터를 메모리나 디스크에 표현하는 방법을 결정한다. 그리고 이 표현은 질의, 탐색, 조작, 처리할 수 있게 한다. 각 계층에서 명확한 데이터 모델을 제공하면 하위 계층에 대한 복잡성을 숨길 수 있다. - 관계형 모델 관계형 모델이라는 단어가 어색.. 2021. 10. 30.
이펙티브 자바 - Public 클래스의 Public 필드 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 개요 public 클래스에서 멤버 변수를 public 으로 대외에 공개하지 말라는 규칙을 본적이 있을것이다. 이렇게 멤버 변수를 대외에 공개하면 많은 문제점들이 일어날 수 있다. 캡슐화의 이점을 누릴수가 없다. 내부표현을 변경하기 위해서 API 를 변경해야 한다. 불변식을 강제할 수 없다. 필드 사용시 그에 따른 동작을 수행할 수 없다. 해결법은 그리 어렵지 않은데 public 멤버 변수를 private 변수와 public 접근자 메서드로 변경하는것이다. - 공개해도 괜찮은 경우 private 변수와 public 접근자 메서드는 정설처럼 여겨져서 많은 사람들이 지키는 규칙이다. 그래서 코딩할 때 해당 변수는 외부에 공개되어도 되는 변.. 2021. 10. 26.
DDIA - 신뢰성,확장성,유지보수성 - 유지보수성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 S/W 는 대부분 개발보다 유지보수를 할 때 많은 비용이 들어간다. 이런 유지보수에는 일반적으로 다음과 같은 항목들이 있다. 버그 수정 시스템 운영 유지보수 신규플랫폼 적용 기술채무 상환 신규 기능 추가 유지보수의 고충을 최소화하기 위해서는 지켜야하는 설계 원칙이 있다. 운용성: 운영팀이 시스템을 운영하기 쉽게 해야 한다. 단순성: 복잡도를 최대한 제거하여 새로운 엔지니어가 최대한 이해하기 쉬워야 한다. 발전성: 이후에 시스템을 쉽게 변경할 수 있어야 한다. 신뢰성과 확장성을 달성하는것은 그리 간단하지 않다. 그래서 위의 3 가지 항목을 염두해두면서 기본적으로 유지보수성을 달성하기위해 노력해야 한다. - 운영성.. 2021. 10. 25.
DDIA - 신뢰성,확장성,유지보수성 - 확장성 - 이 글은 마틴 클레프만의 데이터 중심 애플리케이션 설계를 기반으로 작성되었습니다. - 개요 어떤 시스템이 현재 안정적이라고 해서 미래에도 안정적이라는 보장은 없다. 이런 경우 보통 성능이 달라져서 문제가 되는데 성능이 달라지는 주요 Issue 는 부하가 증가되는것이다. 확장성이라는 것은 증가되는 부하에 대처하는 시스템의 능력이라고 할 수 있다. 프로젝트를 진행하다보면 설계자나 PM 들은 흔히 'A 시스템(모듈)은 확장 가능하다.', 'B 시스템(모듈)은 확장성이 없다.' 와 같은 말을 많이 한다. 하지만 이런 말들은 확장성을 논하는데에 아무런 도움이 되지 않는다. 확장성을 논할때에는 '시스템이 특정 방향으로 커지면 이에 대처하기 위한 선택은 무엇인가?' 와 같은 사고방식으로 접근해야 한다. - 부하기.. 2021. 10. 19.