[MySQL] MySQL 동시성 처리(2) - 트랜잭션의 고립성 보장을 위한 격리 수준과 MVCC
개발/MySQL2023. 3. 19. 20:53[MySQL] MySQL 동시성 처리(2) - 트랜잭션의 고립성 보장을 위한 격리 수준과 MVCC

목표 MySQL의 동시성 처리를 위한 격리 수준과 MVCC에 대해서 알아보겠습니다. 개요 이전 포스팅에서 DB의 Lock에 대해서 알아보았습니다. [MySQL] MySQL 동시성 처리(1) - LOCK 목표 MySQL의 동시성 처리를 위한 Lock에 대해서 알아보겠습니다. 개요 최근 프로젝트를 진행하면서 배포를 앞에 두고 가장 큰 관심사는 동시성 처리입니다. 사용자가 늘어날수록 동시 요청이 많 chanos.tistory.com 이어서 트랜잭션의 고립성 보장을 위한 격리 수준과 MVCC에 대해서 알아보도록 하겠습니다. 트랜잭션 격리 수준 트랜잭션은 작업 단위를 뜻합니다. DB의 값을 업데이트하거나 조회하는 등의 작업의 범위를 지정하는 것입니다. 이렇게 작업 단위를 지정하는 이유는 트랜잭션이 ACID를 보장..

[MySQL] MySQL 동시성 처리(1) - LOCK
개발/MySQL2023. 3. 14. 13:30[MySQL] MySQL 동시성 처리(1) - LOCK

목표 MySQL의 동시성 처리를 위한 Lock에 대해서 알아보겠습니다. 개요 최근 프로젝트를 진행하면서 배포를 앞에 두고 가장 큰 관심사는 동시성 처리입니다. 사용자가 늘어날수록 동시 요청이 많아질 것입니다. 현재 백엔드는 Spring boot로 구성되어 요청마다 스레드가 할당됩니다. 이 말은 즉, 여러 스레드가 한 DB에 동시에 요청을 보낸다는 뜻입니다. DB에 여러 요청에 동시에 들어왔을 때, 데이터 정합성을 보장함과 동시에 성능에 영향을 주지 않도록 하는 방법에 대해서 알아보려고 합니다. 가장 먼저, 데이터 정합성을 보장하기 위한 Lock에 대해서 알아보겠습니다. Lock의 설정 범위 Lock(락)은 여러 트랜잭션이 동시에 처리될 때 데이터의 무결성을 보장하기 위한 수단입니다. 한 트랜잭션이 처리되..

[Spring] 내가 ~Service, ServiceImpl로 분리하는 이유
개발/Spring & Spring boot2023. 3. 1. 12:34[Spring] 내가 ~Service, ServiceImpl로 분리하는 이유

목표 서비스 계층을 개발할 때 ~Service, ~ServiceImpl로 나누는 이유에 대해서 기술합니다. 개요 저는 Spring 기반의 백엔드를 구현하는 프로젝트를 구현할 때 항상 ~Service, ~ServiceImpl과 같이 인터페이스와 구현체로 분리해서 개발했습니다. 처음에는 이렇게 배웠기 때문에 따라 했고, 경험이 쌓이면서 왜 이렇게 해야 하는지에 대한 고민을 하기 시작했습니다. 정말 다양한 측면에서 생각해 볼 수 있는 문제이고, 상황에 따라 의견이 분분한 문제이므로 정답은 없다고 생각합니다. 하지만, 제가 프로젝트에서 이렇게 적용할 때는 그만한 근거가 필요하고, 저는 분리해서 개발하는 게 합당하다고 판단했습니다. 막상 면접 자리에서 '왜 이렇게 구현했는가?'라는 질문을 받았을 때, DI? 확장..

[JAVA] 정규표현식으로 문제 해결하기
개발/JAVA2022. 12. 10. 21:38[JAVA] 정규표현식으로 문제 해결하기

목표 정규 표현식으로 문제 해결하기: 블로그 테마 변경 중 발생한 대참사 문제 발생 개요 인턴을 진행하면서 한동안 블로그에 소홀했습니다. 쌓여있던 소재들을 다듬어 블로그에 작성하려고 합니다. 그간 수많은 블로그를 보면서 많은 것들을 느꼈습니다. 그 중 하나는, 블로그는 다른 사람이 이해하기 좋게 작성해야 한다는겁니다. 내용도 내용이지만 디자인도 중요한 요소 중 하나입니다. 조잡하게 꾸며놓은 것보다 많은 사람들이 사용하는 테마가 훨씬 보기 편했고, 확실히 다크 테마가 눈이 편하다는 느낌을 받았습니다. 개인적으로 VELOG가 읽기 편하더라구요. 마크다운으로 작성된 문서는 읽기도 편하고 필요한 정보가 어디 있을지 예상이가는 것도 좋았던 것 같습니다. 티스토리 스킨을 찾아보던 중, VELOG와 유사한 정상우님의..

[Spring] 전역 예외 처리를 위한 @ControllerAdvice와 @RestControllerAdvice
개발/Spring & Spring boot2022. 7. 6. 01:09[Spring] 전역 예외 처리를 위한 @ControllerAdvice와 @RestControllerAdvice

목표 전역 예외처리를 위한 @ControllerAdvice와 @RestControllerAdvice에 대해서 알아보겠습니다. 개요 진행하던 프로젝트에서 리팩토링이 시급한 부분은 전체적인 구조였습니다. 복잡하고 가독성 떨어지는 코드이기 때문입니다. 이러한 구조로 만들어지는데 많은 원인이 있지만, 단연 try-catch 문이 일등 공신이라고 생각합니다. 가독성이 떨어지는 것부터, try문 안에 있는 것은 지역변수로 처리되는 점, 반환형에 맞게 return을 try-catch문 안팎으로 처리해야된다는 점 등 자연스럽게 프로젝트의 구조를 일그러뜨렸습니다. 물론, try-catch문이 나쁘다는 것은 아니지만, 발생하는 예외를 체계적으로 관리할 필요가 있었습니다. Spring은 다양한 예외 처리 방법이 있지만, 그..

[Python] 리스트, 딕셔너리, 튜플, 집합
개발/Python2022. 6. 29. 23:32[Python] 리스트, 딕셔너리, 튜플, 집합

*가독성이 다소 떨어지는 점 양해 부탁드립니다. 리스트(list) 👨‍🎓학생의 학점을 관리하는 프로그램을 작성해보자. #학생A의 학점 A_network = "A+" A_algorithm = "A" A_OS = "B" #학생B의 학점 B_network = "A" B_algorithm = "C" B_OS = "D" 위와 같이 변수에 원하는 값을 저장할 수 있다. 만약, 학생의 수가 매우 많아지면 어떻게 될까? → 보기도 안좋고, 유지보수하는데 최악이다. 따라서, 위와 같은 정보를 리스트를 통해 한 번에 정리할 수 있다. A_grade = ["A+", "A", "B"] B_grade = ["A", "C", "D"] 예제처럼, ‘[ ]’를 사용해서 리스트라는 자료구조로 나타낼 수 있다. 리스트는 조건문, 반복문..

[Spring] API 문서 자동화를 위한 Swagger 3.0.0 적용
개발/Spring & Spring boot2022. 6. 29. 01:46[Spring] API 문서 자동화를 위한 Swagger 3.0.0 적용

목표 Swagger에 대해 알아보고, JWT Security가 적용된 Springfox 3.0을 적용해보겠습니다. 목차 개요 Swagger란? 정리 개요 팀 프로젝트를 진행하면서 가장 고된 사항은 바로 API 정보를 프론트와 공유하는 것이었습니다. 노션에 직접 URL, 파라미터, 결과 등을 적어줬습니다. 프로그램이 커지니까 실수도 잦아지고, 찾기도 힘들었습니다. 이에 대한 해결책인 Swagger에 대해 알아보고, 적용을 해보도록 하겠습니다. Swagger란? Swagger는 OAS(Open Api Specification)를 위한 오픈소스 프레임워크입니다. 즉, API의 문서를 자동으로 정리해주는 것 입니다. 해당 Swagger를 협업하는 개발자에게 전달하면 Path, Request, Response, ..

[Python] Python 기초 지식과 문자열, 입력과 출력
개발/Python2022. 6. 22. 17:03[Python] Python 기초 지식과 문자열, 입력과 출력

주제 1. 키워드 2. 자료형(Data type) 3. 문자열 4. 입력과 출력 1. 키워드 특별한 의미가 부여된 단어로, 파이썬이 먼저 쓰겠다고 예약한 것이다. 키워드 목록은 다음과 같다. False/True/None/and/as/assert/break/class/continue/def/del/elif/else/except/finally/for/from/global/if/import/in/is/lambda/nonlocal/not/or/pass/raise/return/try/while/with/yeild 다음과 같은 코드를 통해 키워드를 확인할 수 있다. import keyword print(keyword.kwlist) 식별자 파이썬에서 이름을 붙일 때 사용하는 단어로, 변수나 함수의 이름으로 사용되는 ..

image