본문 바로가기

개발 이론59

[mySQL] 인덱스 개념과 복합 인덱스 (1) 인덱스란 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차를 생성하는 것이다. insert, update, delete의 성능이 좀 느려질 수 있지만 select 성능을 향상 시킬 수있다. 인덱스는 B-tree라는 구조를 사용하는데 이와 관련해서는 이 블로그를 참고 바란다.!(그림으로 잘 설명되어있음) 인덱스는 한마디로 쿼리 결과값을 빠르게 하고 싶어서 생성한 것이다. 그럼 인덱스는 어떤 칼럼으로 생성해야하는데?? 인덱스 칼럼 생성 일반적으로는 카디널리티가 높은 것을 잡아야한다고 한다. 카디널리티란 해당 컬럼 데이터의 중복된 수치를 말하는데 예를 들어 학번 과 성별의 카디널리티를 비교하면 학번이 당연히 높다. 카디널리티 높은 것로 잡는 이유는 필터링이다. 최대한 많은 부분을 걸러내기 위해서이다. 그럼 .. 2024. 3. 7.
프록시??? 스프링 AOP?? 트랜젝션?? (2) 지난 블로그에서 프록시와 프록시 패턴에 대해서 알아보았다. 간단하게 정리해보자면 프록시를 사용하는 이유는 원본 객체를 수정할 수 없는 상황을 극복하기 위해서였다. 예를 들어 A라는 클래스를 수정할 수 없다고 해보자. 근데 A라는 클래스 앞에 x라는 기능을 넣고 싶다. 이럴때 프록시라는 것을 통해 A수정없이 x라는 기능을 추가할 수 있다. 그러니까 프록시를 이용해 부가적인 기능을 부여(트랜젝션, 시간측정등), 또는 타깃에 대한 접근방법 제어(지연로딩)일때 사용된다. 다만 프록시 패턴을 사용하면 - 인터페이스를 구현해서 프록시 객체를 생성해야하는 코드 복잡도 증가 - 모든 메서드에 부가기능 구현 해야하는 중복코드 발생 과 같은 단점이 존재한다. 그래서 나온게 동적 프록시이다 동적 프록시 프록시의 단점 해결하.. 2024. 3. 2.
[Spring Batch] 예제만들어보기 이전 블로그에서 간단하게 개념을 살펴보았다. 이번에는 Spring Batch 5 기준 예제를 만들어서 적용해볼 예정이다. 이번 예제는 PayHistory테이블에서 pay_done상태의 데이터를 뽑아 Adjust와 AdjustDetail테이블에 정산하는 것이다. 여기서 주의하실점 PayHistory테이블의 userId는 서비스 수행자의 id라고 가정한다. Tasklet을 이용 일단 나의 로직은 이러하다 PayHistory에서 pay_done인 데이터들 가져와서 -> Adjust에 PayHistory의 userId기준으로 데이터가 있다면 거기다가 값을 더해주고 -> AdjustDetail 데이터도 생성한다. -> 만약 Adjust에 PayHistory의 userId기준으로 데이터가 없다면 Adjust 데이터.. 2024. 2. 29.
[mySQL] Explain이 무엇인가? mysql 인덱스 정리하려다가 Explain보는 법? 좀 공부하려고 하다보니... 적어놔야할거같아서... Explain이 뭐냐?? mysql doc에 따르면 "select, delete, insert, replace, update 쿼리에 대해 Mysql이 어떻게 실행했는지 정보를 보여준다" 라고 되어있다. 즉, 데이터베이스가 데이터를 찾아가는 일련의 과정을 보여주는 것이다. explain을 통해 기존의 쿼리 튜닝 뿐만 아니라 성능 분석, 인덱스 전략 수립등을 할 수 있다고 한다. Explain 어떻게 사용하는데? 너무 간단하다. 사용하고자하는 쿼리 맨앞에 "Explain"만 붙이면 끝! Explain select id from user where name = 'test' 그럼 테이블이 이렇게 나온다.(해.. 2024. 2. 29.
[Spring Batch] 개념 개인프로젝트때 스프링 배치를 사용했다. 근데 사실 자신감이 없다. 이부분에 대해서는 스프링 배치를 사용해보고 싶어서 , 필요해서 사용한거긴하지만 코드에는 자신이 없었다.. 근데 이걸 멘토님이 보고 알아채셨다.. 혹시 여기 자신없죠? 라고 하셨다... 역시 현업개발자분들의 눈은 못 속이는 군..ㅎㅎㅎ 그래서 정리하는 스프링 배치! 배치란? 배치란 간단하게 일관처리라는 의미이다. 데이터를 실시간으로 처리하는 것이 아니라 일괄적으로 처리하는 작업이다. 근데 왜?? 실시간으로 처리하지 않고 일괄적으로 처리할까?? 예를 들어보자. 대부분의 커머스 사이트에서는 매일 전날의 데이터를 집계한다. 이 집계과정을 어디서 수행해야할까? 1. 매번 검색할때마다 집계를 수행해야할까? -> 그건 좀.. 데이터가 5십만개에서 1억.. 2024. 2. 27.
Spring Context는 모든 빈들을 프록시로 만들까??? 내가 얼핏 듣기로는 스프링 컨텍스트가 프록시로 만든다는 말을 들은 적이 있는데.. 확실하지가 않다.. 모든 빈들을 프록시로 만드는 건지.. 그래서 간단하게 테스트 해보았다. @Component public class Service { public void test(){ System.out.println("test"); } } @Configuration public class Config { @Bean public Service service(){ return new Service(); } } public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(.. 2024. 2. 22.
728x90