개발은 재밌어야 한다
article thumbnail
Item2. 생성자에 매개변수가 많다면 빌더를 고려하라
JAVA/이펙티브자바 2024. 2. 18. 01:03

정적 팩터리와 생성자로 객체생성시 매개변수가 많을때 대응이 어렵다는 제약이 있다. 이런 상황에는 점증척 생성자 패턴(telescoping constructor pattern)으로 매개변수에 대응되는 생성자를 늘려가는 방식으로 대응 점증척 생성자 패턴(telescoping constructor pattern)이란? 생성자를 필수 매개변수 1개만 받는 생성자, 필수 매개변수 1개와 선택 매개변수 1개를 받는 생성자, 선택 매개변수 2개를 받는 생성자 등에 형태로 매개변수 개수만큼 생성자를 늘리는 방식 public class NutritionFacts { private final int servingSize; // (ml, 1회 제공량) 필수 private final int servings; // (회, 총 ..

article thumbnail
Item1. 생성자 대신 정적 팩터리 메서드를 고려하라.
JAVA/이펙티브자바 2024. 2. 18. 00:02

일반적인 인스턴스 생성 방법은 public 생성자다. 정적 팩터리 메서드(static factory method) 로도 클래스 인스턴스를 생성 할 수 있다. 정적 팩터리 메서드란? 객체 생성을 흔히 사용하는 생성자가 아닌 정적(static) 메서드로 객체를 생성하는 메서드 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. 일반적으로 생성자의 경우 객체를 생성할 때, 반활될 객체의 특성을 설명할 수 없다. → 이름을 따로 못가지기 때문에 ex) public class ExampleCalendar { private int year; private int month; } public static void main(String[] args) { // 생성자로 객체를 생성 ExampleCalendar cal..

article thumbnail
MongoDB 인덱스 확인 (TTL 설정 확인)
NoSQL/MongoDB 2024. 1. 19. 18:25

MongoDB에 TTL(Time To Live)로 일정 시간 이후 컬렉션에서 문서를 자동으로 제거할 수 있게 한 인덱스를 설정하였습니다. 설정 주기를 얼마로 했는지 확인하는 방법 (기준: 초) => 해당 collection에서 인덱스들을 조회해서 설정초 확인 db.[collection명].getIndexes() expireAfterSeconds 확인 아래의 경우 5184000초 -> 60일로 설정되어 TTL인덱스에 맞는 createdAt 필드값을 기준으로 60일 주기로 데이터가 삭제된다.

article thumbnail
[MSA] Hystrix 와 resilience4j를 통한 circuit breaker
Spring/Spring 2023. 8. 30. 10:22

MSA 환경에서의 장애 양상MSA에서 더 위험한(빈번한) 실패 시나리오는 서버가 완전히 뻗어버리는게 아니라,버벅거리지만 동작하는 서버가 더 위험할 수 있다. Feign Client와 같이 호출하는 쪽에서는 다른 서비스로 호출을 동기식으로 하기 때문에 응답에 오랜 시간이 걸리더라도 호출을 중단하지 않기 때문입니다. 위 처럼 A,B,C의 서비스가 MSA를 구성하고 있다고 했을때. 서비스 C는 DB를 읽어오는 역할을 하고 있습니다. 지속적으로 DB에서 응답 지연이 발생하고 있는 상황에서 서비스 B가 지속적으로 C를 호출하게 된다면 C에서는 DB에 붙는 커넥션 풀이 고갈되고, B는 C를 반복 호출하면서 C의 스레드 풀을 모두 소진하게 된다. 서버 A 역시 B의 스레드 풀이 소진되면 장애가 발생할 가능성이 높습니..

article thumbnail
MongoDB 샤딩 (샤딩과 복제 차이, 수평파티셔닝이란, 샤딩의 종류)
NoSQL/MongoDB 2023. 4. 26. 15:36

샤딩(Sharding) 샤딩이란 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있는 기술을 말한다. 샤딩(Sharding) VS 복제 (Replication) 샤딩(Sharding)과 복제(Replication)는 둘 다 데이터베이스의 가용성과 확장성을 높이는 방법이다. 둘의 차이가 있다면 복제는 데이터베이스 서버의 데이터를 다른 서버들과 복사하여 저장하는 방식이다. 이렇게 복제된 데이터는 다른 서버에서 읽기 작업을 수행할 수 있으며, 원본 서버가 다운되었을때 백업 서버에서 데이터를 제공하여 가용성을 보장한다. 복제는 데이터의 가용성과 일관성을 보장하며, 읽기 작업을 분산시켜 성능을 향상시킬 수 있다. 그러나 쓰기 작업은 일반적으로 원본 서버에서 수행되며, 이는 복제된 서버간의 동기화 문제를 야기할 ..

article thumbnail
엑셀 다운로드 에러 발생 해결 - FontConfiguration에서 NullPointerException 발생
Spring/Spring 2023. 4. 5. 19:19

엑셀 다운로드 기능이 갑자기 안되는 일이 생겨났다 에러 로그를 살펴보니 FontConfiguration쪽에서 NPE(NullPointerException)가 발생했다 발생로그 더보기 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.l..

article thumbnail
리덕스 라이브러리 이해하기
javascript/React 2023. 4. 5. 01:24

리덕스란? 리액트 상태 관리 라이브러리로 리덕스를 사용하면 컴포넌트의 상태 업데이트 관련 로직을 다른 파일로 분리시켜 더욱 효율적으로 관리할 수 있습니다. 또한, 컴포넌트끼리 똑같은 상태를 공유해야 할 때도 여러 컴포넌트를 거치지 않고 손쉽게 상태 값을 전달하거나 업데이트 할 수 있습니다. 리덕스 왜 쓸까? 예를 들어 아래와 같은 TodoList 프로젝트가 있다고 가정해보면 대부분의 작업에서 부모 컴포넌트가 중간자 역할을 하게 됩니다. 컴포넌트끼리 직접 소통하는 방법이 있긴 하지만, 그렇게 하면 코드가 꼬여버리기 때문에 권장하지 않는 방법이다. 이런식으로 App 컴포넌트를 거쳐서 건너건너 필요한 값을 업데이트하고, 리렌더링 하는 방식으로 프로젝트가 개발되면 부모 컴포넌트에서 모든걸 관리하고 아래로 내려주..

article thumbnail
[Oracle] 오라클 조인하는 방법 정리
RDBMS 2023. 3. 27. 23:59

오라클에서 사용되는 조인들에 대해 알아보자 우선 예제 테이블 데이터를 준비합니다. CREATE TABLE DEPT (DEPTNO number(10), DNAME VARCHAR2(14), LOC VARCHAR2(13) ); INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); CREATE TABLE EMP ( EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10..

article thumbnail
[Oracle] 오라클 소수점 반올림(ROUND), 절사(TRUNC)
RDBMS 2023. 2. 15. 22:12

오라클 소수점을 반올림하거나 절사(버림)하는 함수를 적어볼까한다. | ROUND 오라클에서 소수점 자리수를 반올림하기 위해서는 ROUND를 사용한다. ROUND(처리하는 값, 자리수)로 사용할 수 있다. 자리수가 양수이면 해당 자리수만큼 반올림하고 음수이면 해당 자리수만큼 반올림한다. 예시) 1) 소수점 반올림 SELECT ROUND(182.658947) AS VALUE FROM DUAL 해당 경우에는 자리수를 지정하지 않았기 때문에 소수점뒤로 반올림을 하여서 183이 된다. 2) 소수점 첫째짜리까지 반올림 SELECT ROUND(182.658947, 1) AS VALUE FROM DUAL 해당 경우에는 소수점 첫째자리까지 반올림해서 보여주기 때문에 소수점 둘째자리에서 반올림해서 보여준다. 3) 소수점 ..

article thumbnail
[Oracle] 오라클 데이터 복구
RDBMS 2023. 1. 30. 23:33

데이터를 실수로 삭제를 해버렸다... 오라클에서는 데이터를 삭제 또는 수정후 COMMIT했을때 Oralce의 Flashback을 통해 TIMESTAMP를 사용해서 이전의 데이터를 조회해서 복구할 수 있는 기능이 있다(해당 기능은 오라클 9i 버전 이상부터 지원) 주의할점은 Flashback은 Undo Data를 사용하기 때문에 undo_retention 파라미터값에 의해 보존되는 시간이 정해져있습니다. (기본값 900초) undo_retetion 조회 쿼리 select * from v$parameter where name = 'undo_retention'; 사용방법 SELECT * FROM [TABLE 명] AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- ..

article thumbnail
immer를 사용하여 더 쉽게 불변성 유지하기
javascript/React 2023. 1. 24. 02:41

React의 컴포넌트에서 상태의 불변성을 유지하는 것은 매우 중요합니다. 불변성은 기존 값을 직접 수정하지 않으면서 새로운 값을 만들어내는 것을 의미합니다. 따라서 배열이나 객체의 값을 변경할 때는 새로운 배열이나 객체를 만들어 필요한 부분을 변경해주어야 합니다. 불변성이 유지되지 않으면 값이 변경되어도 감지하지 못하게 되고 렌더링 성능을 최적화하지 못하는 문제가 발생합니다. 위의 불변성에 대한 정의로, 우리는 불변성을 지키기 위해 필요한 값을 변형해 사용하고 싶다면 어떤 값을 복사본을 만들어 사용해야 합니다. const user = { name: 'Yeum', age: 25 }; const copyUser = user; // user와 copyUser 변수에는 같은 참조값 즉, 같은 힙 영역의 메모리를..

article thumbnail
3년차 개발자로서의 2022년 회고록
null채우기 2023. 1. 6. 00:21

어느덧 2022년이 지나고 2023년이 왔다. 올해를 한번 되돌아 보면.. 블로그는 마지막으로 글을 작성한게 올해 9월이 마지막인데, 솔직히 이직하고 바빠서 글을 작성할 시간적 여유도 없었고 작성할 여력도 안됬다. 블로그를 처음 시작할때만 해도 방문자수 1000명이 되는것만으로도 뿌듯하고 성취감을 느꼈는데, 요즘은 일평균 300명이상의 방문자 수를 기록하는데 블로그 글도 종종 다시 써야겠다... 개발적인 나의 성장일기와 같은 깃허브를 보면서 다시한번 올해의 내가 개인적으로 개발적인 것들을 어떤것들을 해왔나 살펴보자 이번년도도 연말에 회사 프로젝트가 너무 바빳다.. 1월 토이프로젝트랑 스프링 스터디 진행했던게 보이네요 유난히 눈에 띄는건 마지막에 github coummunity에 글을 올린건데요 반응이 H..