전체 글 47

Java 자바 객체 불변성과 빌더패턴(setter 지양하기)

불변 객체란?불변 객체는 한 번 생성되면 내부 상태가 변경되지 않는 객체를 의미한다. 즉, 생성 이후에는 객체의 필드 값을 변경할 수 없다. 이러한 객체는 멀티스레드 환경에서 안전하고, 예측 가능한 코드를 작성하는 데 유리하다. 불변 객체가 필요한 이유동시성 문제 해결: 불변 객체는 값이 변경되지 않으므로, 여러 스레드에서 동시에 접근해도 안전하다.예상치 못한 변경 방지: 객체가 변경될 가능성이 없으므로, 유지보수가 쉬워지고 디버깅이 용이하다.안정적인 HashCode 유지: 불변 객체는 HashMap, Set 등의 자료구조에서 안정적으로 동작한다.Side Effect 최소화: 불변 객체는 외부에서 값을 변경할 수 없기 때문에 부작용이 줄어든다.vo란?VO(Value Object)는 데이터를 저장하고 전달..

자바[Java] 2025.03.18

[JAVA] .class 확장자 jar 패키징 후 maven 의존성 주입하기

node를 SpringBoot로 리팩토링하는 업무 중 node에서 java를 .class형태로 이용하고 있는 코드가 있었다.변환 툴을 이용해서 .java 확장자로 변환해봤지만 코드가 깨지는 현상이 발생하여 .class 확장자 채로 이용하는 방법을 찾던 중 jar로 패키징하는 방법을 발견하였다.  1. .class 파일이 있는 디렉토리로 이동2. jar 파일 생성 jar cf nodeJava.jar com/nodeJava/*.class3. pom.xml에 의존성 주입 com.nodeJava nodeJava system 1.0 ${pom.basedir}/libs/nodeJava.jar 4. jar 파일을 프로젝트 루트 경로에 lib 디렉토리를 만들어 넣어준다.5. 코드에서 해당 클..

자바[Java] 2025.03.07

Spring MVC기반 Thymeleaf(타임리프)

소개Spring MVC는 웹 애플리케이션을 개발할 때 널리 사용되는 프레임워크다.이때, 뷰(View) 계층에서 화면을 구성하기 위해 템플릿 엔진을 사용하게 되는데, 대표적인 선택지가 Thymeleaf이다.(Spring Boot + Thymeleaf or Spring Framework + JSP 이런 조합으로 MVC 구조를 이룬다고 하는데 이건 내가 학습한거라 정확한 정보가 아닐 수 있음)JSP 와 비교하기비교 항목ThymeleafJSPHTML 친화성O (순수 HTML 파일로 열람 가능)X (JSP 코드가 포함됨)서버 독립성O (서버 없이도 볼 수 있음)X (서버가 필요함)속도 및 성능더 가벼움상대적으로 무거움유지보수성높음 (HTML 템플릿 유지 가능)낮음 (JSP 코드 섞임)사용방법1) 의존성 추가 po..

자바[Java] 2025.02.07

SpringBoot SSL인증서 등록(.pem/.p12)

SSL/TLS 인증서는 웹 애플리케이션에서 보안 통신을 보장하기 위해 필수적이다. HTTPS를 사용하면 데이터가 암호화되어 전송되므로, 중간자 공격(MITM)이나 도청 위험을 줄일 수 있고 신뢰할 수 있는 인증서를 사용하면 브라우저에서 '안전하지 않음' 경고 없이 사이트를 이용할 수 있다. 따라서 스프링 부트 애플리케이션을 운영 환경에서 배포할 때 SSL 인증서를 설정하는 것이 중요하다. 사내 서비스를 SpringMVC 구조를 이용하여 SpringBoot+Thymeleaf로 웹을 구동시키는데 HTTPS 를 사용하기 위해서 인증서를 등록했다. 기존에 사용중인 인증서가 있어서 해당 인증서를 사용하였다. .pem 확장자를 가진 인증서를 사용하였고 해당 인증서를 SpringBoot에 바로 적용할 수 없어서 op..

자바[Java] 2025.02.06

자바스크립트의 비동기 처리: Promise와 async/await

자바스크립트는 비동기 처리를 지원하는 강력한 언어다. 특히, **Promise**와 **async/await**를 활용하면 비동기 코드를 더욱 직관적이고 가독성 있게 작성할 수 있다. 먼저 동기와 비동기의 차이점에 대해서 간단히 알아보자 Javascript는 싱글 스레드 언어로, 코드가 작성된 순서대로 작업을 처리한다.  코드가 순서대로 동작하는 방식을 동기 방식이라고 한다.  여러개의 작업이 있으면 앞의 작업이 끝날 때 까지 기다렷다가 뒤를 순서대로 실행하는 방식으로 그 와중에, 다른 작업이 불가능하도록 막는다. 근데 여러개의 작업을 동시에 언제 끝나든지 상관없이 실행한다게 되면 즉, 먼저 작성된 코드의 결과를 기다리지 않고 다음 코드를 바로 실행하는 것이 비동기 방식이다.  동기 = 직렬식 | 비동기..

Spring Swagger 세팅

API문서를 기반으로 새로운 프로젝트를 작성하다가 코드를 기반으로 문서를 새로 작성하려는 와중에 스웨거라는 툴을 알게 되어 도입하였다.  1. Swagger 스웨거란? Swagger는 RESTful API를 설계, 문서화, 테스트 및 시각화하기 위한 툴Swagger를 사용하면 API 사용자를 위한 문서를 자동으로 생성가능주요 특징:API 명세 문서 자동 생성웹 UI를 통한 API 테스트 기능 제공2. Swagger 설정프로젝트 : SpringBoot 2.7.7, maven , java8 2-1 pom.xml 의존성 추가 org.springframework.data spring-data-commons 2.7.6 ..

자바[Java] 2024.11.18

Asterisk 설정하기

Asterisk란?오픈소스 PBX시스템 = 소프트웨어로 구현된 전화교환기 IP-PBX시스템, VoIP게이트웨이, 콜센터 시스템, IVR시스템, 음성메일 서버, 컨퍼런스 브리지 등에 Asterisk가 활용된다.(설명)-IP-PBX시스템 : 회사 내선처럼 내부 전화망을 관리하는 시스템, IP네트워크를 통한 음성통화-VoIP 게이트웨이 : 일반전화망(PSTN)과 인터넷전화(VoIP)연결, 프로토콜/신호 변환 담당-콜센터 시스템 : 콜센터 고객상담, 통화분배, 대기열관리, 상담원 모니터링, 통화기록-IVR(Interactive Voice Response): 자동응답시스템, 음성이나 키패드로 서비스 선택-음성메일서버 : 부재중 음성 메시지 저장/관리-컨퍼런스 브리지 : 3자통화, 음성믹싱 Asterisk 핵심 설..

기록 2024.11.01

Try-with-resources

소개Java의 try-with-resources 문은 자원을 사용하는 코드를 더 간결하고 안전하게 작성할 수 있도록 해주는 구조로, 주로 파일 입출력, 데이터베이스 연결, 네트워크 소켓 등과 같이 명시적으로 자원을 해제해야 하는 경우에 사용할 수 있다Java 7부터 사용 가능하며, Java의 AutoCloseable 인터페이스를 구현한 모든 자원에 대해 사용할 수 있다  개념try-with-resources 구문은 코드 블록이 끝나면 자원을 자동으로 해제한다. 이를 통해 개발자는 자원을 명시적으로 해제할 필요가 없어지고, 자원 누수를 방지할 수 있다. 이 구문을 사용하기 위해서는 사용하는 자원이 AutoCloseable 인터페이스를 구현해야 한다. AutoCloseable 인터페이스를 구현한 클래스는 c..

자바[Java] 2024.09.04

nohup : 백그라운드 프로세스 유지

리눅스에서 서버를 관리하거나 배치 작업을 실행할 때, 터미널 세션이 끊기더라도 프로세스를 계속 실행할 필요가 있을 때가 많다. 이럴 때 유용하게 사용할 수 있는 명령어가 바로 nohup이다. 1. nohup이란?`nohup` 은 "no hang up"의 줄임말로, 사용자가 터미널을 닫거나 세션을 종료하더라도 특정 프로세스가 계속 실행되도록 하는 명령어다. 기본적으로 리눅스에서 터미널을 닫으면 해당 터미널에서 실행된 프로세스는 모두 종료된다. 그러나 nohup을 사용하면 터미널과의 연결이 끊겨도 프로세스가 종료되지 않고 계속 실행된다. 2. nohup 사용법 nohup의 기본적인 사용법.nohup [명령어] & 여기서 & 기호는 명령어를 백그라운드에서 실행하도록 합니다. 예를 들어, my_script.sh..

기록 2024.08.21

vscode-server 설치&사용[vi 편집기 개발 싫어요 ㅠ]

회사 폐쇄망에서 개발 서버에 접근하여 개발을 진행할 때 vi 편집기는 가독성과 편집 효율이 떨어져서 로컬에 visual studio code를 설치하여 ssh로 hiware 계정을 통해 개발기에 접근하는 방식을 이용했었다. 로컬 pc > hiware 원격 계정 > 개발 서버 이렇게 경유하여 개발기에 접근하는 방식인데 isms 심사때문에 hiware 원격 계정에 접근하는 22번 포트가 timeout나서 vscode로 ssh 접근이 제한되어 로컬 폐쇄망에서 개발서버에 다이렉트로 연결하는 방법을 찾아본 결과 vscode-server를 이용하면 가능하다는 사실을 알아냈다. vscode-server를 이용하면 개발서버에 열린 포트를 이용하여 로컬에서 다이렉트로 접근이 가능한 방식인데 해당 서버에 vscode-se..

기록 2024.08.07