반응형

개발 281

[개발관련] BootJar 서비스 등록, 리눅스에서 application.properties, logback.xml 수정

들어가며주기적으로 외부 API에서 데이터를 수집하여 DB에 적재하고, 알람 목적으로 웹 애플리케이션 백엔드 단의 웹소켓 용 API에 데이터를 전달하는 소스를 작성하였습니다. java17, Spring boot 기반이며 application.properties 파일에 외부 API의 URL과 토큰, 그리고 기타 설정 정보를 저장해두었습니다. 빌드한 파일을 고객사에 미리 전달하면 작업 서버로 파일을 옮겨주시는 방식이기 때문에 리눅스에서 bootJar 내의 application.properties 파일을 수정할 필요가 있었습니다. 이는 간단하게 zip 명령어로 수정이 가능합니다. 같은 방식으로 logback.xml을 수정하여 log 파일의 저장 주기나 경로도 즉석에서 변경할 수 있습니다.현 회사에서 이전에는 b..

개발/개발관련 2024.08.08

[개발관련] ssh 리모트 터널링과 로컬 터널링

들어가며ssh 터널링 명령어를 정리해보았습니다.-L(로컬)옵션과 -R(리모트)옵션의 한 글자 차이이지만 상당히 다르게 동작하며 사용의 목적도 달라집니다.ssh -L localhost:12345:192.168.0.1:22 mabb@121.10.10.10 -p22022ssh -R localhost:12345:192.168.0.1:22 mabb@121.10.10.10 -p22022  1. 로컬 터널링ssh 명령어를 실행하는 현재 서버가 121.10.10.10 서버의 입장이 되게 합니다. 현재 서버에서 localhost:12345를  121.10.10.10 서버가 접근할 수 있는 192.168.0.1:22로 터널링 해줍니다. ssh 포트로 터널을 만들어 원격지의 다른 포트나, 다른 서버(포트)에 직접 연결하는 ..

개발/개발관련 2024.07.25

[개발관련] Java_ 대량의 CSV Insert, 그리고 OutOfMemoryError 발생!

들어가며약 1.3MB 정도 되는 CSV 파일 (약 4000줄) 5천 개를 데이터베이스에 적재하려고 시도하였습니다.  OutOfMemory가 발생하였습니다. 1 record 당 1 instance로 List에 담았기 때문입니다. 객체 2,000만 개를 만들고 List에 담아 GC도 되지 않는 코드를 작성해 버린 것입니다. 1) CSV 한 줄 씩 읽고 객체 만들어 List에 add 하기2) 2000만 길이의 List (이 단계에서 OOM 발생!)3) 2,000만 길이의 Batch쿼리 4) 한 방에 Insert 시도 Heap GC 상태 확인PID를 찾는 동안 잠시 대기를 시켜줍니다. PID가 39205입니다.  35394는 PPID로 인텔리제이입니다.인텔리제이의 부모는 MAC에서의 1번 프로세스인 launch..

개발/개발관련 2024.07.07

[개발관련] @ForceInline 테스트

들어가며Properties.java를 들여다보던 중 Objects의 requiredNonNull 메서드에 붙어있는 @ForceInline 어노테이션을 살펴보게 되었습니다. 메서드 인라인을 강제하는 어노테이션 정도로 이해하였고, 이것이 성능을 위한 조치인 지 잘 이해가 되지 않았습니다. 문의를 해보니 스택트레이스 출력 때문인 것 같다는 의견이 있었습니다. 그래서 검증을 해보고자 테스트해보았습니다.메서드가 인라인화 되어 메서드의 본문이 참조되니까 스택트레이스에는 해당 메서드를 호출한 스택 상위의 메서드까지만 스택 트레이스가 출력될 것으로 예상하였습니다. 문제의 @ForceInline 어노테이션이 붙어있는 requireNonNull 메서드입니다. 1. 어노테이션을 붙이지 않고 예외를 던져 스택 트레이스를 확인..

개발/개발관련 2024.07.03

[개발관련] JAVA_ IPv4 String to Int 변환 (2의 보수, 비트 연산)

들어가며네트워크 스캔 기능이 필요하여, DB에 저장된 특정 네트워크("192.168.0.0/24"), 또는 IP 범위("192.168.0.34/24~192.168.0.100/24") 내의 Host IP 문자열 리스트를 반환하는 간단한 메서드를 만들어 보았습니다. 만들면서 비트 연산자, 2의 보수 등도 복습하게 되어 함께 정리합니다. 목표1) 특정 네트워크 내의 모든 Host IP의 List 을 반환하는 메서드 만들기2) IP 범위 내의 모든 Host IP의 List 을 반환하는 메서드 만들기 IPv4 주소와 Java의 intIPv4주소는 32bit로 표현합니다. 따라서 2³²개인 총 4,294,967,296 개의 IPv4 주소가 존재합니다.  이는 Java의 4byte 정수형인 int로 표현할 수 있는 ..

개발/개발관련 2024.06.22

[개발관련] Docker_ MariaDB Container 만들기

들어가며Database(MariaDB)가 필요할 때 다음과 같은 절차로 서버에 직접 설치하곤 하였습니다.1) MariaDB설치 (패키지매니저 설치, 오프라인 환경에서는 준비한 RPM으로 설치)2) my.cnf세팅3) 데이터디렉터리 변경4) 데이터베이스 생성5) 유저생성6) 스키마 및 코드데이터 세팅만약 설치한 데이터데이스를 다른 서버에 옮겨야 한다거나, 여러 대의 서버에 위의 작업을 반복한다고 하면 귀찮고 힘든 작업이 될 것입니다. 목표MariaDB 설정, 유저 및 데이터 베이스 생성, 스키마 및 코드데이터가 세팅된 도커 이미지를 만들어보겠습니다. 이 이미지의 컨테이너를 가동하기만 하면 서버에 직접 MariaDB를 설치할 때의 번거로운 절차가 한 번에 해결됩니다.  Dockerfile아래와 같이 도커파일..

개발/개발관련 2024.06.01

[개발관련] JAVA_ SLF4J와 Logback에 대한 이해(+ServiceLoader)

들어가며실무에서 로그의 중요성을 체감하고 있습니다. 이번에 개발한 스케줄러에 예외 및 로깅을 보완하는 김에 로그의 기본적인 개념과 Java진영의 로그 라이브러리인 SLF4J, 그리고 LogBack 대하여 알아보았습니다. 로그(Log)의 의미과거 항해일지 등을 통나무(Log)에 기록한 것에서 유래하여 기록하는 것을 로그라고 칭한다고 합니다.개발 분야에서는 시스템이나 애플리케이션 등이 남긴 기록을 로그라고 부릅니다. 로그는 문제 해결의 단서가 되기 때문에 트러블 슈팅을 할 때 로그를 잘 보는 것과 개발을 할 때 로그를 잘 남기는 것이 굉장히 중요합니다.로그의 예로는 OS에서 기록하는 Syslog, Apache Tomcat이 기록하는 catalina.out 등이 있습니다. 그리고 이클립스나 인텔리제이 IDE에..

개발/개발관련 2024.05.24

[개발관련]JAVA_ Getter/Setter vs Field Direct Access 비교

회사에서 필드의 접근제한자를 private 가 아닌 public으로 사용하고, Getter/Setter 없이 직접 필드에 접근하여 연산처리하는 소스를 만났다. 아무래도 Getter/Setter 메서드를 호출할 때마다 Call Stack에 메서드가 쌓였다가 사라질 테니 필드에 직접 접근하여 연산하는 것보다 성능이 좋지 않을 것이라고 생각했다. 하지만, 은닉, 캡슐화를 위반하는 듯하여 이를 Getter/Setter로 변경하였을 때 성능이 얼마나 안 좋아질지 시간을 측정해보고자 하였다. 대략 간단하게 필드 직접 접근 10억번 반복 vs Getter/Setter 10억 번 반복을 비교해 보았다.package practice; public class GetterDirect { public static void m..

개발/개발관련 2024.05.17

[개발관련] firewall-cmd, zone, service

보안 조치 때문에 firewall-cmd 명령어를 이것 저것 사용해보고 있다.목적은 기본적으로 모든 인바운드를 드랍하고 특정IP:특정서비스(port)만 허용하는 것.TCPWrapper인 경우 /etc/hosts.allow, /etc/hosts.deny 파일을 편집하여 설정하라고 하는데, Rocky8버전인지라 firewall-cmd 를 이용하여 ACL(Access Control List, 접근제어리스트) 을 설정해주어야 한다.firewall-cmd 를 사용해보면서 조금 알게된 부분을 기록한다.[이해]1. zone: 방화벽 정책 그룹 정도로 이해. public, dmz, drop, internal, external, home 등이 있다. NIC에 매핑할 수 있다. -> 공용 네트워크에서 갖추어야 할 보안 정..

개발/개발관련 2024.05.06
반응형