💋 락 (Lock) ✔ 분류 MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 분류 스토리지 엔진 레벨의 락 스토리지 엔진 간 상호 영향을 미치지 않음. MySQL 엔진 레벨의 락 모든 스토리지 엔진에 영향을 미침. 테이블 데이터 동기화를 위한 테이블 락 이외에도 메타데이터 락, 네임드 락 기능 존재 이번 포스팅에서는 MySQL 엔진 레벨의 락에 대해서 설명할 것이다! 💋 MySQL 엔진의 락 (Lock) ✔ 글로벌 락 FLUSH TABLES WITH READ LOCK 명령으로 획득 영향 범위는 MySQL 서버 전체로, MySQL에서 제공하는 락 중 가장 범위가 크다. 실행과 동시에 MySQL 서버에 존재하는 모든 테이블을 닫고 잠금을 건다. 한 세션에서 글로벌 락을 획득하면..
분류 전체보기
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4OCv3%2Fbtsq2jFNnzl%2F4Wmn9JPmVTigFtBniitp61%2Fimg.png)
💋 인트로 MySQL 서버는 아래와 같이 구분할 수 있다. MySQL 엔진 스토리지 엔진 MySQL 서버에서 기본으로 제공하는 스토리지 엔진으로는 InnoDB, MyISAM 스토리지 엔진이 있다. 💋 MySQL 엔진 아키텍처 MySQL은 Oracle이 만든 DBMS 소프트웨어 다른 DBMS와 비교했을 때 독특한 구조 조금 더 분류해서 보자! ✔ MySQL 접속 클라이언트 MySQL 서버의 클라이언트 Python, JDBC(Java) 등등 대부분 프로그램이 언어를 모두 지원 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있도록 함. 쉘 스크립트를 통해서도 MySQL 쿼리를 사용할 수 있음. MySQL 서버 = MySQL 엔진 + MySQL 스토리지 엔진 ✔ MySQL 엔진 Optimizer가 작성한..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeZGq6%2Fbtsq5Yau8WE%2F7fNgBaGCcdSHR8gRjatAyK%2Fimg.png)
💋 인프라 관리의 시작은 측정 측정할 수 없는 것은 관리할 수 없다. - 피터 드러커 AWS 상의 인프라를 잘 구축했는지, 효율적으로 했는지에 대한 판단은 측정을 해야 한다. 인프라에 대해 평가하는 것도 중요한 과정 중 하나다. 이 '측정'을 하기 위해서 잘 만들어진 서비스가 AWS 클라우드워치다. 💋 Amazon CloudWatch의 개념 ✔ 서비스 소개 Amazon CloudWatch는 실시간 로그, 지표 및 이벤트 데이터를 자동화된 대시보드에 수집하고 이를 시각화하여 인프라 및 애플리케이션 유지 관리를 간소화한다. ✔ 서비스 특징 아마존에서 제공하는 AWS 서비스나 애플리케이션의 모니터링 서비스 Public 서비스이기 때문에 같은 AWS Cloud 내에 들어있다고 하더라도, 반드시 Public 인..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2kiq8%2FbtsqYRYwbkm%2FrRylka2q474tkCGwI1aCdk%2Fimg.png)
💋 인트로 MySQL의 동시성에 영향을 주는 요소 락(Lock) 트랜잭션 트랜잭션의 격리 수준(Isolation Level) ✔ 트랜잭션 작업의 완전성을 보장해주는 것 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원상복구해서 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능 ✔ 락 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 것 만일 하나의 레코드를 여러 커넥션에서 동시에 변경하려고 하는데, 락이 없다면 하나의 데이터를 여러 커넥션에서 동시 변경할 수 있게 되어, 레코드 값은 예측할 수 없는 상태가 됨 ✔ 락 VS 트랜잭션 락: 동시성 제어를 위한 기능 트랜잭션: 데이터 정합..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzrAAh%2FbtsqYSpEiKO%2F36OlDlBDsY22qFsUkYy651%2Fimg.png)
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 💋 인트로 우테코 프로젝트를 진행하면서 회원가입 및 로그인 기능을 구현해야 했다. 직접 id, password를 입력받아 우리 회원으로 만드는 방식도 고려해 보았지만, 데이터 관리가 보안 측면에서 부담스럽다고 생각해 소셜 로그인을 우리 서비스에 도입하기로 했다. 이번 포스팅에서는 OAuth의 과정에 대해서 알아보려고 한다. 💋 OAuth의 필요성 OAuth의 등장 배경과 필요성에 대해서는 이미 많은 포스팅에서 잘 설명이 되어 있기 때문에 생략하려고 한다. 여기 첨부한 링크에 들어가서 OAuth의 등장배경에 대해서 읽어보면 빠르게 이해할 수 있을 것 같다. 💋 OAuth란? OAuth(”Open Aut..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGOj6%2FbtsqXSC0sMl%2Fys5p0846O7odDjkLoUuXtK%2Fimg.png)
💋 인트로 이 포스팅은 우아한테크코스5기 깃짱이 코치 토미의 강의를 듣고 작성했습니다. 💋 서비스 장애 서비스의 장애는 언제 발생할까? 새로운 기능을 만들어서 코드에 변경사항이 있을 때 서비스 장애를 만들지 않으려면 어떻게 하면 될까? 서비스 장애에 좋은 방법은, 새로운 기능을 만들지 않는 것이다. 하지만 돈을 받는데, 그렇게 할 수는 없다. 이 포스팅은 아래 질문들에 대한 조금의 대답이 될 수 있다. 어떻게 배포를 조금 더 안정적으로 할 수 있을까? 문제가 발생하더라도 어떻게 더 일찍 복구할 수 있을까? 💋 무중단 배포의 필요성 ✔ 서버 점검은 줄어든걸까? 요즘은 큰 서비스를 사용하면서 위와 같은 페이지를 볼수 없다. 서버 정기점검이 줄어든걸까? 정기점검을 하지 않는걸까? ✔ 맨땅에 배포 과정에서 겪는..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXp286%2FbtsqTQMbSCC%2FAH3DqSPKpD9AggTk9xOkG1%2Fimg.png)
💋 오늘 공부한 내용 updatedAt, createdAt이 처음에 같은 값으로 들어간다는 것을 알게 되었음. 토미가 오늘 MySQL에서 트랜잭션과 인덱싱에 대한 수업을 했다. 뒤로 갈수록 매우매우 어려워졌는데, 어떤 키워드를 공부해야 할 지에 대해 알아갈 수 있어서 좋았다. 이번 스프린트 때 만들 API를 모두들 작성해서, 코드를 리뷰하고 리뷰 반영하고 머지했다. 우리 인프라의 현재 구조에서 운영 서버와 모니터링을 할 수 있는 방법에 대해 이야기했다. 테스트 개수가 늘어나면서 점점 시간이 정말 오래 걸리기 시작했다. 테코블 테스트 성능 개선에 대한 글을 읽고, 우리 프로젝트에 곧장 적용했다. 로컬에서는 큰 차이가 안날 것 같지만 일단 조금 아주 쪼오끔 빨라졌다. 그렇다면, 깃허브 액션에서의 CI에서는?..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0FjKu%2FbtsqIMWZ19a%2FQw9QrVQKvUvkzPcjKpkhd0%2Fimg.png)
💋 오늘 공부한 내용 드디어 S3를 받기로 토미가 전달해줬고, 신난 팀 전원이 모여서 S3, cloudfront 연동을 했다. 처음 계획은 프론트엔드 서버에서 S3에 접속해서 이미지를 저장하도록 하고, 조회 시에는 백엔드에서 보내준 링크를 통해서 조회하도록 하는 것이 목표였다. 하지만 프론트엔드의 입장은, 해보다보니 안되는 이슈가 있다고 했다. (라잇과 윤생이 열변을 토하며 설명해도 못알아들은 나...) 전략을 바꿔서, 백엔드에서 S3에 이미지를 저장하는 것을 맡기로 했다. 기존 API는 프론트엔드에서 백엔드로 저장된 이미지의 주소를 String 형태로 보내주고 있다. 이걸 위해서 API를 바꾸기보다는, 사진 하나를 multipart로 전달해서 백엔드 쪽에서 S3에 저장한 뒤에 저장된 주소를 프론트엔드 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdnzBW%2FbtsqC8xCpk3%2F5BU93UK4oZI0ukSUnkY0Jk%2Fimg.png)
💋 오늘 공부한 내용 이번 데모데이 요구사항 중 Logging에 대한 내용이 있어서, 테코블 글을 보면서 적용해봤다. 결과적으로 적용한 PR도 첨부! 한 가지 문제가 아직 있는데, 로그에 색깔을 적용하기가 어려워서 현재 로그가 흑백 세상이다 ㅠㅠ 봐줄 수가 없음. 얼른 고쳐봐야겠다. 오늘 토미의 수업 중에서 배포(무중단배포)와 롤백에 대해서 들었다. 방법이라기보다는 현업에서의 경험담에 가까웠는데 너무너무 재미있었다. 내용 잘 정리해서 포스팅해볼 예정 ㅎㅎ 전체팀원 모여서 이번 스프린트에서 해야 할 일들에 대해서 정리하고, 새로 추가될 API 설계를 모두 했다. 내 파트가 정해졌다. 또 오늘도 백엔드끼리 진한 토의를 했다. [BE] 방문 횟수 로직 변경 시 데이터 migration 이슈 #397 [BE] ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHiXH%2FbtssqxRsDnF%2F63R0c35dvElDSHXsHCgxkK%2Fimg.png)
💋 오늘 공부한 내용 주말에 운전연수를 좀 열심히 했더니 테스트 코드를 작성해오기로 한 것을 못해서 오늘은 1시 출근이지만, 10시에 왔다. 오전 중에 Controller, Service slice test 작성을 완료했다. 테스트 코드 중에서 사소하게 통일성이 없는 부분에 대해서 디스커션을 작성했다. assertAll vs SoftAssertions @SuppressWarnings("NonAsciiCharacters") 등의 편의 어노테이션 통일 팀원들이 주말 동안 작성한 테스트 코드와 3차 데모데이까지의 코드 리뷰를 완료했다. 이번주부터 회원가입 및 로그인 기능을 구현하기로 했기 때문에 OAuth 강의를 찾아 들었다. 💋 감정 회고 요즘 대중교통 근처에서 흉흉한 일이 자주 벌어지고 있는데, 너무 무서..