46

비즈니스 도메인 분석하기

DDD를 공부하는 이유 복잡한 문제를 해결하고 우아한 솔루션을 만들고 신중하게 규칙과 구조, 행동을 만들어서 완전히 새로운 세상을 만든다. 비즈니스 도메인 주요 활동 영역 페덱스 - 배송 서비스 스타벅스 - 커피 아마존 - 클라우드 날방 - 방송? 하위 도메인 비즈니스의 세분화된 영역 - 목표를 달성하기 위해 서로 상호작용하는 도메인 핵심 하위 도메인 경쟁업체와 다르게 수행하고 있는 것 - 모방하기 어려워야한다. 경쟁 우위 자주 변경 될 수 있다. - 한번의 시도로 해결되지 않는다. 사내에서 구현되어야 한다. (전략적인 투자) 우버 - 승차 공유 서비스(같은 방향으로 향하는 손님을 매칭해서 비용을 절감) 구글 검색 알고리즘 - 광고 플랫폼의 중요한 구성요소 날방 - 쇼핑몰에 pip를 붙여서 할 수 있는것..

4장 - 함수형 프로그래밍

https://balldev.tistory.com/18 함수형 프로그래밍 & 람다 & 메소드 참조 함수형 프로그래밍 일단 함수형 프로그래밍의 등장 배경을 보겠습니다. 일단 명령형 프로그래밍 기반에서 소프트웨어의 크기가 커졌습니다. 그래서 스파게티 코드를 유지 보수할 수가 없어졌 balldev.tistory.com 4.1 알고리즘에서 fold 사용하기 fold 함수를 사용해 시퀸스나 컬렉션을 하나의 값으로 축약시킨다. inline fun Iterable fold( initial : R, operation: (acc:R, T) -> R ): R 첫번째 인자: 누적자의 초기값 두번째 인자(람다): 두개의 인자를 받아 누적자를 위해 새로운 값을 리턴 예시 // 합 fun sum(vararg nums: Int) ..

3장 - 코틀린 객체 지향 프로그래밍

객체 초기화, getter, setter, 나중 초기화, 지연 초기화, 싱글톤, Nothing 이해하기 3.1 const와 val의 차이 런타임 보다는 컴파일 타임에 변수가 상수임을 나타내야 한다. 컴파일 상수(컴파일 시점)에 const 변경자를 사용한다. 실행 시간(런타임)에 val 키워드를 사용한다. (java final) 그렇다면 const를 지원하는 이유는 뭘까? 컴파일 상수 함수나 클래스의 생성자에게도 결코 할당 될 수 없고 오직 문자열이나 기본 자료형으로 할당 되어야함(클래스의 프로퍼티나 지역변수로 할당 할 수 없으며 문자열 또는 래퍼타입) 컴파일 타임 상수는 반드시 객체나 동반 객체 선언의 최상위 속성 또는 멤버여야 한다.(보통 companion objet에 쓰임) getter, setter..

2장 - 코틀린 기초(문법들 유용하게 사용하기)

2.1 코틀린 널 허용 타입 사용하기 String? val 변수의 널 허용성 검사 val p = Person("aa", null, "bb") if (p.middle != null) { // p.middle의 타입을 String? 대신 String으로 인식 -> 영리한 타입 변환 수행 val middleNameLength: Int = p.middle.length } p가 한번 설정되면 그 값을 바꿀 수 없는 val 키워드로 선언됐기 때문에 var p1 = Person("aa", null, "bb") if (p1.middle != null) { // val middleNameLength = p.middle.length val middleNameLength = p1.middle!!.length } var이기 ..

1장 - 코틀린 설치와 실행

명령줄에서 코틀린 코드를 컴파일 하고 실행 kotlinc-jvm kotlin 명령어가 있다. jvm용 코틀린 sdk에는 코틀린 컴파일 명령어 kotlinc-jvm과 코틀린 실행 명령어 kotlin이 포함되어 있음 kotlinc 는 kotlinc-jvm의 별칭이다. Kotlin 또한 Java와 같이 JVM이 필요하다. Java를 공부할 때 정리해놓은 글입니다. 좀 더 세부적으로 써보자. GC에 대해서? https://balldev.tistory.com/16 자바의 JVM메모리 구조 프로그램 메모리를 관리하고 최적화해준다. 자바 바이트코드(.class)를 운영체제에 맞는 시스템 명령어로 번역하여 실행 JVM은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해 반드시 실행 balldev.tistory.com..

12장 쿼리 종류별 잠금(2)

InnoDB에서 Deadlock 만들기 InnoDB는 다른 DBMS와는 다르게 레코그 간의 간격을 잠그는 gap lock 이나 next key lock이 있다.순수한 레코드 레벨의 잠금만 사용하는 DBMS보다는 잠금의 범위가 넓은 편이라 데드락이 더 자주 발생하는 편이다. 패턴 1. 상호 거래 관련 A 사용자가 B사용자에게 10 포인트 전달, 그와 동시에 B 사용자도 A사용자에게 10 포인트 전달 하는 시나리오 일반적으로 차감 → 증가 순으로 개발 테이블의 프라이머리키인 user_id 값을 기준으로 처리 1번 트랜잭션: a - update 진행 2번 트랜잭션: a - update 진행 1번 트랜잭션: b - update 진행 2번 트랜잭션: b - update 진행 패턴 2. 유니크 인덱스 관련 트랜잭션..

책/real mysql 2022.01.24

12장 쿼리 종류별 잠금(1)

용어 정리 배타적 잠금 - 내가 쓰기를 하는 동안 남들이 쓰지 못하게 하는 것이다. 공유 잠금 - 내가 읽는 동안 남들이 내가 읽고 있는 데이터를 변경하거나 삭제하지 못하게 하는 것이다. 트랜잭션이란 논리적인 작업셋의 완전성을 보장하기 위한 기능이고, 잠금이란 동시성을 제어하기 위한 기능 InnoDB의 기본 잠금 방식 InnoDB에서는 각 쿼리의 패턴별로 사용하는 잠금이 다르다. https://balldev.tistory.com/58 트랜잭션 격리 수준 이전글에 연장입니다.~ https://balldev.tistory.com/57 트랜잭션과 잠금 트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하 balldev.tistory.com..

책/real mysql 2022.01.23

11장 스토어드 프로그램

스토어드 프로그램은 스토어드 루틴이라고도 하는데, 스토어드 프로시저와 스토어드 함수 그리고 트리거와 이벤트 등을 모두 아우르는 명칭 장점 데이터베이스 보안 향상 기능의 추상화 네트워크 소요 시간 절감 절차적 기능 구현 개발 업무의 구분 단점 낮은 처리 성능 애플리케이션 코드의 조각화 애플리케이션의 설치나 배포 작업이 갈수록 복잡해지고 있다. 그런데 각 기능을 담당하는 프로그램 코드가 자바와 MySQL 스토어드 프로그램으로 분산된다면 애플리케이션의 설치나 배포가 더 복잡해지고 유지보수 또한 어려워진다. 스토어드 프로시저 자주 사용되고 복잡한 쿼리를 모듈화 시켜서 저장해놓고 필요할 때마다 손쉽게 사용이 가능 트리거 직접 트리거를 실행시킬 수 없고 어떠한 이벤트가 발생 시 트리거가 실행됨 이벤트 스케줄러 My..

책/real mysql 2022.01.23

10장 파티션

파티션을 사용하는 이유 한 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적인 예이다. 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 update, delete 처리를 위해 대상 레코드를 검색하려면 인덱스는 필수적 인덱스의 워킹 셋이 실질적인 물리 메모리보다 크다면 쿼리 처리가 느려짐 파티셔닝을 안하면 인덱스가 커지고 물리적인 메모리 공간도 많이 필요해짐 → 효율적 관리를 위해 필요 데이터의 물리적인 저장소를 분리 파티션을 통해 파일의 크기를 조절하거나 각 파티션별 파일들이 저장될 위치나 디스크를 구분해서 지정해서 해결 가능 하지만 mysql에서는 인덱스를 순차적으로 생성하는 방법은 아직 허용되..

책/real mysql 2022.01.23

확장 기능

전문검색 - MySQL 의 Full Text Search(이하 FTS) LIKE같은 패턴 검색은 인덱스를 사용하지 못함 또한 LIKE를 여러 필드 (예를 들어, title과 keyword 등)에 동시에 적용하면서 여러 단어를 검색어로 전달하면 쿼리가 복잡해지기도 한다. 정규표현식도 마찬가지로 인덱스를 거치지 않고 풀 스캔(Full Scan)이 일어나기 때문에 느리다. 이런 전문 검색은 일부만 검색하는 경우에도 전용 인덱스를 사용하기 때문에 빠른 검색이 가능 FULLTEXT 검색 방식 **자연어 검색(natural search)**검색 문자열을 단어 단위로 분리한 후, 해당 단어 중 하나라도 포함되는 행을 찾는다. **불린 모드 검색(boolean mode search)**검색 문자열을 단어 단위로 분리한..

책/real mysql 2022.01.23