안녕하세요. 이번 포스팅은 공변성과 반공변성에 대해서 알아보겠습니다. 아마 많은 분들에게 생소한 단어로 느껴질 것 같습니다만 코드로 보면 단번에 이해할 수 있을 것입니다. 먼저 배열을 통해서 공변성에 대해 알아보겠습니다. Array는 공변성이다. 배열은 기본적으로 공변성입니다. 예를 들어, T[] 배열은 요소로써 T 하위 타입을 삽입할 수 있는 규칙이 허용된다는 뜻입니다. public static void main(String[] args) { Number[] numbers = new Number[4]; numbers[0] = 10; numbers[1] = 3.14; numbers[2] = 11L; numbers[3] = 3.25f; } 위에 대한 내용 뿐만아니라 타입 S가 타입 T의 하위타입일 때, S..
HTTPS가 필요한 이유 개인정보 보호 무결성 식별 개인정보 보호 서버간 메시지 전송 시 통신하는 서버가 아닌 제 3자가 이를 가로챌 수 없음을 의미한다. 이러한 암호화되지 않은 메시지가 제 3자에게 노출된다면 잠재적으로 악용될 소지가 있음을 나타낸다. HTTPS 없이 웹사이트를 탐색한다면 비밀번호 등 유효정보를 도청당할 수 있다. 브라우저의 URL 표시줄에 자물쇠는 이렇게 몰래 훔쳐보고 있는 제 3자가 없다는 것을 뜻한다. 무결성 무결성은 메시지가 목적지로 가는 도중에 조작되지 않음을 의미한다. 예를 들어, 내가 누군가에게 메시지를 좋은 말로 보냈는데 제 3자에 의해 수정되어 못된 말로 변경되어 가는 경우 이러한 무결성이 보장되지 못한다고 볼 수있다. 위의 예처럼 중간에서 조작되는 것을 중간자 공격이라..
안녕하세요. 오늘은 물리삭제와 논리삭제에 대한 내용을 정리해보고자 합니다. SQL을 배울때 기본적으로 특정 테이블의 레코드를 삭제처리할 때는 DELETE 쿼리를 아래와 같이 실행할 것입니다. (물리삭제) DELETE FROM table WHERE seq = 1 -- 물리삭제 쿼리 그런데 제가 처음 실무를 접했을 때, 많은 테이블에서 DELETE 쿼리를 실행하지 않고 삭제처리를 하고 있었습니다. DELETE 쿼리를 실행하지 않고 어떻게 삭제처리를 할 수 있을까요? 바로 논리적인 개념의 컬럼을 추가하고 해당 컬럼을 UPDATE 실행을 하면 삭제되었다고 여기는 것입니다. 아래는 해당 논리 삭제의 UPDATE문 입니다. UPDATE table is_delete = true, delete_time = now() ..
해당 포스팅은 해당 게시글을 번역한 포스팅임을 명시합니다. 서론 마이크로서비스 아키텍처 패턴을 사용하여 온라인 스토어 애플리케이션을 개발한다고 가정해 봅시다. 대부분의 서비스들은 하나의 종류의 데이터베이스에 데이터를 저장해야 합니다. 예를 들어, Order Service는 Order에 대한 데이터를 저장하고 Customer Service는 Customer에 대한 데이터를 저장합니다. Problem 마이크로서비스 애플리케이션의 데이터베이스 아키텍처는 무엇입니까? Forces 서비스는 독립적으로 개발, 배포 및 확장될 수 있도록 느슨한 결합이 필요합니다. 일부 비즈니스 트랜잭션은 여러 서비스에 걸쳐 처리되도록 불변성을 적용해야 합니다. 예를 들어, Place Order 유스케이스에서는 새로운 주문이 발생할 ..
해당 포스팅은 해당 게시글을 번역한 포스팅임을 명시합니다. 서론 마이크로서비스 아키텍쳐 패턴을 활용하여 온라인 스토어 애플리케이션을 개발한다고 가정해 봅시다. 대부분의 마이크로서비스에서는 일종의 데이터베이스에 데이터를 저장합니다. 예를 들어 Order Service는 주문(Order)에 대한 정보를 저장하고 Customer Service는 고객(Customer)에 대한 정보를 저장합니다. Problem 마이크로서비스 애플리케이션의 데이터베이스 아키텍처는 무엇인가?? Forces 서비스는 독립적으로 개발, 배포 및 확장될 수 있도록 느슨한 결합이 필요합니다. 일부 비즈니스 트랜잭션은 여러 서비스에 걸쳐 처리되도록 불변성을 적용해야 합니다. 예를 들어, Place Order 유스케이스에서는 새로운 주문이 발..
해당 포스팅은 해당 게시글을 번역한 포스팅임을 명시합니다. 문제 어떻게 레거시 모놀리스 애플리케이션을 마이크로서비스 아키텍처로 마이그레이션합니까? 해결방법 레거시 애플리케이션을 중심으로 새로운(srangler) 애플리케이션을 점진적으로 개발하여 애플리케이션을 현대화합니다. 이 시나리오에서 srangler 애플리케이션에는 마이크로서비스 아키텍처가 있습니다. 해당 그림은 전체적인 모놀리스 어플리케이션의 사이즈를 줄여감으로써 도메인 별 서비스로 쪼개놓고 신규 기능은 신규기능의 서비스로 분리하여 점차 모놀리스 어플리케이션을 말라 죽이는 방법입니다. Strangler 어플리케이션은 두가지 서비스 유형으로 되어있습니다. 첫째, 이전에 모놀리스 어플리케이션에서 사용되던 기능을 가진 서비스 둘째, 새로운 기능을 도출해..
안녕하세요. 회사에서 단순 API 개발 업무를 하다가 동시성 이슈를 맞딱뜨리게 되었고, 동시성 처리에 대해 알아보던중, 병럴(parallel)이라는 키워드를 종종 보곤하여(ex, parallelstream) 두가지 개념에 대해서 정리하고자 합니다. 우선 두가지를 직관적인 표로 비교해서 보겠습니다. 동시성(Concurrency) 병렬성(Parallelism) 여러 작업이 동시에 실행되고 있는 것처럼 구현되는 것 여러 작업이 실제로 동시에 실행되고 있는 것 싱글 코어 환경에서 단일 프로세스 내에 멀티 스레드를 동작하여 구현 멀티 코어 환경에서 멀티 프로세스(단일 스레드) 혹은 멀티 스레드를 활용하여 처리. 빠른 시간에 하나씩 많은 것을 처리 한번에 많은 것을 처리 논리적인 부분 물리적인 부분 예시) 커피 추..
이번 포스팅에서는 스프링 프레임워크에서의 트랜잭션 관리에 대해 자세히 알아보고 @Transactional 어노테이션에 대해서 살펴보겠습니다. 트랜잭션 관리에 대해서는 매우 방대한 분량이므로 두개의 섹션으로 구분하여 진행하도록 하겠습니다. Spring Transaction Management : 스프링이 트랜잭션 관리하는 방법에 대해 깊게 탐구합니다. @Transactional 어노테이션 : 해당 어노테이션의 사용법과 주의사항에 대해서 탐구합니다. Spring Transaction Management 트랜잭션은 완전히 성공하거나 완전히 실패하는 일련의 논리적 작업단위입니다. 은행 계좌이체를 생각해보시면 됩니다. 여기서 작업단위는 A의 계좌에서 출금하는 금액과 B의 계좌에서 입금하는 금액입니다. 둘중 하나라..