본문 바로가기

분류 전체보기

(212)
서비스 추상화 서비스 추상화 사용자 레벨 관리 기능 추가 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용할 수 있도록 지원하는지 확인해보자 사용자 레벨 관리 기능 추가 지금까지 짯던 코드들은 DAO 를 이용한 간단한 CRUD 였는데, 지금부터는 비즈니스 로직을 조금 추가 해보자 사용자의 활동내역을 참고해 레벨을 조정해주는 기능이다. 스케줄링으로 정해진 시간에 사용자가 정해진 조건을 만족시켰는지 확인 후 레벨을 변경시킨다. 필드 추가 public class User { private static final int BASIC = 1; private static final int SILVER = 2; private static final int GOLD = 3; private int lev..
예외 예외 예외를 처리하는 베스트 프랙티스들을 봐보자 초난감 예외처리 대표적인 예외처리 초난감 주자들 예외 블랙홀 try { } catch(SQLException e){ } 예외를 받고 아무것도 하지 않은 상황. 발생한 예외를 무시해버리는 상황이 발생한다. 오류가 나도 어디서 문제가 생기는지 전혀 알 수 없게 되버린다. } catch(SQLException e){ System.out.println(e); 또는 e.printStackTrace(); } 이것도 문제가 많다. 콘솔에만 나오기 때문에 콘솔을 보고있지 않으면 메시지를 볼 수 없다. 무의미하고 무책임한 throws public void method1() throws Exception { method2(); } 남용하면 throws 에 의미가 없어진다. ..
템플릿 템플릿 1장에서 관심이 다른 코드를 분리하고 (단일 책임), 확장과 변경에 대응할 수 있게 개선을 했었다. 객체지향 설꼐의 개방폐쇄 원칙을 따른것 이 원칙으로 코드에는 확장하려는 성질과 어떤 부분은 고정되어 변하지 않으려는 성질이 있는걸 알 수 있다. 템플릿은 변경이 거의 일어나지 않고 일정한 패턴으로 유지되는 부분을 자유롭게 변경되는 부분으로부터 독립시켜서 효과적으로 활용 할 수 있게 한다. 3장에서는 템플릿을 이용해 완성도 있는 DAO 만드는법과 스프링에 적용된 템플릿 기법을 봐보자 다시보는 초난감 DAO UserDao 에서 여러가지 개선작업을 했지만 예외상황에 대한 처리를 안했었다. DB 커넥션은 반드시 자원을 반납해야하기 때문에 예외처리를 꼭 해줘야 한다. public void deleteAll(..
테스트 테스트 스프링이 개발자에게 제공하는 것 중 가장 중요한 가치가 무엇이냐 하면 객체지향과 테스트다. 앱은 변화가 계속되는데, 이런 변화에 대응하는 첫 전략이 확장과 변화를 고려한 객체지향 설계와 이걸 효과적으로 쓰게 해주는 IOC/DI 기술이고, 두번째 전략은 코드를 확실하게 해주는 테스트 기술이다. UserDaoTest 다시 보기 테스트의 유용성 테스트 코드를 통해 코드가 제대로 작동하는지 확인 할 수 있다. 코드의 결함을 제거해 나가고 디버깅을 거쳐 결함이 제거 된걸 확인 할 수 있다. UserDaoTest특징 다시 1장에서 작성한 UserDao 테스트의 장점을 간단하게 봐보자. public class UserDaoTest { public static void main(String[] args) thr..
오브젝트와 의존관계 오브젝트와 의존관계 스프링은 자바를 기반으로한 기술이고 스프링이 자바에서 가장 중요하게 여기는건 객체지향이 가능한 프로그래밍 언어라는 점이여서 오브젝트에 가장 많은 관심을 가지고 있다. 따라서 스프링을 이해하기 위해서는 오브젝트에 대해 알고있어야 한다. (오브젝트의 관심은 오브젝트 설계의 관심까지 발전하게 되는데 객체지향 설계의 기초와 원칙을 비롯해서 디자인패턴, 단위테스트 같은 오브젝트 설계와 구현에 관심을 갖게 된다.) 스프링은 오브젝트를 어떻게 효과적으로 설계, 사용할지 기준을 제공해줘서 객체지향 기술과 설계 구현에 관한 실용적인 전략과 검증된 베스트프랙티스를 손쉽게 제공해주는 프레임워크다. 1장에서는 오브젝트의 설계와 구현, 동작원리에 더 집중을 해서 알아보자 초난감 DAO @Getter @Set..
elasticsearch 성능 극대화 성능 극대화 엘라스틱 서치의 성능을 극대화 할 수 있도록 설정 하는 방법에 대해 봐보자 어플리케이션 복잡도 다수의 요청을 하나의 HTTP 요청으로 그룹화 하는지 알아보자 네트워크 오버헤드를 없애서 아주 좋은 성능 향상을 기대 할 수 있다. 색인(추가)과 검색 중 어느것에 초점을 맞출지 루씬 세그먼트를 어떻게 관리해서 살펴보자 refresh, flush, merge 등 설정이 어떻게 동작하고 이것들이 검색과 색인 성능에 어떻게 영향을 미치는지 봐보자 메모리 엘라스틱서치의 캐싱을 이용해서 성능을 좋게 할 수 있다. 필터캐시, 샤드 쿼리 캐시등을 봐보자 준비 되지 않은 캐시에 검색 요청이 너무 느리다면, 워머를 통해 백그라운드에서 미리 실행을 시켜 캐시를 준비해둘수도있다. 요청을 그룹화하기 네트워크 오버헤드를..
elasticsearch 데이터 검색 & 분석 엘라스틱서치 검색 엘라스틱서치는 루씬 검색 기능을 사용해서 데이터를 검색할 수 있는 풍부한 API 를 제공한다. REST API 검색 요청은 노드에 보내지고 검색요청을 모든 샤드에 보내진다. 모든 샤드에서 충분한 정보를 수집한 후 반환될 도큐먼트가 포함된 샤드만 내용을 반환하도록 요청받는다. 검색 범위 지정하기 전체 클러스터로 검색하지 않고 검색요청에 색인을 포함해서 쿼리를 제한하는게 좋다. 해당 색인의 샤드에만 요청을 보낼 수 있다. 검색 요청의 기본 구성 요소 색인을 설정했다면 검색 요청에 중요한 구성요소들을 설정해야 한다. 구성요소는 반환할 도큐먼트 개수를 제어하고 최적의 도큐먼트를 선택해서 결과를 도출한다. query- 검색 요청에 있어 가장 중요한 요소. 점수 기반으로 최적의 도큐먼트를 반환하거..
elasticsearch 소개 엘라스틱 서치? 데이터 검색을 위해서는 검색 결과를 내놓고, 통계를 제공하고, 빠른 처리 속도가 필요한데, 이런 경우엔 엘라스틱서치 같은 검색엔진을 사용하는게 적합하다. 엘라스틱서치는 실시간 검색을 제공하고 집계 기능을 제공하고 시스템 확장에도 용이하다. 엘라스틱 서치는 Apache Lucene 을 기반으로 만들어졌는데 루씬에서 역색인을 제공해준다. 역색인은 각 단어가 어느 문서에 있는지 목록을 만들어 유지하는 자료구조인데 이 역색인을 통해 데이터 검색을 빠르게 할 수 있다. 엘라스틱 서치는 데이터를 색인 하고 검색 하는 루씬의 기능들을 사용한다. 색인 - 어떻게 문서를 처리하고 저장할지 검색 - 여러 질의와 필터들 선택 엘라스틱서치는 REST API 로 기능을 제공하고 JSON 으로 질의한다. 루씬이 ..