EXPLAIN 명령어는 SQL 쿼리의 실행계획을 확인하기 위해 사용된다. ( 사실 나도 실무에서는 안(못)써봤다.. ) 실제로 쿼리에 대해서 확인해보고 속도를 조절하기 위해서 쓸 때에는EXPLAIN을 찍고 쿼리가 어떻게 실행될지, 어떤 인덱스가 사용될지, 등의각 단계에서의 예상비용등을 출력해보고 확인해서 쿼리를 수정한다. MySQL을 기준으로 정리해볼 예정이다 1. EXPLAIN 명령어 쓰는법예를 들어 , 아래와 같은 SELECT 쿼리가 있다고 가정하자.SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York'); 이 쿼리에 대해 실행 계획을 확인하려면, EX..
CS 정리
최근 모노레포라는 말을 여러 개발 커뮤니티에서 들을 수 있었다.레포별로 다른 프로젝트를 운영하고 있으나,새로운 서비스(프로젝트)를 구축하기 위한 비용이나 중복된 코드와, 프로젝트 관리에 대한 비효율 증가로 인해모노레포로 돌리려는 것을 고안하고 있다 등의 내용이었다. 예전에는 백엔드 레포랑, 프론트엔드 레포를 따로 나눠서 별도의 리포지토리에서 관리하는 방식이 일반적이었다.이렇게 각기 다른 레포에서 프로젝트를 관리하는 것을 멀티레포라고 하는데,아무래도 프로젝트가 독립적으로 관리되므로, 프로젝트간의 의존성 문제가 줄어든다는 장점이 있다. 하지만 이제 그런 프로젝트들이 점점 대규모로 성장해가거나, 강력한 협업이 필요한 환경에서는 모노레포가 더 효율적일 수 있다.그래서 모노레포와 멀티레포에 대해서 조사해봤다! 모..
관점지향프로그래밍,,트랜잭션 공부하다가 튀어나왔는데자바를 역시 공부해야할 것 같다aop검색하니까 스프링 aop가 가장 먼저 튀어나온다자바.. 그는 도대체 얼마나 엄청난 친구인 것인가어느날 그냥 궁금증이 들었다라라벨에서 여러 데이터 커넥션 별로 트랜잭션을 설정하고 중간에 터지게되면여러 데이터 커넥션이 다 롤백이 될까? 하고 이런 코드를 단톡에 날렸는데,,public function funcName(){ DB::connection('connA')->beginTransaction(); DB::connection('connB')->beginTransaction(); DB::connection('connC')->beginTransaction(); try { DB::connecti..
라라벨 프로젝트에서 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- 트랜잭션이 성공적으로 완료되면, 데이터베이스는 일..
1. 캐시란?- 자주 참조되는 데이터나 계산 결과를 미리 저장해두어, 반복적인 데이터 접근이나 연산 속도를 빠르게 하기 위해 사용되는 고속의 임시 저장소를 모두 일컫어 캐시라 한다.- 주로 자주 접근하는 데이터에 대해서 연산 속도를 최소화하여 좋은 퍼포먼스를 내기 위해 사용한다- 자주 접근해야하는 데이터에 대해 접근 시간을 줄이고 시스템 성능을 향상 시키기 위해 사용한다고 보면 됨! + 내 생각* 쇼핑몰 같은 경우 상품상세페이지에 접근할 때 여러가지 데이터를 데이터베이스를 통해 가져오는데,상품정보 뿐만 아니라 관련 광고데이터, 배너데이터, 상품리뷰, 상품문의, 그 외 상세페이지에 들어가는 정보들이 무수하게 많다.그 중 자주 상품정보데이터는 계속 바뀔 수 있기 때문에 캐시를 하는 것은 좀 무리라고 생각이 ..
IT 개발자 단톡방에서 토론이 벌어졌다개발을 할건데 JPA를 할까 mybatis를 할까 라는 토론이었다여기서 사람들은 DDD라는 개념을 가져와서 토론을 진행했다나는 DDD를 모른다...!토론의 맥락을 따라가기 위해 DDD 개념을 찾아보았다 1. DDD란?DDD는 "Domain-Driven Design"의 약자로, 소프트웨어 개발 방법론 중 하나다. 이 방법론은 복잡한 소프트웨어 시스템을 개발할 때, 도메인(문제 영역)의 개념과 로직을 중심으로 설계하는 것을 강조한다.쉽게 말해서, DDD는 프로그램의 구조를 실제 비즈니스나 문제 상황을 반영하도록 만드는 것을 목표로 한다. 2. DDD의 주요개념도메인: 소프트웨어가 해결하려는 문제 영역. ex) 전자상거래 시스템에서는 상품, 주문, 결제 등이 도메인에 해당..
면접 단골 문제 1번 ..정규화란 무엇인가요?정규화를 실제로 해본 경험이 있나요?정규화를 해봤다면, 제 몇 정규형까지 만족시키게끔 고려하는 편인가요?1. 정규화 개념- 데이터 모델링을 할 때, 최대한 중복 데이터를 허용하지 않아야 저장공간을 효율성 있게 사용할 수 있고, 이에 따른 업무 프로세스의 성능을 기대할 수 있다. 이렇게 중복 데이터를 허용하지 않는 방식으로 테이블을 설계하는 방식을 정규화라고 한다.* 데이터 이상현상을 줄일 수 있음* 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보할 수 있음 2. 정규화 단계제 1정규화(1NF) -> 제 2정규화(2NF) -> 제 3정규화(3NF) -> BCNF(boyce-codd Normal Form) 정규화 -> 제 4정규화 .. 더 많은 정규화 단계..