Application 9

Validation

Validation, Data Binding, and Type Conversion :: Spring FrameworkThere are pros and cons for considering validation as business logic, and Spring offers a design for validation and data binding that does not exclude either one of them. Specifically, validation should not be tied to the web tier and should be easy to locdocs.spring.ioSpring 문서에서 말하는 Validation웹 계층에 국한되어서는 안 된다. 서비스 계층, 데이터 계층 등에서..

Application 2024.10.16

Http client

RestTemplatespring 3.0 ~synchronous, blocking1 thread per 1 requestthread safe여러 요청을 병렬로 처리하고 싶다면 connection pool을 사용한다. (수신 서버가 Keep-Alive를 지원해야 한다.)RestTemplate 생성 시 어떤 HttpClient, ClientHttpRequestFactory를 사용할 것인지 선택할 수 있다. (default: SimpleClientHttpRequestFactory, 그 외 Apache HttpComponents, Netty, OkHttp)https://docs.spring.io/spring-framework/reference/integration/rest-clients.html@Beanpubl..

Application 2024.09.24

책 <단위 테스트>

단위 테스트단위 테스트에 대한 오해를 바로잡고, 올바른 단위 테스트에 대한 원칙, 테스트를 작성하는 스타일과 효과적인 테스트를 위한 소프트웨어 아키텍처를 이해할 수 있다. 또한 단위 테스트를 통합www.aladin.co.kr    1. 단위 테스트의 목표코드 커버리지 지표(code coverage, 라인 수), 분기 커버리지 지표(branch coverage, if 또는 switch문 같은 제어 구조 수)테스트가 많으면 많을수록 좋은 게 아니다. 코드는 자산이 아니라 책임이고 부채다. 가능한 한 적은 코드로 문제를 해결한다. 가치 있는 테스트만 남기고 나머지는 모두 제거하라.100% 커버리지라고 해서 양질의 테스트를, 시스템의 모든 가능한 결과를 검증함을 보장하지 않는다. 커버리지 숫자는 쉽게 장난칠 수..

Application 2024.08.26

Electron 일렉트론 Main, Renderer Process 이해하기

Electron Electron은 웹 기술(HTML, CSS, JavaScript)을 사용하여 데스크톱 애플리케이션을 만들기 위한 오픈 소스 프레임워크다. Chromium 브라우저와 Node.js 런타임 환경을 내장하고 있어서 웹 개발자들이 친숙하게 데스크톱 애플리케이션을 개발할 수 있다. Main Process Electron에는 Main Process와 Renderer Process라는 두 개의 별도의 프로세스가 있다. Main Process는 전체 Electron 애플리케이션에서 단 하나만 존재한다. Main Process는 Node.js 환경에서 동작하며, Electron의 주요 모듈과 네이티브 API를 사용할 수 있다. 주요 기능은 앱의 라이프사이클을 관리하고, 각종 네이티브 API를 노출시켜 ..

Application 2023.03.08

동시성 이슈 해결하기

주문이 한꺼번에 몰리는 한정판 판매를 구현할 때, 재고 수량의 정합성을 어떻게 보장할 수 있을까?! 문제점 아래는 Spring Framework, JPA를 사용한 재고 시스템 코드이다. 주문 시에 재고(Stock) 엔티티의 quantity의 값이 차감되어, 0이 되면 더이상 주문이 불가능하다. 이 코드에는 문제가 있다. package com.example.domain; @Entity @Getter public class Stock { @Id @GeneratedValue(strategy = GeneratedType.Identity) private Long id; private Long productId; private Long quantity; public Stock(Long productId, Long ..

Application 2023.02.26

알고리즘과 Big-O 표기법

실행 시간, 메모리, 개발자의 노력등을 포함해 알고리즘을 비교하여 최적의 알고리즘을 찾아낸다. 다음은 항상 언급되는 성장률(입력에 따라 함수 실행 시간이 증가하는 비율)의 목록이다. Time complexity Name Example 1 Constant Adding an element to the front of a linked list logn Logarithmic Finding an element in a sorted Array n Linear Finding an element in an unsorted array nlogn Linear Logarithmic Sorting n items by 'divide-and-conquer--Mergesort n² Quadratic Shortest path bet..

Application 2022.10.19

프로토콜 버퍼 protobuf 란?

구글에서 만든 데이터 직렬화 기준 바이너리 기반 규격 메시지 크기를 줄이고, 처리 성능을 높일 수 있다. 수 많은 클라이언트가 요청할 때 사용 암호화 되어 저장되는 건 아니다. 스키마 파일 .proto → 컴파일러 protoc → 인터페이스 코드 .py → protobuf 라이브러리와 함께 프로젝트에 추가하여 사용 스키마 파일 프로토콜 버퍼에서 사용할 메시지 구조 정의 인터페이스 코드 컴파일러가 스키마를 읽어 만들어낸 결과물 모든 프로그램은 이 코드를 통해서만 데이터를 직렬화/역직렬화 할 수 있다. 사용하기 프로토콜 버퍼 컴파일러와 라이브러리를 준비한다. 스키마 파일을 정의한다. syntax = "proto3"; // 프로토콜 버퍼 문법 버전 명시 message SimpleMessage { string ..

Application 2021.08.27

Redis 레디스 기본 알고 쓰기

레디스란 데이터를 안정적으로 저장하고 빠르게 처리하기 위해 NoSQL, Redis, Memcache, Sharding 등 대용량 데이터 처리 관련 기술을 사용한다. 레디스는 그 중 하나로, 캐시솔루션 또는 NoSQL Key-Value 스토어로 분류된다. 레디스의 특성 Key-Value 스토어 컬렉션 자료구조 지원 디스크 저장 가능 마스터-슬레이브 구조 지원 Publish / Subscribe 모델 지원 그리고 높은 성능 (100,000QPS) 컬렉션 자료구조 List, Set, Sorted Set, Hash 등의 자료구조 지원. 분산 환경에서 컬렉션을 공유하여 사용할 수도 있다는 것. 디스크 저장 캐시는 빠른 속도를 위해 데이터를 메모리에 저장한다. = 데이터가 사라질 수 있다. 하지만 레디스는 저장소라..

Application 2021.02.17