1. Thread 스레드의 개념은 다음과 같다. 실행중인 한 프로그램(프로세스) 내에서 구분지어진 실행 단위 하나의 프로세스에서 작업을 처리하기 위한 단위로 생각하면 된다. 실생활 예를 들면, 은행은 은행이라는 프로세스 내에서 여러 고객의 동시 거래 요청 작업을 처리해야한다. 이때 은행이 병렬적으로 동시 거래 요청 작업을 처리하는데, 해당 작업이 이루어지는 단위가 스레드인 것이다. 컴퓨터의 CPU는 스레드 단위로 작업을 처리한다. CPU는 여러 스레드를 번갈아가며 실행해서 다중 작업을 처리한다. CPU를 엄청 짧은 시간으로 시분할해서 사용하기 때문에 우리 눈에는 동시에 처리되는 것처럼 보이지만, 사실은 여러 스레드를 번갈아가면서 작업을 실행하는 것이다. ❓ Thread가 많으면 많을수록 좋을까? 1. T..
멀티 쓰레드는 프로그램의 성능을 향상시키는 가장 확실한 방법이다. 하지만 여러 쓰레드가 자원을 공유한다면 예기치 않은 문제를 발생시킬 수 있다. Java에선 어떻게 Thread-Safe하게 개발할 수 있도록 지원을 하는지, 다양한 방법들에 대해 간단한 코드와 함께 알아보고 실제 개발 중이던 Thread-UnSafe한 코드를 수정해볼 것이다. 1. Thread Safe (쓰레드 세이프) 란? 멀티 쓰레드 프로그래밍에서, 어떤 공유 자원에 여러 쓰레드가 동시에 접근해도, 프로그램 실행에 문제가 없는 상태를 의미한다. Race Condition 상황이 발생해도 실행에 문제가 생기지 않는 것을 의미한다. Race Condition 이란? 경쟁 상태로, 공유 자원에 대해 두 개 이상의 스레드가 동시에 읽거나 쓰는..
🤔 1. 고민.. 현재 나는 창업 프로젝트에서 혼자 백엔드 개발을 맡아 진행하고 있다. 대학생이니 당연히 사수도 없고, 같이 고민하고 토론할 백엔드 팀원도 없으니 내가 결정한 모든 것이 그대로 프로젝트에 반영되었다. 나의 잘못된 판단, 습관 들로 프로젝트가 망가지지 않도록 하기 위해 끊임없이 되돌아보고 조언을 구하며 진행하고 있다. 현재 프로젝트는 큰 틀로 domain, global 를 나눴고, 도메인 별로 entity, dto등 생성하고 있었다. 하지만 프로젝트 규모가 커짐에 따라 dto관리를 하기가 너무 힘들었다. 당장 몇 주 전에 개발했던 코드를 딱 봤을 때 무슨 역할을 하는 클래스인지 바로 알아차리기 힘들었다. 나름 코드에 신경을 많이 써서 개발 하는 스타일인데 규모가 커지니 어지러웠다. 아래는 ..
1. 개요 졸업 작품으로 POI (Point Of Interest) 추천 시스템을 개발하기로 했다. 팀원 중 2명이 Python을 사용하여 AI 모델을 개발하는 부분을 맡았고, 데이터를 가공하여 DB에 넣고, 학습된 AI 모델을 서비스로 제공할 수 있도록 서버를 구축하는 역할을 맡았다. AI 모델의 학습 데이터로는 Yelp의 대용량 데이터셋을 사용하기로 했다. 데이터셋에는 약 900만 개의 데이터가 포함되어 있었고, 이 데이터와 새로 추가된 데이터를 사용하여 AI를 재학습해야 했다. 처음에는 Spring 서버를 띄우고, 스프링 스케줄러를 사용하여 Python 파일을 실행하여 재학습을 진행할 계획이었다. 그러나 대용량 데이터이기 때문에 다른 트래픽을 처리하는 데 문제가 될 것으로 예상됐다. 일반적으로 대용..
1. 개요github action, docker와 nginx를 사용해 무중단 배포 CI/CD를 구축해뒀었다. 나는 BLUE/GREEN 방식의 무중단 배포를 적용해뒀는데, 적용 후 새로운 컨테이너가 실행되고 스프링 서버가 다 켜졌다면, 기존 컨테이너를 종료시키는 것 까지 확인했기에 잘 구축됐다 생각했다. 며칠 전 프론트엔드 팀에서 서버 연동 테스트를 해보겠다는 요청이 들어왔고 트리거를 걸어둔 브랜치에 push 해주어 배포를 시도했지만, 변경사항이 제대로 적용되지 않았다. ec2에 들어가 원인을 살펴보았다.Nginx config 파일에 port도 잘 변경되었고, 컨테이너도 잘 실행되고 종료되는걸 확인했는데 변경 코드가 적용되지 않아 이미지가 문제인가 하고 이미지 목록을 조회했더니 이미지가 업데이트 되지..