무중단 배포
·
프로그래밍/Infra
무중단 배포 왜 해야할까? 현재 운영중인, 서비스의 신 기능 추가로 인해 버전이 업그레이드 되고 새로운 파일을 배포해야할 때, 다운 타임이 발생하게 됩니다 다운타임이 발생하는 배포 방식을 중단 배포라고 하며, 이 시간동안은 유저가 서비스를 이용할 수 없기에 유저에게 지속적으로 서비스를 제공하기 위해 무중단 배포 방식을 고려해봐야 합니다 무중단 배포 무중단 배포는 서비스가 중단되지 않은 상태(zero-downtime)로, 새로운 버전을 사용자들에게 배포하는 것을 의미합니다 무중단 배포를 하기 위해서는 최소 서버가 2대 이상 확보되어야 합니다. 무중단 배포의 종류 롤링(Rolling) 배포 현재 운영중인 서비스의 트래픽을 점진적으로 구버전에서 새로운 버전으로 옮기는 방식 입니다. 점진적으로 트래픽을 옮기는 ..
데이터베이스 선택에 대한 고민
·
프로그래밍/데이터베이스
데이터베이스를 선택할 때, 주로 나오는 내용은 RDBMS 와 NoSQL 둘 중 어느것을 선택할지에 대한 고민이 자주 나옵니다. NoSQL과 RDBMS 각각의 장단점에 대해 알아보고, 언제 사용하는게 적합할지에 대해 알아보겠습니다. Releational DataBase Order id product_id count ordered_at user_id ... ... ... ... ... ... .. ... .. ... 위와 같이 주문에 대한 정보를 담고 있는 Order라는 테이블이 있다고 가정하겠습니다. 만약 Order라는 테이블에서 주문 상태를 저장하는 order_status 컬럼이 추가되었다고 가정하겠습니다. id product_id count ordered_at user_id order_status ....
소수 계산 어떻게 해결해야할까?
·
프로그래밍/Java
만약 글을 읽는 분께서, 돈과 관련된 업무 또는 정확한 수치를 기반으로 진행해야 하는 업무를 맡게 된다면 어떻게 하시겠습니까? float이나 double을 해답으로 생각하셨다면 한번 이 글을 통해 더 나은 방법에 대해 같이 고민해보는게 좋을 것 같습니다. float과 double의 문제점 float과 double은 연산했을 때, 나오는 가장 유명한 문제 입니다. 코드는 java를 기준으로 작성되었습니다. public class FloatTest { public static void main(String[] args) { float a = 0.1f; float b = 0.2f; if(a + b == 0.3){ System.out.println("a + b == 0.3"); } System.out.print..
Java volatile이란?
·
프로그래밍/Java
자바 volatile 키워드에 대해 알아보기 전에 앞서, 관련된 내용인 컴퓨터 구조와 관련된 내용에 대해 간단하게 설명하려 합니다. Memory-wall Problem Memory-wall 문제는 컴퓨터 구조에서 CPU(프로세서)의 속도가 메모리 시스템과 데이터를 주고받는 속도를 능가할 때 발생하는 현상을 말합니다. 그로인해 프로세서는 빠른 연산 처리속도를 가짐에도 불구하고 메모리에서 CPU로 데이터를 가져올 때까지 기다려야 하므로 성능이 느려지고 속도도 제한되게 됩니다. 따라서 위 그림과 같이 CPU(그림에서의 Core 영역)는 CPU cache를 둠으로써, CPU와 메모리 사이의 데이터 전송 속도 문제를 해결했습니다. 하지만 이로 인해, CPU cache의 데이터와 RAM사이의 데이터가 일치하지 않는..
REST API란?
·
프로그래밍
본 글은 그런 REST API로 괜찮은가 라는 유튜브 영상을 참고하여 작성한 글입니다. 개인 프로젝트나, 회사에서 프로젝트를 진행하면서, HTTP를 이용한 API를 작성하게 됩니다. 이때마다 REST API 라는 단어를 마주쳤으나 과연 내가 작성하고 있는 API가 REST API가 맞는가? 라는 의문이 들었습니다. 그렇기에 REST API에 대한 오해를 풀고, 좀더 깊은 이해를 하기 위해 해당 글을 작성하게 되었습니다. 먼저 저는 REST API는 URI를 통해 Resource를 표현하면 된다고 생각했습니다. /members/delete/1 그리고 자원에 대한 행위는 HTTP Method를 통해 표현하면 된다고 생각했습니다. DELETE /members/1 REST API를 정의한 로이 필딩에 의하면 위..
mock() vs @Mock vs @MockBean 이제 그만 헷갈리자!
·
프로그래밍/Spring
테스트를 수행하다보면, 실제 객체를 대신해주는 테스트용 객체를 생성해 줄 때, mock을 사용하게 됩니다. 이때마다 사용했던 mock() 과 @Mock 그리고 @MockBean 세가지에 대해 정리해보겠습니다. Mockito.mock() Mockito.mock() 메서드를 사용하면 클래스 또는 인터페이스의 mock 객체를 생성할 수 있습니다. 또한 mock 객체를 사용해, 해당 객체가 가진 메서드의 반환값을 조작하거나 해당 메서드가 호출되었는지 확인할 수 있습니다. @Test public void UserRepository를mocking하고_count메서드가실행되면_모킹한값을리턴한다() { UserRepository localMockRepository = Mockito.mock(UserRepository...
대칭키 비대칭키 암호화
·
프로그래밍
암호화 기술은 인터넷 사용이 보편화 됨에 따라 해킹, 바이러스 등의 사이버 범죄 및 개인 정보 유출 문제가 대두되어 컴퓨터를 사용하는 사용자의 신원 확인, 정보 비밀성 유지, 무결성 유지 등의 기능이 필요하게 되어서 나타나게 된 기술이다. 암호화에 대해 알아 보기전에 간략하게 용어들에 대해 정리하겠습니다. 암호화 되지 않은 문장을 평문(plaintext)라고 합니다. 암호화된 문장을 암호문(ciphertext)이라 합니다. 암호화란 평문을 암호문으로 바꾸는 과정 입니다. 암호문을 평문으로 바꾸는 과정을 복호화라 합니다. 쉽게 말해 암호화란 주어진 내용의 의미를 파악할 수 없도록 만드는 작업이고, 복호화란 그 암호화된 내용을 다시 파악할 수 있는 내용으로 다시 만드는 작업 입니다. 암호화 방식의 시초의 암..
테스트 커버리지에 대한 생각(SLASH 21 영상 참고)
·
프로그래밍
본 포스팅은 토스 SLASH 21 - 테스트 커버리지 100%를 보고, 느낀점과 개인 프로젝트를 진행하면서 테스트 커버리지 80% 이상을 달성하면서 느낀점을 토대로 작성했습니다. 클린 코더라는 책에서는, 100% 테스트 커버리지를 권장한다고 적혀 있다. 테스트 커버리지 100%를 유지하려면, 모든 부분에 대한 테스트 코드를 작성해야하고, 테스트하기 어려운 부분이 존재함에도 테스트를 작성해야 하기 때문에, 작업에 어려움이 있을것 이라고 예상했다. 영상에서는 테스트 커버리지 84%를 달성한 시점을 기준으로, 커버리지가 기준을 달성하지 못하면 배포가 되지 않게 설정했다. 영상에서와 달리 나는, 테스트 커버리지 80%를 달성하지 못하면 CI과정에서 빌드가 실패하도록 설정했다, 배포 과정에서는 앞서 테스트 코드를..