개발업무를 진행하다 보면 어느 순간에는 데이터베이스를 사용하게 됩니다. 데이터는 애플리케이션의 핵심이니깐요. 어느 정도 규모를 넘어서 데이터를 관리하는 시스템이 별도로 필요할 때 DBMS, 특히 관계형 DB를 먼저 떠올리게 됩니다.

개인적으로는 클라이언트에서만 사용한다면 SQLite, 서버로 이용될 경우에는 Postgresql이나 MS SQL Server를 선호합니다. 특별한 이유는 없습니다. 예전에 제가 공부할 때에는 mysql은 트랜잭션 지원이나 서브쿼리 등이 PostgreSQL에 비해 부실했기 때문입니다.

하지만 역시 오픈소스의 발전 속도는 참 빠르고 거침없습니다. 어느새 MySQL도 트랜잭션이나 고급 쿼리문에 이어 고가용성까지 지원하고 있고, 대용량 서비스에 활용되고 있다는 소식을 쉽게 접하게 되었습니다. 그래서 이번에 mysql을 중심으로 DB에 관한 지식을 재충전할 목적으로 이 책을 읽었습니다.

 

저는 1부와 2부는 설렁설렁 보았습니다. 이미 다른 DBMS를 많이 다뤄보았었기 때문에, mysql의 특이점만 살펴보면서 읽었습니다. DBMS를 처음 공부하시는 분들은 2부가 가장 중요합니다!!! 2부는 기본적인 데이터베이스 설계 및 SQL에 관한 내용을 담고 있습니다. 꽤 상세하게 단계별로 설명하고 있습니다. 웬만한 SQL 기본서적보다 괜찮다고 생각합니다.(현실적인 DB를 가지고 SQL을 설명하고 있어요.)

Learning mySQL.나비책

이 책은 크게 4부분으로 나뉩니다.

 

1부는  주로 설치에 관한 내용입니다. 이 부분은 조금 애매하다고 생각됩니다. 클라우드의 시대라 예전처럼 리눅스 패키지 관리자나 소스에서 컴파일하는 경우는 거의 없을 것 같습니다. 이런 아쉬움은  14장 클라우드 MySQL에서 조금 보완이 됩니다만, 정말 조금입니다. DBaaS내용을 다루는 게 20쪽 정도에 불과합니다. 그만큼 클라우드에서 DB 사용이 쉬운 거라고 생각해야 할까요?

 

2부는 관계형 데이터베이스 기본 내용을 익히는 부분입니다.

기본적인 SQL구문을 sakila DB를 가지고 배우게 됩니다. ER Diagram, 데이터 정규화, 기본 SQL의 DDL, DML 구문들을 mySQL 관점에서 배울 수 있습니다. 그리고 제약사항들이나 조인, 중첩 쿼리등을 배울 수 있습니다. 기본적인 내용이지만, 그래도 처음 찍먹하는 개발자들은 도움이 될 것입니다. 상세히 단계별로 다루고 있습니다.

 

3부와 4부는 운영 관점입니다. 실제 서비스 환경에서 mySQL을 사용할 때 만나게 될만한 시나리오들입니다. 3부는 DBA 관점의  이야기들이 많았던 것 같아요. 물론 트랜잭션 이야기도 있긴 한데, 사용자/권한 관리나 백업 복구, 서버 튜닝에 관한 내용이 담겨 있었어요.

 

4부는 개인적으로 이 책에서 재미있게 읽은 부분입니다.  mySQL을 사용하여 고가용성을 확보하기 위한 여러 가지 방법을 소개를 하고 있습니다. 3부는 DBA관점이라면 4부는 솔루션 아키텍처 관점에서 mySQL 관련 내용을 설명하고 있습니다. 

4부 로드밸런싱과 K8S환경의 클러스터링

이 책은 관계형 DBMS를 처음 접하시거나 MySQL전체 기능을 훑어보고 싶은 분들에게 좋은 All-In-One 서적이라 생각합니다. 수준으로 보면 초급 도서라 생각됩니다.

 

나름 열심히 정리하면서 :-) 공부했어요

 

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형

예전에 같이 공부했던 것 정리했던 기록입니다. 리팩토링을 리마인드 하기 위해서 OReilly에서 21년 10월 출간된 "Five Lines of Code" 책을 가지고 공부했었습니다. 지난 6월에 정리한 것을 이제 하나씩 공유해 볼까 합니다. 리팩토링 관련해서 좋은 책이니 일독을 추천합니다.


 

코드 품질이 좋으면 유지보수비용도 낮아지고, 오류도 적고, 개발자도 행복.

 

기술(skill) 코드가 좋은지 나쁜지, 나쁘면 리팩토링이 필요한지를 판단하는 기술. 판단력과 경험 필요. 주니어에겐 육감처럼 느껴질 수도 있음.
문화(culture) 코드 개선 작업에 시간을 할애할 수 있고, 장려하는 문화.
도구(tool) 우리가 하는 일이 안전한지 확인하는 데 도움이 되는 무언가.
자동화된 테스트 등

 

리팩토링

  • 코드의 기능(하는 일)을 변경하지 않고도 사람이 더 읽기 쉽고 유지 관리하기 쉽도록 코드를 변경하는 것
  • 정기적으로 수행하지 않으면 시간(개발자의 시간은 곧 비용)이 많이 걸릴 수 있음.
  • 코드 속도 향상,  코드를 더 작게 만들기, 코드를 더 일반적으로 변경하여 재사용 가능하게 만들기, 코드를 더 쉽게 읽거나 유지 관리하기
  • 코드가 수행하는 작업을 변경하진 않으므로, 읽기 쉽고 유지 보수가 쉬운 코드를 작성하는 방법에 중점.

좋은 코드: 사람이 읽기 쉽고 유지 관리가 쉬우며, 설정한 작업을 올바르게 수행

코드 이해가 중요한 이유.

  • 대부분의 프로그래머는 코드를 작성하는 것보다 코드를 읽고 이해하는 데 더 많은 시간을 할애
  • 코드를 이해하지 못한 채 무언가를 변경하면 치명적인 오류가 발생할 수 있기 때문
  • 코드의 가독성을 향상시키면 새로운 기능을 구현할 시간 확보 가능
  • 유지 보수가 쉬운 코드는  버그가 줄어들고 수정하기 쉬워진다
  • 코드를 읽을 때  머릿속으로 코드가 무엇을 하는지에 대한 모델을 구축하는데, 한 번에 머릿속에 더 많은 것을 기억해야 할수록 더 피곤해짐.

코드 악취

  •  코드가 나쁘다는 것을 암시할 수 있는 요소
  • 리팩터링은 샤워를 하는 것과 같다.-Kent Beck
  • 리팩터링은 정기적으로 수행할 때 가장 효과적이고 비용도 적게 듬.일상 업무에 리팩터링을 통합하는 것이 좋음.

개발 워크플로 6단계:

  • 탐색하기.: 문제(요구사항)에 대한 인식 . 실험으로부터 시작. 무언가를 빠르게 구현한 다음 고객과 함께 요구사항을 검증해보기.
  • 명세하기.  구축해야 하는 것이 무엇인지  명시. 어떤 형태로든 자동화된 테스트를 수행하는 것이 가장 좋음.
  • 구현하기:  코드 작성.
  • 테스트: 작성한 코드가 명세를 통과했는지 확인
  • 리팩터링: 코드 전달 전에 다음 사람이 작업하기 쉬운지 확인
  • 배포(적용): 풀 리퀘스트 또는 특정 브랜치에 푸시

누가 뭐라해도 코드의 가치는 작성한 코드를 고객에게 전달하는데 있다!!

 

 

규칙 기반 리팩터링 수행 워크플로

레거시 시스템 리팩토링

  • 먼저 쉽게 변경할 수 있는 구조로 바꾼 다음. 쉽게 변경하세요.-Kent Beck
  • 새로운 것을 구현하려고 할 때마다 새로운 코드를 쉽게 추가할 수 있도록 리팩터링부터 시작

리팩터링의 가치가 없는 코드베이스:

  • 작성하고 한 번만 실행한 다음 삭제할 코드.
  • 폐기되기 전에 유지 관리 모드에 있는 코드.
  • 임베디드 시스템이나 게임의 하이엔드 물리 엔진과 같이 엄격한 성능 요구 사항이 있는 코드.

도구

  • 자동화된 테스트:  소프트웨어 개발에 있어 자동차에 브레이크와 같은 존재
  • 레시피와 유사한 상세한 단계별 구조화된 리팩토링 패턴
  • 버전 관리
  • 컴파일러
  • 도구의 도움을 받아서  리팩토링 작업에 대한 확신을 얻자!

 

DRY(반복하지 마세요) KISS(단순하게, 바보처럼) 원칙을 준수

규칙의 목적은 이해를 높이는 것.더 잘 알 때까지는 규칙을 따르자.


 



반응형

'2. 개발 > 2.0 개발 잡설' 카테고리의 다른 글

우리쪽이 아니라 다행이네요.  (0) 2023.05.30
MS PowerToys, 또다른 생산성을 부여합니다.  (0) 2023.05.08
잘못된 문제  (0) 2023.03.16
[잡념] 의도적 프로그래밍  (0) 2023.03.08
디터람스: UX 구루  (0) 2023.01.22

+ Recent posts