Website for public datasets
Recommendation datasets:http://cseweb.ucsd.edu/~jmcauley/datasets.html https://www.wikidata.org/wiki/Wikidata:Database_download/ko Machine learning datasets (including clustering):https://ar...
Recommendation datasets:http://cseweb.ucsd.edu/~jmcauley/datasets.html https://www.wikidata.org/wiki/Wikidata:Database_download/ko Machine learning datasets (including clustering):https://ar...
[!warning] MyBatis의 @Mapper는 DataMapper (e.g., mapstruct의 @Mapper) 와는 다르다. MyBatis @Mapper는 sql <> 객체 mapping을 처리하는 역할이다. 이 글에서 @Mapper는 MyBatis @Mapper를 지칭한다. 예제 : Member MyBatis @M...
Keynote 키워드는 Growth 기억에 남는 문구는? 개발자는 곧 첫번째 고객. 개발자의 의견이 프로덕트에 적극적으로 반영되어야한다. 오픈소스 DB 흐르는 데이터를, 실시간 데이터 변경 재배치하는게 목표. 왜 필요한가? shard에도 한계가 있어서? Overwrite &...
HTTP/1.1 HTTP/1.0 과 HTTP/1.1의 차이 몇 가지 차이점이 있지만 가장 큰 차이점은 socket connection 재사용 옵션 부분이다. HTTP/1.0 : Connectionless Connection: close가 default HTTP/1.1 : Connection 유지 ...
파티셔닝(단편화) 란? 저장해야 하는 정보가 많은 대규모 시스템의 경우 하나의 DB에 모든 정보를 저장해서는 제대로 된 응답성을 기대할 수 없다. read가 많이 발생하든, write가 많이 발생하든 DB 저장하는 정보가 많을 수록 스캔 속도도 느려지고, 요청이 많은 경우 큐에 작업이 쌓이면서 응답도 느려진다. 그래서 DB를 여러대 운용해서 응답을 ...
- 제휴사 API 서버 <> Npay 서버 연결 작업을 각자 진행한 후, 이를 하나로 통합하는 과정에서 비즈니스 로직 코드 중복이 발생함. 코드 중복을 해결하면서 제휴사 마다 다른 구현 사항을 고려하여 처음 설계한 아키텍쳐는, PointChangeService라는 abstract class에 공통 로직을 작성하고, 각 제휴사 마다 다른...
상황은 이렇다. 전환 진행 중인 유저가 중복으로 전환을 요청하면 튕겨내주도록 코딩했고, 사파리나 IE 등에서는 실제로 중복 요청을 잘 막아 주었다. 예상 시퀀스 그런데 크롬에서는 브라우저 2개 띄워놓고 각각 1번 씩 “전환” 버튼을 눌러 요청(a, b)하면, a 요청에 대한 응답이 돌아오고 나서 b 요청도 정상적으로 처리가 되는 것이었다. 크...
AOP(Aspect Oriented Programming)는 언제 유용한가? 가끔 AOP를 쓰지 말아야 할 곳에 AOP를 쓰는 경우를 보게 된다. 어떤 기능은, 쓸 수 있다고 쓰는게 아니라, 쓰는게 효용이 있을 때 확실한 근거를 가지고 올바르게 써야한다. AOP를 쓰기 전에 이런 물음을 던져보아야 한다. ‘어떤 기능이 현재 클래스의 관심 밖이라면...
기본 Hystrix 라이브러리는 직접 HystrixCommand를 상속받아 정의해서 써야 하므로 약간 번거롭다. Spring을 쓰고 있다면 @HystrixCommand 애너테이션으로 이런 번거로운 설정을 대신하는 라이브러리를 도입할 수 있다. 아래 dependency를 추가하도록 하자. <dependency> <groupId>o...
class PointChangeController { private final ApplicationContext context; void method() { // common logic 1 PointChangeService pointChangeService = context.getBean( ...