728x90

Develop(개발) 14

누가 맡아도 시간이 흐르면 더 나아지는 시스템 만들기

운영중인 시스템은 누가 더 나아졌다고 판단할 수 있을까요? 담당자가 바뀌면 같은 에러도 다른 분석이 나오는 문제는 어떻게 해결할까요?최근 안드레 카파시가 공개한 Auto Research를 보면서, 최근 업무에서 비슷한 질문을 풀었던 경험이 떠올랐습니다. Auto Research가 하는 일Auto Research는 안드레 카파시가 공개한 오픈소스 프로젝트입니다. AI 에이전트가 사람 없이도 스스로 모델을 개선하도록 만든 자동 실험 루프입니다.동작 방식은 이렇습니다.개발자가 퇴근 전에 에이전트에게 지시를 내려둡니다에이전트는 `train.py` 파일 하나만 수정할 수 있습니다수정한 코드로 정확히 5분 동안 모델을 학습시킵니다학습이 끝나면 `val_bpb`(validation bits per byte)라는 지표..

Develop(개발) 2026.08.25

Java 멀티스레딩의 진화: Runnable부터 Virtual Threads까지

이 글에서는 Java 멀티스레딩 API의 역사를 따라가며, 각 기술이 왜 등장했고 어떻게 사용하는지 알아보겠습니다.1. Runnable (Java 1.0, 1996)등장 배경1990년대 중반, 컴퓨터 프로그래밍은 대부분 순차적(sequential) 실행 모델을 따랐습니다. 프로그램은 한 번에 한 가지 일만 수행했고, 이는 다음과 같은 심각한 문제를 야기했습니다:문제 1: 사용자 인터페이스 프리징 GUI 애플리케이션에서 파일을 다운로드하거나 데이터베이스에서 데이터를 가져오는 동안, 전체 UI가 멈춰버렸습니다. 사용자는 작업이 완료될 때까지 아무것도 할 수 없었습니다. 이는 현대적인 사용자 경험과는 거리가 멀었습니다.문제 2: CPU 자원의 낭비 프로그램이 I/O 작업(파일 읽기, 네트워크 통신 등)을 수행..

Develop(개발) 2026.01.02

[Tool] JVM 모니터링 도구 - Visual VM

로컬 레벨에서 JVM을 실행시키고 실행중인 Thread / OOM 유발 원인이 되는 Heap 메모리 할당 현황등을 확인하고 싶다면 매우 유용한 도구가 있다.Visual VM이라는 도구로 로컬에서 실행한 Java Application을 뜯어볼 수 있다.https://visualvm.github.io/download.html VisualVM: DownloadFirst Steps Unzip the downloaded archive. The archive already contains the top-level visualvm directory. Start VisualVM by invoking the binary appropriate for your OS:visualvm\bin\visualvm.exe or vis..

[TIL] QueryDSL의 경로 초기화 문제

매 주 업무를 수행하다보면 배우는 것이 꼭 작더라도 한두개는 생긴다.이러한 지식들을 나만 알고 넘기기에는 아쉬운 면도 있고, 시간이 지나면 까먹을 가능성도 있기에 TIL을 작성하려한다.원래는 Github Pages를 이용하여 깃헙 블로그를 만들어서 작성하려 했는데, 이미 티스토리가 방문자 수가 너무 잘 나와서.. ㅎㅎ아무리 똥글이어도 누군가 읽어주는 게 더 의미있는 글이지 않겠는가! 하는 생각으로 티스토리에 작성하기로 결정했다.근데 티스토리에서 마크다운 문법만 좀 기존 템플릿하고 호환되게 제공해주면 너무 잘 쓸텐데.. 커스텀 하기도 귀찮고 그런 상태이다. 문제 상황QueryDSL에서 Entity간 서로 필드로 Entity를 가지고 있다면 해당 Entity들의 QClass에도 부모를 타고갈 수 있게 경로가..

[AWS] 프리티어 VPC 과금 문제 해결법 (RDS Public IP 없이 MySQL 워크벤치 연결)

AWS 과금 정책의 변화비교적 최근 IPv4의 고갈 문제로 인해 AWS에서 IPv6사용을 권장함에 따라 2개 이상의 IPv4 할당에 대해 과금을 시작했습니다.이에 따라 1년가량 운영 중이던 저희 서버에도 과금이 진행됐는데요.이번에 AWS 계정간에 서버를 이전하며 과금 문제를 해결한 방법에 대해서 말씀드리도록 하겠습니다.2개의 IPv4를 할당받는다면 위와 같이 달에 4달러가량이 지출되게 됩니다. 과금이 되는 원리대부분의 사이드 프로젝트에서 2개의 IP는 다음과 같이 할당받습니다.1. EC2 인스턴스에 고정 IP를 할당하기 위해 등록한 탄력적 IP2. RDS 인스턴스를 외부에서 접근할 수 있게 열어둔 퍼블릭 액세스 가능이렇게 2개에 대해서 IPv4를 할당받는 경우가 대부분입니다.해결법이 문제를 해결하기 위해..

Develop(개발) 2024.07.18

스프링 동시성 문제 해결법의 종류와 장단점

동시성 문제란 무엇인가?Concurrency problems occur when multiple transactions are being executed on the same database in unrestricted problems. 동시성 문제는 동일한 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때 발생합니다. 즉, 동시성 문제는 동일한 데이터에 대해 여러 트랜젝션이 동시에 수행될 때 발생하는 문제입니다. 스프링에서 동시성 문제 해결의 분류스프링에서 동시성 문제를 해결할 수 있는 방법은 크게 3가지로 나눌 수 있습니다. 1. 코드단에서 지원하는 Lock을 이용한 Application 내부 스레드 동기화 2. MongoDB, Redis와 같은 인메모리 DB를 이용한 트랜젝션 동기화 3. DB자체에..

Develop(개발) 2024.03.17

스프링이 어떻게 여러 요청을 동시에 처리할 수 있을까?

스프링의 다중 요청 처리 우선 스프링은 멀티쓰레딩 환경입니다. 그렇기 때문에 동시에 발생하는 여러 요청에 대해서 여러 쓰레드로 나눠서 비동기로 요청을 처리할 수 있습니다. 그러면 스프링에서 멀티쓰레딩을 어떻게 지원할까요? 스프링 내장 서블릿 컨테이너 Tomcat 스프링은 기본적으로 설정된 서블릿 컨테이너로 내장 웹서버인 Tomcat을 사용합니다. 이 Tomcat에서 멀티쓰레딩을 지원하기 위한 쓰레드풀을 기본적으로 생성해서 관리합니다. 쓰레드풀이란 쓰레드를 생성하고 제거하는데 드는 컨텍스트 스위칭과 같은 오버헤드를 줄이기 위해 미리 쓰레드를 만들어두고 관리하는 패턴입니다. 이 쓰레드풀의 쓰레드들을 통해 비동기 요청을 처리합니다. Tomcat 쓰레드풀 기본 설정 server: tomcat: threads: ..

Develop(개발) 2024.03.10

Github Action에서 간단한 테스트 자동화 하기!

왜 Github Action? Github Action을 이용하면 여러 테스트를 자동화할 수 있습니다. 저는 42Seoul 과정을 진행하면서 팀 과제를 진행하며 Github Action을 통해 2개의 테스트 자동화를 구축하고 사용하고 있습니다. 1. Makefile의 make명령이 제대로 make가 되는지 여부 테스트 2. Norminnete(코딩 컨벤션)을 맞춰서 코드를 작성했는지 테스트 이러한 테스트들을 통해 Make가 가능한 코드만 master에 머지를 한다던지 등의 팀 내규를 만들어서 소스코드를 관리할 수 있어서 매우 편리합니다. 어떻게 작동하나요? (간단히) Github Action은 일시적으로 가상 환경을 띄워서 그 안에서 사전에 지정해둔 job들이 실행되는 순서로 작동합니다. 꼭 테스트뿐이 ..

Develop(개발) 2024.02.25

[Spring] Transaction으로 인한 중복 아이디 회원 생성 문제

회원가입 엔드포인트로 빠르게 연속으로 요청 시 중복 회원 생성 문제 회원가입 엔드포인트로 빠르게 연속해서 같은 회원가입 요청을 보내면 생성 중인 유저에 대한 존재 유무가 체크되지 못해서 중복된 회원이 생성되는 문제가 발견됐습니다. 프론트엔드에서 회원가입 버튼을 연타하지 못하게 비활성화한다면 일시적으로는 괜찮겠지만 근본적으로 서버에서 이런 현상이 가능하다는 것이 문제이기 때문에 서버에서 문제를 방지하는 해결책이 필요합니다. 문제 원인 분석 이 문제는 백엔드에서 유저 생성이 Transaction 하게 처리되기 때문에 발생하는 문제입니다. 유저의 정보가 모두 생성되는 시점에서야 DB에 유저의 정보가 반영되기 때문에 유저의 정보가 생성되는 시간 동안 똑같은 이름의 유저를 생성하는 요청을 서버에 보내더라도 DB에..

vscode 터미널에서 실행하는 환경변수 직접 설정하는 방법

터미널에서 vscode 바로 실행하기 vscode의 'code' command를 PATH로 설정해주면 "code 폴더경로" 명령어를 실행 시, 쉘이 프로젝트 폴더로 vscode를 실행시킨다. 이를 설정하는 방법은 2가지가 있다. [방법 1] vscode에서 설정하기 vscode를 실행한다. Cmd + Shift + P 를 눌러서 커멘드 팔레트를 연다 "Shell Command: Install 'code' command in PATH"를 찾아서 실행시키면 끝 [방법 2] 직접 설정하기 만약 Bash를 사용한다면 다음 전체 커멘드를 shell에 복붙한다. cat > ~/.bash_profile # Add Visual Studio Code (code) export PATH="\$PATH:/Application..

Develop(개발) 2023.10.03
728x90
반응형