전체 글
-
nodejs + android Socket.IO 를 이용해 소켓 통신 만들기개발/nodejs 2021. 10. 28. 21:32
NodeJs Socket Server nodejs 의 socket.io 라이브러리를 사용하면 손쉽게 클라이언트와 소켓 통신을 할 수 있는 코드를 구현할 수 있다. 코드도 몇줄 되지 않는다. 아래 코드는 typescript로 소켓 통신 부분을 구현해본 것이다. import express from 'express' import httpLib from 'http'; import socketIO from 'socket.io'; const http = httpLib.createServer(express()) const socketio = new socketIO.Server(http, {}) socketio.on("connection", (socket: socketIO.Socket) => { console.log(..
-
nodejs + typescript 버전 heroku로 푸쉬하기개발/nodejs 2021. 10. 27. 21:46
nodejs를 typescript로 짜고 로컬에서 테스트 할 때는 아래 처럼 nodemon 명령어를 사용하면 된다. 그런데 heroku 서버 상에서는 이 명령어를 사용할 수 없다. nodemon --exec ts-node src/index.ts heroku 서버상에서도 typescript를 사용하기 위해선 typescript를 javascript로 변환하는 과정이 필요하다. package.json을 수정하면 heroku에 push 하는 과정에서 typescript를 javascript로 빌드하는 과정을 추가할 수 있다. 아래 코드에서 postinstall 속성이 npm run build로 되어 있는데 이 과정에서 heroku에 설치하면서 최종 명령어로 불리게 된다. build 속성을 tsc로 두면 타입 ..
-
다크모드 적용기개발/안드로이드 2021. 10. 14. 20:00
최근 기존 프로젝트에 다크모드를 적용하는 일을 진행했었다. 꽤 오랜 시간이 소요될 줄 알았지만 안드로이드에서 제공하는 기능을 통해서 생각보다 빠르게 적용할 수 있었다. 이번 포스트에서는 다크모드를 적용하면서 유용했던 기능을 정리해봤다. 0. 동일한 이름으로 다크모드를 적용할 때 주요하게 변경하는 부분은 텍스트 색깔, 그림 파일 형태의 앱 내 아이콘, XML로 생성한 그림 파일(사각형이나 그라데이션 등등) 이다. 다크모드를 적용하더라도 각각의 파일 이름은 그대로 가져가야 앱 내에서 수정하는 부분을 최소화 할 수 있기 때문에 리소스의 이름은 동일하게 유지하고 라이트모드, 다크모드 각각의 상태에서는 다른 파일을 사용하도록 진행했다. 1. 아이콘 리소스 분리 안드로이드에서는 리소스 폴더에 키워드를 넣어서 앱의 ..
-
Kafka - Event Streaming Platform기술 2021. 10. 13. 20:30
Event Streaming Platform Kafka를 간단히 설명하면 Event Streaming Platform이다. 그래서 Kafka에 대해서 이해하려면 먼저 Event Streaming Platform이 무엇인지 먼저 이해할 필요가 있다. Kafka 공식 문서에서는 Event Streaming을 다음과 같이 정의한다. Technically speaking, event streaming is the practice of capturing data in real-time from event sources like databases, sensors, mobile devices, cloud services, and software applications in the form of streams of e..
-
RxJava - Disposable Deep Dive!개발/안드로이드 2021. 9. 17. 20:00
1. Disposable 클래스의 역할 RxJava 공식 문서에서는 Observable과 Observer의 관계를 위 그림으로 표현한다. Observable에서 데이터를 전달 할 때는 onNext() 함수가, 더이상 전달할 값이 없을 때는 onComplete() 함수가 마지막으로 에러가 발생하면 onError()가 호출되는 방식이다. 이런 설명 방식도 조금 디테일하게 분석해보면 Observable과 Observer 사이에 Disposable 객체를 추가하는 것이 조금 더 정확할 것 같다. Disposable 객체는 Observable에서 노출할 자원을 갖고 있고 Observer에게 이벤트로 전달하는 객체다. 그래서 RxJava 내부 소스코드를 분석해보면 첫번째 그림에 보여진 Observabe -> Obs..
-
RxJava dispose()개발/안드로이드 2021. 9. 16. 20:00
이번 포스트에서는 RxJava를 사용할때 왜 dispose() 함수를 호출해서 메모리 정리를 해야하는지를 사례를 통해서 정리해보고자 한다. class LeakActivity : AppCompatActivity() { private var disposable1 : Disposable? = null companion object { private const val TAG: String = "leak_activity_tag" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val observeSource = Observable.interval(1, TimeUnit.SECONDS) disposable..
-
IoC container and Bean개발/spring 2021. 9. 6. 21:00
IoC Containner and Bean In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application. Beans, and the dependencies among them, are reflected in the configura..
-
@Bean vs @Component개발/spring 2021. 9. 6. 20:00
Spring IoC 컨테이너 내에서 관리하는 객체들을 Bean 이라고 하고 Bean으로 사용 될 수 있는 객체는 XML이나 코드상에서 지정이 가능하다. 어노테이션을 사용하는 경우 @Bean, @Conponent 같은 어노테이션을 이용해 Spring IoC 컨테이너에 클래스를 객체로 등록할 수 있다. @Bean @Bean 어노테이션은 method 레벨 어노테이션으로 개발자가 수정할 수 없는 3rd 라이브러리 객체를 IoC Container에 등록하고 싶을 때 사용한다. 예를 들면 아래 코드처럼 애플리캐이션 전체에서 공통적으로 사용하고 싶은 Kafka 클래스를 만드려는 경우 아래와 같은 코드로 Bean을 등록 할 수 있다. @Bean을 사용할 때는 @Configuration 어노테이션이 추가된 클래스 내부에..