전체 글

Develop/Etc

[클린 코드] 클래스 응집도의 중요성, 그리고 완전 생성자와 값 객체

개요 최근 클린 코드에 대한 내용을 다루는 내 코드가 그렇게 이상한가요? 라는 책을 읽는 스터디에 참여하게 되었는데, 첫 주차 미팅에서 흥미있게 읽은 부분 일부를 정리해보려고 한다. ( + 혹시 클린 코드 책 (로버트 C. 마틴의 그거그거)에 관한 정보인 줄 알고 들어오셨다면 길 잘못 드신 거라는 삼삼한 사과의 말씀과 함께 시작하겠습니다.. 홀홀 ) 클래스 응집도가 낮을 때 생기는 문제들 객체 지향에 대해 공부하다보면 자주 접하게 되는 몇 가지 권고 사항들이 있다. 그 중 하나가 바로 '결합도는 낮추고 응집도는 높여라' 다. 응집도를 높여야 하는 이유는 관련 로직들을 한 곳에 집중시켜 개발자로 하여금 코드 의미를 파악하기 쉽게 하고, 기능 변경이나 확장으로 인한 유지 보수를 쉽게 만들고, 코드 재사용을 ..

Develop/Spring

[Spring Boot] AOP와 Spring AOP를 뜯어보자 (feat. Proxy, @Transactional)

AOP Aspect Oriented Programming : 관점 지향 프로그래밍 AOP의 사전적 정의는 다음과 같다. 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임. 이것만 보면 무슨 말인지 잘 모르겠지만, 우리에게 익숙한 OOP를 생각하면 보다 쉽게 이해할 수 있다. OOP (객체 지향 프로그래밍)을 떠올려보자. OOP는 프로그램을 객체들의 모임이라는 관점에서 바라보자는 프로그래밍 패러다임으로, 비즈니스 로직의 모듈화를 중심으로 구현된다. 하지만 비즈니스 로직을 중심으로 구현되는 OOP에 한 가지 문제가 생긴다. 로깅, 실행시간 측정과 같은 부가 기능들을 처리하기 힘들다는 것이다. 프로그램은 객체들의 상호작용이라는 관점답게, OOP는 상속이나 위임 등을 이용해 ..

Develop/Database

[MySQL] MySQL의 인덱스 탐구하기 1 (feat. B-Tree)

개요 저번 포스팅, MySQL의 아키텍처와 성능 핵심에서 우리는 디스크 I/O를 줄이는게 중요하다는 걸 알았다. 하지만 디스크 I/O를 줄이기 위한 캐시 사용, 인메모리 적용이 애매한 경우가 분명 존재한다. 이럴때 유용하게 사용할 수 있는 방법이 있는데, 그게 바로 인덱스다. 인덱스는 어플리케이션단 코드를 바꿀 필요도 없고, 새로운 기술 스택을 도입할 필요가 없어 아키텍처에 변화가 생기지도 않는다. 따라서 성능 최적화 작업을 할 때 참 유용해보인다. 하지만 이런 인덱스를 사용한다고 무조건 성능이 좋아지는건 아니라는 사실! 오늘은 인덱스에 좀 더 깊게 공부해보자. 인덱스 👀 인덱스가 뭔가요? 간단하게 표현하면, 책의 목차로 비유할 수 있다. 각 데이터의 위치를 설명해주는 친구! 책의 내용이 많아지면, 우리..

Develop/Database

[MySQL] 트랜잭션, ACID와 MySQL이 트랜잭션의 ACID를 보장하는 방법들

개요 내가 백엔드 개발자라면, 또는 DB를 공부해 본 적이 있다면 한 번쯤은 ACID에 대해 들어봤을 것이다. 생각해보면 DB를 공부하며, 또는 개발 면접을 준비하며 ACID를 달달 외운 적은 있어도, 각각의 특성을 어떻게 DBMS가 보장해주는지를 찾아본 적은 없는 것 같다. 오늘은 트랜잭션, ACID에 대해 알아보고, MySQL이 ACID 각각의 특성을 어떻게 보장해주는지까지 공부해보자 💪 트랜잭션이란? 데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션의 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. - 위키백과 : 데이터베이스 트랜잭션 문서 ^^ 봐..

스껄한우디
호그와트 장학생