전체 글

행복한띠용이의 코딩 블로그입니다.
·Programming/Coding
N명 추첨개발하는 과정에서 이벤트 참가자들 중 당첨자를 추첨해야하는 상황이 발생했다. 추첨이라는 메서드는 이벤트 당 1 번만 발생하는 메서드이다. 처음에는 성능을 생각하지 않고 작성하였지만 이벤트 참여자가 1만명 이상이라면 거의 full table scan 을 통해서 1만 이상의 데이터를 가져와 계산하게 된다. 하지만 메모리 상에서 1만 이상의 데이터의 가중치를 계산하는 과정은 매우 위험하다고 생각한다.실제 Event_user 테이블 기준 Data TypeNumber of FieldsBIGINT3INT3DOUBLE4BIT(1)2DATETIME(6)2JSON1VARCHAR(255)2 대략 1 객체당 700 바이트 크기이다. 대략 150만개의 객체가 1GB 용량을 차지한다. 결국 이벤트 참가자가 많아질 수록..
·Programming/JAVA
개요모의 주식 거래 사이트를 개발하면서 WebSocket 으로 실시간 가격을 받아오고 있다. 이때 시장가 주문이 들어온다면 해당 실시간 가격으로 거래를 처리해야하기에 실시간 데이터를 기록하고 불러오는 기능이 필요했다.@Component public class PriceHolder { private BigDecimal currentPrice = BigDecimal.ZERO; public void updatePrice(BigDecimal price) { currentPrice = price; } public BigDecimal getCurrentPrice() { return currentPrice; } }그래서 PriceHolder 라는 객체를 생성하고 여기에서 매번 ws 응답마다 가격을 저장하고, 주문 처..
·etc/Book
4장. 역할, 책임, 협력최후통첩 게임 실험이 있다. 게임은 제안자와 응답자로 이루어져있으며, 제안자는 100만원을 응답자와 나누어가져야한다. 이때 나누는 비율은 제안자의 마음이며 응답자는 이를 수락하거나 거절할 수 있다. 거절하면 제안자, 응답자 모두 한 푼도 가져가지 못한다. 인간이 만약 합리적이라면 응답자는 1원 이상만 받으면 수락하는 것이 합리적이다. 0원보다야 낫기 때문이다. 하지만 실제 결과는 30% 미만의 금액을 제안한다면 대부분이 거절하였다. 이러한 결과는 인간은 이기적이고 합리적인 특성이 상황과 충돌하여 자신의 이익을 최소화하는 불힙리한 선택을 보여준다. 즉, 인간은 어떤 상황, 문맥에 존재하는 지가 행동 방식을 결정한다는 것이다. 객체의 세계에서도 문맥이 객체의 행동 방식을 결정한다. ..
·etc/Book
3장 타입과 추상화지하철 노선도초기에는 실제 지형과 유사하게 표현하였지만 이는 이해를 더욱 어렵게 만들었다.얼마나 사실적이 보다 연결성을 얼마나 직관적으로 표현했는 지가 더 중요하다.정확성을 버리고 목적에 집중한 결과추상화현실에서 출발하되 불필요한 부분을 도려내 본질을 드러나게 하는 과정현실의 복잡성을 극복목적에 부합하는 방향으로 도려내야한다이상한 나라의 앨리스앨리스는 정원사, 병사, 왕자와 공주, 하트 잭, 하트 여왕 등을 "트럼프" 로 표현한다.이를 통해 정원의 복잡도가 낮아진다.이처럼 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라 한다.등장인물들은 모두 다른 객체이지만 하나의 트럼프라는 개념으로 추상화했다.개념을 사용하면 객체를 분류할 수 있다.트럼프와 토끼 라는 두 개의 개념으로 등장인물을..
MySQL 환경에서 많은 데이터를 한 번에 삽입하는 경우가 발생했다. JPA 를 통해서 saveAll() 메서드를 사용하였고, 1개 혹은 정말 소수의 쿼리가 발생을 기대했다.  하지만 실제 쿼리는 아래와 같이 레코드 수 만큼 발생했다. 이러한 원인을 파악하고 원했던 대로 1건의 쿼리로 변경시켜보자.  1. save() @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity)..
행복한띠용이
행복한띠용이의 코딩