DDD란 무엇일까? # 참고 DOMAIN DRIVEN DESIGN (도메인 주도 설계 핵심) - 반 버논 지음 # 개요 DDD에 대한 서적을 읽고 DDD가 무엇인지 이해하고 어떻게 코드에 적용시킬 수 있는지 고민해 보려고 한다. MSA 전환 너무 거대한 시스템을 쪼개는 것이기 때문에 DDD에 대한 기본이 깔려 있어야 한다. 1장. 도메인 주도 설계란? 1-1. DDD가 우리에게 상처를 줄까? 정말 좋은 기술일까? DDD가 소프트웨어 개발에 대한 복잡한 접근법이라는 이야기 조금 있다. 맞다. DDD는 처음 들어보는 사람들에게는 복잡한 내용이다. 하지만 개발자로서 복잡한 설계를 어떻게 풀어나갈 수 있는지 고민해야 한다. DDD는 이러한 복잡한 소프트웨어 프로젝트에서 사용할 수 이는 수준 높은 기술들을 모은 ..
JPA란 무엇일까? # 개요 김영한님이 지은신 [자바 ORM표준 JPA 프로그래밍] 책을 보고 정리한 내용입니다. 사용법 보다는 작동원리를 위주로 설명할 것이며 1~4장 내용과 매핑을 중점으로 정리할 생각입니다. 1장. 기존 SQL 작업의 문제점 1-1. JPA를 사용하는 이유는 뭘까? SQL을 다루기 위해서는 비지니스 로직보다는 SQL과 JDBC API사용 코드를 작성하는데 많은 시간을 보내야 한다. MyBatis는 이러한 SQL과 JDBC API 사용 코드를 많이 줄일 수 있었지만, 여전히 CRUD를 작성하기 위해 SQL을 반복적으로 작성해야 한다는 단점이 있었다. 또한, 가장큰 문제점은 자바는 객체지향이 중심이고 데이터베이스는 테이블이 중심이다. 즉, 객체지향적으로 설계를 하여도 SQL에 적용하기 ..
성능테스트 : Elastic APM 사용법! (3) # 개요 이전에는 Elastic APM을 로컬과 AWS에서 사용법을 다루어 보았습니다. AWS의 프리티어인 t2.small은 Elastic APM을 구축하기에 성능이 좋지 않기 때문에 Elastic Cloud를 이용하여 Elastic APM을 사용하는 방법에 대해 알아보겠습니다. # 주의! Elastic Cloud는 회원가입 후 14일간 무료입니다. 과금이 되지 않도록 조심해 주세요! # Notion 간단한 실행법 1. Elastic Cloud사이트로 가서 회원가입을 한다. https://cloud.elastic.co/login 2. Tutorial 페이지로 이동한다 https:///app/home#/tutorial/apm 3. APM Agent를 다운..
성능테스트 : Elastic APM 사용 부터 AWS까지! (1) # 개요 프로젝트를 진행하면 구현한 API의 성능을 테스트 해보고자 합니다. 단순히 API의 성능을 테스트하기 보다는 Redis를 적용하기 전,후의 성능과 Redis 캐시를 적용하기 전,후의 성능을 테스트 해보고 싶었습니다. Redis 적용은 다음 게시글에서 자세히 다룰 것이며 이번 게시글에서는 Elastic 사용법에 대해 간단하게 다뤄볼 것입니다. # 기술스택 기본적으로 Elastic APM을 사용하기 위해서는 Elastic Search, Elastic APM Server, Kibana가 사용됩니다. 또한 docker를 사용하여 서버를 실행시킬 것입니다. 그후 Jmeter로 초당 10번의 트래픽을 주어 성능과 트레이싱을 확인해볼 예정입니..
트러블 슈팅 : Eureka AWS 환경에서 사용하기 # Overview MSA 프로젝트를 진행하며 Spring Cloud를 이용하여 Gateway를 구성하여 클라이언트의 모든 요청이 Gateway로 향할수 있게 하였습니다. 또한 라우터를 구현하여 각 요청이 각 서비스를 찾아 갈 수 있도록 하였습니다. 이때 로드밸런싱을 구현하고 싶어 Eureka를 사용하였습니다. # 문제점 localhost환경에서 각 마이크로 서비스를 Eureka에 등록을 하고 로드밸런싱이 잘 되는 것을 확인하였지만 docker-compose를 이용하여 배포를 하니 서비스 자체를 찾지 못하는 에러가 있었습니다. . # Notion - 트러블 슈팅 노션에 있는 트러블 슈팅 페이지를 참고하면 보기 편리해요! https://star-figh..
TIL @Transaction 어노테이션을 동작원리에 대해 공부하고 추가적으로 ACID에 대해 공부하고자 합니다. 우테코의 테크톡 영상을 기반으로 정리하였습니다! https://www.youtube.com/watch?v=aX9c7z9l_u8&t=188s 트랜잭션 트랜잭션이란 하나의 단위로 처리되길 바라는 쿼리문의 묶음이라고 할 수 있다. 일련의 업무는 절대 분리되어서는 안되고 일부만 실행되어서도 안된다. 즉, 절대로 깨져서는 안되는 하나의 작업을 트랜잭션이라고 한다. ex) 은행업무에서 A사용자가 B사용자에게 돈을 이체시 중간에 작업이 중단되면 안된다. 중단이 된다면 Rollback이 되던가 아니면 일련의 업무를 모두 수행하고 Commit이 되어야 한다. 이렇게 이체작업에서 이체 과정 전체를 트랜잭션이라..
1. Lock # Overview 공유락과 베타락에 대해 공부하였지만 락이 언제 발생하는지 쉽게 이해 되지는 않았습니다. 블로그 글을 읽어보기 보단 직접 실험해 보면서 이해해 보고자 합니다. # Tip Lock을 이해하기 위해서 Isolation level과 함께 알아보려고 합니다. 각 레벨에서 SELECT(공유락)과 UPDATE(베타락)이 어떻게 작용하는지 이해해 보면 좋을것 같습니다. # 오해 저는 베타락에 대한 오해가 몇가지 있었습니다. 1. 공유락과 베타락은 단순히 SELECT와 UPDATE를 사용하면 적용되는줄 알았습니다. 2. Isolation level에 상관없이 베타락과 공유락의 작동 규칙이 동일한 줄 알았습니다. # KeyPoint 핵심만 보고 싶으시면 REPEATABLE READ의 UP..
DeadLock # Overview 이전 게시글에서 데드락의 개념에 대해 알아보았습니다. 데드락의 개념적 정의에 대해서는 쉽게 이해 하였지만 MySQL에서의 데드락은 어떻게 발생되는 것인지 이해하지 못하였습니다. 직접 데드락을 발생시켜 발생 조건과 원리에 대해 이해하려고 합니다. # Tip 데드락을 2가지의 경우로 발생시켜 보려고 합니다. 1. Row 1개 사용 2. Row 2개 사용 이번 게시물에서는 Row를 1개 사용하여 데드락을 발생시키는 것이 목표입니다. 1. DeadLock 발생 [ DeadLock 실행 순서 ] # 트랜잭션1 > START TRANSACTION; > SELECT * FROM LOGIN_USER_DATA WHERE ID="5" LOCK IN SHARE MODE; # 트랜잭션2 >..