EXPLAIN 명령어는 SQL 쿼리의 실행계획을 확인하기 위해 사용된다. ( 사실 나도 실무에서는 안(못)써봤다.. ) 실제로 쿼리에 대해서 확인해보고 속도를 조절하기 위해서 쓸 때에는EXPLAIN을 찍고 쿼리가 어떻게 실행될지, 어떤 인덱스가 사용될지, 등의각 단계에서의 예상비용등을 출력해보고 확인해서 쿼리를 수정한다. MySQL을 기준으로 정리해볼 예정이다 1. EXPLAIN 명령어 쓰는법예를 들어 , 아래와 같은 SELECT 쿼리가 있다고 가정하자.SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York'); 이 쿼리에 대해 실행 계획을 확인하려면, EX..
전체 글
뭐든 공부하면 언젠간 다 도움이 될거야최근 모노레포라는 말을 여러 개발 커뮤니티에서 들을 수 있었다.레포별로 다른 프로젝트를 운영하고 있으나,새로운 서비스(프로젝트)를 구축하기 위한 비용이나 중복된 코드와, 프로젝트 관리에 대한 비효율 증가로 인해모노레포로 돌리려는 것을 고안하고 있다 등의 내용이었다. 예전에는 백엔드 레포랑, 프론트엔드 레포를 따로 나눠서 별도의 리포지토리에서 관리하는 방식이 일반적이었다.이렇게 각기 다른 레포에서 프로젝트를 관리하는 것을 멀티레포라고 하는데,아무래도 프로젝트가 독립적으로 관리되므로, 프로젝트간의 의존성 문제가 줄어든다는 장점이 있다. 하지만 이제 그런 프로젝트들이 점점 대규모로 성장해가거나, 강력한 협업이 필요한 환경에서는 모노레포가 더 효율적일 수 있다.그래서 모노레포와 멀티레포에 대해서 조사해봤다! 모..
import discordfrom discord.ext import commandsimport yt_dlp as youtube_dlimport asynciointents = discord.Intents.default()intents.message_content = Truebot = commands.Bot(command_prefix='!', intents=intents)@bot.eventasync def on_ready(): print(f'Logged in as {bot.user}')@bot.command()async def join(ctx): if ctx.author.voice: channel = ctx.author.voice.channel await channel.c..
내가 만든 라라벨 프로젝트를 가볍게 배포?를 하고 싶었다일단 라이트세일에 내 프로젝트를 올려보자! 라고 생각했다 원래 사실 aws ec2는,, 내가 싫어한다.., 왜냐! 공부를 안하고 그냥 1년 무료라고해서 쓰다보면 어느순간돈이 폴랑폴랑 날아가기 때문이다내가 모르는 비용들이 자꾸 한두개씩 튀어나와서 날 괴롭혔다; 그래서 3년전에 aws가 무서워져서 탈퇴를 했다가라이트세일이라는 좋은 친구가 나왔다고 해서 맘먹고 다시 aws를 가입했다. aws ec2와 lightsail의 차이는 아래 글이 잘 설명해줘서 가져왔다https://www.smileshark.kr/post/what-is-amazon-lightsail-ec2-vs-lightsail-comparison 아마존 라이트세일(Amazon Lightsail)..
- 이 책은 가상면접사례로 배우는 대규모 시스템 설계 기초에 있는 내용을 기반으로 작성하였습니다 프로젝트를 만들었다고 가정해보자 (아래 예제는 제가 실제로 구축한건 아님니다..) 1. 처음에 내가 작은 소소한 프로젝트로 A프로젝트라는 것을 만들어서 서버를 띄우고, dns 설정도 해주고 줄기차게 프로젝트를 오픈했다. - 웹브라우저로 그 페이지를 사람들이 접속한다면,- DNS를 통해서 IP를 받아오고, 그 IP주소로 HTTP 요청이 들어간다, 그 요청을 웹서버가 응답으로(페이지로) 반환한다. 2. 엥 ! 근데 사람들이 조금씩 더 들어오고, 그 사람들의 정보를 저장해야 할 일이 생겼다. 데이터베이스가 필요해졌다. - 무슨 데이터베이스를 쓸 지 정해야한다. 관계형 데이터베이스? 비관계형 데이터베이스?- 수직적 ..
관점지향프로그래밍,,트랜잭션 공부하다가 튀어나왔는데자바를 역시 공부해야할 것 같다aop검색하니까 스프링 aop가 가장 먼저 튀어나온다자바.. 그는 도대체 얼마나 엄청난 친구인 것인가어느날 그냥 궁금증이 들었다라라벨에서 여러 데이터 커넥션 별로 트랜잭션을 설정하고 중간에 터지게되면여러 데이터 커넥션이 다 롤백이 될까? 하고 이런 코드를 단톡에 날렸는데,,public function funcName(){ DB::connection('connA')->beginTransaction(); DB::connection('connB')->beginTransaction(); DB::connection('connC')->beginTransaction(); try { DB::connecti..
라라벨을 처음시작할때는 정말 문외한이었고사실 지금도 너무 모르는 기능들이 많다그래서 처음에 개발할때는 모든 패턴의 시작인 MVC패턴을 사용했다. 근데 ,, 개발하면서 뭔가 답답함을 느꼈다includeFunction이라고해서 이제 뭔가 하나의 비슷한 기능들을 모아놓은 controller들이 있는데이걸 다른 controller에서 use해서 쓰는 형태가 뭔가 이상하지 않은가? 하는 생각이 들었다 그래서 찾아보니 나온 것이 service 패턴..!!사실 repository도 포함해서 나누면 좋은데 ㅠㅠ소스를 현재는 더이상 크게 건들지 못하는 상황이라일단 controller로 다 섞여있던 친구들 중 특정한 기능만을 모아놓은 controller들을 service로 빼기로 했다 service 패턴이란 ?서비스 패턴..
라라벨 프로젝트에서 service 패턴을 추가하면서 DI 를 주입해라~ 같은 말을 읽게 됐다 뭔소린지 이해가 안갔다.. 그리고 생긴 것 도 이해가 안갔다.. 헤매던 중 가장 이해가 잘 갔던 글을 소개한다 https://mangkyu.tistory.com/150 [Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Injmangkyu.tistory.com 다만 여기는 spring ..
트랜잭션이란 ? 데이터베이스 시스템에서 여러작업을 하나의 단위로 묶어서 처리하는 것데이터베이스의 일관성을 유지하기 위해서 중요하며, 주로 금융이나 전자상거래, 재고 관리 시스템등에서 사용한다. 트랜잭션의 주요 특징 (ACID)(1) 원자성 Atomicity- 트랜잭션 내의 모든 작업들이 모두 성공하거나, 모두 실패해야 한다는 것을 의미함- 트랜잭션이 중간에 실패하면 그 트랜잭션이 수행한 모든 변경 사항들이 취소되어야함. ex) 은행에서 A계좌에서 출금해서 B계좌로 입금한다고 가정했을때,A계좌에서 출금은 되고 B 계좌로 입금이 실패했을 경우, 시도했던 모든 동작들을 실패로 돌리는 것이 트랜잭션 원자성을 만족하는 것이다. (2) 일관성 Consistency- 트랜잭션이 성공적으로 완료되면, 데이터베이스는 일..
에러로그를 잘 찍을 수 있는 도구인 sentry나도 멋있게 에러로그를 확인해보고 싶었다! 1. sentry에 가입한다2. project를 생성한다 (라라벨 선택)3. https://docs.sentry.io/platforms/php/guides/laravel/other-versions/laravel8-10/#install Laravel 8.x, 9.x and 10.x | Sentry for LaravelLearn about using Sentry with Laravel 8.x, 9.x and 10.x.docs.sentry.io이제부터는 이 링크를 참조해서 작업하면 된다본인의 맞는 라라벨 버전에 맞게 문서를 찾아서 하면 세팅 끝!sentry는 문서가 엄청 잘 되어있는 것 같다 본인의 라라벨 버전 확인 방법..