기록은 재산이다

To Improve Human Life


  • 홈

  • 태그

  • 카테고리

  • 아카이브

  • 검색

GraphQL Vol.2 - GraphQL 기초

작성일: 2020-03-09 | 수정일: 2020-03-08 | In graphql |

머리말

지난 포스트에서는 GraphQL에 대해서 간단하게 테스트를 해보았다.
이번 포스트에서는 GraphQL의 Learn에 나오는 내용을 따라 설명을 덧붙이려고 한다.
설명과 더불어 GraphiQL을 붙여 즉각 실행해볼 수 있게 구성하였다.

테스트는 Heroku를 사용하고 있다.
Heroku를 무료로 사용할 시 유휴시간이 30분이 넘는 경우, 애플리케이션이 sleep 상태로 바뀐다.
그렇기 때문에 아래의 테스트 로딩이 느릴 수 있으나, 1분 이내에 로딩될 것이다.

더보기 »

GraphQL Vol.1 - GraphQL 체험해보기

작성일: 2020-03-07 | 수정일: 2020-03-08 | In graphql |

머리말

Github에서 제공하는 V3 API들을 보면서, 이거야말로 RESTful이구나 했었는데, V4로 넘어오면서 GraphQL을 사용하게 되었다.
Github은 자신들이 V4 API를 RESTful이 아닌 GraphQL로 작성한 이유를 다음과 같이 2가지로 이야기했다.

  • 확장성(Scalability)
    • 클라이언트는 자신이 필요한 정보를 취득하기 위해,
      필연적으로 REST API의 하이퍼미디어를 사용하여 경로 탐색을 위한 반복적인 호출을 해야 한다.
    • 클라이언트가 응답의 일부분만 필요로하더라도 Github은 API 명세에 정의한 모든 값을 채워서 응답했다.
    • 때로는 어떠한 정보들을 조합하기 위해서, 2~3번의 별도의 API를 호출해야 한다.
      더보기 »

(Spring Boot)오류 처리에 대해

작성일: 2019-04-04 | 수정일: 2020-03-04 | In spring , boot |

서론

오류 처리는 어플리케이션 개발에 있어 매우 큰 부분을 차지한다.
오류를 예측하는 것과 예방하는 것, 그리고 오류를 빨리 발견하고 고칠 수 있는 것은 훌륭한 개발자의 필수조건이라고 생각한다.
본 문서에서는 Spring에서 어떻게 예외처리 잘 할 수 있도록 도와주는지를 알아보고 공유하려한다.

더보기 »

(Spring Boot)Spring Boot Actuator 소개

작성일: 2018-05-12 | 수정일: 2018-05-12 | In spring , boot , actuator |

서론

웹 개발자로서 웹 애플리케이션을 만들 때 신경써야할 것은 서비스 로직 뿐만이 아니다. 웹 애플리케이션의 사용자는 누구인지(일반인? 외부시스템?), 어떤 경로로 애플리케이션에 요청을 할 지(Load Balancing, Fire Wall), 요청 수나 TPS 등 많은 것들을 고려해야한다. 이번에 소개할 spring-boot-actuator라는 모듈은 애플리케이션의 상태를 종합적으로 정리하여 우리에게 제공해준다. 본문에서는 Spring Boot Samples에 있는 프로젝트 중에서 spring-boot-sample-actuator-ui를 가져와 살짝 소스를 수정하여 actuator가 무엇이고 어떤 일 해주는지 알아보려한다.

더보기 »

(Spring Boot) 다중 DataSource 사용하기 with Sharding

작성일: 2018-05-06 | 수정일: 2018-05-06 | In spring , practice , practice , spring-boot |

서론

Spring Boot를 사용해서 Database Sharding을 처리할 수 있을까?
요즘 NoSQL에서는 Sharding과 관련해서 많은 편의를 제공한다. 알아서 Sharding을 제공해주고, 클러스터에 노드가 추가되면 Shard key를 기반으로 자동으로 새로운 노드로 값들을 분배해주거나, 노드를 제거하면 대상 노드에 있던 값들을 Shard Key에 맞추어 남은 노드로 분배해준다. 자세히 알아보지는 않았지만 RDBMS 측의 각종 벤더들도 이러한 아키텍처를 구현기위한 방법을 제공할 것이라 생각된다.(예를 들어 MySQL의 Fabric - 현재 MySQL Utilities에 통합)

이번 포스트에서는 RDBMS Sharding을 각 벤더에 의존해서 구현하지 않고, Spring Boot로 편리하게 설정을 추상화하여 사용할 방법에 대해 공유하려 한다. 앞서 Sharding에 대해서 거창하게 이야기를 했지만, 본문에서 다루고자 하는 영역은 아래의 두 가지 기능이다.

  • 이름 기반으로 다중 DataSource 정보를 등록 : AbstractRoutingDataSource
  • 특정 값을 기반으로 대상 DataSource를 사용 : Spring AOP
더보기 »

Spring Cache 장애 대응 방안

작성일: 2018-04-18 | 수정일: 2018-04-18 | In spring , practice |

서론

Spring은 캐시 추상화를 통해서 쉽게 캐시를 사용할 수 있게 해준다. CacheManager를 잘 구현한다면 @Cacheable, @CachePut, @CacheEvict 등을 통해서 얼마든지 커스터마이징된 캐시를 사용할 수 있다. 하지만 의외로 장애에 대응하는 방안에 대해서는 Reference 상에서도 구체적인 설명을 해주지 않고 있다. 덕분에 다시 글 쓸 거리가 생긴 것 같다.

사용하는 캐시 시스템에 문제가 생겼을 때 어떻게 대처해야하는지는 어떤 정보를 캐시하느냐에 따라 다르다. 경우의 수 자체가 너무 많다. 또한 캐시 자체가 여러 용도로 쓰일 수 있다. HTTP 응답을 캐시하든지, Repository의 결과를 캐시하든지 혹은 Service의 결과를 캐시할 수도 있다. 본문에서는 아래 두 경우로 간단하게 나누고 이에 대한 해결법을 궁리해보고자 한다.

  • 부하가 많이 걸린다면? 2차 캐시 구성을 고려하자.(Local Cache, Global Cache 구성)
  • Global Cache에서 장애가 발생할 경우를 대비, Hystrix를 고려하자
더보기 »

(Spring Boot)Logging과 Profile 전략

작성일: 2018-04-07 | 수정일: 2018-04-07 | In spring , boot |

서론

spring-boot에서는 Logback을 확장해서 편리한 logging 설정을 할 수 있다. application.yml의 설정을 읽어 오거나 특정 profile의 동작을 수행할 수 있다. 이 글에서는 Spring Boot에서 어떻게 logging 설정을 하는지를 알아볼 것이다. 그리고 그것을 기반으로 spring-boot를 사용할 때 profile을 활용할 수 있는 방법을 공유하려고 한다.

본문에서는 logback의 기초적인 정보를 가이드하지 않는다.
spring-boot는 logback 외에도 log4j 등을 지원하지만 logback만을 고려하고 작성한다.

더보기 »

(Spring)Filter와 Interceptor의 차이

작성일: 2018-04-04 | 수정일: 2018-04-04 | In spring , mvc |

서론

Spring을 익힌지 얼마 되지 않았을 때, 회원 인증 로직을 구현할 일이 생겼었다. 그 인증을 구현하기 위해 Filter와 Interceptor를 조사했었다. 하지만 Filter와 Interceptor를 어떤 경우에 써야 좋은지 명확하게 알지는 못했다. 이제 와서 옛 기억들이 떠올라 다시 spring filter interceptor 차이로 검색을 해보고 올라온 글들을 읽어봤는데, 아무래도 몇 가지 아쉬운 부분들이 있었다. 이번 글에서는 Spring Web Application에서 사용하는 Filter와 Interceptor에 대해, 많은 글에서 공통적으로 이야기하는 부분과 의외로 언급하지 않는 부분 두가지를 쓰려고 한다.

더보기 »

Spring WebSocket 소개

작성일: 2018-03-30 | 수정일: 2018-03-30 | In spring |

서론

Web Browser에서 Request를 보내면 Server는 Response를 준다. HTTP 통신의 기본적인 동작 방식이다. 하지만 Server에서 Client로 특정 동작을 알려야 하는 상황도 있다. 예를 들어 Browser로 Facebook에 접속해 있다가 누군가 친구가 글을 등록하는 경우, 혹은 Web Browser로 메신저를 구현하는 경우다. WebSocket이 있기 전에는 이를 Polling이나 Long polling 등의 방식으로 해결했었다. 하지만 WebSocket의 등장으로 Server-Client 간의 실시간 통신이 가능하게 되면서, 앞으로 Long polling은 역사의 뒤안길로 사라질 것 같다.

더보기 »

Spring Event + Async + AOP 적용해보기

작성일: 2018-03-24 | 수정일: 2018-03-24 | In spring , practice |

서론

원래 글을 쓰기 위해 준비하던 내용은 Event를 강조하는 것이었는데, 준비를 하다 보니 Async와 AOP를 다 쓰게 되어버렸다.

이번 글에서는 하나의 transaction 안에서 많은 일을 처리하는 소스 코드를 두고, 아래와 같이 점진적으로 리팩토링해나가는 과정에 대해 이야기하려고 한다.

  1. 하나의 transaction으로 처리하기
  2. transaction 내에 처리하지 않아도 될 부분은, transaction이 끝난 후에 처리하기
  3. Event 사용하기
  4. Event도 비동기로 처리하기
  5. AOP를 사용해서 Advisor에서 Event 발급하기
  6. 순서가 필요 있나? Best Effort!
더보기 »
12…4>
supawer0728

supawer0728

34 포스트
17 카테고리
51 태그
RSS
GitHub
© 2018 — 2020 supawer0728
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4
To Improve Human Life