반응형

전체 글 428

MySQL EXPLAIN 실행 계획을 통한 쿼리 최적화

해당 포스팅은 MySQL의 EXPLAIN 명령어를 통해 쿼리의 실행 계획을 확인하고 이 계획을 바탕으로 쿼리 최적화를 진행해보며 정리한 내용입니다. 1. EXPLAIN을 통한 쿼리 최적화를 진행하게 된 이유 프로젝트가 어느 정도 마무리되고 솔루션화를 진행하는 과정에서 기존에 짜여진 테이블 구조 중 마음에 들지 않는 부분들을 리팩토링하기 위한 계획을 세우고 있었습니다. 결론적으로 리팩토링 계획에 대한 피드백은 '기능상 문제가 있는 거라면 수정하는 것이 당연하겠지만, 정상적으로 작동하고 있다면 테이블 구조를 변경했을 때 발생하는 사이드 이펙트도 충분히 고려되어야 한다.'였습니다. (구조가 바뀌면 해당 테이블을 사용하는 모든 쿼리에 영향을 주게 되고, 결국 해당 부분에 대한 테스트까지 다 다시 진행되어야 합니..

Programming/MySQL 2022.11.12

클라우드 환경 Service Discovery 개념 정리

해당 포스팅은 Spring Cloud의 Eureka, Spring Cloud Gateway 등, 클라우드 환경의 서비스 구성에 대해 공부하며 접하게 된 Service Discovery에 대한 개념 정리입니다. (프로그래밍적인 관점에서 바라본 Service Discovery에 대한 정리입니다.) 0. Service Discovery란? on-premise 서버 기반의 Monolithic Architecture의 문제점을 보완하기 위해 클라우드 환경을 이용하여 서버를 구성하는 Micro Service Architecture(MSA)가 몇 년 전부터 대세로 떠오르고 있습니다. MSA와 같은 분산 환경에서의 동작은 서비스 간의 원격 호출(API 호출)로 구성되며, 원격 호출은 각 서비스의 ip 주소와 port를..

빅 엔디언과 리틀 엔디언(Big Endian & Little Endian)

빅 엔디언과 리틀 엔디언이라는 생소한 개념을 접하며 정리한 내용입니다. 엔디언에 대해서 살펴보기 전에 비트와 바이트에 대한 내용부터 시작하여 살펴보도록 하겠습니다. 1. 비트와 바이트(데이터가 저장되는 방식) 눈에 보이지는 않지만 내부적으로 컴퓨터가 동작하는 원리는 비트(bit)라고 하는 '0'과 '1'로 표현되는 단위부터 시작됩니다. 비트는 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위로, 하나의 비트만으로는 많은 양의 데이터를 나타내기 부족하기 때문에 8개의 비트(bit)를 묶은 바이트(byte)라는 단위가 메모리에 저장되는 최소 단위로 정해졌습니다. (메모리 1칸은 1byte로 구성되어 있지만 실제 저장되는 데이터는 대부분 4byte 또는 8byte 크기로 구성됩니다.) 하나의 바이트..

Programming/Web 2022.11.05

스프링부트 spring-security-web을 사용한 IP 접근제어

해당 포스팅은 spring-security-web의 IpAddressMatcher와 spring의 interceptor를 활용하여 지정된 ip만 해당 서비스에 접근 가능하도록 설정하는 ip 접근제어를 구현한 내용입니다. (spring-security-web은 org.springframework.boot:spring-boot-starter-security:2.7.3에 포함되어 있습니다.) Interceptor @Component @RequiredArgsConstructor public class IpAddressAccessControlInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest..

MySQL JSON 데이터 타입에 활용되는 함수 정리

MySQL 5.7부터 DBMS 차원에서 JSON 데이터 타입이 지원되기 시작했는데요. 아래 내용은 최근 데이터베이스 쿼리에 JSON 함수를 사용해보면서 정리한 내용입니다. - JSON 타입에 저장? TEXT 타입에 저장? DB에 JSON 형식의 데이터를 저장할 때는 고려되어야 할 부분이 있는데요. 바로 해당 데이터를 저장할 컬럼의 타입으로 'JSON Type'을 쓸 것이냐, 'TEXT Type'을 쓸 것이냐, 입니다. MySQL에서 JSON Type에 데이터를 넣는 경우 내부적으로 binary 형태로 저장되며, TEXT Type에 데이터를 넣는 경우에는 string 형태로 저장되는데요. TEXT 타입의 경우에는 Type Conversion 없이 string 형태의 데이터를 그대로 전송해주면 되지만, JS..

Programming/MySQL 2022.10.29

MySQL 계정 생성 및 권한 부여 방법 정리

MySQL을 설치하게 되면 가장 먼저 사용되는 계정이 바로 root 계정인데요. root 계정의 경우 관리자 계정이기 때문에 데이터베이스에 대한 모든 권한을 가지고 있습니다. 때문에 실제 서비스에 사용되는 DB의 경우 실질적인 관리자만 root 계정을 사용하고 이외의 DB 사용자들은 용도에 맞는 권한을 부여받은 계정을 이용하는 것이 데이터베이스를 관리하는 데 있어서 좋은 방식입니다. 그러면 아래 내용을 통해 MySQL에서 계정 생성 및 권한을 부여하는 방법에 대해서 살펴보겠습니다. 1. 접속 및 Database 변경 //mysql 접속 > mysql -u root -p Enter password: //database 변경 > use mysql; //계정 조회 > select host, user, plug..

Programming/MySQL 2022.10.27

아이폰 예약 문자 보내는 방법(단축어 앱 사용)

갤럭시의 경우 스마트폰 내에서 지원하는 기능을 통해 문자 예약 발송이 가능한데요. 반면에 아이폰에서는 일반 메시지(SMS, MMS)에 대한 예약 전송 기능이 존재하지 않습니다. 때문에 아이폰에서 예약 문자를 보내는 방법을 인터넷에 찾아보면 통신사 별로 전송 가능한 방법들이 나오는데요. 이 방식은 통신사 별로 방법이 다르기 때문에 다소 번거로울 수 있으며, 알뜰폰의 경우 예약 문자 기능 자체가 불가능한 문제가 있습니다. 따라서 해당 포스팅에서는 통신사 상관없이 사용할 수 있는 '단축어'를 통한 예약 문자 발송 방법에 대해서 살펴보겠습니다. 먼저 '단축어' 앱을 실행하면 앱 하단에 '자동화' 부분을 찾을 수 있는데요. '자동화'를 클릭하면 '개인용 자동화 생성' 영역을 발견할 수 있습니다. '개인용 자동화 ..

IT Info 2022.10.25

MySQL, MariaDB 데이터베이스 백업 및 복구하는 방법

최근 개발 서버 테스트 중 DB 데이터가 손실되는 문제가 발생했습니다. 데이터의 중요성은 알고 있었지만 직접적인 담당 범위가 아니라고 생각했기 때문에 백업에 대해서는 신경을 쓴 적이 없는데요. 이번 기회를 통해 MySQL, MariaDB에서 데이터베이스 백업 및 복구하는 방법과 자동 백업을 설정하는 방법에 대해 살펴보면서 정리한 내용입니다. (해당 포스팅은 mysqldump를 사용한 DB 백업 및 복구 방법에 대한 포스팅이며, 자동 백업에 대한 포스팅은 따로 작성하여 하단에 링크로 추가할 예정입니다.) mysqldump 백업에서 사용되는 mysqldump는 MySQL에서 제공하는 대표적인 덤프 프로그램이며, 논리적 덤프를 수행할 수 있는 도구인데요. 데이터베이스 전체의 덤프부터, 각 데이터베이스 단위의 ..

Programming/MySQL 2022.10.24

FTP Active Passive Mode 정리

FTP란? FTP는 파일을 전송하는 통신 규약인 File Transfer Protocol의 약자인데요. FTP 서버에 파일을 업로드, 다운로드할 수 있도록 해주는 프로토콜이며, 이는 FTP 서버와 FTP 클라이언트 간의 통신에 사용됩니다. FTP 파일 전송에는 두 개의 port가 사용되는데요. 하나는 사용자 인증 및 명령어 입력을 위한 제어 채널(Command Port)이고 다른 하나는 실제 파일 전송을 위한 데이터 채널(Data Port)입니다. 연결 방식에는 Active 모드와 Passive 모드, 두 가지 방식이 있습니다. 기본적인 동작 방식은 Active Mode이며, Active 모드의 단점을 해결하기 위해 나온 것이 바로 Passive 모드인데요. 아래 이어지는 내용을 통해서 각 연결 방식의 ..

Programming/Web 2022.10.22

Javascript 테이블 행의 값 가져오는 방법(table.rows / row.cells)

javascript에서 행의 값이 필요할 때 table.rows 함수와 row.cells 함수를 활용하여 값을 가지고 오는 코드입니다. (rows collection, cells collection) html 및 javascript 코드 중점으로 올리고 css의 경우 포스팅 맨 하단부에 추가해놓을 테니 필요하신 경우 참고 부탁드리겠습니다. First Name Last Name Phone Email Date of Birth Susan Connor (02) 338-2765 jmatman@gmail.com 01/13/1979 ... (생략) (html 코드, 단순한 테이블 구조) (행의 값을 가져오는 javascript 코드) table.rows 함수를 통해 rows collection을 가져올 수 있으며, ..

MultipartFile to File 차이점과 변환 방법(Java)

Spring에서는 클라이언트가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있도록 MultipartFile 인터페이스를 제공합니다. 이렇게 업로드된 파일은 저장 또는 다른 처리를 위해 MultipartFile File 서로 간의 변환이 종종 필요한데요. 이어지는 내용을 통해서 MultipartFile과 File의 차이점 및 변환 방법을 살펴보겠습니다. MultipartFile MultipartFile interface는 Spring에서 업로드된 파일을 다룰 때 사용되는 인터페이스로 파일의 이름과 실제 데이터, 파일 크기 등을 구할 수 있습니다. /* Spring에서 MultipartFile 타입을 매개변수로 사용하기 위해서는 MultipartResolver 구현체가 Bean으로 등록되어 있어야 하는데요..

포토샵 WebP 열기 및 저장하는 방법(플러그인)

위와 같이 포토샵에서 WebP 파일을 여는 것이 안되거나, 해당 확장자로 저장하는 것이 안 되는 경우가 있는데요. WebP는 구글에서 만든 이미지 포맷으로 어도비 포토샵에서는 최근 23.2 버전 업데이트를 통해 WebP 파일을 지원하도록 하였습니다. (플러그인 설치하는 방법 아래에 WebP에 대한 간단한 설명이 있으니 궁금하시다면 참고하셔도 좋을 것 같습니다.) Adobe 구독 서비스를 사용하는 사용자의 경우에는 업데이트를 통해 WebP를 사용하면 되지만, 이전 버전의 포토샵을 사용하고 있다면 직접 플러그인을 설치해야 WebP 파일을 열거나 저장할 수 있는데요. (아래 방법을 통해 간단하게 설치 가능합니다.) https://github.com/webmproject/WebPShop/releases (플러그..

Photoshop 2022.10.12

Spring Boot + GraphQL 기본적인 사용법 정리

REST를 대체한다고? GraphQL(Graph Query Language)란? 시작에 앞서 GraphQL이란 무엇인지 간단하게 살펴보면, 페이스북에서 개발된 쿼리 언어인 GraphQL은 기존에 많이 사용되던 RESTful API와는 다른 형식의 인터페이스입니다. 가장 큰 차이로는 RESTful API가 URL, Method 등의 조합으로 다양한 Endpoint를 가지는 반면, GraphQL은 단 하나의 Endpoint 만으로 데이터를 요청하고 응답받을 수 있는데요. 이 방식을 통해 기존의 RESTful API의 단점인 Over-Fetching, Under-Fetching 문제를 해결할 수 있습니다. /* Over-Fetching(오버 패칭) 오버 패칭은 클라이언트에서 데이터를 요청했을 때, 실제로 사용..

애드센스 광고 안 나오는 경우 조치 방법(data-ad-status="unfilled")

블로그를 운영하는 사람에 따라 다를 수는 있지만, 대부분 티스토리를 운영하시는 분들은 애드센스로 인한 수익을 추구하게 되는데요. 때문에 조회수가 어느 정도 잘 나오는 포스팅에서 광고가 노출이 안 되는 것은 신경이 안 쓰일 수 없는 부분입니다. 저 역시 포스팅된 글들 중 약 20~30%가량에서 애드센스 광고가 나오지 않고 있으며, 그중에서 조회수가 높은 글들도 있기 때문에 그냥 방치하기보다는 원인이나 해결할 수 있는 방법을 찾아보자는 생각에 몇 가지 조치를 취할 수 있는 방법을 찾아보았는데요. 티스토리 현재 상황 우선 현재 상황부터 살펴보자면, 당연히 애드센스는 승인된 상태이며 카카오 광고인 '애드 핏'과 구글 '애드센스'를 모두 적용해놓은 상태입니다. 또 대부분의 포스팅에서 광고가 잘 나오고 있지만 나머..

IT Info 2022.10.08

Java Enum 활용하기2 - ConverterFactory

Java Enum을 활용한 방법 중 두 번째, ConverterFactory 인터페이스를 구현한 CustomConverter를 만들어 HTTP 요청에서 Enum 값을 받을 때 Enum 값 자체를 받는 것이 아니라 legacyCode를 받아 자동으로 Enum으로 형 변환하는 방법입니다. @GetMapping("/user/{idx}") public ResponseEntity getUserDetail(@PathVariable Long idx) { ... } 스프링에서 HTTP Query String을 통해 전달되는 정보는 모두 문자열(String)로 인식됩니다. (HTTP 요청 파라미터는 모두 문자열로 처리) 하지만 위 예시와 같이 컨트롤러에서 Long (또는 Integer, boolean Enum 등)으로 ..

Programming/Java 2022.10.08
반응형