분류 전체보기

·TECH BOOK
용어 정리뉴스 피드(news feed)란 페이스북, 인스타그램과 같은 애플리케이션에서 볼 수 있는 지속적으로 업데이트되는 스토리이며,사용자가 팔로우하는 사람, 페이지, 그룹 등의 활동(예: 좋아요)을 모아서 실시간으로 보여주는 스트림 형태의 콘텐츠입니다.피드 발행(Publishing a Feed): 콘텐츠를 생성하고 공유하는 행위예) 사용자 A가 텍스트/사진/동영상 등의 게시물을 올리는 행위뉴스 피드 생성(Generating a News Feed): 자신이 팔로우하는 사람들의 발행된 피드들을 모아서 보여주는 과정예) 사용자 B의 화면에서 보이는 친구들의 피드 스트림이 뉴스 피드이며, 이 뉴스 피드 만드는 과정을 뉴스 피드 생성이라고 함요구사항기능 요구사항시스템이 무엇을 해야 하는 지에 대한 요구사항여러..
·TECH BOOK
요구사항기능 요구사항시스템이 무엇을 해야 하는 지에 대한 요구사항여러 종류의 알림을 제공해야 함알림 종류: 푸시 알림, SMS 메시지, 이메일알림 유형에 따라 템플릿/전송 로직 분리 필요여러 주체(시스템)로부터 알림 요청을 받아야 함클라이언트 애플리케이션 프로그램이 만들 수도 있고, 서버 측에서 스케줄링 할 수도 있음공통 API 제공을 통한 통합 처리사용자가 알림을 받지 않도록 설정하면 더 이상 알림을 보내면 안됨알림 전송 전 사용자 설정 확인 필요비기능 요구사항시스템이 어떻게 동작해야 하는지에 대한 요구사항연성 실시간 시스템(soft real-time)으로 동작해야 함가능한 빨리 알림이 전달되어야 하지만, 시스템에 부하가 있을 때 약간의 지연 가능고가용성과 안정성장애가 나도 알림 시스템 사용이 가능하도..
목표채널의 기념 개념과 사용법, 채널을 이용한 데이터 전송 이해셀렉트 표현식의 개념, 셀렉트를 이용한 비동기 작업 처리 이해채널채널은 송신자와 수신자의 수에 제한이 없으며, 채널을 통해 전송된 모든 값은 한 번만 받을 수 있습니다.채널은 누군가가 물품을 기부를 하면 아름다운 가게에 해당 물품이 전시되고, 그 물품은 여러 사람들 중 한 사람에게만 판매될 수 있다는 점에서 아름다운 가게와 비슷하다고 볼 수 있습니다.Channel은 아래와 같이 SendChannel와 ReceiveChannel를 구현한 인터페이스입니다. SendChannel: 원소를 보내거나 채널을 닫는 용도로 사용ReceiveChannel: 원소를 받을 때 사용SendChannel 인터페이스의 send 함수와 ReceiveChannel 인터..
배경멀티 모듈 환경에서 테스트를 작성하다보면, 다른 모듈에서 만들어진 testFixture를 활용해야 할 때가 있습니다. 만약, testFixture를 test 디렉토리에서 작성하게 되면 다른 모듈에서 접근할 수 없어 매번 새로운 fixture를 모듈별로 만들어야 하는 번거로움이 있습니다. gradle의 java-test-fixture 플러그인을 활용하면 모듈에서 testFixture를 위한 디렉토리를 만들 수 있고, 상황에 따라 다른 모듈에서 해당 testFixture를 가져다가 사용할 수도 있습니다.  Java Test Fixture먼저 gradle에서 java test fixture 플러그인을 설정하지 않으면, 모듈의 src 하위에 새로운 디렉토리를 생성하고자 할 때 아래와 같이 testFixtur..
배경 및 목표Java나 Kotlin 프로젝트를 진행하다보면, 여러 모듈 또는 라이브러리 의존을 하도록 build.gradle(또는 build.gradle.kts)에 의존성을 추가합니다. 의존성을 추가할 때에 사용할 수 있는 타입에는 여러개가 있고 어떤 상황에서 어떤 타입을 사용해야 하는지 정리하고자 포스팅을 하게 되었습니다. GradleGradle의 기본 구조아래 코드는 build.gradle.kts 예시입니다. 멀티모듈 구조를 사용하는 프로젝트의 루트 gradle 파일이라, 단일 모듈 프로젝트의 gradle 파일과 조금 상이할 수 있습니다.build.gradle 파일은 보통 plugins, repositories, dependencies 블록으로 구성됩니다./** * 참고) * - kotlin with..
아이템 49 - 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라Iterable과 Sequence는 서로 다른 목적으로 설계되어, 완전히 다른 형태로 동작합니다.Iterable은 처리 함수를 사용할 때마다 연산이 이루어져 List가 만들어지며, 컬렉션 처리 연산이 호출될 때마다 연산이 이루어집니다.Sequence는 지연(lazy) 처리가 되며, 시퀀스 처리 함수 사용 시 데코레이터 패턴으로 꾸며진 새로운 시퀀스가 리턴되고 최종적인 계산은 최종 연산(예: toList, count 등)이 이루어질 때 수행됩니다.즉, 최종 연산이 이루어지기 전까지는 각 단계에서 연산이 이루어지지 않습니다.시퀀스 지연 처리 장점시퀀스의 지연 처리는 아래와 같은 장점을 제공합니다.자연스러운 처리 순서를 유지함최소한의 연산..
아이템 45 - 불필요한 객체 생성을 피하라객체 생성은 언제나 비용이 들어가며, 상황에 따라 큰 비용이 발생할 수 있으므로 불필요한 객체 생성을 피하는 것이 좋습니다. JVM의 객체 생성 최적화동일 문자열일 때, 기존 문자열 재사용JVM에서는 하나의 가상 머신에서 동일한 문자열을 처리하는 코드가 여러개가 있다면, 기존 문자열을 재사용합니다.Integer나 Long와 같은 박스화한 기본 자료형에 대해서도 작은 값에 대해서는 재사용Kotlin/JVM에서 Int나 Double은 자바에서와 다르게 원시 타입입니다. 박싱 타입일 때, 작은 값들에 대해서는 캐싱을 하여 해당 값이 필요할 때 매번 새로운 객체를 생성하지 않고 기존 객체를 활용할 수 있습니다.  언제 박싱 타입으로 동작할까?nullable하게 타입을 ..
클래스는 객체 지향 프로그래밍(OOP) 패러다임에서 가장 중요한 추상화입니다. 이번 장에서는 코틀린에서 자주 볼 수 있는 클래스 사용 패턴에 대해 알아보고자 합니다. 이런 패턴을 어떻게 활용하고, 어떤 점을 기대하고 사용하는 지 등 규약에 대해서 알아보겠습니다. 해당 규약들을 잘 따르면, 안전하고 깔끔한 코드를 만드는 데 도움이 됩니다.아이템 36 - 상속보다는 컴포지션을 사용하라상속은 굉장히 강력한 기능으로, IS-A 관계의 객체 계층 구조를 만들기 위해 사용됩니다. 상속은 관계가 명확하지 않을 때 사용하면, 여러 문제가 발생할 수 있으므로 신중하게 사용해야 합니다.일반적으로, 일부 코드 추출 또는 재사용이 목적이라면 상속보다는 컴포지션을 사용하는 것이 좋습니다.간단한 행위 재사용프로그레스 바를 특정 ..
EARTH_ROOPRETELCHAM
'분류 전체보기' 카테고리의 글 목록