unix8 [Alpine Linux] Nginx 설치 및 실행 NginxNginx는 고성능의 오픈 소스 웹 서버 소프트웨어로 많은 웹 서버와 리버스 프록시로 널리 사용된다. 가볍고 확장 가능한 구조를 특징으로 하고 있으며 비동기 이벤트 기반 아키텍처로, 많은 동시 접속 요청을 효율적으로 처리하여 웹 사이트나 애플리케이션의 응답 속도와 성능을 향상시킬 수 있다. 뿐만 아니라, 가상 호스팅, 로드 밸런싱, SSL/TLS 암호화, URL 리다이렉션 등 다양한 기능을 제공하여 웹 서버의 유연성과 안정성을 높일 수 있는 등 현대적인 웹 애플리케이션의 요구사항을 충족시키기 위해 매우 유연하게 활용할 수 있다.필자의 프로젝트에서는 Nginx는 선택이 아니라 필수 사항일 정도로 중요한 기술 중 하나이다. Nginx에 VPN 연결을 위한 암호화가 설정되어 있고 이 스펙이 옮겨질 일.. 개발일기/이슈 로그 2024. 8. 13. [Spring + UDS] 6. Spring property 분리 코드는 OCP 원칙에 따라 변경에 닫혀있고 확장에 열려있어야 한다. 따라서 코드상에서 선언했던 SOCKET_PATH와 BUFFER_SIZE를 application.yml에서 설정하고 코드는 이를 받아 변수에 주입하도록 구현을 바꾸었다.전체 코드SocketProviderpackage com.example.test;import jakarta.annotation.PostConstruct;import jakarta.annotation.PreDestroy;import lombok.extern.slf4j.Slf4j;import org.newsclub.net.unix.AFSocketAddress;import org.newsclub.net.unix.AFUNIXSocket;import org.newsclub.net.un.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Spring + UDS] 5. Spring Custom bean 생성 이전까지 Socket 객체를 생성하고 이를 활용하는 echo server도 띄워서 정상적으로 동작하는 것을 확인했었다. 이대로 끝낸다면 아쉽다. stream이라는 리소스를 잡고 있는 객체인만큼 싱글톤으로 프레임워크 차원에서 관리하기 위해 Spring bean으로 등록해보자.전체 코드SocketProvider Beanpackage com.example.test;import jakarta.annotation.PostConstruct;import jakarta.annotation.PreDestroy;import lombok.extern.slf4j.Slf4j;import org.newsclub.net.unix.AFSocketAddress;import org.newsclub.net.unix.AFUNIXSocket.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Spring + UDS] 4. Spring Boot Client 구현 실행 환경실행환경은 다음과 같다.OS : Alpine Linux(3.20.0) Lan. : Java 21 Framework : SpringBoot 3.3.2 dependencies : (아래 코드 뭉치 참조)// dependenciesdependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.kohlschutter.junixsocket:junixsocket-core:2.10.0' implementation 'com.kohlschutter.junixsocket:junixsock.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Spring + UDS] 3. C demo Server 지금부터 Spring을 Client, C Daemon을 server로 생각한다.Spring에서 UDS를 통해 C Daemon으로 특정 요청을 보내면 C Daemon이 이에 대한 적절한 응답을 하는 간단한 Demo 앱을 만들어보며 Spring + UDS를 테스트해보자. 그래서 구상한 구조는 C ‘echo’ Server이다. Spring에서 request로 보낸 메시지를 C echo server가 받고 로그 파일에 기록함과 동시에 UDS를 통해 Spring 앱으로 다시 해당 msg를 전송할 것이다.전체 코드이를 위해 구현한 간단한 C daemon 코드는 아래와 같다.// server.c#include #include #include #include #include // only for UNIX#includ.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Spring + UDS] 2. JUNIXSocket GitHub - kohlschutter/junixsocket: Unix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and more GitHub - kohlschutter/junixsocket: Unix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and moreUnix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and more - kohlschutter/junixsocketgithub.comJUNIXSocket 라이브러리는 자바 환경에서 Unix Domain Socket과 다른 AF, PF.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Spring + UDS] 1. 사건의 발단… 지난주 ICTK에서의 업무가 정해졌다. 기존에 공부했던 웹 개발 스펙을 활용하여 qTrustVPN의 관리자 웹을 개선하는 것이다. 기존 시스템은 구조가 상당히 특이하다. frontend는 Vue.js(Vue2), 웹서버로 nginx, 그리고 nginx에 혹처럼 달려있는 php fpm, WAS로 c로 작성된 daemon(이하 c server라 말함)이 동작하고 있고 php와 c server가 UDS(Unix Domain Socket)을 활용하여 통신하고 있었다.기존에 프로젝트에 웹 개발 경험자가 없어서 구조가 특이하게 잡혔고 php와 c를 활용하여 개발하다 보니 구조가 이렇게 잡혔다고 들었다.현재로 돌아와서 새로운 시스템을 만드는데에 기술적인 제약을 두고 있지 않고 여러 기술 스택을 오픈마인드로 본다고 하.. 개발일기/Spring + Unix Domain Socket 2024. 8. 8. [Linux] 활성화된 유닉스 도메인 목록 # macOSnetstat -a -f unix# Ubuntunetstat -a -p --unix# Alpinenetstat -a -p unixnetstat 명령어를 이용하면 현재 활성화된 유닉스 도메인 소켓 목록을 볼 수 있다. 개발일기/이슈 로그 2024. 8. 7. 이전 1 다음