본문 바로가기

전체 글

(11)
코틀린, 코틀린답게 사용하기 - 5. Nullable Type 이번 포스팅에서는 코틀린의 가장 큰 장점 중 하나인 널이 될 수 있는 타입에 대하여 알아보겠습니다 1. Nullable Type, Non-Null Type Kotlin in Action 6장 앞부분에서는 다음과 같이 소개합니다. 코틀린과 자바의 첫 번째이자 가장 중요한 차이는 코틀린 타입 시스템이 널이 될 수 있는 타입을 명시적으로 지원한다는 점이다. 자바에 익숙했던 제가 처음에 공부할 때는 이게 왜 중요한 차이인지 잘 모르겠고 그냥 그런갑다~ 했었는데.. 공부를 하다가보니 머리속에서는 이렇게 남아있게 되었고 다시 돌아간다고 생각하면..🙀 자바에서는 같은 타입일지라도 코틀린에서는 널이 될 수 있는 타입과 될 수 없는 타입 두가지로 분류된다. - Non-Null: 널이 될 수 없는 타입은 말 그대로 Nul..
Blocking, Non-blocking, Asynchronous, Synchronous 어떻게 싱글스레드 기반인 노드나, 레디스가 동시에 수많은 요청을 처리할 수 있을까? A요청을 받고 A를 처리하는 도중에 또 다른 B 요청을 어떻게 받을 수 있을까~? 싱글스레드인데.. 이런 상황에서 나오는 키워드가 있다. Blocking, Non-blocking, Asynchronous, Synchronous... 이번 포스팅에서는 이 용어들의 차이에 대해서 알아보도록하자. Blocking vs Non-blocking 대기 Queue에 들어가서 자기 차례를 기다리느냐 리턴값이 시스템콜이 완료되고 오느냐 바로오느냐 Asynchronous vs Non-blokcing 시스템콜이 즉시 리턴되는 것은 동일 이때 데이터와 함께오면 Non-blocking (이 후 polling 방식으로 계속확인) 함께오지않고 완료..
코틀린, 코틀린답게 사용하기 - 4. Lambda 자바에서는 메서드를 파라미터로 넘길 수가 없어서, 메서드가 하나만 존재하는 특별한 인터페이스를 만들고 무명클래스를 이용하여 전달하곤합니다. 하지만 함수형언어인 코틀린에서는 함수를 일반 값처럼 다룰 수 있어서 변수에 저장할 수 있고, 다른 함수에 전달할 수 있습니다! 람다는 이 특별한 인터페이스를 대체할 수 있고, 함수형 API 와 확장함수가 더해져 많은 기능을 할 수 있습니다. 이번 포스팅에서는 코틀린에서 람다의 특징과 관례들에 대해서 알아보려고합니다. 1. Closure 코틀린에서는 람다 밖 함수에 있는 변수에 접근할 수 있고, 변경할 수도 있습니다. 자바와 달리 코틀린에서는 람다 외부에 있는 final이 아닌 변수에 접근할 수 있습니다. fun printProblemCounts(responses: C..
코틀린, 코틀린답게 사용하기 - 3. Class 이번 포스팅에서는 클래스를 다루는 측면에서 자바와 같은 기능을 하지만 더 효율적으로 수행하고있는 부분에 대해서 알아보려고합니다. 1. 생성자 @Service public class AccountService { private final AccountRepository accountRepository; private final PasswordEncoder passwordEncoder; @Autowired public AccountService(AccountRepository accountRepository, PasswordEncoder passwordEncoder) { this.accountRepository = accountRepository; this.passwordEncoder = passwordEn..
코틀린, 코틀린답게 사용하기 - 2. Extensions 자바에 익숙한 제가 코틀린을 처음 사용했을때 자바에서는 못보던 유틸성 메서드들이 코틀린에서 새롭게 추가된 것을 확인할 수 있었습니다. 처음에는 뭐 새롭게 추가됐나보다 하고 넘겼었는데 가만히 생각해보니, 코틀린은 자바와 100% 호환성을 목표로하고있다는데.. 기존 자바 API에 추가하지않고 어떻게 이런기능들을 제공하는지 궁금해졌습니다. 이 부분에 대해서 Kotlin in action 3장 - 함수 정의와 호출 에서 자세하게 다루고있는데, 대표적으로 자주 사용되는 함수인 joinToString() 을 구현하면서 알아보도록 하겠습니다. val numbers = listOf(1, 2, 3, 4, 5, 6) println(numbers.joinToString()) // 1, 2, 3, 4, 5, 6 println..
코틀린, 코틀린답게 사용하기 - 1. Expression Java 에는 Effective Java 라는 유명한 지침서가 있습니다. 코틀린을 주로 다뤄야하는 환경으로 오면서 코틀린을 코틀린답게 사용하기위해 Kotlin계의 이펙티브자바인 Kotlin in action 을 공부하고있습니다. Kotlin in action 에서 다루는 내용들을 바탕으로 기억해야 할 것들을 정리하려고 합니다. 해당코드는 github에서 확인할 수 있습니다. 코틀린에서 문(statement) 과 식(expression) 의 구분 코틀린에서 if, when 등 루프를 제외한 대부분의 제어 구조 등은 자바와 달리 expression 입니다. 이로인한 효과에 대해서 알아보려고합니다. statement 와 expression 는 쉽게 혼동하기 쉬운 개념입니다. 코틀린에서 statement 와 e..
Redis의 동시성(Concurrency)개념과 고립성(Isolation)을 위한 Transaction 처리 Redis는 AOF와 몇몇 명령어를 제외하고 Single-thread 기반으로 데이터를 처리한다. 단일 스레드로 여러 명의 클라이언트의 요청에 동시에 응답하는 동시성에 대해 알아보고, 이때 발생할 수 있는 문제점과 해결방법에 대하여 알아보도록 하자. Redis 의 거의 모든 명령어 처리는 단일 스레드로 동작한다. 어떻게 Single-thread 기반의 하나의 redis 서버에서 동시에 많은 사용자들에 응답할 수 있을지 의문스러웠다. 다행히도 이런 부끄러운 생각은 글로벌했다😄 나와 비슷한 글로벌 무지랭이에게 친절한 답변이 달려있다. concurrency(동시성), parallelism(병렬성) 은 다른 개념이라고 알려주고있다. 한 명의 바텐더가 순서대로 여러 명의 손님에게 대응할 수 있는 개념(동시성)과 ..
Why Redis? (Redis vs Memcached) 인스타그램, 네이버, 라인, 우아한형제들 등 국내외 기업에서 사용하고있는 Redis 에 대해 알아보자. DB-Engines 의 랭킹에서 볼 수 있듯이 전체 DBMS 에서는 8위, Key-value 스토어로는 가장 많이 사용되어지고 있는 레디스이다. 이번 포스팅에서는 Redis의 특징과 대형서비스에서 사용되는 형태에 대해 알아보고, 비슷한 솔루션인 Memcached 와의 차이를 통해 Redis 의 장점에 대해 살펴보려고한다. 이후에는 Redis에서는 어떻게 트랜잭션을 관리하는지 Transaction Manager 에 대해서 포스팅하려고 한다. 1. In-memory 기반의 캐시 솔루션 레디스 공식웹 첫 화면의 첫문장, Redis is an open source (BSD licensed), in-memory..