2025년 12월 회고록
·
일상/회고록
원래 첫 회사 입사 후 매달 회고록을 작성하려고 했지만 아쉽게도 실천하지 못했네요. 돌이켜 봤을 때, 현재 회사에서 얻어간 것들이 너무 많았으며 정말 가치 있는 시간들이었던 것 같습니다. 비록 블로그에 포스팅하지는 않았지만, 개인적으로는 Notion에 꾸준히 정리해 왔고, 이 기록들이 앞으로도 분명 도움이 될 지식이라고 생각하고 있습니다. 그래서 이번에는 첫 회사에서 보낸 2년 반의 시간, 그리고 그 경험을 바탕으로 이직에 성공하기까지의 과정을 조금 더 자세히 정리해 회고록으로 남겨보려 합니다. 저는 보안 설루션 회사에서 웹 풀스택 개발 업무를 담당해 왔습니다. 처음에는 백엔드 개발을 중심으로 커리어를 쌓고 싶었지만, 풀스택 업무를 맡게 되면서 생각보다 많은 장점을 경험할 수 있었습니다. 웹 개발에 있어..
[Linux] OpenStack VM에서 wget 명령어로 local 서버 파일 다운로드
·
Linux
개요OpenStack 환경에서 배포나 테스트 작업을 위해 local 환경에서 패키징한 WAR 파일을 VM으로 옮겨야 했습니다. 보통은 scp 명령을 떠올리지만, 실제로는 SSH 공개키 인증 문제, 키페어 불일치, Security Group 설정 문제 등이 겹치면 생각보다 번거롭습니다. 기존에는 pem key를 이용해서 로컬 서버에서 원격 서버로 파일을 전송하려고 했지만, 권한 문제로 인해 파일 전송에 실패하였습니다.PS C:\> scp -i .\br2_rocky9_zt_1104.pem .\project.war rocky@192.168.239.190:/projectBad permissions. Try removing permissions for user: BUILTIN\\Users (S-1-5-32-545..
[Spring] SSL/TLS certificate 무중단 hot-reload 구현 과정
·
Java/Spring
개요사내 웹 솔루션은 HTTPS 요청 처리 시 SSL 인증서를 기반으로 동작합니다. 따라서 인증서의 유효기간이 만료되면, 각 사이트 담당 엔지니어가 직접 인증서를 갱신하는 절차를 수행해야 합니다. 이 과정에서 인증서가 잘못 적용되거나 구성 오류가 발생할 경우, 시스템 전체 장애로 이어질 수 있는 위험이 존재합니다. 이를 예방하기 위해 인증서를 자동으로 갱신하고, 애플리케이션 재시작 없이 즉시 반영(hot-swap)할 수 있는 기능을 도입했습니다. 일반적으로 hot-swap은 시스템의 전원을 끄지 않고 구성 요소를 교체하여 계속 사용할 수 있는 기능을 의미합니다. 웹 애플리케이션 관점에서는 애플리케이션을 중단하지 않고 구성 요소를 변경하고 즉시 반영할 수 있는 기능을 의미합니다. Spring Boot 3...
[백예린 단독 콘서트] <Flash and Core> In Inspire Arena 후기
·
일상/리뷰
2025/10/26일에 오랜만에 열린 백예린 단독 콘서트를 다녀왔습니다. (3번째) 친구가 표를 구해줘서 함께 가게 되었는데, 평소 즐겨 듣던 백예린 음악이 꽤나 있어서 기대를 품고 갔습니다. 음색 좋은 가수의 노래를 라이브로 들으면 어떤 느낌일지 감이 안 잡혔습니다. 장소는 저희 집에서 조금 멀리 있는 인스파이어 아레나에서 진행되었습니다. https://map.naver.com/p/search/%EC%9D%B8%EC%8A%A4%ED%8C%8C%EC%9D%B4%EC%96%B4%20%EC%95%84%EB%A0%88%EB%82%98/place/1997613956?placePath=%3Fentry%3Dpll%26from%3Dnx%26fromNxList%3Dtrue&placeSearchOption=entry%..
[CS] Socket Communication
·
CS
오늘은 네트워크 프로그래밍에서 중요한 소켓 통신(Socket Communication)에 대해 알아보겠습니다. 먼저 소켓 통신이 무엇인지 간단히 살펴본 뒤, 네트워크에서 통신이 성립되는 과정인 TCP 3-way Handshake 절차를 설명드리겠습니다. 이어서 소켓 통신에서 Client와 Server의 역할과 흐름이 어떻게 구분되는지 살펴본 후, Java에서 이를 구현하는 예제를 통해 구체적인 통신 과정을 정리해 보겠습니다.소켓 통신 (Socket Communication)네트워크에서 두 컴퓨터 간의 실시간 양방향 통신을 제공하는 기술양방향 통신: 상호 간의 데이터를 송수신하는 기술두 컴퓨터 간에 IP주소 + 포트번호의 조합으로 네트워크 간의 연결을 수행하며 수신자는 데이터를 요청하면 서버에서 응답을 제..
[CS] Concurrency, Parallelism
·
CS
동시성 (Concurrency)Task들이 빠르게 전환되면서 실행되어 동시에 실행되는 것처럼 보이는 것싱글 코어(cpu 내에서 실제로 연산 및 명 실행을 담당하는 장치)에서는 여러 작업이 동시적으로 실행되며 Task 간 Context Switch가 발생하면서 여러 작업들을 동시에 실행하는 것처럼 보입니다.Context Switch: CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 현상유휴 시간(idle time)을 최소화하여 CPU 활용도를 높이는 것이 목표입니다. (유후 시간: 컴퓨터가 작동 가능한대도 작업을 하지 않는 시간)두 개 이상의 작업이 싱글 코어 or 다중 코어 CPU의 동일한 코어에서 실행되는 경우, 동시에 동일한 리소스에 접근할 수 있습니다.데이터 읽기 작업..
[Effective Java] 10장. 예외
·
Java/Effective Java
[item-69] 예외는 진짜 예외 상황에만 사용하라예외는 반드시 예외 상황에서만 사용하며 일상적인 제어 흐름용으로 사용해서는 안됩니다.잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없어야 합니다.이를 위해서 상태 검사 메서드를 제공하거나 옵셔널 또는 특정 값을 반환하도록 하면 됩니다.try-catch 블록 안에 들어가면 JVM이 적용할 수 있는 최적화 범위가 제한됩니다.잘못된 예외 사용 예시try { int i = 0; while(true) range[i++].climb();} catch (ArrayIndexOutOfBoundsException e) {}표준적인 관용구 // 표준적인 관용구로 작성한 예for (Mountain m : range) m...
[Effective Java] 9장. 일반적인 프로그래밍 원칙
·
Java/Effective Java
[item-57] 지역변수의 범위를 최소화하라지역변수는 사용할 때 선언하고 초기화해야 합니다.옛날 방식의 습관으로는 코드 블록이 첫 부분에 변수를 선언하는 경우가 많았습니다.자바의 경우는 어디에서 선언해도 되기에, 처음 사용할 때 선언하면 지역변수의 범위를 줄일 수 있습니다.지역변수를 초기화할 수 없다면, 초기화할 수 있을 때 선언하면 됩니다. (예외 : try-catch)규칙반복문은 while보다 for문을 권장: while문을 사용하면 반복문 밖으로 불필요한 변수가 선언됩니다.for문을 사용하면 반복 변수 (loop variable)의 범위가 반복문 내부로 제한됩니다.ExampleIterator i = c.iterator(); // 불필요하다.while (i.hasNext()) { doSomet..
[Design Pattern] Chain of Responsibility Pattern(책임 연쇄 패턴)
·
Java/Design Pattern
개요오늘은 책임 연쇄 패턴에 대해서 상세히 정리해보려고 합니다. 최근 기업 기술과제를 수행하면서, HTTP Request 시에 보안 규칙 검사를 확장성을 고려하여 책임 연쇄 패턴을 적용하였습니다. 해당 디자인 패턴을 적용하게 된 배경을 설명드리기 전, 개념과 예시를 Spring Security에서 사용되는 Servlet Filter로 들어서 사용 방법을 알아보도록 하겠습니다. Chain of Responsibility (책임 연쇄 패턴)핸들러들의 체인​(사슬)​을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지를 결정합니다.Spring Security Framework의 Servlet Filter도 책임 연쇄 패턴이 적..
[Docker] Rocky Linux 9.2에서 docker-compose 기반 db, elasticsearch 구축 과정
·
DevOps/Docker
개요사내에서 로컬 환경에서 docker-desktop을 통해 docker-compose 기반으로 mariadb, elasticsearch를 띄운 후 애플리케이션을 실행하는 방식으로 개발 환경을 구성해 왔습니다. 하지만, Docker Desktop은 로컬 메모리를 많이 차지하고, WSL2와 Docker를 조합하는 방식도 큰 차이가 없다고 판단하여 별도의 Rocky Linux 서버에 Docker 환경을 구축했습니다. 이번 포스팅에서는 Rocky Linux 서버에서 Docker 환경을 구축하는 과정을 상세히 다루고자 합니다. 또한, 단순 설치 과정뿐만 아니라, 외부에서 Web Application과 안전하게 상호작용할 수 있도록 방화벽 설정에 대해서도 함께 설명드리겠습니다. 리눅스 배포판에서는 inbound ..