분류 전체보기

    [리뷰] 법정의 얼굴들

    Intro 인터넷을 서핑하던 중 어떤 판결문에 대한 게시글을 읽고 박주영 판사의 책을 읽어보고 싶어졌다. 다음은 울산 자살 방조 미수사건의 판결문 일부이다. 판결문 속에서 피고인의 사연을 안타까워하고 위로하고 싶은 마음, 그럼에도 불구하고 삶을 계속 이어나가길 바라는 간절한 마음을 느낄 수 있다. 공과금 몇 만원이 없어 단전된 싸늘한 월세 방에서, 몇 달치 치 월세가 밀려서, 누군가에게 배신당해서, 사랑하는 이가 죽어서, 억울한 일을 당해서, 아무도 곁에 없어서… 누군가 생을 끝내는 이유는 차고 넘친다. 수많은 이가 무수한 이유로 스스로 목 숨을 끊고 있는 이 순간에도, 우리는 그저 관성적으로 하루를 살고 또 하루를 죽는다. 살인과 강간이 끊이지 않고, 매일 서너 명이 직장에서 집으로 돌아오지 못하고, ..

    HAProxy를 사용한 리버스 프록시 서버와 무중단 배포 환경 구축(1)

    🏁 들어가기 전 프로젝트를 진행하며 Nginx를 사용해 리버스 프록시 서버를 구축해 본 경험이 있다. Nginx를 사용해 간단하게 리버스 프록시 세팅과 로드 밸런스 서버를 구축할 수 있었지만 2% 아쉬운 부분이 존재했다. 이에 대한 대안으로 HAProxy를 사용하여 로드밸런싱이 가능한 고가용성 리버스 프록시 서버를 구축하고 더 나아가 무중단 배포환경까지 만들어보고자 한다. ✅ HAProxy HAProxy는 고가용성 로드밸런서와 리버스 프록시 서버를 지원하는 오픈소스 소프트웨어이다. Nginx 일반 버전과 차별화된 HAProxy의 강력한 기능은 health check 그리고 failover 기능이다. 간단히 설명하면, HAProxy 서버가 백엔드 서버의 상태를 지속적으로 확인하고 문제가 있는 노드(서버)가..

    [Optuna]오픈소스 컨트리뷰션 후기

    작년 말쯤 Optuna라는 오픈소스에 컨트리뷰션 하고 메인 브랜치에 머지된 경험이 있다. 비록 늦기는 했지만, 지금이라도 그때의 기억을 되살려 에러를 처리하고 코드리뷰 과정을 거쳐 소스가 반영되기까지 과정을 기록해 본다. 계기 이전에 진행하던 머신러닝 프로젝트를 수행하며 Optuna를 사용해 하이퍼파라미터 튜닝을 위한 실험 환경을 구성한 경험이 있다. Optuna를 조금씩 사용해 보고 공식 문서도 읽어보다 issue 페이지까지 보게 되었는데, 간단히 해결할 수 있어 보이는 이슈가 눈에 띄었다. 이슈에 달려있는 라벨도 친절하게 도전 욕구를 자극하는 good first issue 가 달려있었다. 나처럼 오픈소스에 기여하는데 능숙하지 않은 사람도 good first issue, contribution welc..

    [Docker] Docker 아키택처와 Dind, Dood

    💡 들어가며 Gitlab으로 CI 파이프라인을 구축하며 만났던 문제를 해결하는 과정에서 새로 알게된, Docker의 개념에 대해 소개합니다. 주제는 Docker Architecture, Dind, DooD 입니다. 🚫 Trouble GitLab Runner로 CI 파이프라인을 만들고, 통합 테스트를 위해 TestContainer를 사용했습니다. TestContainer로 생성된 MySql, Redis 컨테이너와 연결하는 과정에서 시행착오를 겪었습니다. GitLab Runner를 Docker out of Docker 형태로 Host Machine에서 컨테이너를 실행해서 발생하는 오류였습니다. ✅ 해결책 : Docker in Docker 컨테이너 Docker 아키택처 Docker in docker, Dock..

    [CI/CD]Spring boot 프로젝트 testContainer를 사용한 Gitlab-CI 파이프라인 구축하기

    들어가며... 최근 프로젝트를 하면서 Spring boot로 만든 프로젝트를 통합테스트 하기위해 TestContainers 를 사용하게 되었다. 로컬환경에서 테스트 컨테이너를 구성하고 통합 테스트를 성공하였지만, GitLab CI 단계에서 상당한 시행착오를 격게 되었다. TestContainer를 활용한 통합 테스트 환경을 구성하고, 이를 Gitlab CI 파이프라인에서 활용할 수 있는 방법을 기록해본다. 프로젝트 TestContainers 환경 설정 TestContainers 란? TestContainers란 Docker Container를 활용한 일회용 인스턴스를 제공하는 오픈소스 라이브러리이다. TestContainers를 사용함으로써 다음과 같은 이점을 얻을 수 있다. 통합 테스트를 수행하기 위해..

    [Java] deep copy, shallow copy 문법 정리

    deep copy, shallow copy 자바의 배열, collection을 다룰 때 값을 복사하는 작업을 수행해야할 경우가 있다. 이때 유의해야할 점은 java는 두가지 방법의 복사방법이 있다는 것이다. 얕은 복사(shallow copy) : 메모리 참조 주소를 복사한다. 깊은 복사(deep copy) : 실제 값 자체를 메모리에 복사한다. 예시를 통해 두가지 복사 방법을 정리해보자 shallow copy shallow copy는 값이 아닌 주소 값을 복사한다 복사 후 원본이 달라지면 복사한 값도 같이 달라진다(같은 주소를 바라보기 때문) equal(=) 연산자는 얕은 복사를 수행한다. Cloneable 인터페이스의 clone이 구현되지 않은 Custom 객체의 .clone() import java...

    [논문 리뷰] AutoRec: Autoencoders Meet Collaborative Filtering

    논문 링크 Abstract 본 논문은 Collaborative Filter에 Autoencoder 방법론을 적용한 모델을 제안한다. Autoencorder의 Encorder layer로 부터 축소된 Latent Space를 Decoder로 reconstruct하여 원본 데이터를 얻기위한 학습 모델 기존 Movielens와 Netfilx 데이터를 사용했을 때 MF(biased matrix factorization), RBM-CF, LLORMA 보다 가볍고 효율적인 학습 모델이다. 1. Introduction AutoRec는 기존 CF 모델들에 비해 user와 item 간 embedding을 보다 잘 표현하고 복잡도를 줄인 것이 특징이다. 논문 저자는 AutoRec이 기존의 CF 모델기반 모델들에 비해 표현..

    SQL syntax의 정리 - SELECT문

    SQL Syntax 정리 - SELECT 구문 이번 포스팅에서는 DML(Data Manufulation Language) 중 하나인 SELECT 구문의 문법에 대해 알아보겠습니다. SELECT 문의 문법 구조와 제공되는 함수를 이해한다면 데이터베이스에서 필요한 정보를 원하는 형태로 조회할 수 있습니다. 예시의 쿼리는 MYSQL 문법을 기준으로 작성되었습니다. 쿼리의 구조 SELECT 컬럼명 FROM 테이블명 WHERE 조건식 GROUP BY 컬럼명 HAVING 조건식 ORDER BY 컬럼명 SELECT 쿼리는 일반적으로 위와 같은 구조로 작성됩니다. 각 명령어의 역할은 다음과 같습니다. SELECT :추출된 데이터들을 조회 FROM : 조회하고자 하는 테이블을 지정 WHERE : 테이블에서 WHERE절에..