본문 바로가기

스터디64

[데이터 중심 애플리케이션 설계] 02. 데이터 모델과 질의 언어 [데이터 중심 애플리케이션 설계] 02. 데이터 모델과 질의 언어 1. 데이터 모델의 중요성 데이터 모델은 소프트웨어 개발에서 제일 중요한 부분이다. 데이터 모델은 소프트웨어가 어떻게 작성됐는지, 해결하려는 문제를 어떻게 생각해야 하는지 지대한 영향을 미친다. 데이터 모델은 그 위에서 소프트웨어가 할 수 있는 일과 할 수 없는 일에 영향을 주므로 적합한 데이터 모델을 선택하는 작업은 굉장히 중요하다. 데이터 모델의 큰 범주 관계형 모델 문서 모델 그래프 모델 2. 관계형 모델과 문서 모델 관계형 모델 데이터는 관계(relation)으로 구성 각 관계는 순서없는 튜플(tuple)의 모음 SQL 은 정규화된 구조로 데이터를 저장하고 질의할 필요가 있을 때 사용 NoSQL의 탄생 : Not Only SQL 대.. 2022. 12. 14.
[데이터 중심 애플리케이션 설계] 01. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 [데이터 중심 애플리케이션 설계] 01. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 1. 데이터 시스템 오늘 날의 어플리케이션은 계산 중심(compute-intensive)보다 데이터 중심(data-intensive) 적이다. CPU 성능보다는 데이터 양, 데이터 복잡도 등이 더 문제다. 많은 애플리케이션은 다음을 필요로 한다. 데이터베이스 : 영속성 스토리지 캐시 : 읽기 속도 향상, 값비싼 수행 결과 기억 검색 색인 : 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공 스트림 처리 : 비동기 처리를 위해 다른 프로세스로 메세지 보내기 일괄(batch) 처리 : 주기적으로 대량의 누적된 데이터를 분석 1.1 데이터 시스템에 대한 생각 데이터베이스, 큐, 캐시.. 2022. 12. 13.
[이펙티브 자바] 2022.08.03 ~ 2022.10.19 다섯번째 스터디 회고록 [이펙티브 자바] 2022.08.03 ~ 2022.10.19 다섯번째 스터디 회고록 사실은 여섯번째 스터디지만, 헤드퍼스트 디자인 패턴 스터디 회고록을 까먹었더라. 그치만 끝난지 좀 되어 귀찮아서 패스하고 이펙티브 자바 스터디 회고록을 작성하도록 하자. 이펙티브 자바 스터디 중 가장 많이 했던 소리 사실 나는 이펙티브 자바를 읽기 전에 코틀린 인 액션을 읽지 않은채로 이펙티브 코틀린을 먼저 읽었었는데, 이펙티브 코틀린 책이 좀 어렵다고 느꼈었다. 그래서 이전에 쿠버네티스 스터디 끝날 때 쯤에 다음 스터디는 뭘로 할까? 를 정할 때 이펙티브 자바 이야기가 많이 나와서 내가 자바 인 액션 안읽었으면 이펙티브 자바 좀 어려울거라고 했었는데 다른 분들이 조금 만만하게 보았다. 그리고 마침내 이펙티브 자바가 선정.. 2022. 10. 31.
[이펙티브 자바] 11장 직렬화 (serializable) [이펙티브 자바] 11장 직렬화 (serializable) 이번 장은 객체 직렬화를 다룬다. 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나, 디스크에 저장한 후 나중에 역직렬화 할 수 있다. 아이템 85. 자바 직렬화의 대안을 찾으라 자바 직렬화는 프로그래머가 어렵지않게 분산 객체를 만들수 있다는 장점이 있지만 보이지 않는 생성자, API와 구현 사이의 모호해진 경계, 잠재적인 정확성 문제, 성능, 보안, 유지보수성의 대가가 크다. 직렬화의 근본적인 문제는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기 어렵다는 점이다. readObject 메서드는 클래스패스 안의 거.. 2022. 10. 19.
[이펙티브 자바] 10. 동시성 [이펙티브 자바] 10. 동시성 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 synchronized 키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. long과 double 외의 변수를 읽고 쓰는 동작은 원자적(atomic)이다. 이 말을 듣고 "성능을 높이려면 원자적 데이터를 읽고 쓸 때는 동기화하지 말아야겠다"고 생각하기 쉬운데, 아주 위험한 발상이다. 동기화는 배타적 실행뿐 아니라 스레드 사이의 안정적인 통신에 꼭 필요하다. 공유 중인 가변 데이터를 비록 원자적으로 읽고 쓸 수 있을지라도 동기화에 실패하면 처참한 결과로 이어질 수 있다. 다음 스레드를 중지하는 코드를 살펴보자 잘못된 코드 - 이 프.. 2022. 10. 12.
[이펙티브 자바] 09. 예외 [이펙티브 자바] 09. 예외 아이템 69. 예외는 진짜 예외 상황에만 사용하라 예외를 완전히 잘못 사용한 예 - 따라하지 말 것! try { int i = 0; while(true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { } 직관적이지 않다. 예외를 써서 루프를 종료하는 이상한 방식으로 구현 다음과 같이 표준 관용구대로 작성했다면 누구나 쉽게 이해했을 것이다. for(Mountain m : range) m.climb(); 예외를 써서 루프를 종료한 이유는 뭘까? 잘못된 추론을 근거로 성능을 높여보려 한 것 JVM은 배열에 접근할 때마다 경계를 넘지 않는지 검사 일반적인 반복문도 배열 경계에 도달하면 종료(경계를 넘지 않.. 2022. 10. 5.
728x90
반응형