반응형
전체 글

전체 글

    Mysql 실행계획 설명

    프로그램의 성능을 높히기 위해서는 DB튜닝이 필요하다. Mysql에서 튜닝을 하기 위해서 제공하는 쿼리의 실행 계획에 대해 정리해보자. Mysql의 데이터 처리 방식우선 Mysql의 데이터 처리방식에 대해 정리해보자. - Mysql은 단일 코어로 데이터를 처리하기 때문에 멀티코어로 scale out을 진행하는 것 보다 cpu 자체의 성능을 높히는 scale up을 하는 것이 더 효율적이다. - Oracle과 달리 mysql은 nested loop join 알고리즘만 사용한다. - Nested Loop Join은 선행 테이블의 검색 결과 값 하나하나 테이블 B와 조인하는 방식이다. 그래서 데이터 양이 적을 때는 상관이 없으나 데이터가 많은 테이블끼리 조인할 시 성능에 문제가 있을 수 있다. 그래서 내부적으..

    애플 공식 홈페이지에서 IMac 21.5인치 CTO모델 구입 후기

    집에 컴퓨터가 없어서 하나 장만하기 위해서 퇴직금으로 공식홈페이지에서 AOC로 IMac 21.5인치를 주문했다. 스펙은 i7 Quard Core에 16기가 메모리 그리고 256 SSD이다. 박스도 크고 처음에 받았을때 당황했다. 그래도 꺼내 놓고 보니 모습이 진짜 이뻤다. 사길 잘한 것 같다 키패드가 있는 모델로 키보드를 변경해서 받았다. 키감이 아직 어색하지만 익숙해지겠지.. 그래도 맥북에 있는 키보드보다는 훨씬 괜찮다. 설치가 완료된 모습은 생각보다 괜찮은 것 같다. 오래 사용해야지.

    Mysql Exists와 IN절 설명과 차이점

    두 개 모두 where절에 조건을 보고 결과를 걸러낼때 사용하는데 정리가 잘 안되서 정리해봤다. Exists 서브쿼리가 반화나는 결과값이 있는지를 조사한다. 단지 반환된 행이 있는지 없는지만 보고 값이 있으면 참 없으면 거짓을 반환한다.1SELECT * FROM sample1;cs1SELECT * FROM sample2;cs 두 개의 테이블중 조건에 맞는 Row만 추출된다. 1SELECT * FROM sample1 s1 WHERE EXISTS(SELECT * FROM sample2 s2 WHERE s1.no = s2.no);cs그럼 반대로 조건에 맞지 않는 ROW만 추출하고 싶으면 어떻게 해야할까?1SELECT * FROM sample1 s1 WHERE NOT EXISTS(SELECT * FROM sam..

    Mysql의 서버엔진과 스토리지 엔진

    Mysql에는 두 가지 형태의 엔진이 존재한다. 아래 그림에서 보면 하단에 길게 표시된 Pluggable 스토리지 엔진을 제외하고 위에 모든 부분이 서버엔진이다. 엔진별 특징 정리서버엔진 (SQL Interface, Parser, Optimizer, Cache & Buffer) - 클라이언트의 요청을 받아 SQL을 처리하는 DB 자체의 기능적인 역할을 수행 - DB가 SQL을 이해할 수 있도록 쿼리를 파싱하고 메모리, 물리적 저장장치와 통신하는 기능을 수행 - 디스크와 직접적인 접근을 제외한 대부분의 역할 수행 스토리지 엔진 - 서버 엔진이 필요한 데이터를 물리적 장치에서 가지고 오는 역할을 수행 - 물리적 저장장치에서 데이터를 읽어오는 역할을 수행하고 플러그인 형식으로 여러 스토리지 엔진을 필요에 따라..

    Spring Validation을 이용해서 요청 검증처리

    대게 개발을 진행할 때 front에서 validate를 체크하고 민감한 정보에 대해서는 한번더 체크를 진행하고 작업을 했었다. 하지만 클라이언트에서만 validation을 체크하게 되는 경우 브라우저에서 악의적인 행동에 대해서 대응하기 어려워질수 있기 때문에 백엔드에서도 Validation을 처리해야한다. 여기서 사용되는 @valid 어노테이션들을 알아보자. 1. DTO validation 선언 우선적으로 DTO에 각 속성에 필요한 @valid 옵션들을 추가한다.1234567891011121314151617181920212223242526272829303132package com.wedul.springboottest.rest.dto; import lombok.*; import javax.validatio..

    무라카미 하루키 기사단장 죽이기 2

    기사단장 죽이기 2국내도서저자 : 무라카미 하루키(Haruki Murakami) / 홍은주역출판 : 문학동네 2017.07.12상세보기친구 아버지의 집에 머물고 그곳에서 기사단장 죽이기 그림을 보면서 시작된 이야기가 드디어 종료되었다. 멘시키의 그림을 부탁받고 마리에의 그림을 그려주면서 기사단장도 만나고 메타포들을 만나면서 주인공은 많은 깨달음을 얻었다. 특히 이상한 현상을 경험하면서 현재의 모든것이 진짜일수도 있고 거짓을수도 있다는 생각을 가지게 되었고 모든건 사람의 마음먹기 달려있다는 말을 하며 이야기가 종료되었다. 초상화를 그려주는 일을 하는 주인공이 여러 초상화를 완성시키지 않고 그대로 놔두어야 한다고 하는 대목이 많이 존재한다. 이는 완성의 의미가 아니라 이미 그자체로 의미가 있고 그걸 어떻게 ..

    Spring Application Test 정리

    Spring에서 Junit을 통해 테스트하는데 익숙해져있다. 이 방식과 더불어서 Spring의 MockMvc를 이용하여 Web Layer를 테스트 하는 방법에 대해 공부해보자. 우선 테스트를 진행하기 위해서 Spring-boot-starter-test를 추가해야한다. Gradle1testCompile("org.springframework.boot:spring-boot-starter-test")cs 그러면 테스트 클래스 파일에 @SpringBootTest와 @RunWith가 추가된다. @SpringBootTest는 Spring Boot에서 주 구성 클래스를 찾아서 Spring Application Context를 시작하도록 하는 어노테이션이다. Controller 테스트를 진행할 떄 서버를 가동시키고 Te..

    Java 9 이후 deprecated된 Spring @PostConstruct와 @PreDestory 대안소개

    이 둘은 Bean의 생성 (생성자가 호출 된 후)과 소멸 시점에서 실행할 부분을 정의할때 사용한다. 하지만 @PostConstruct와 @PreDestory 어노테이션은 Java 9에서 Deprecated 되었고 Java 11에서는 제거될 예정이다. 그래서 이와 같은 동작이 필요할 때 사용할 수 있는 대안을 소개한다. InitializingBean, DisposableBean 인터페이스 구현 두 개의 인터페이스를 구현하면서 afterPropertiesSet()과 destroy() 메서드를 재정의하면서 deprecated된 두개의 어노테이션을 대신할 수 있다. 123456789101112131415161718192021@Servicepublic class UserService implements UserS..

    Swagger 라이브러리를 사용하여 API 내용 정리하기

    Web 개발을 진행하다보면 다양한 API를 개발하게 된다. 하지만 정리하기가 쉽지 않고 이를 위해서 인터페이스정의서를 계속 정리하기도 사실 쉽지 않다. 이를 위해서 한번에 API 내용이 정리되어 한눈에 볼 수 있도록 제공해주는 library가 있다. 이 library인 swagger를 적용해보자. 1. 라이브러리 추가 Swagger 사용을 위한 라이브러리를 gradle에 추가하자.12compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.5.0'compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.5.0'cs 2. Swagger 설정 관련 내용 Configu..

    [Spring Boot] Maven에서 Gradle로 변경 후 발생한 FreeMarkerWebConfiguration NoSuchFieldError 수정

    Maven에서는 큰 문제가 없었으나 Gradle로 프로젝트를 변경하고 나서 Freemaker NoSuchFieldError 오류가 계속 발생했다. Freemaker는 템플릿엔진인데 나는 이것을 사용하지 않고 JSP를 사용했는데 왜 오류가 발생하는지 원인은 처음에 몰랐다. 그래서 구글링을 하였지만 쉽게 원인이 해결되지 않았다. 하나 발견하여 freemaker disable을 적용을 하였으나 여전히 오류가 발생했다.https://fastfoodcoding.com/questions/1506440393799/how-to-disable-freemarker-templates-in-spring-boot 1. Configuration 페이지 설정1@EnableAutoConfiguration(exclude = { Fre..

반응형