Effective Java 아이템 34. int 상수 대신 (enum)을 사용하라 열거 타입은 정수 상수 열거 패턴의 단점을 모두 극복한다. 타입 안정성 보장. 디버깅 시, 표현력 향상. 같은 열거 그룹 내의 순회하는 방법 제공. 하나의 메서드가 상수별로 다르게 동작해야 할 때, Swtich 문 대신 추상 메서드를 선언해서 각 열거형 인스턴스마다 다르게 동작하도록 할 수 있음. 상수별로 다르게 동작해야 할 때 Switch, 추상 메서드로 너무 복잡해지면 전략 패턴을 이용해 볼 수 있음. 열거 타입은 컴파일 시점에 어떤 원소가 있을지 명확하다면 사용하면 좋음. 널리 쓰이는 열거 타입은 Top Level 클래스로 만들고, 특정 톱레벨 클래스에서만 쓰인다면 멤버 클래스로 만든다. 정수 열거 패턴 기법 publ..
아이템 35. enum에서 ordinal() 대신 인스턴스 필드를 사용하라 enum은 내부에서 사용할 수 있도록 ordinal() 메서드가 제공된다. ordinal() 메서드는 enum 내부에 선언된 열거형 상수의 위치를 알려주는 메서드다. 그렇지만 가급적이면 ordinal()을 사용하는 것을 피해야한다. // 이런 문제가 있음. // 1. SIX = 6임. 그런데 six도 추가하고 싶다면? // 2. Number 열거형에서 3을 제외하고 싶다면? public enum NumberWrong { ONE, TWO, THREE, FOUR, FIVE, SIX; public int getCount() { return ordinal() + 1; } } ordinal()을 이용하려고 하는 상황을 가정해보자. 이 때 ..
들어가기 전 이 글은 Real MySQL 8.0을 공부하며 작성한 글입니다. 인덱스 레인지 스캔이란? const, ref, range로 인덱스를 접근하면 인덱스 레인지 스캔이라고 의미함. 인덱스 레인지 스캔 = 인덱스를 효율적으로 이용함 = 작업 범위 결정 조건으로 인덱스를 이용함 10.3.5 Type 컬럼 실행 계획에서 Type 이후의 컬럼은 각 테이블의 레코드를 어떤 방식으로 읽었는지를 나타낸다. 인덱스를 탔는지, 인덱스를 탔다면 어떤 방식으로 탔는지, 테이블 풀스캔을 했는지 등을 알 수 있다. Type 컬럼에 올 수 있는 값은 다음과 같다. const eq_ref ref fulltext ref_or_null unique_subquery index_subquery range index_merge in..
Spring Tomcat Thread Pool 스프링 MVC는 내장 톰캣을 사용하고, 요청마다 새로운 쓰레드가 배정된다. Tomcat 서버에서는 쓰레드 생성 비용을 절감하기 위해 쓰레드 풀에 미리 생성되어 있는 쓰레드를 재활용한다. 톰캣 서버와 관련된 설정값을 바꿔서 이런 부분들 조절할 수 있다. server: tomcat: threads: max: 200 min-spare: 50 accept-count: 10 max-connections: 1000 각각이 의미하는 것은 다음과 같다. max : 톰캣 쓰레드풀이 동시에 사용할 수 있는 최대 쓰레드 개수. 쓰레드 개수만큼 동시 요청 처리가 가능함 min-spare : 톰캣 쓰레드풀에 대기 상태로 있는 쓰레드 개수. max-connections : 톰캣 커넥..
들어가기 전 이 글은 쿠버네티스 인 액션 16장을 공부하며 작성한 글입니다. 16.1 Taint와 Toleration을 사용해 특정 노드에서 파드 실행 제한 Taint는 오염을 의미하고, Toleration은 용인이라는 의미다. 노드에 Taint(오염)를 이용해 특정 표시를 해두었을 때, Pod가 이것은 Tolerate(용인)하는 경우라면 그 파드는 노드에 스케쥴링이 가능하다는 의미다. Taint와 Toleration은 각각 이런 역할을 하는 녀석들이다. Taint + Toleration은 파드를 특정 노드에 스케쥴링 하도록 하기 보다는 특정 노드에 파드가 배포되지 않도록 동작한다. Taint : 노드에 추가할 수 있는 스케쥴링 관련 정보다. 노드에 추가된 모든 Taint를 만족하는 Pod만 스케쥴링 될..