반응형

Programming 362

ngrok 외부에서 로컬 개발환경 localhost 접근하기(mac)

ngrok을 사용하여 외부에서 로컬 개발환경 localhost에 접근하는 방법을 살펴보겠습니다. (기본적인 동작은 설치 및 가입 이후 간단한 명령어만 사용하면 되기 때문에 크게 어렵지 않습니다.) 먼저 ngrok에 대해서 설명하자면, ngrok은 로컬 개발환경인 localhost에서 구동 중인 웹 서비스를 외부 인터넷 환경에서 접근할 수 있도록 만들어주는 툴입니다. Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels. (ngrok 공식 홈페이지에서는 다음과 같이 설명되어 있습니다.) 웹 서비스를 개발하다 보면 localhost가 아닌 외부 환경에서 개발 중인 서비스에 접근해야 하는 경..

Programming/Web 2022.04.01

생성자 주입과 필드 주입, 수정자 주입 정리 (feat. 의존성 관계 주입)

생성자 주입(Constructor Injection), 필드 주입(Field Injection), 수정자 주입(Setter Injection)은 모두 의존성 관계 주입이라고 합니다. 각각의 의존성 관계 주입 방법에 대해서 알아보기 전에 의존성과 의존성 관계 주입(Dependency Injection, DI)이 무엇인지에 대해서 먼저 알아보고 시작하겠습니다. 의존성과 의존성 관계 주입(Dependency Injection, DI) '의존성 관계 주입'은 Spring 프레임워크의 3가지 핵심 프로그래밍 모델 중에 하나로 Spring에서만 사용되는 용어가 아니라 객체지향 프로그래밍 어디서나 통용되는 개념입니다. 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 하며, A클래스가 B클래스 또는 인터페..

Spring Batch 개념과 구조, 동작 방식에 대한 정리

시작에 앞서, 해당 포스팅은 Spring Batch의 예시 코드에 대해 정리하고 설명하기보다 Spring Batch를 적용하기 위해 공부하며 정리한 개념과 구조, 동작 방식에 대해 공부한 기록을 남긴 것에 더 가깝습니다. 실제 예시 코드와 사용 방법에 대한 더 자세한 내용은 포스팅 맨 하단에 제가 보고 공부했던 좋은 포스팅들의 링크를 함께 두겠습니다. 잘못된 부분이나 궁금한 부분은 댓글로 남겨주시면 답변드리겠습니다. 감사합니다. Spring Batch란, 먼저 배치 프로세싱은 '일괄처리'라는 뜻을 가지고 있으며, 일괄처리의 의미는 일련의 작업을 정해진 로직으로 수행하는 것이라고 할 수 있습니다. 공식 문서에 따르면 Spring Batch는 이러한 배치 프로세싱을 기반으로 로깅/추적, 트랜잭션 관리, 작업..

Redis 동시성 처리를 위한 Transaction 사용 (MULTI, EXEC, DISCARD, WATCH)

Single-thread 기반의 Redis 동시성? Redis는 싱글 스레드(Single-thread) 기반으로 데이터를 처리합니다. 싱글 스레드를 기반으로 동작하지만 여러 명의 클라이언트 요청에 동시에 응답하는 동시성도 가지고 있는데요. 이것이 가능한 이유는 레디스의 동장 원리에서 알 수 있습니다. Redis의 동작 원리를 살펴보면 Redis는 이벤트 루프(Event Loop)를 이용하여 요청을 수행합니다. 즉, 실제 명령에 대한 작업(Task)은 커널 레벨에서 멀티플렉싱(Multiplexing)을 통해 처리하여 동시성을 보장합니다. 쉽게 유저 레벨에서는 싱글 스레드로 동작하지만, 커널 I/O 레벨에서는 스레드 풀을 이용하는 것입니다. (위 이미지는 참고를 위한 node.js의 event loop 이미..

Spring Boot 타임리프 Thymeleaf layout 적용하는 방법

타임리프(Thymeleaf)에 대해서 간단하게, 타임리프는 서버 사이드 템플릿 엔진(Template Engine)의 한 종류로, 쉽게 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해주는 역할을 합니다. 타임리프(Thymeleaf)는 HTML의 속성(Attribute)을 기반으로 작동되기 때문에 기존의 HTML 구조를 건드리지 않고 동작합니다. 때문에 서버를 구동하지 않을 때는 순수 HTML을 생성하며, 서버를 구동했을 때는 동적 HTML을 생성하게 됩니다. 'th:속성' 형식을 통해 값을 치환해주는 방법이 적용되며, 순수 HTML을 기반으로 하기 때문에 내추럴 템플릿으로도 불립니다. (추가로 Spring에서 공식적으로 Thymeleaf 사용을 권장하고 있습니다.) 레이아웃을 사용..

Querydsl Paging 페이징 처리, Custom PageRequest 사용하는 이유

'Querydsl Paging 페이징 처리' 프로젝트에서 Get요청을 통해 여러 건의 데이터를 가져올 때, 페이징(Paging) 처리가 필요한 경우가 많습니다. Spring Boot에서는 Pageable, PageRequest를 사용하여 페이징 처리를 하는데요. 페이징은 Pageable, PageRequest를 활용한 큰 틀 안에서 조금씩 다른 방법으로 사용될 수 있는데, 여기서는 Custom PageRequest를 사용한 페이징 처리에 대한 예시를 볼 수 있으며, 왜 Custom PageRequest를 만들어서 사용하는지에 대해서도 알 수 있습니다. *** (해당 포스팅은 JPA, Querydsl을 사용할 수 있는 환경이 세팅된 상태에서 작업했으며, Querydsl 환경 설정은 바로 아래 글을 참조하시..

구글맵 google map API 사용법 및 marker 추가, 변경하는 법 (JavaScript)

구글맵 google map API를 사용하는 방법 및 marker를 추가하고 변경하는 작업을 알아보겠습니다. (사용할 API는 'Maps JavaScript API'입니다.) 진행 과정은 먼저 Google Cloud Platform에서 'Maps JavaScript API' 라이브러리 사용 설정 및 API 키 발급받는 과정 이후 실제 html에 구글맵 API를 사용하는 코드를 적용해보겠습니다. 'Google Cloud Platform 설정' (Google Cloud Platform에 Project가 등록되어있다는 가정하에 진행됩니다.) Google Cloud Platform -> API 및 서비스 -> 라이브러리 -> Maps JavaScript API => 'Maps JavaScript API' 사용 ..

MySQL 프로시저 기본적인 사용법, insert 더미데이터 넣기

MySQL에서 프로시저(Procedure)를 사용하여 더미 데이터를 넣는 작업을 해보며 정리한 MySQL 프로시저 기본적인 사용법입니다. 프로시저(Prodecure)란, 먼저 프로시저란 하나의 요청으로 여러 SQL문을 사용할 수 있는 방식입니다. 처리 성능과 재사용면에서의 단점은 존재하지만, 하나의 요청으로 여러 개의 SQL문을 실행할 수 있기 때문에 네트워크 소유 시간을 줄일 수 있다는 장점이 있고, 보수성이 뛰어나며, DB 관련 처리를 API처럼 만들어서 제공할 수 있다는 장점이 있습니다. 이처럼 프로시저는 사용 방법에 따라 다양한 기능을 적용할 수 있는데요. 아래 예시는 프로시저를 통한 insert문의 반복을 통해 더미 데이터를 넣는 예시입니다. DELIMITER $$ CREATE PROCEDURE..

Programming/MySQL 2022.02.17

DB 데이터베이스 인덱스(Index) 기본 개념과 설명

1. 인덱스(Index)란? Index는 RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조를 말하며, 테이블 내에 1개의 컬럼 혹은 여러 개의 컬럼을 이용하여 생성합니다. 특정 테이블의 컬럼을 인덱싱(Indexing)하면 검색을 할 때 테이블의 레코드를 전부 다 확인하는 것이 아니라 인덱싱 되어있는 자료 구조를 통해서 검색되기 때문에 검색 속도가 빨라지는 것입니다. Index는 빠른 검색 속도뿐만 아니라 레코드 접근에 대한 효율적인 순서 매김 동작에 대한 기초를 제공합니다. 인덱스를 설명할 때는 책을 통해서도 많이 비유되는데, 인덱스는 책에서 '목차'라고 생각할 수 있습니다. 책에서 정보를 찾을 때도 원하는 카테고리를 목차에서 찾고, 목차에 있는 페이지 번호를..

DB 트래픽 분산을 위한 DataSource Read, Write 분기 처리

'Spring Data JPA, Master - Slave 구조에 따른 Read, Write 분기 처리' DataSource Read, Write 분기 처리는 많아지는 데이터베이스 요청에 따라 데이터베이스의 부하를 줄이기 위한 DB 이중화 구성 Master - Slave에서 많이 사용됩니다. (Master - Slave 구조를 사용하는 가장 큰 이유는 Master에서는 쓰기, 수정, 삭제 요청을 처리하고 Slave에서는 읽기 요청만 처리하여 병목을 줄여주기 위함입니다.) *** 해당 포스팅은 MySQL Replication 및 Master -Slave 구조에 중점을 둔 것이 아니라 이 구조에서 Transaction ReadOnly 여부에 따라 DataSource를 나눠서 Connection을 가져오는 방..

반응형