업무 19

순서도 작성

최근 재고 업무를 하며, 복잡한 알고리즘을 짜야하는 경우가 빈번하게 생겼다. 이전에는 단순하게 작성했다면, 이제는 제대로 순서도를 작성해야 한다. 순서도 순서도(flowchart)란 어떠한 일을 처리하는 과정을 순서대로 간단한 기호와 도형으로 도식화한 것을 의미한다. 이러한 순서도는 여러 분야에서 프로세스나 문제의 분석, 기획, 디자인, 설계나 관리 등에서 폭넓게 활용되고 있다. 다음은 기호와 명칭이다. 다음 흐름도와 같이 업무를 진행하고 있다. 개선할 점은 아직 많다.

[SW] 응집도 / 결합도

응집도(Cohesion) 모듈의 독립성을 나타내는 정도, 모듈 내부 구성요소 간 연관 정도 우연적 응집도(Coincidental): 모듈 내부의 구성요소가 각 연관이 없을 경우 논리적 응집도(Logical) : 유사한 성격, 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우 시간적 응집도(Temporal) : 특정 시간에 처리 되어야 하는 활동들 절차적 응집도(Procedural) : 모듈이 다수의 관련 기능을 갖고, 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우 통신적 응집도(Communication) : 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모임 순차적 응집도(Sequential) : 모듈 내 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우 기능적 ..

[JAVA] java stream sort null pointer exception

다음과 같은 null pointer 오류가 났다. 자바에서 sort를 할 때는 항상 주의해야 하는 것이 null pointer 오류이다. date 끼리 비교를 할 때, 0이 들어가면 안된다. 주로 사용하는 방법은 다음과 같이 값이 없을 때, '2000-01-01 00:00:00' 와 같은 이전 날짜를 임의로 넣는 것이다. DATE_FORMAT(IFNULL(MAX(c.subscribed_date), DATE('2000-01-01 00:00:00')), '%Y-%m-%d %H:%i:%s') AS subscribed_date Function subscribedDateComparator = m -> (String)m.get("subscribedDate"); productListTemp = productListT..

[JAVA] setTimeZone

TimeZone 설정 Vue 인스턴스를 Map 형식으로 가져와서 objectMapper를 사용하여 DTO로 변환해 주는 작업을 할 때, 시간이 9시간 계속 늘어나는 것을 발견했다. Map에는 시간 그대로 담겨 있었고, objectMapper를 사용해서 변환할 때 문제가 생기는 것을 알 수 있었고, 이는 timezone 문제라는 것을 알게 되었다. objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Seoul")); ProductSnapshotDTO productSnapshotDTO = objectMapper.convertValue(paramMap, productSnapshotDTO.class);

[JAVA] Comparator.comparing().reversed()

Comparator를 사용할 때, 단순히 reversed를 사용하면 역순으로 정렬이 가능하다 생각하였다. 따라서 단순하게 sorted().reversed().thencomparing().reversed() 형식으로 사용하였는데, 정렬이 되지 않았다. 여러번 정렬을 해야 할 때는 Comparator.comparing().reversed()를 다음과 같이 반복적으로 사용해야 한다. // 정렬 1 Function count = m -> (long) m.get("count"); // 정렬 2 Function pointSort = m -> { Integer point = 0; if(Objects.nonNull(m.get("point"))) point = Integer.parseInt(String.valueOf(m..

[JAVA] 조건절

사실 내용은 별거 없지만 실제 서비스가 운영 중이었다면 한 개를 구매했을 때는 결제가 안되게 하는 큰 실수를 하였다. '다른 사람이 함께 구매한 상품' 에 대한 내용을 추가하기 위해 , 해당 상품 + 다른 상품 에 대한 정보를 추가하고 있었다. 하지만 한 개만 구매한 경우 다른 상품이 없기 때문에 쿼리에서 오류가 나고 있었고, 그 사실을 모르고 배포를 하였다. 따라서 구매 정보 데이터 추가 이후 단계인 이니시스 결제가 안되었다. 매우 큰 실수. 따라서, 여기서 리스트 크기가 한개 이상인 경우만 고려를 하게 하였다. if(purchaseList.size() > 1){ // 중요!! for(CustomJdbcMap list : purchaseList){ if(list.get("productId") != 0)..

[SQL] GROUP BY 2개 이상

한 주문 당 하나의 상품번호만 가져오고자 할 때, 잠깐 고민했었다. 쿼리를 조회했을 때 , 11개의 데이터가 나왔었고, 다음과 같이 order_no 와 product_id를 동시에 group by를 하면, 32번에 해당하는 중복된 product_id가 제거된 것을 볼 수 있다. group by 두 개 사용법 ~ SELECT year , month , COUNT(*) AS count FROM table GROUP BY year, month 생각보다 단순한 곳에서 시간을 많이 뺏길 때가 있다. 주의하자. !! https://mode.com/sql-tutorial/sql-group-by/ SQL GROUP BY | Intermediate SQL - Mode Practice Problem Write a quer..

반응형