[Database] Storage Engine의 꽃 InnoDB
2022. 11. 21. 11:42
Database/Database 필수
InnoDB는 MySQL의 기본 storage engine입니다. 우리가 사용하는 데이터베이스의 기능(transaction, isolation level 등)은 InnoDB에서 제공하고 있는 만큼 InnoDB를 이해하면 데이터베이스의 기능을 더 효율적으로 활용할 수 있습니다. 이번 포스팅을 통해 InnoDB가 어떤 기능을 어떻게 제공하는지 살펴보겠습니다. 이번 포스팅은 MySQL 경험이 있고 MySQL 기능을 어느 정도 이해한 분들이 대상입니다. InnoDB 란? InnoDB는 MySQL과 MariaDB에서 사용하는 storage engine입니다. InnoDB는 트랜잭션 기능, row-level locking, clustered index를 활용한 효율적인 데이터 저장과 검색 그리고 데이터 정합성을 위..
[Spring Boot] CRUD Project Template
2022. 11. 17. 23:12
Java/Spring Boot
매번 스프링 부트를 활용해서 새로운 프로젝트를 진행할 때마다 기본 환경 구성이 너무 귀찮았습니다. 그래서 저는 제가 자주 사용하는 기술을 모아서 하나의 템플릿으로 만들어서 사용하고 있는데요, 이 프로젝트를 공유드리고자 합니다. https://github.com/seonwoo960000/spring-boot-all-in-one GitHub - seonwoo960000/spring-boot-all-in-one: A spring boot project with default dependencies A spring boot project with default dependencies . Contribute to seonwoo960000/spring-boot-all-in-one development by crea..
[Career] 코드 스테이츠 && 캐치 라이브 멘토링 후기
2022. 11. 17. 08:45
Career/활동
최근 코드 스테이츠와 캐치 라이브에서 멘토링을 진행한 경험이 있었는데요, 이번 포스팅에서 취업 준비생들에게 꼭 필요한 정보와 흔히들 하는 실수에 대해 말씀드리려고 합니다. https://www.catch.co.kr/CatchClass/Live/View/5605 시작 개발자가 되려고 막 마음먹은 단계에서는 어떤 걸 해야 할까요? 최소한 개발이 적성에 맞는지 확인해봐야 한다고 생각합니다. 물론 개발이 적성에 맞지 않아도 개발자가 되는 것은 가능하지만 개발자가 되고 나서 과연 업무가 즐거울지는 의문입니다. 제가 과연 개발이 제 적성에 맞는지 확인했던 방법은 다양한 개발 분야를 얕게나마 접해보는 것이었습니다. front-end, back-end, embedded, artifical intelligence 체험해..
[Database] DBA급 개발자로 - #18 Mutli-Version Concurrency Control
2022. 11. 14. 08:45
Database/DBA급 개발자로
이전 포스팅에서 timestamp ordering을 활용하여 트랜잭션 동시성을 어떻게 제어하는지 살펴봤습니다. 이번 포스팅에서는 multi version의 데이터를 활용해서 트랜잭션 동시성을 제어하는 MVCC에 대해서 살펴보겠습니다. MVCC MVCC(Multi-Version Concurrency Control)는 여러 버전의 데이터를 저장합니다. 트랜잭션은 해당 트랜잭션이 시작한 시점을 기준으로 가장 최근 버전의 데이터를 읽습니다. MVCC를 활용하면 데이터가 특정 시점에 어떻게 변경됐는지 확인할 수 있기 때문에 다양한 isolation level을 보장할 수 있습니다. 또한 특정 시점에 필요가 없는 버전은(더 이상 트랜잭션에 의해 참조되지 않는 데이터) 제거됩니다. MVCC의 장점은 읽기 작업이 쓰기..
[Database] DBA급 개발자로 - #17 Timestamp Ordering Concurrency Control
2022. 11. 13. 11:25
Database/DBA급 개발자로
이전 포스팅에서는 2 phase locking을 통해 어떻게 concurrent transaction을 처리하는지 살펴봤습니다. 이번 포스팅에서는 timestamp를 통해 concurrent transaction을 처리하는 방법을 살펴보겠습니다. Timestamp Ordering Timestamp ordering 방식도 2 phase locking처럼 concurrent transaction을 처리하기 위한 프로토콜입니다. 주된 차이점은 2 phase locking의 경우 트랜잭션이 실행되는 과정에서 충돌이 발생하면 해당 트랜잭션을 롤백하지만 timestamp ordering의 경우 트랜잭션이 실행되기 전에 충돌 여부를 미리 확인합니다. 두 트랜잭션 Ti, Tj이 동시에 진행되고 트랜잭션이 시작된 시간이..
[Gatling] Gatling 성능 부하 테스트
2022. 11. 11. 07:59
Open Source/Testing Framework
여러 개발 방법론에서는 개발 중 테스트 코드를 작성하는 것을 권고합니다. 저는 그 방법론을 충실히 따라 기능 단위 테스트 코드를 열심히 작성하고 있습니다. 하지만 프로덕션 환경에 이 코드를 올렸을 때 정상적으로 동작할지 항상 걱정이 들었습니다 . "내가 생각한 것보다 더 많은 요청이 들어오면 애플리케이션은 어떻게 동작할까?" 등 다양한 부하 상황에서 애플리케이션이 어떻게 동작하는지 궁금했습니다. 이 궁금증을 해결하기 위해 Gatling을 활용했습니다. Gatling 이란 Gatling은 오픈소스 부하 테스트 소프트웨어입니다. 개발 pipeline과 지속적으로 통합시킬 수 있는 소프트웨어이기 때문에 개발의 모든 단계에서 다양한 방법으로 테스트가 가능합니다. Gatling은 maven을 통해 실행시킬 수 있..
[Maven] 올인원 Maven
2022. 11. 10. 08:25
Java/Maven
이번 포스팅을 통해 Maven에 대해 더 자세히 이해해보도록 하겠습니다. 저 포함 많은 분들께서는 Maven을 단순히 의존성을 끌어와 라이브러리를 활용하는 정도로만 사용하고 있는데요, Maven의 동작원리를 안다면 이를 더 효과적으로 사용하고 의존성 문제가 생겼을 때 쉽게 해결할 수 있습니다. POM.xml 구조 POM(Project Object Model)은 Maven이 해당 프로젝트를 어떻게 빌드할 것인지 명시하기 위해 사용되는 XML 파일입니다. 개발자 입장에서 자주 보게 되는 속성(attributes) 위주로 설명드리겠습니다. relativePath 부모 pom.xml을 명시할 때(override) 사용하는 속성입니다. 한 단계 위에 있는 디렉터리가 기본 설정입니다. modelVersion XML..
[Debezium] Embedded Debezium Spring Boot 연동
2022. 11. 7. 08:12
Open Source/Debezium
이번 포스팅을 통해서 spring boot와 embedded Debezium을 연동하는 법을 살펴보겠습니다. 코드는 github에서 확인할 수 있습니다. https://github.com/seonwoo960000/spring-boot-embedded-debezium GitHub - seonwoo960000/spring-boot-embedded-debezium Contribute to seonwoo960000/spring-boot-embedded-debezium development by creating an account on GitHub. github.com 설정 pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.5 com.ex..