전체 글 382

[Spring] application.yml과 docker-compose로 dev/prod 환경 분리

프로젝트에서 개발환경과 배포환경이 달라짐에 따라서 설정 파일을 분리해야 하는 경우가 있습니다.docker로 애플리케이션 환경을 구성할 경우에는 local에서는 db (redis, mariadb..)만 컨테이너로 구성하고, production 환경에서는 RDS와 같은 외부 db 서버를 따로 구축하지 않는다고 가정하고, spring boot까지 함께 DockerFile을 통해 빌드하고 띄울 수 있습니다. 대략적인 아키텍처를 설명드리고, application.yml, docker-compose 파일을 분리하는 과정에 대해 설명드리겠습니다. Architecture docker-compose-dev.ymlmysql, redis만 container로 구성합니다. 외부로 노출되서는 안 되는 db 접속정보, 외부 포트..

Java/Spring 2025.06.29

[MariaDB] MariaDB Client/Server 관점에서의 LOAD DATA INFILE vs LOAD DATA LOCAL INFILE 명령어 비교

매우 빠른 시간 안에 csv 파일을 db에 import 하기 위한 명령어인 LOAD DATA INFILE 명령어에서 LOCAL 키워드를 붙여야 하는 상황과 붙이지 않아도 되는 상황에 대해서 알아보려고 합니다. LOCAL 키워드 필요 유무를 알기 위해서는 DB Client와 Server에 대해 숙지하고 있어야 합니다. 본론으로 넘어가기 전에 DB Client/Server의 개념에 대해 간략하게 먼저 설명드리겠습니다. MariaDB Server/ClientMariaDB Server: DB를 실제로 실행하고 데이터를 저장/관리하는 프로그램 (mysqld 프로세스)MariaDB Client: DB 서버에 접속해서 명령어(SQL)를 보내는 프로그램 (mysql, mariadb, JDBC, Workbench) m..

Database 2025.06.23

[Linux] 리눅스 마스터 2급 합격후기 및 공부법 (전공자)

오늘은 오랜만에 리눅스 마스터 2급 자격증 후기로 포스팅을 작성하려고 합니다. 리눅스 마스터는 다음과 같은 자격증입니다. 프로젝트 배포 환경의 OS가 Linux이고, 업무 시에 종종 Linux 명령어를 다뤄야 하는 경우가 있습니다. 그래서 관련 지식도 터득할 겸 준비하게 되었습니다. IT 관련 전공자이지만, Linux OS 관련하여 기본적으로 가지고 있는 사전 지식은 전무한 상태였습니다. (netstat, ps, cd, ls, chmod, tar, df .. 등 기초적인 지식만 아는 상태) 어떠한 방식으로 공부했는지 1, 2차로 나눠서 설명드리겠습니다. 1차 1차는 온라인 시험으로서 오픈북 시험이며, 정해진 기간에 60분 동안 50문제를 풀어야 합니다. 서칭을 통해 해당 자료를 기반으로 chro..

자격증 2025.06.16

[Elasticsearch] ES cluster(2 node) 구조에서의 데이터 정합성 이슈

회사 프로젝트에서 장비의 실시간 통계 정보를 저장하기 위해 Elasticsearch 검색엔진을 활용합니다. 단일 node를 가지는 standalone 구조에서는 primary, replica shard가 각각 1, 0으로 세팅되어 있으며, 클러스터 구조(2 node 이상) 에서는 5, 1로 세팅되어 있습니다. (ES 1.7.x 기준이며 템플릿 설정에 따라 다를 수 있습니다.) Failover를 위한 HA 구조 (ES 1(master), ES 2(backup) 에서 데이터의 정합성 이슈가 발생하였습니다. 해당 이슈에 대해 대략적인 내용을 설명드리겠습니다. 이슈 발생 상황장비의 CPU, Memory, Port Usage, Connectivity 정보와 같은 통계 정보를 일정 주기에 맞춰서 ES에 저장합니다...

[Spring] csv 파일의 데이터 파싱 및 저장 성능 개선기 (JPA save() vs JdbcTemplate batchUpdate() vs MariaDB LOAD DATA INFILE)

운영 중인 사내 시스템에서 IEEE OUI 파일(https://standards-oui.ieee.org/oui/oui.txt)을 다운로드하여 MAC 주소와 제조사 정보를 추출하고, 이를 DB에 저장해야 하는 요구사항이 있었습니다. 기존 처리 흐름 (AS-IS)oui.txt file -> oui.csv 파일 형식으로 파싱합니다.csv 파일을 BufferedReader로 읽어서 JPA save() 반복 호출로 저장합니다. 즉, 애플리케이션 런타임 시점에 csv 파일을 oui, vendor 정보로 파싱하여 일일이 save() 메서드를 호출하는 방식이었습니다. 하지만, 해당 방식은 매우 성능이 낮으며 이에 대한 첫 번째 대안으로는 saveAll() 메서드를 활용할 수 있습니다. 먼저, JPA에서 제공하는 sa..

Java/Spring 2025.05.22

[Effective Java] 6장. 열거 타입과 애너테이션

[item-34] int 상수 대신 열거 타입을 사용하라enum type 나오기 전에는 정수 열거 패턴(int enum pattern)을 사용해 왔습니다.public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int ORANGE_NEVEL = 0;public static final int ORANGE_TEMPLE = 1; 위와 같은 정수 열거 패턴은 타입 안정성을 보장하기 어렵습니다.위의 대안으로 나온 것이 열거 타입입니다. 열거 타입public enum Apple { FUJI, PIPPIN, GRANNY_SMITH}public enum Orange { NAVEL, TEM..

Java/Effective Java 2025.05.20

[Effective Java] 5장. 제네릭

[item-26] 로 타입은 사용하지 말라 제네릭 타입: 클래스 혹은 인터페이스 선언에 타입 매개변수가 쓰이는 경우로 타입: 제네릭 타입에서 타입 매개변수를 사용하지 않는 것ex) List, Set ..(제네릭 타입) → List, Set제네릭 타입을 하나 정의하면 Raw Type도 함께 정의됩니다.Raw Type은 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을 때를 의미합니다.Raw Type은 타입 선언에서 제네릭 타입 정보가 전부 지워진 것처럼 동작합니다. 로 타입을 절대 쓰지 말자자바 언어 차원에서 로 타입 사용을 막지는 않았지만, 절대로 사용하지 말자로 타입을 쓰면 제네릭의 안정성과 표현력을 모두 잃게 됩니다.로 타입은 호환성 때문에 만들어졌습니다. 로 타입을 사용private final C..

Java/Effective Java 2025.05.17

[DB] Spring boot 2.x에서 기본으로 지원하는 HikariCP에 대해 알아보자

Spring boot 2.x 버전에서는 DB Connection Pool로 HikariCP를 지원합니다. 이를 통해 매번 Connection을 생성하지 않아도 되며, Connection Pool에서 Connection을 가져와 DB 연결 및 해제를 효율적으로 할 수 있게 됩니다. 우선 HikariCP가 무엇인지 설명드리고, 연관된 개념과 Connection Pool의 동작 과정에 대해 알아보겠습니다. HikariCP (HikariCP Connection Pool)DB Connection을 관리해 주는 도구Connection Pool이 설정된 connection의 사이즈만큼 연결을 허용하여 http 요청에 대해 순차적으로 db 커넥션을 처리해 주는 기능입니다.DB Connection Pool이며, Comm..

Java/Spring 2025.05.15

[Linux] ssh 원격 접속 실패 시 해결책 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

ssh로 원격 서버에 접속 시, 다음과 같은 로그가 발생하며 접속에 실패하였습니다. PS C:\Users\admin> ssh root@[ip]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also po..

Linux 2025.05.14

[JMeter] Apache JMeter를 활용한 성능 테스트

실제 서비스를 운영하다보면 기능이 잘 동작하는지도 중요하지만, 얼마나 많은 요청을 안정적으로 처리할 수 있는지에 대해서도 고려해야 합니다. 그래서 실무에서는 기능 테스트 뿐만 아니라, 성능 테스트 또한 필수적인 과정이라고 생각합니다. 이 과정에 도움이 되는 도구인 JMeter는 JSP, Ajax와 같은 동적 리소스 뿐만 아니라, JavaScript, HTML 파일과 같은 정적 리소스의 성능을 측정할 수 있고, 동시성 및 부하 테스트를 지원합니다. 더불어 테스트에 대한 결과를 Report, Table, Tree, Graph 등 다양한 형태로 추출해줍니다. 이제 장점을 알았으니, JMeter의 개념 및 관련 용어와 설치 방법(Window OS 기준으로 설명), 테스트 과정에 대해 설명드리겠습니다. JMet..

Java/Spring 2025.04.18