17

트랜잭션과 잠금 1

트랜잭션은 작업의 완전성을 보장해주는것이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우 원 상태로 복구해 작업의 일부만 적영되는 현상이 발생하지 않게 만들어주는 기능. 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기위한 기능 MySQL에서의 트랜잭션 MyISAM 엔진에서는 Transaction 이 적용되지 않는다. Transaction이 필요할 경우 InnoDB와 같은 스토리지 엔진을 사용하자  트랜잭션 사용시 주의사항1. 꼭 필요한 최소한의 코드에만 적용하자 - 메일 전송이나 FTP 파일 전송 작업 또는 네트워크 통신 같은 작업에서는 어떻게서든 DBMS의 트랙잭션 내에서 제거하는편이 좋다. 프로그램이 실행되는 동안 메일서버와 통신할 수 없는 상황이 발..

책/RealMySQL8.0 2024.10.10

10장 예외

효과적으로 예외를 다루는 지침  예외는 진짜 예외 상황에서만 사용하라 예외 처리를 통해 프로그램 코드를 작성하지말자 -> 예외가 터져야 끝나는 형식의 코드...흐름의 제어용으로 예외를 터트리지말자 복구할 수 있는 상황에는 Checked 예외를, 프로그래밍 오류에는 Runtime 예외를 사용하라호출하는쪽에서 복구할 수 있는 상황에서는 checked Exception을 사용하자API 사용자 ( 호출자 ) 에게 다시 복구하라고 요구하는것. 복구할 수 있는지 없는지 확신이 안간다면 런타임 예외를 사용하자  필요없는 Checked Exception 사용을 피하라 컴파일 상에서 예외를 처리하기때문에 checked 예외를 사용하는 메서드를 호출할 경우 해당 메서드에서 try catch를 하던지 상위 메서드로 thro..

책/EffectiveJava 2024.09.05

4장 클래스와 인터페이스

추상화의 기본 단위인 클래스와 인터페이스는 자바 언어의 심장과도 같다. 클래스와 멤버의 접근 권한을 최소화 하라.잘 설계된 컴포넌트는 외부 세계로부터 내부 로직을 얼마나 잘 숨겼느냐로 갈린다.  오직 API를 통해서만 외부 세계와 소통하는 캡슐화는 소프트웨어 설계 근간이 되는 원리. 정보 은닉 ( 캡술화의 장점 )시스템 개발 속도를 높인다.시스템 관리비용을 낮춘다. ( 내부 로직 파악 없이도 빠르게 컴포넌트 사용이 가능해 디버깅 및 교체 비용이 적다 )성능 최적화 ( 캡슐화를 통해 결합도를 낮추고 응집도를 높여 해당 컴포넌트만 최적화가 가능 )컴포넌트의 재사용성을 높인다. ( 외부에 의존하지않고 독자적으로 동작하기때문 )자바는 모든 클래스와 접근성을 가능한 한 좁혀야 한다. 라는 기본 원칙이 존재한다. ..

책/EffectiveJava 2024.08.31

1장 객체의 생성과 파괴

정적 팩토리 메서드를 고려하라 public class Boolean { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); private final boolean value; private Boolean(boolean value) { this.value = value; } public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }} 정팩 팩토리 메서드가 생성자보다 좋은 이유 다섯가지이름을 가질 수 있다.이름을 잘 지으면 객체의 특성..

책/EffectiveJava 2024.08.24

실행 계획 2

책에서는 가독성이 좋은 테이블 포맷으로 실행계획을 살펴본다.각각의 실행계획 테이블 컬럼들의 역할을 알아보자, 1. id 각각의 셀렉트를 분리해 구분할 수 있다. 이것을 단위 쿼리라한다.예를 들어 셀렉트절에 서브쿼리가 존재한다면 셀렉트절이 두개이므로 실행 계획에는 셀렉트절의 아이디가 1 , 2 두개가 존재할것이다.  2.select_type 각각의 select 쿼리가 어떤 타입의 쿼리인지 알려주는 컬럼simple UNION이나 서브쿼리를 사용하지 않는 단순한 셀렉트 쿼리 아무리 복잡한 쿼리라도 실행 계획에서 simple 단위 쿼리는 단 한개만 존재한다.  일반적으로 가장 바깥 쿼리가 simple로 표시된다.PRIMARYUINON이나 서브쿼리를 가지는 셀렉트 쿼리에서 가장 바깥쪽에 있는 단위쿼리 UNIONU..

책/RealMySQL8.0 2024.08.05

실행 계획 1

MySQL Engine 의 Optimizer는 사용자의 쿼리를 최적으로 처리할 수 있게 계획을 수립하지만,매번 옵티마이저가 최적의 쿼리 실행 계획을 수립하는것은 아니다.  때문에 Explain 명령어로 쿼리 사용자가 옵티마이저가 수립한 쿼리 실행 계획을 확인 할 수 있다.  비용 기반 최적화에서 가장 중요한것은 통계 정보다. 통계 정보란 만약 1억건의 데이터가 담겨져 있는 테이블이 존재하지만, 1억건이란 데이터의 통계 정보가 갱신되지않아 옵티마이저가 10건 미만의 테이블로 인식한다면  옵티마이저는 해당 테이블을 10건 미만의 테이블로 인식하고 실행 계획을 수립하게 된다.( 이럴 경우 인덱스를 활용하지않고 테이블 풀스캔으로 성능 저하가 우려 된다.  부정확한 통계 정보로인해 0.1초만에 끝낼 쿼리가 1시간..

책/RealMySQL8.0 2024.08.04

MySQL Engine Architecture

mysql 서버는 사람의 머리 역할을 담당하는 MySQL Engine손발 역할을 담당하는 storage Engine 으로 구분 가능. SQL Parser , Optimizer ... -> MySQL EngineData 를 Disk에 저장하거나 Disk에서 읽어오는 역할 -> Storage Engine MySQL Engine은 단 한개지만 Storage Engine은 여러개를 동시에 사용 가능. 따라서 CREATE TABEL Query에서 각각의 Storage Engine을 지정해 사용이 가능하다. CREATE TABLE inno_db_table (foo INT) ENGINE=INNODB; MySQL Engine 작업 중 데이터를 쓰거나 읽기가 필요할 때 Storage Engine에 쓰기 또는 읽기 요청을..

책/RealMySQL8.0 2024.08.03

객체지향 사실과 오해

현재 기억에 남는 부분들을 간단하게 적어보기로...  1. 객체는 협력하기 위해 존재한다.- 서로 협력하기위해 각각의 객체들마다 고유의 책임을 가지고있고 협력하기위해 메서드를 가진다. 2. 객체를 만들때 상태 중심이 아닌 객체의 행동을 중심으로 결정하자.-  객체의 행동은 협력에 참여하기위한 유일한 방법.-  상태 중심의 객체는 캡슐화에 저하 -> 메서드를 통한 데이터 변경이 아닌 필드값을 직접 조작해 변경을 할 확률이 큼. 3. 추상화란?- 단순화를 통해 복잡성 극복- 목적에 맞게 코드를 단순화 - 공통점을 취하고 차이점을 버리자.- 불필요한 세부사항을 버리자. 4. 객체는 그 객체만의 책임이 존재해야한다.- 서로 다른 책임을 가지고 있는 객체들의 협력 -> 객체지향 프로..

2024.04.17

12장 창발성

창발적 설계로 깔끔한 코드를 구현하자 몇가지 설계 규칙으로 우수한 설계를 이끌어내자 켄트 백이 제시한 단순한 설계 규칙 4가지를 소개하고있다. 1. 모든 테스트를 실행하라 다양한 테스트 코드를 작성하는 시스템을 만드려 애쓰면 설계 품질이 높아진다. 개발자는 테스트 코드를 많이 작성하고 쉽게 테스트를 진행하려하기에 SRP , DIP와 같은 원칙을 지키려 추상화, 인터페이스, 의존성 주입등의 기술을 사용해 결합도를 낮춘다. 이에따라 자연스럽게 테스트 코드를 많이 작성하려 노력할수록 프로덕션코드의 설계 품질또한 같이 높아진다. 2. 리팩토링 테스트 케이스를 작성후 안전하게 코드와 클래스를 정리할 수 있다. ( 테스트라는 안전망이 존재하기때문에 ) 리팩토링 단계에서는 응집도를 높이고, 결합도를 낮추고, 관심사를..

책/CleanCode 2024.01.06

10장 클래스

클래스 체계 public static 변수 private static 변수 private instance 변수 ( 저자는 public instance 변수는 거의 필요가 없다고함..) public method private method ( 주로 자신을 호출하는 함수 직후에 자리하는게 좋다고함 이렇게 클래스는 추상화 단계가 순차적으로 내려가기때문에 프로그램이 신문기사 처럼 읽힌다고.. 캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는편이 낫지만 반드시 숨겨야하는 법칙도 없다고함. protected 로 접근을 제어해 테스트 코드에 접근을 허용하기도함 클래스는 작아야한다. 저자는 클래스의 크기가 함수와 마찬가지로 작아야된다고 강하게 주장함. 그렇다면 얼마나 작아야하는가? 예시로 70개의 메서드를 가지고있는 ..

책/CleanCode 2024.01.04