'developer'에 해당하는 글 6건

FCM 포트 및 방화벽

조직에 인터넷 트래픽 송수신을 제한하는 방화벽이 있으면 모바일 기기의 FCM 연결을 허용하도록 구성해야 네트워크의 기기에서 메시지를 수신할 수 있습니다. FCM은 대개 포트 5228을 사용하지만 5229 및 5230을 사용하는 경우도 있습니다.

발신 연결의 경우 Google IP 범위가 매우 자주 변경되며 개발자의 방화벽 규칙이 오래되면 사용자 경험에 영향을 줄 수 있으므로 FCM에서 특정 IP를 제공하지 않습니다. IP 제한 없이 포트 5228~5230을 허용하는 것이 가장 좋습니다. 하지만 IP 제한이 있어야 한다면 Google ASN 15169에 나와 있는 IPv4 및 IPv6 블록의 모든 IP 주소를 허용해야 합니다. 목록의 크기가 크며 규칙을 매월 업데이트하도록 계획을 세워야 합니다. 방화벽 IP 제한으로 인해 발생하는 문제는 보통 간헐적이며 진단하기 어렵습니다.

수신 메시지용으로 열어야 하는 포트:

  • 5228
  • 5229
  • 5230

발신 연결을 허용하는 포트:

다음 중 하나(1번 옵션 권장):

  1. IP 제한 없음
  2. Google ASN 15169에 나와 있는 IP 블록에 포함된 모든 IP 주소: 한 달에 한 번 이상 업데이트해야 합니다.

https://firebase.google.com/docs/cloud-messaging/concept-options?hl=ko

'developer' 카테고리의 다른 글

mac 리셋  (0) 2018.08.14
Apache Camel VS Spring Integration  (0) 2018.01.24
iOS push message 버전별 변경 이력  (0) 2018.01.12
맥 숨김파일보기  (0) 2017.04.04
[HTML5] Application Cache  (0) 2017.03.31

WRITTEN BY
밤의제황

,

mac 리셋

developer 2018. 8. 14. 17:19

SMC 리셋 방법



shift, control, option, 전원




NVRAM 리셋 방법



command(⌘), option, P, R



안전시동


Shift



'developer' 카테고리의 다른 글

FCM 사용을 위한 포트 및 방화벽 정보  (0) 2019.08.22
Apache Camel VS Spring Integration  (0) 2018.01.24
iOS push message 버전별 변경 이력  (0) 2018.01.12
맥 숨김파일보기  (0) 2017.04.04
[HTML5] Application Cache  (0) 2017.03.31

WRITTEN BY
밤의제황

,


두 프레임 워크는 모두 동일한 목표를 공유합니다. 

중재, 라우팅, 프로토콜 적응과 같은 일반적인 통합 작업을 구현하기위한 사용하기 쉬운 메커니즘을 제공합니다. 작은 설치 공간과 오버 헤드로 눈에 띄지 않는 방식으로 기존에 임베딩 할 수 있습니다. 애플리케이션 인프라. 기본적으로 JMX를 통한 기본 관리 지원뿐만 아니라 상당한 양의 전송 어댑터등의 구현. 

기능적 관점에서 볼 때 두 프레임 워크는 상당히 동일합니다.

Apache Camel은 2007 년에 버전 1.0으로 출시되었습니다. 버전 1.0부터 Java XML뿐만 아니라 Java DSL과 Spring XML을 기반으로 만들어진 XML DSL이 함께 제공됩니다. 현재 버전 까지 다양한 언어로 추가 DSL이 있습니다. 

Spring Integration은 2 년 후, 2009 년에 버전 1.0.0에서 발표되었습니다. Spring 계열의 일부이기 때문에 XML 기반 구성이 처음에는 유일한 선택 이었지만 최근부터 Spring Integration은 Java DSL을 제공합니다.

하나의 특정 구문이 다른 구문보다 우수하다고 주장 할 수 있지만, 이는 개인적인 취향의 문제 일뿐입니다. 더 흥미로운 것은 의미론적 차이입니다. 여기 미묘하면서도 Apache Camel과 Spring Integration의 중요한 차이점이 있습니다. 표현력은 거의 같지만 Spring Integration DSL은 채널, 게이트웨이 등 하위 수준의 EIP를 노출합니다. Camel DSL은 통합의 의도에 더 중점을 두는 것처럼 보입니다 통합 코드는 일반적으로 작성된 것보다 더 자주 읽혀 지기 때문에 의사를 명확하고 간결하게 전달할 수있는 능력이 핵심적인 차별 요소입니다.

Spring Integration과 Apache Camel 샘플 코드를 살펴보면

Spring Integration은 다음과 같습니다 :

  @MessagingGateway
  public interface Cafe {
  	@Gateway(requestChannel = "orders.input")
  	void placeOrder(Order order);
  }

  private AtomicInteger hotDrinkCounter = new AtomicInteger();
  private AtomicInteger coldDrinkCounter = new AtomicInteger();

  @Bean(name = PollerMetadata.DEFAULT_POLLER)
  public PollerMetadata poller() {
  	return Pollers.fixedDelay(1000).get();
  }

  @Bean
  public IntegrationFlow orders() {
  	return f -> f
  	  .split(Order.class, Order::getItems)
  	  .channel(c -> c.executor(Executors.newCachedThreadPool()))
  	  .<OrderItem, Boolean>route(OrderItem::isIced, mapping -> mapping
  	    .subFlowMapping("true", sf -> sf
  	      .channel(c -> c.queue(10))
  	      .publishSubscribeChannel(c -> c
  	        .subscribe(s ->
  	          s.handle(m -> sleepUninterruptibly(1, TimeUnit.SECONDS)))
  	        .subscribe(sub -> sub
  	          .<OrderItem, String>transform(item ->
  	            Thread.currentThread().getName()
  	              + " prepared cold drink #"
  	              + this.coldDrinkCounter.incrementAndGet()
  	              + " for order #" + item.getOrderNumber()
  	              + ": " + item)
  	          .handle(m -> System.out.println(m.getPayload())))))
  	    .subFlowMapping("false", sf -> sf
  	      .channel(c -> c.queue(10))
  	      .publishSubscribeChannel(c -> c
  	        .subscribe(s ->
  	          s.handle(m -> sleepUninterruptibly(5, TimeUnit.SECONDS)))
  	        .subscribe(sub -> sub
  	          .<OrderItem, String>transform(item ->
  	            Thread.currentThread().getName()
  	              + " prepared hot drink #"
  	              + this.hotDrinkCounter.incrementAndGet()
  	              + " for order #" + item.getOrderNumber()
  	              + ": " + item)
  	          .handle(m -> System.out.println(m.getPayload()))))))
  	  .<OrderItem, Drink>transform(orderItem ->
  	    new Drink(orderItem.getOrderNumber(),
  	      orderItem.getDrinkType(),
  	      orderItem.isIced(),
  	      orderItem.getShots()))
  	  .aggregate(aggregator -> aggregator
  	    .outputProcessor(group ->
  	      new Delivery(group.getMessages()
  	        .stream()
  	        .map(message -> (Drink) message.getPayload())
  	        .collect(Collectors.toList())))
  	    .correlationStrategy(m ->
  	      ((Drink) m.getPayload()).getOrderNumber()), null)
  	  .handle(CharacterStreamWritingMessageHandler.stdout());
  }

}

여기에는 꽤 많은 세부 사항이 있습니다. 하지만 요점은 게이트웨이 및 채널을 상위 레벨 EIP를 구현하는 데 사용하는 것입니다.

반대로Apache Camel은 기술 도메인보다 "비즈니스"에 더 가까운 어휘를 사용하여 상위 EIP에 중점을 둡니다.

public void configure() {

  from("direct:cafe")
    .split().method("orderSplitter")
    .to("direct:drink");
    
  from("direct:drink").recipientList().method("drinkRouter");
  
  from("seda:coldDrinks?concurrentConsumers=2")
    .to("bean:barista?method=prepareColdDrink")
    .to("direct:deliveries");
  from("seda:hotDrinks?concurrentConsumers=3")
    .to("bean:barista?method=prepareHotDrink")
    .to("direct:deliveries");
    
  from("direct:deliveries")
    .aggregate(new CafeAggregationStrategy())
      .method("waiter", "checkOrder").completionTimeout(5 * 1000L)
    .to("bean:waiter?method=prepareDelivery")
    .to("bean:waiter?method=deliverCafes");
 
}

합의한 두 ​​예제는 직접 비교할 수 없습니다.

하지만 접근 방식의 근본적인 차이가 분명히 드러났습니다.

Spring Integration과 Apache Camel은 잘 설계되고 매우 능력있는 경량 통합 프레임 워크입니다. 기능 측면에서 보았을 때, 그들은 어느 정도 평등합니다. 그 중 어떤 것도 제가 현재 일하고있는 과제에서 탁월한 선택이 될 것입니다. 그러나 저처럼 선택의 여지가있는 사람이라면 Apache Camel DSL의 의미 론적 표현력, 특정 통합 흐름의 의도를 명확하게 전달할 수있는 능력이 중요한 경쟁력이라고 생각합니다.


원문

http://callistaenterprise.se/blogg/teknik/2015/10/12/apache-camel-vs-spring-integration/

'developer' 카테고리의 다른 글

FCM 사용을 위한 포트 및 방화벽 정보  (0) 2019.08.22
mac 리셋  (0) 2018.08.14
iOS push message 버전별 변경 이력  (0) 2018.01.12
맥 숨김파일보기  (0) 2017.04.04
[HTML5] Application Cache  (0) 2017.03.31

WRITTEN BY
밤의제황

,

iOS 푸시 Payload 용량 제한 관련

 


iOS7 까지는 256byte 의 제한이 있었으나,

iOS8 이후부터 2KB 로 변경 되었으며,

그 후 4KB 까지 가능 한 것으로 보임.


관련 링크 

https://goo.gl/jj4GpJ [notification payload size for iOS]

https://goo.gl/m9xyqG [Creating the Remote Notification Payload]

'developer' 카테고리의 다른 글

FCM 사용을 위한 포트 및 방화벽 정보  (0) 2019.08.22
mac 리셋  (0) 2018.08.14
Apache Camel VS Spring Integration  (0) 2018.01.24
맥 숨김파일보기  (0) 2017.04.04
[HTML5] Application Cache  (0) 2017.03.31

WRITTEN BY
밤의제황

,

맥 숨김파일보기

developer 2017. 4. 4. 22:18



Finder 에서 shift +command + .


한번더 누르면 없어짐

'developer' 카테고리의 다른 글

FCM 사용을 위한 포트 및 방화벽 정보  (0) 2019.08.22
mac 리셋  (0) 2018.08.14
Apache Camel VS Spring Integration  (0) 2018.01.24
iOS push message 버전별 변경 이력  (0) 2018.01.12
[HTML5] Application Cache  (0) 2017.03.31

WRITTEN BY
밤의제황

,

HTML5 는 offline 환경에 대한 고려로서 Application Cache를 지원한다 

브라우져의 Cache 기능은 예전부터 있었지만 개발자가 관여할수 없는 영역이었다

하지만 간단한 설정만으로 Cache파일과 그렇지 않은 파일, offline 에서의 파일등을 고려할수 있게 되었다


Application Cache가 고려됨으로 가지게될장점은 offline 대응, 속도, 트래픽 등이 있다


사용법은 아래와같이 각 페이지마다 manifest를 등록해 주면 된다

<!DOCTYPE HTML>

<html manifest="location/demo.appcache">



실제 manifest 내용 (시작은 반드시 CACHE MANIFEST)

CACHE MANIFEST

# cache 파일

CACHE:

http://location/cache/common.css

cache/common.css

common.css


# 네트웍 파일

NETWORK:

http://location/cache/api

cache/api

api


# 네트웍 문제시 파일

FALLBACK

cache/api /offline.json


menifest 파일은 일반적인 텍스트 파일이며 확장자등에 영향 받지않으나 MIME TYPE은 반드시 text/cache-manifest 이어야 한다
그렇다는 것을 해당 cache manifest 파일은 API로 동적으로 구현 가능함을 뜻한다.

주의점!
브라우져는 최초 접속시 manifest설정에 의해 캐쉬를 시작하며
이후 접속시 먼저 캐쉬 파일을 로드 후 manifest의 변경 여부에 따라 캐쉬를 재로드한다.
이는 실제 캐쉬된 파일들의 변경 유무가 아닌 manifest파일의 변경(내용) 유무를 체크한다.
 - 이러한 이유로 manifest파일에 버전을 표기해 캐쉬 재로드를 유도한다.



'developer' 카테고리의 다른 글

FCM 사용을 위한 포트 및 방화벽 정보  (0) 2019.08.22
mac 리셋  (0) 2018.08.14
Apache Camel VS Spring Integration  (0) 2018.01.24
iOS push message 버전별 변경 이력  (0) 2018.01.12
맥 숨김파일보기  (0) 2017.04.04

WRITTEN BY
밤의제황

,