본문 바로가기

전체 글

(65)
Programming Clojure 읽기 - Introduction 본 내용은 할로웨이 스튜어트의 프로그래밍 클로저를 읽고 정리한 내용입니다. 잘못된 내용이 있다면 댓글로 편하게 지적해주시면 감사하겠습니다. 클로저의 특징 함수형 프로그래밍과 병렬처리를 위한 소프트웨어 트랜잭션 메모리(STM)는 멀티코어 하드웨어에 적합한 프로그래밍 패러다임입니다. 그 중 클로저는, Lisp에서는 오랜 프로그래밍 역사에서 오는 지혜를, 자바에서는 주류 플랫폼다운 안정성과 수많은 라이브러리를 지원합니다. 이 두 가지 강력한 조합이 바로 클로저입니다. 다음부터는 클로저의 특징에 대해서 조금 더 자세히 살펴보겠습니다. 우아하고 표현력이 좋은 코드 ‘코드와 데이터의 형태가 같다’는 Lisp의 특성 재사용성을 높이고 오류를 줄이는 함수형 프로그래밍 lock 기반이 아닌, 쉬운 병행 프로그래밍 → S..
nginx 리버스 프록시 설정 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 nginx 리버스 프록시 설정 포스팅을 옮겨온 것입니다. 1. 리버스 프록시란? 업브렐라는 React로 클라이언트 사이드 렌더링을 하고 있으며, 최종적으로 아래와 같은 인프라 구조를 갖추었습니다. 기존에는, 클라이언트 사이드 렌더링을 하기 때문에, 클라이언트에서 API 요청을 보낼 때, API 서버로 클라이언트에서 직접 요청을 보내는 구조였습니다. 따라서 보안적인 취약점이 발생하였는데요, 이를 해결하기 위해 nginx를 이용한 리버스 프록시 설정을 하게 되었습니다. 리버스 프록시란, 클라이언트와 서버 사이에서 중계기로서 동작하는 서버를 말합니다. 클라이언트가 서버에 접속할 때, 클라이언트는 중계기에 접속하고 중계기가 서버에 접속하여 클라이언트와..
슬랙 봇으로 서비스 알림 받기 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 슬랙 봇으로 서비스 알림 받기 포스팅을 옮겨온 것입니다. 안녕하세요, 이번 포스팅에서는 AWS 슬랙 배포 알림 파이프라인 구축하기에서 이어지는 내용으로, 슬랙 봇을 통해 서비스 알림을 받는 방법에 대해 알아보겠습니다. 1. 문제 정의 슬랙 봇을 도입하게 된 이야기에 앞서, 업브렐라 서비스에 대해서 설명해보겠습니다. 업브렐라는 공유 우산 서비스로 사용자가 우산의 QR을 촬영하여 우산을 빌릴 수 있습니다. 우산을 빌릴 때, 보증금 10,000원을 입금하며 14일 이내 반납 시 보증금을 돌려받을 수 있습니다. 업브렐라는 결제 API를 사용할 수 없었기 때문에, 반납을 관리자가 수동으로 해야하는 시스템입니다. 그러나 관리자가 반납 여부를 알림 받지 못..
AWS 슬랙 배포 알림 파이프라인 구축하기 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 AWS 슬랙 배포 알림 파이프라인 구축하기 포스팅을 옮겨온 것입니다. 이번 포스팅에서는 컨테이너 관리를 더 쉽게, AWS ECR, ECS로 서비스 구축하기에서 구축한 인프라에 슬랙 알림을 도입하여 알림 파이프라인을 구축한 이야기입니다. 1. 문제 정의 인프라와 CI/CD 파이프라인을 구축하였지만 여전히 불편한 점이 있었습니다. 배포가 완료되어도 AWS에 접속하여 직접 완료 여부를 점검해야 했습니다. 배포가 완료되었음을 알리는 메시지를 팀원들에게 직접 공유해야 했습니다. ECS가 갑작스럽게 종료되는 Event가 생겼을 때, 빠르게 팀원들에게 공유되는 알림이 필요했습니다. 따라서 저희는 AWS 슬랙 배포 알림 시스템을 구축하기로 합니다. 업브렐라 ..
롤링 업데이트, AWS ECR, ECS로 쉽게 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 롤링 업데이트, AWS ECR, ECS로 쉽게 포스팅을 옮겨온 것입니다. 안녕하세요, 이번 포스팅에서는 컨테이너 관리를 더 쉽게, AWS ECR, ECS로 서비스 구축하기에서 구축한 인프라를 바탕으로 CI/CD 환경을 구축한 이야기를 소개하고자 합니다. 1. 문제 정의 초기에 개발용으로 CI/CD 환경을 구축해놓았었는데요, 간단하게 정리하면 Github Actions와 AWS CodeDeploy, S3를 이용한 인플레이스 배포전략이었습니다. Github Actions에서 빌드를 진행한다. 빌드 완료된 파일을 압축하여 AWS S3에 업로드한다. AWS CodeDeploy가 트리거되어 S3에 업로드 된 파일을 EC2 인스턴스에 배포한다. 이 때, ..
컨테이너 관리를 더 쉽게, AWS ECR, ECS로 서비스 구축하기 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 컨테이너 관리를 더 쉽게, AWS ECR, ECS로 서비스 구축하기 포스팅을 옮겨온 것입니다. 안녕하세요, 이번 포스팅에서는 업브렐라의 아키텍처를 소개하고자 합니다. 가장 큰 고민은 어떻게하면 낮은 비용으로 고가용성의 아키텍처를 구축할 수 있을까였습니다. 또한 지속적인 서비스 운영을 고려했을 때 비용을 절감하는 것 또한 중요한 사안이었습니다. 1. 문제 정의 팀원들과 논의하며 어떤 아키텍처가 이상적일지 고민했었는데요, 아래와 같은 요구사항을 정리했습니다. 애플리케이션이 스래싱, 데드락 등으로 응답하지 않는 상태가 되어도 인스턴스 전체에 장애를 전파하지 않아야한다. 이전의 소규모 인프라에서 서비스를 구축했을 때, 공통적으로 나타났던 문제점은 애플..
내 테스트 코드는 몇 점짜리? Jacoco를 통한 커버리지 관리 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 내 테스트 코드는 몇 점짜리?, Jacoco를 통한 커버리지 관리 포스팅을 옮겨온 것입니다. 안녕하세요, 저는 업브렐라에서 백엔드 개발을 담당하고 있습니다. 업브렐라의 테스트 코드를 작성하면서 어떻게 하면 더 퀄리티 좋은 테스트 코드를 작성할 수 있을지에 대해 고민했습니다. 토스 팀의 이응준님의 코드 커버리지 100% 달성하기 영상을 보면서 많은 영감을 얻을 수 있었습니다. 다음은, 영상에 나오는 로버트 마틴의 클린 코더(2016) 책 속 인용구인데요. 저도 이 책을 읽어보지는 못했지만 커버리지의 중요성에 대해 많은 생각을 하게 되었습니다. 얼마만큼의 코드를 자동화한 단위 테스트로 커버해야할까? 대답할 필요조차 없다. 모조리 다 해야 한다. 모..
테스트 코드 작성 반복 노동으로부터 해방, Fixture Monkey 이 포스팅은 UPbrella 프로젝트의 기술 블로그에 작성한 테스트 코드 작성 반복 노동으로부터 해방, Fixture Monkey 포스팅을 옮겨온 것입니다. 안녕하세요, 저는 업브렐라에서 백엔드 개발을 담당하고 있습니다. 업브렐라의 테스트 코드를 작성하면서 드러났던 문제점과 이를 Fixture Monkey라는 오픈소스 라이브러리로 어떻게 개선했는지 적어보려합니다. 기존 방식의 문제점 단순한 API에서는 괜찮았지만, 여러 테이블과 얽힌 복잡한 API의 경우 테스트 코드 작성에 점점 많은 시간을 소요하게 되었습니다. 이 중 꽤 많은 비중을 테스트 검증을 위한 Mock 객체 작성이 차지했습니다. 저희 팀은 Service Layer와 Controller Layer 테스트를 BDDMockito를 이용해서 BDD(..