🎎 절차 지향과 객체 지향의 차이객체 지향은 절차를 간소화한것이다절차 지향은 데이터와 함수가 분리되고 통일성이 없지만 객체 지향은 좀 더 모듈화 되어 체계적이다절차 지향은 과도한 전역 변수의 사용으로 스파게티 코드 발생, 변경과 확장, 프로그램에 대한 이해가 어렵지만, 객체지향은 코드의 재사용성이 굉장히 좋다절차 지향은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수를 설계하는 방식객체 지향은 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식🎎 절차 지향과 객체 지향이 정반대일까?위의 그림이 보다 쉽게 이해하기 위해 그려진 그림이다. 딱 보면 알 수있듯이 절차지향은 글을 작성하듯 진행되고 객체지향은 연관관계로 이루어져서 하나의 글을 작성하는 것..
📄 OOP(Object Oriented Programming)은 무엇일까?영어를 그대로 해석한다면 Object(객체) Oriented(지향) 프로그래밍 즉, 객체 지향 프로그래밍의 영어를 약자로 적어 놓을것이다. 그렇다면 객체 지향 프로그래밍은 무엇일까? 바로 인간 중심적 프로그래밍이라고 할 수 있다. 현실 세계의 사물을 객체라고 보고 객체를 기준으로 코드로 나누어 구현한다. 대표적으로 OOP를 지키며 개발하는 것이 바로 Java이다. Java의 클래스는 전체적인 설계도를 뜻하고 직접적으로 일을 하는 것이 바로 인스턴스이다. 그래서 자바는 OOP라고 해도 틀리지 않은 것이다.. 장점다른 클래스를 가져와 사용할 수 있고 상속받을 수 있어 코드의 재사용성이 증가하낟자주 사용되는 로직을 하나의 라이브러리..
🧊 재고 처리에 대한 동시성 문제동시성 문제는 동일한 데이터에 2개 이상의 스레드, 혹은 세션에서 가변 데이터를 동시에 제어하게 될 때 나타나는 문제이다 만약 하나의 작업이 진행하는 중인데 다른 작업이 끼어들어 데이터를 또 다시 처리하면 데이터가 부숴지게 되는 것이다 이때 나오는 문제가 Concurrency 문제가 발생하는 것이다 간단한 로직우선 재고가 감소하는 로직을 만든다.StockEntity@Entity@Getter@NoArgsConstructor@AllArgsConstructorpublic class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long..
🌱 데이터 충돌서버에서 트랜잭션을 진행하면 우연이든 필연이든 데이터의 충돌이 일어날 수 있다. 이런 문제를 해결하는 것은 개발자로써 꼭 경험하고 알고 있어야 하는 내용이 아닌가 싶다. 어쨌든 데이터의 일관성이 깨질 수 있기때문에 DB에서 lock을 걸고 관리하는 것을 Locking 이라고 한다해당 Locking의 방식은 두가지의 방식이 있다. 🌱 낙관적 락(Optimistic) 자원에 락을 걸지 않고 데이터 업데이트를 할 때 동시성에 문제가 발생하면 그때 처리하는 것이다.데이터를 수정할때 수정했다고 명시해서 다른 트랜잭션이 동일한 조건으로 값을 수정할 수 없게 하는 것이다.낙관적 락은 동시성이 높은 환경에서 성능을 향상 시킬 수 있지만, 충돌이 발생할 가능성이 높은 경우 롤백이나 재시도가 필요하다충돌..
해당 내용은 쉬운코드님의 영상을 기반으로 작성되었습니다🔌 들어가기 앞서전 트랜잭션(4)의 마지막 내용에서 read-read 의 상황에서만 데이터가 교류되는 것을 확인하고 그 이외의 상황은 모두 lock으로 인해 접근 할 수 없다는 것을 알았다. 이는 좋지 않은 성능을 나타내기 때문에 해결할 방법으로 MVCC가 있다고 했다.그에 대해 알아보자 🔌 MVCC (Multi Version Concurrency Control)지금까지 봐왔던것과 달리 훨씬 더 개방적인 모습을 볼 수 있다. 근데 이렇게 그림만 보면 그냥 좀 포용력이 좋아졌다 생각될 뿐 어떻게 작동할지 정확히 어떤 이점이 존재할지 바로 떠오르지 않는다 예시로 가보자 ♬ 예시이번예시는 이해하기 힘들겠지만 말로 설명해보고자 한다 ( 나의 이해도 같이 ..
해당 내용은 쉬운코드님의 영상을 기반으로 제작되었습니다 🔌 LOCK우리는 트랜잭션 (3) 에서 다양한 트랜잭션에 대한 문제를 만나보았다. 거기서 계속해서 진행하던 write는 과연 단순한 값 바꾸기일까? 그것보다 더욱 복잡한 과정이 생길 수 있다. 만약 다른 트랜잭션에서 같은 값을 똑같이 write하려고 한다면 어떻게 되는 걸까? 이때 예상치 못한 문제가 발생할 수 있다 이때 사용하는 것이 바로 lock이라는 것이다. 이때 lock은 운영체제의 lock과 굉장히 비슷하다. 데이터마다 lock 이 있어서 데이터를 변경하거나 읽으려면 lock을 취득해야한다 만약 취득하지 못한다면 얻을 때까지 기다려야한다♬ Lock 을 이해하기 위한 예시1. 트랜잭션 1 : x를 20으로 바꾼다트랜잭션 2 : x를 90으로..
🎲 레디스란?Key-Value 구조를 가진 형태로 다양한 형태의 자료구조를 제공하고 데이터를 저장한다레디스 클러스터 모드를 가지고 있어 다중 노드에 데이터를 분산 저장하여 안정성 & 고가용성을 제공한다다양한 목적으로 사용된다 ( e.g. Pub/Sub패턴, 블랙리스트 등등)모든 데이터를 In-Memory인 RAM에 저장하기 때문에 굉장히 빠른 작업 처리 속도를 가지고 있다데이터 영속성을 위한 SSD나 HDD에 저장하는 방식도 사용하고 있다장점 정리메모리에 데이터를 저장하면서 매우 빠른 읽기와 쓰기 속도를 보장하고 다양한 데이터 타입을 저장할 수 있다 Redis의 persistenceRedis는 RAM에 데이터를 저장하기 때문에 휘발성 데이터라고 생각하면 된다. 그래서 Redis는 이를 보완하고자 데이터..
해당 내용은 쉬운코드님의 영상을 기반으로 제작되었습니다😓 다양한 트랜잭션 문제 예시와 해당 문제의 이름♪ Dirty read트랜잭션 1 : x에 y의 값을 더한다트랜잭션 2 : y 의 값을 70으로 바꾼다 이전 데이터 ▶ x = 10, y = 20상황1번이 실행이 되면 처음에 x의 10을 읽었는데 2번이 실행되었다. 2번은 y를 70으로 바꾸었다. 그리고 1번이 쭈욱 실행이 되고 y가 70이 되었기 때문에 x에 80이라는 숫자로 commit 을 해주고 종료되었다. 하지만 2번이 문제가 발생하면서 y의 데이터가 rollback이 되었다. 이후 데이터 ▶ x = 80, y = 20 정의commit 되지 않은 변화를 읽은 것처럼 나타나는 것이 Dirty Read 이다 ♪ Dir..
해당 내용은 쉬운코드님의 영상을 기반으로 제작되었습니다 이전 블로그에서 트랜잭션의 4개 특성 중 Isolation 이 굉장히 중요하다는 것과 까다로운 것을 알 수 있었다. https://latewalk.tistory.com/230 💾 Transaction, 트랜잭션이란? 해당 내용은 쉬운코드님의 영상을 기반으로 제작되었습니다 🔌 트랜잭션이란? 단일한 논리적인 작업의 단위 여러개의 SQL문들을 단일 작업으로 묶어 나눠질 수 없게 만든 것 transaction의 SQL문들 latewalk.tistory.com 정말 간단히 알아본 Isolation에서 좀 더 깊게 알아보는 시간을 가져보자 🔌 예시 상세 설명 이전 시간에 간단하게 작성한 예시를 상세하게 설명해보자 상황1. J가 H에게 20만원을 이체하려고 한다..
해당 내용은 쉬운코드님의 영상을 기반으로 제작되었습니다 🔌 트랜잭션이란? 단일한 논리적인 작업의 단위 여러개의 SQL문들을 단일 작업으로 묶어 나눠질 수 없게 만든 것 transaction의 SQL문들은 일부만 성공될 수 없다. 🔌 Commit & Rollback Commit 현재까지 작업한 내용을 DB에 영구적으로 저장한다 그리고 transaction은 종료한다. rollback 지금까지 작업들은 모두 취소하고 transaction 이전 상태로 되돌린다 그리고 transaction은 종료한다. AutoCommit ● 각각의 SQL문을 자동으로 transaction 처리 해주는 개념이다 ● SQL문이 성공적으로 실행하면 자동으로 commit 한다 ● 실행 중 문제가 발생하면 자동으로 rollback 된다..