반응형

전체 글 130

Kotlin 생성자 개념과 사용법 정리

코틀린에서 생성자를 정의하는 여러가지 방법에 대해 정리합니다.코틀린 생성자는 크게 주 생성자(primary constructor)와 부 생성자(secondary constructor)로 나뉘고 각각 제약이 조금씩 다릅니다.1. 주 생성자 (Primary constructor)기본적으로 constructor 키워드를 통해 생성자를 정의할 수 있습니다.constructor 키워드 앞에 접근 제한자를 지정할 수 있습니다.constructor 키워드 자체를 생략할 수도 있습니다. 단, 이경우엔 접근 제한자는 지정할 수 없습니다.이렇게 선언하는 생성자를 주 생성자라고 합니다.class Person constructor(name: String, age: Int)// 접근 제한자 지정class Person priva..

Back-End/Kotlin 2021.09.07

Kotlin 클래스 주요 개념 with Java class와 차이점

클래스 정의에 대한 Java와 Kotlin 차이점이 포스트에서는 코틀린에서의 클래스가 자바와 어떻게 다른지 대략적으로 정리한 내용을 다룹니다.공부하면서 정리한 포스트이기에 잘못된 내용이나 부족한 부분이 있을 수 있습니다.댓글로 일러주시면 감사하겠습니다 :)1. class 키워드에 대한 차이점기본적으로 자바에서는 class 키워드를 통해 클래스를 정의합니다.class SomeClass { // 속성, 메서드 선언}코틀린에서는 이렇게 선언하면 기본적으로 클래스를 포함한 모든 멤버가 final로 정의됩니다. (상속 불가)class SomeClass { // 속성, 메서드 선언}때문에 코틀린에는 상속 및 재정의가 가능한 요소로 만들어주는 open이라는 키워드가 있습니다.클래스, 속성, 메서드 모든 곳..

Back-End/Kotlin 2021.08.29

리액티브 프로그래밍 시리즈 3 - 스레드 스케쥴링 (Thread scheduling)

이 포스트 시리즈는 Reactive Programming은 토비의 스프링 저자 이일민님의 리액티브 프로그래밍 유튜브 강좌를 공부하며 정리한 내용입니다.1. 표준 Reactive streams의 문제점지금까지 봐온 코드는 전부 하나의 스레드에서 동작한다.이 코드를 실전에서 활용하기엔 그닥 유용하지 않은 코드이다.Publisher가 Blocking I/O를 사용하거나 데이터를 준비하는데 시간이 오래걸릴 경우 그걸 다 기다려야하기 때문이다.반대로 Publisher의 데이터 생성은 굉장히 빠른데, Subscriber의 데이터 처리가 늦을 경우도 마찬가지다.Reactor에서는 Scheduler를 스레드 개념의 오퍼레이터를 활용해 이부분을 해결한다.여기에서는 이 개념을 직접 구현한 코드를 보겠다.아래 기본적인 Pu..

리액티브 프로그래밍 시리즈 2 - Operators와 Reactor 맛보기

이 포스트 시리즈는 Reactive Programming은 토비의 스프링 저자 이일민님의 리액티브 프로그래밍 유튜브 강좌를 공부하며 정리한 내용입니다.0. TipsStream 인터페이스에 iterate 라는 메소드가 있다.이 메소드는 어떠한 데이터 스트림을 쉽게 만들어 낼 수 있는 메소드이다.public List createSampleIntegerList(int count) { return Stream.iterate(1, e -> e + 1).limit(count).collect(Collectors.toList());}위 코드는 1 ~ 10까지 정수를 담은 리스트를 만든다.핵심은 iterate(시작값, 값의 변화 함수) 메소드인데, 위 예시에서 시작값은 1, 변화는 1씩 증가시킨다라는 뜻이다.그리고..

리액티브 프로그래밍 시리즈 1 - Reactive Streams 개요

이 포스트 시리즈는 Reactive Programming은 토비의 스프링 저자 이일민님의 리액티브 프로그래밍 유튜브 강좌를 공부하며 정리한 내용입니다.1. Iterable과 Observable의 차이점Iterable과 Observable은 정반대의 동작방식으로 같은 목적의 문제를 해결한다.1.1. Iterable 개념자바에서 연속적인 데이터 구조를 표현할 때 List를 주로 사용한다.그리고 주로 아래와 같이 for-each 구문을 사용한다.import java.util.List;import java.util.Arrays;List list = Arrays.asList(1, 2, 3, 4, 5);for (Integer i : list) { System.out.println(i);}이는 List 인터페이스가..

Spring Cloud Gateway 기본 활용법

0. Spring Cloud Gateway 란? Netflix OSS의 API Gateway 컴포넌트인 Zuul을 Spring 진영에서 직접 만든 API Gateway 입니다. Zuul은 기본적으로 블록킹 방식으로 동작했었는데요. (Zuul 1.x) 이를 개선하기 위해 Zuul 2.x에서 논블록킹 방식을 도입했습니다. Spring 진영에서는 Zuul의 동기방식이었던 단점을 보완하며 Spring 생태계에 더 적합한 형태의 비동기 API Gateway를 만든것이 바로 Spring Cloud Gateway 입니다. This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 5, Spring Boot 2 ..

Java에서 파일의 Mime type을 판별하는 방법

얼마전, 로컬 파일 시스템에 저장되어 있는 파일을 바이너리 형태로 내려주는 REST API를 작성할 일이 있었습니다.파일을 내려줄 때 Content-Type 헤더에 Mime Type을 알맞게 지정해줘야 하는데요. 찾아보니 다음과 같은 방법으로 할 수 있었습니다.Path filePath = Paths.get("file/save/path");String fileContentType = Files.probeContentType(path);시스템에 따라 파일 타입을 감지하지 못하는 경우도 있는데요. 제 경우엔 Mac OSX에서 파일 타입을 감지하지 못하는 경우가 있었습니다.때문에 알아보니 URLConnection을 이용하는 방법도 있었습니다.URLConnection.guessContentTypeFromName(..

Back-End/Java 2020.11.04

Spring Boot에서 Redis 활용

설정의존성 추가 org.springframework.boot spring-boot-starter-data-redis설정 클래스 작성아래와 같이 설정하면 default 설정에 의해 localhost:6379 로 연결합니다.변경하려면 설정파일에 spring.redis.host, spring.redis.port로 지정할 수 있습니다.Key / Value Serializer를 설정해주는 이유는 RedisTemplate에서 Spring ~ Redis간 데이터 직, 역직렬화 시 사용하는 방식이 Jdk 직렬화 방식이기 때문입니다. 동작에는 문제가 없지만 redis-cli를 통해 직접 데이터를 보려고 할 때 알아볼수 없는 형태로 출력되기 때문에 Serializer를 변경해준 것입니다. 참고 링크한글의 경우 ..

Back-End 2020.07.20

Redis 개념과 설치, 활용방안

Redis란?Redis는 REmote Dictionary Server의 약자로 "key-value" 기반 인메모리비 관계형 데이터 베이스다.모든 데이터를 메모리에 저장하고 조회하기 때문에 빠른 Read, Write 속도를 보장한다.다양한 value에 다양한 자료구조를 지원해 사용자 애플리케이션 개발 시 활용도가 높다.Redis vs MemcachedRedis를 검색해보면 개념 설명과 함께 Memcached와의 비교글을 많이 볼 수 있다.Memcached는 메모리 기반이라 처리속도가 빠르고 데이터에 만료 시간을 지정할 수 있고, 저장소 공간이 없으면 LRU 알고리즘에 의해삭제되는 특징이 있어, 대형 포털에서 Static Page나 검색 결과 등 캐싱 용도로 많이 사용된다.다만 프로세스가 죽거나 장비가 sh..

Back-End 2020.07.17