일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- network
- libuv
- html
- Lombok
- reactive
- Static
- cache
- nodejs
- AWS
- 네트워크
- reactor
- NoSQL
- mybatis
- git
- HTTP
- Elk
- 데이터통신
- effective
- mongodb
- socket
- r
- spring
- redis
- Heap
- VCS
- Linux
- Java
- github
- javascript
- ajax
- Today
- Total
목록분류 전체보기 (187)
빨간색코딩
본격적인 리액티브 프레임워크를 사용하기 전에, 옵저버 패턴 - 발행구독 패턴으로 만들어진 Spring Event와 SSE를 통해 리액티브 어플리케이션을 만들어보자 cf) 옵저버 패턴 포스팅 : https://sjh836.tistory.com/180 1. Spring 에서 Event 를 다룬다? 스프링 프레임워크에서는 EventListener를 통해 발행-구독(Pub/Sub) 패턴, 이벤트 버스(EventBus) 등을 지원한다. ApplicationContext 레벨에서 지원 도메인 서비스간 강한 결합, 강한 의존성을 Event 기반으로 풀어내면, 느슨한 결합 등을 얻을 수 있다. 개인적으론, 이것은 상황에 따라 장점이 될수도 있고, 단점이 될 수도 있다고 본다. 핵심 비즈니스 이외, 부가적인 비즈니스 로..
1. 관찰자(Observer) 패턴이란? 리액티브 프로그래밍의 기초이며, 대부분의 MVC, UI라이브러리들이 내부적으로 사용하는 디자인 패턴이다. Model = Subject(=Observable) , View = Observer 라고 보면, 모델 데이터의 변화에 따라 UI가 바뀌어보이는 것들 Swing 에서 각종 버튼들과 리스너들 관찰자 패턴에는 이벤트를 발생시키는 역할(주체)와 이벤트를 수신하는 역할(관찰자)가 있다. 주체(subject)는 관찰자(observer)에게 상태변경을 알려준다. 이벤트 기반 처리 일대다 의존성 등록 가능 단방향 통신 2. UML과 인터페이스 public interface Subject { void registerObserver(Observer observer); // 동시..
Spring 프레임워크도 5.x 부터는 리액티브를 지원하기 시작했지만, 이 글에서는 그 전까지의 상황을 살펴보았다. 리액티브가 왜 필요하고, 스프링5가 나오기전까진 반응성을 어떻게 구현하였는지를 살펴본다. 1. 리액티브(반응형)이 왜 필요한가? 1-1. C10K 문제 http://www.kegel.com/c10k.html 다수의 클라이언트를 동시에 처리할 수 있는가? 서버에서 10K(1만)개의 클라이언트에 대한 연결, 응답, 부하에 관련된 이야기 스레드는 서버의 cpu core 수에 종속적, 멀티스레드로 10k 요청에 대해 처리할 수 있는 한계가 있다. 요청 스레드들이 io wait 에 전부 빠져있다면? 대안) event-driven 방식 이벤트(=요청)와 io처리(I/O 멀티플렉싱)를 분리 이벤트루프는..
참조문서 https://redis.io/documentation https://github.com/antirez/redis https://redislabs.com/redis-enterprise/data-structures/ 명령어 목록 : https://redis.io/commands 1. redis란? redis는 REmote DIctionary Server의 약자이다. C언어로 작성되었다. In-Memory 데이터베이스이며, 다른 제품들(ex. Memcached)과 다르게 다양한 자료구조를 지원한다. String, Bitmap, Hash, List, Set, Sorted Set, Geospatial Index, Hyperloglog, Stream 영속성(Persistence) 보장을 위해 보관과 백업..
1. 들어가며 여기서 말하는 s3 비용절감은 대규모 서비스용도가 아니다. 그런 서비스들은 앞단에 AWS CloudFront 같은 CDN으로 서빙해야하는 게 맞고 그렇게들 하고있을테니, s3와 직접적으로 관련이 없다. 사이드 프로젝트에서 비용을 소소하게 아껴본 경험을 이야기해보고자 한다. 이용자 수가 어느정도 있는 경연, 사이드프로젝트, 데모 등 앞단에 뭔가 대는게 오히려 더 비용이 아까운 상황 2. aws s3 요금 계산식 서울 리전, 20년 6월기준 저장 0.025 USD / GB 전송량 0.126 USD / GB 1 GB 까진 무료 요청량 READ 10000번 당 0.0035 USD WRITE 1000번 당 0.0045 USD 3. 문제발생 s3 를 이미지 스토리지, 서빙 용도로 사용하고 있다. GE..
1. speing webflux 란? 더 낮은 사양의 하드웨어, 더 적은 수의 스레드로 동시성을 처리하기 위함 서블릿 스펙 3.1에서 논블로킹IO API를 지원하긴 하는데, 자꾸 동기(Filter, Servlet)나 블로킹(getParameter, getPart)에서 걸린다 spring 5.0 (boot 2.0) 부터 사용 가능 1-1. 특징 서블릿과 이별 : DispatcherServlet(doGet, doPost) 이 없음 기본 컨테이너가 tomcat -> netty (서블릿 스펙 3.1이상인 tomcat을 쓸 수는 있음) project reactor : 절차형 -> 반응형, 코드가 의식의 흐름처럼 흘러감 Reactive stream의 구현체 비동기 / 논블로킹 스트림 처리를 위한 스펙명세 https..
enum 이전 포스팅 : https://sjh836.tistory.com/134 1. 이놈(Enum...)을 효율적으로 찾는 방법 장르, 카테고리, 각종 컨텐츠 타입 등 enum 의 활용은 무궁무진하다. enum 을 잘 선언했다면, enum 을 잘 찾는 것도 중요하다 예를들어 DB에 enum name 이 아닌.. 무언가 코드값만 저장하고, 꺼내쓸 때 코드를 enum 으로 바꾸는 상황을 가정해보자. 다른 예제로는 API 응답값 내 코드를 우리 서비스의 enum 으로 바꿔쳐야한다던지.. 아래에서는 enum 을 찾아내는 3가지 예제 코드들이다. @Getter @AllArgsConstructor public enum OperatingSystemType { WINDOW("100"), UBUNTU("101"), M..
1. 테스트를 왜 해야하는가?테스트를 안하는 개발자는 없다. 코드 작성 후 서버를 뛰워서 api url을 호출해서 응답값을 확인해보고, UI에서 버튼을 눌러보고 하는 것도 모두 테스트이다. 그러나 여기서 다루는 테스트의 정의는 '개발자가 작성한 테스트 코드에 의한 테스트'이다. 이것은 코드로 작성되었으므로 테스트 자동화가 가능해지며(CI연동 등), 다른 개발자도 이것을 통해 동일하게 반복적으로 테스트할 수 있어진다.1-1. 테스트 코드의 중요성반복적인 행위를 줄여준다. (비용감소) 테스트코드 없이 테스트를 하려면 계속 서버를 on/off하며 수동으로 동작시켜 줘야 할 것이다. (주로 nodemon 활용) 궁극적으로 애플리케이션이 복잡해진다면 테스트역시 복잡해진다.빠른 오류&버그 확인과 수정, 리팩토링의 ..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다.책에 있는 내용을 기반으로 썼지만 책에 없는 내용도 조금 적었다. (익명클래스와 람다 비교, 성능적 관점, 함수형 인터페이스와 default메소드, 코드블록-람다블록 비교, Collectors API의 구체적 설명 등)7장의 아이템 목록익명 클래스보다는 람다를 사용하라람다보다는 메소드 참조를 사용하라표준 함수형 인터페이스를 사용하라스트림은 주의해서 사용하라스트림에서는 부작용없는 함수를 사용하라반환 타입으로는 스트림보다 컬렉션이 낫다스트림 병렬화는 주의해서 적용하라아이템42. 익명 클래스보다는 람다를 사용하라람다는 이름이 없고 문서화도 못한다. 따라서 코드 자체로 동작이 명확히 설..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다.이전 장은 아직 정리가 덜 끝나서... 먼저 끝난 9장부터 포스팅한다. 책에 있는 내용을 기반으로 썼지만 책에 없는 내용도 조금 적었다. (인터페이스화에 대한 고찰, 컴파일러의 문자열연산 최적화 등) 9장의 아이템 목록지역변수의 범위를 최소화하라전통적인 for문보다는 foreach문을 사용하여라라이브러리를 익히고 사용하라정확한 답이 필요하다면 float와 double은 피하라박싱된 기본 타입보다는 기본 타입을 사용하라다른 타입이 적절하다면 문자열 사용을 피하라문자열 연결은 느리니 주의하라객체는 인터페이스를 사용해 참조하라리플렉션보다는 인터페이스를 사용하라네이티브 메소드는 신중히 ..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 제네릭 자체를 공부좀 해봐야겠다는 생각이 드는... 챕터였다ㅋㅋㅠ5장의 아이템 목록raw type은 사용하지 마라비검사 경고를 제거하라배열보다는 리스트를 사용하라이왕이면 제네릭 타입으로 만들어라이왕이면 제네릭 메소드로 만들어라한정적 와일드카드를 사용해 API 유연성을 높여라제네릭과 가변인수를 함께 쓸 때는 신중해라타입 안전 이종 컨테이너를 고려하라서문제네릭은 jdk1.5 부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때 마다 형변환을 해야 했다. 1.5 부터는 제네릭을 사용하면 컬렉션에 담을 수 있는 타입을 컴파일러에게 알려주며, 컴파일러가 알아서 형변..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (guava Immutable, 템플릿메소드, 중첩클래스 등) 또한 이번 정리부터는 조금 더 많이 요약해서 기술할 것이며, 코드예제도 많이 뺐다. 참고로 책의 코드는 https://github.com/WegraLee/effective-java-3e-source-code 에서 볼 수 있다. 4장의 아이템 목록클래스와 멤버의 접근 권한을 최소화하라public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라변경 가능성을 최소화하라상속보다는 컴포지션을 사용하라상속을 고려해 설계하고 문서화하라. 그렇지 않..
해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (commons의 각종 빌더, lombok 등) 조슈아 블로크님이 구글에 다녀서 그러신가.. 구글 라이브러리(AutoValue 등)들을 책 전면에서 홍보하고 있는 느낌이 있다..ㅋㅋㅋㅋ 구글의 라이브러리들도 물론 좋지만, apache commons나 lombok 을 (국내에서는) 아마 더 많이 실무에 쓰고 계시지 않을까 추측해본다. 3장의 아이템 목록equals는 일반 규약을 지켜 재정의하라equals를 재정의하려거든 hashCode도 재정의하라toString을 항상 재정의하라clone 재정의는 주의해서 진행하..
이펙티브자바 3판이 드디어 번역되어 출판되었다. (2달전에 2판샀는데 다 읽지도않았는데...) 해당 내용은 이펙티브 자바 3판 (조슈아 블로크 지음, 이복연 옮김)를 읽고 나같은 초심자의 눈으로 이해한 내용을 정리해보았다. (정리된 글만 보는 것보단 이 책은 꼭 사길..바랍니다) 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금 적었다. (자바빈 패턴에서 필수인자 받기, 직렬화, Weak Reference 등) 2장의 아이템 목록생성자 대신 정적 팩터리 메서드를 고려하라생성자에 매개변수가 많다면 빌더를 고려하라private 생성자나 열거 타입으로 싱글턴임을 보증하라인스턴스화를 막으려거든 private 생성자를 사용하라자원을 직접 명시하지 말고 의존 객체 주입을 사용하라불필요한 객체 생성을 피하라..
1. GCP 란?구글 클라우드는 구글의 데이터센터 인프라를 기반으로 컴퓨트, 스토리지, 네트워 킹, 빅데이터, 머신러닝 등의 서비스를 제공하는 글로벌 클라우드다. 여기서는 프리티어, 가격정책과 함께 내가 사용해볼 VM, RDB, 네트워크, 파일 Storage 정도만 알아보려고한다. 아래는 내가 느낀 장단점을 대략 정리해봤다.GCP 장점인터페이스가 직관적 깔끔한 편인듯웹 브라우저에서 SSH 접속가능함 (복붙은 안됌ㅠ)유료계정 업그레이드안하면 과금절대안되는 안전장치는 정말 최고!GCP 단점한국 리전이 없다크레딧과 무관한 무료제품(micro)군이 약하다. (US리전에만 혜택이 있고, 기본적인 컴퓨팅파워가 약하다. NCP같은 경우 크레딧 30만원과 무관하게 1가상코어와 1GB RAM, HDD 50GB 머신을 줌..