반응형

전체 글 424

생성자 주입과 필드 주입, 수정자 주입 정리 (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' 사용 ..

티스토리 사이드바 이미지배너 적용하는 방법

'티스토리 TISTORY 사이드바 이미지 배너 적용하는 방법' 구글링을 통해 다양한 티스토리 블로그에 방문하다 보면 사이드바 공간을 활용하여 직접 만든 이미지 배너를 사용하는 것을 종종 볼 수 있는데요. HTML 배너를 통해 광고를 추가로 넣거나, 이미지 배너를 사용하여 용도에 따라 다른 사이트로 링크를 거는 방식을 통해 블로그의 활용도를 더 높일 수 있습니다. 그렇다면 사이드바에 직접 만든 이미지 배너를 적용하는 방법을 살펴보겠습니다. *** 필요한 것은 티스토리 사이드바가 있는 레이아웃이 적용되어있어야 하며, 이미지 배너에 적용할 이미지가 필요합니다. (이때 이미지의 사이즈는 css를 통해 수정 가능하지만, css에 대해서 잘 모르는 경우 더 번거로울 수 있기 때문에 처음부터 250px +- 정도의 ..

IT Info 2022.02.21

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을 가져오는 방..

로봇 관련주 에스피지, 해성티피씨 (고정밀 감속기, 싸이클로이드 감속기)

'삼성·LG·현대차도 뛰어들었다…한 달새 2배 뛴 로봇株' - 현대차그룹 현대차그룹은 지난해(21년) 소프트뱅크 그룹으로부터 미국 로봇 전문 업체 보스턴 다이내믹스 지분 80%를 인수하였으며, 정의선 현대자동차그룹 회장이 CES 2022 개막 하루 전 현대자동차 프레스 컨퍼런스에 보스턴 다이내믹스의 4족 보행 로봇 '스팟'과 함께 등장하며 인상을 끌었습니다. 현대자동차 월드와이드 홈페이지를 통해 볼 수 있는 것처럼 현대차그룹은 더 이상 자동차만 만드는 회사가 아닌 '로보틱스 비전'을 가진 회사로 변화하고 있습니다. - 삼성전자 삼성전자는 지난해 초 CE(소비자 가전) 부분 산하 로봇 산업화 태스크포스(TF)를 꾸린데 이어, 지난해 12월 조직개편을 통해 태스크포스(TF)를 정식 조직인 '로봇 사업팀'으로..

Finance 2022.02.07

SELECT FOR UPDATE / JPA를 사용한 비관적 잠금

'동시성(Concurrency)' 웹 서비스에서는 다수의 사용자들이 데이터베이스에 동시에 접근하는 경우가 빈번하게 발생합니다. 때문에 데이터의 일관성에 대한 처리가 필요한데요. 이를 '동시성(Concurrency) 문제'라고 합니다. 동시성 문제란, 공통된 자원에 동시에 들어온 여러 개의 요청이 모두 읽고 쓰는 작업(Read -> Write)을 하려고 하는 경우에 발생할 수 있는 문제를 말합니다. *** 동시성 문제는 '완전한 해결'이 아닌 '적절한 해결(제어)'에 더 적합합니다. '동시성'과 '일관성'은 하나가 증가하면 다른 하나는 감소하는 트레이드오프의 관계이기 때문에 해당되는 로직의 특성에 따라서 적절하게 균형을 설정하는 것이 중요합니다. '비관적 락(Pessimistic Lock)' 자원에 대한 ..

Java 주식 API (대신증권 사이보스 플러스) 연동하기

Java로 대신증권 사이보스 플러스 API 사용하기 프로그래밍을 통한 자동 매매를 구현하기 위한 대부분의 증권사 api가 C, C++ 또는 Python에서는 사용하기 쉽게 되어있습니다. 하지만 공식적으로 Java 언어를 통해 사용할 수 있는 증권사 api는 찾을 수 없었습니다. 그러던 중 구글링을 통해 대신증권 사이보스 플러스 api의 .dll 파일을 com4j 라이브러리로 .java 파일로 변환해서 사용하는 것을 보고 참고하여 작업하며 정리한 내용입니다. - 작업 환경 Windows10 64비트(x64), Java8 32비트(x86), IntelliJ 32비트 런쳐(18.3.6) 환경에서 작업하였습니다. (작업 중 64비트에서는 오류가 발생하고, 32비트에서만 동작하는 부분이 있어서 32비트 설치 후 ..

Programming/Java 2022.02.05

Windows10 Java8 32bit 설치하기 jdk8(x86)

윈도우10 Java8, JDK8 32비트(x86) 버전 설치하는 방법입니다. (Windows10 64비트 환경에서 설치를 진행하였으며, 개발상 필요에 의해 32비트 jdk를 설치하게 되었습니다.) 일반적으로 대부분의 운영 체제가 64비트(x64)를 사용하겠지만 간혹 특별한 상황에서 32비트를 사용해야 하는 경우가 발생합니다. 32비트의 Java8을 설치하기 위해서는 아래 Oracel 사이트를 통해 Java SE Development Kit 8u202, Windows x86 버전을 다운로드합니다. Java SE (Standard Edition) https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html (JDK 다운로드..

Programming/Java 2022.02.03

데이터베이스 연동 원리 JDBC, DataSource, Connection Pool

JDBC, Connection Pool, DataSoucre 개념과 원리 살펴보기 각각의 WAS에서 돌아가는 여러 개의 프로젝트들이 하나의 DB에 있는 데이터를 사용할 때 'Dirty Read', 'Non Repeatable Read', 'Phantom Read' 같은 문제점이 발생할 수 있다는 것을 알게 되고, 문제를 해결하기 위한 여러 가지 방법을 찾아보면서 Spring Boot에서 DB와 연결되어 데이터를 주고받는 동작 원리에 대한 이해가 부족하다고 느껴서 정리하게 된 내용입니다. 먼저 JDBC JDBC는 Java Database Connectivity의 약자로 스프링 프레임워크를 사용하기 전에 일반 Java 언어에서 DB 연결을 위해 사용하는 것으로 자바와 데이터베이스를 연결하기 위한 Java 표..

반응형