리팩터링을 제대로 하려면 불가피하게 저지르는 실수를 잡아주는 견고한 Test suite가 뒷받침돼야 한다. 컴파일할 때마다 테스트를 함께하면 디버깅 시간이 크게 줄어든다. 테스트 스위트는 강력한 버그 검출 도구로, 버그를 찾는 데 걸리는 시간을 대폭 줄여준다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전이다. 기능을 추가해야 할 때 테스트부터 작성한다. 원하는 기능을 추가하기 위해 무엇이 필요한지 고민하게 되고 구현보다 인터페이스에 집중하게 된다는 장점 TDD(Test Driven Development) 처음에는 통과하지 못할 테스트를 작성하고, 이 테스트를 통과하게끔 코드를 작성하고, 결과 코드를 최대한 깔끔하게 리팩터링하는 과정을 짧은 주기로 반복한다. 테스트-코딩-리팩터링 실패해야 ..
CloudWatch Logs의 로그그룹에 로그 데이터를 게시해서 실시간으로 로그를 확인할 수 있다. 로그 종류 별로 게시가 되는데 설정은 DB 파라미터 그룹에서 할 수 있다. 로그 요구 사항 감사 로그 DB 인스턴스는 MARIADB_AUDIT_PLUGIN 옵션과 함께 사용자 지정 옵션 그룹을 사용해야 합니다. 일반 로그 DB 인스턴스는 파라미터 설정 general_log = 1과 함께 사용자 지정 파라미터 그룹을 사용하여 일반 로그를 활성화해야 합니다. 느린 쿼리 로그 DB 인스턴스는 파라미터 설정 slow_query_log = 1과 함께 사용자 지정 파라미터 그룹을 사용하여 느린 쿼리 로그를 활성화해야 합니다. 로그 출력 DB 인스턴스는 파라미터 설정 log_output = FILE과 함께 사용자 지정..
언제 샤딩해야 하나 사용 가능한 메모리를 늘릴 때 사용 가능한 디스크 공간을 늘릴 때 서버의 부하를 줄일 때 한 개의 mongod가 다룰 수 있는 처리량보다 더 많이 데이터를 읽거나 쓸 때 서버 시작 구성 서버는 클러스터 구성을 저장하는 일반 mongod 서버 클러스터 구성은 샤드를 호스팅하는 복제 셋, 샤딩된 컬렉션, 각 청크가 위치한 샤드 등을 포함 구성 서버 구성 서버는 어떤 서버가 무슨 데이터를 갖고 있는지에 대한 모든 메타 데이터를 보유 mongos가 구성 서버로부터 구성을 가져오므로, 구성서버는 mongos 프로세스 앞서 시작해야함 3개의 개별 시스템에서 구성 서버 시작 --configsvr 옵션은 mongod를 구성 서버로 사용하겠다는 뜻 config 와 admin 이외의 데이터베이스에 데이..
MySQL에서 JSON 데이터에서 값을 추출하려면 JSON_EXTRACT() 함수를 사용 JSON_EXTRACT(json_column, path) json_column: JSON 데이터가 저장된 컬럼 path: 추출하려는 값의 경로 SELECT JSON_EXTRACT(json_column, '$.name') AS extracted_name FROM your_table; MySQL에서는 JSON 형식의 데이터를 VARCHAR 타입의 컬럼에 저장할 수 있습니다. JSON 데이터를 VARCHAR 컬럼에 저장하면 JSON 문자열이 그대로 저장되며, JSON 함수 및 연산을 사용하여 JSON 데이터를 다룰 수 있습니다. 주의할 점은 JSON 데이터의 크기가 VARCHAR의 최대 크기를 초과하지 않도록 해야 합니다..
리팩터링 정의 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 여러가지 리팩터링 기법을 적용해서 소프트웨어를 재구성한다. 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 작업이 끝나지 않아도 언제든 멈출 수 있다 누군가 "리팩터링하다가 코드가 깨져서 며칠이나 고생했다"라고 한다면, 리팩터링한 것이 아니다 두개의 모자 소프트웨어를 개발할 때 목적이 '기능 추가'냐, 아니면 '리팩터링' 이냐를 명확히 구분해 작업 기능을 추가할 때는 '기능 추가' 모자를 쓴 다음 기존 코드는 절대 건드리지 않고 새 기능을 추가하기만 한다. 리팩터링할 때는 '리팩터링' 모자를 쓴 다음 기능 추가는 절대 하지 않기로 다짐한 뒤 오로지 코드 재구성에만 전념한다...
Future의 단순 활용 비동기 계산을 모델링하는데 사용 Future는 계산이 끝났을 때 결과에 접근할 수 있는 참조를 제공 시간이 걸릴 수 있는 작업을 Future 내부로 설정하면 호출자 스레드가 결과를 기다리는 동안 다른 작업을 수행 Callable 객체 내부로 감싼 다음에 ExecutorService에 제출 ExecutorService executor = Executors.newCachedThreadPool();//스레드 풀 생성 Future future = executor.submit(new Callable() {//Callable을 스레드풀에 제출 public Double call() { return doSomeLongComputation();//시간이 오래걸리는 작업을 다른 스레드로 비동기 실..
은은하고 고급진 향기를 발산하는 토종백합입니다!!^^옛날 옛적 우리가 어렸을때 시골집 한켠에 자리잡고 있던 백합이지요~ :-)언젠가부터 외래종 백합에 밀리고,거의 소멸하여 보기 귀하고, 구하기 어려운 백합이 된 토종백합입니다.중국산 백합이 수입되어 비슷한 모습을 한 백합과는 다른 오리지날 토종백합입니다!! 배수가 잘되는 토양, 가급적 반그늘에 식재하는게 좋습니다.받는 즉시 구근을 말리지 말고 식재하시고요,행여 인편이 떨어진게 있으면 함께 묻어주면 싹이 돋아난답니다~~^^퇴비는 넣지 않고 심을것을 권장하고,잘 썩은 부엽토가 있다면 조금 넣고 심으면 좋습니다. 백합 구근 위로 10~15cm 정도의 흙이 덮이게 심어주세요.그래야 구근 위에 나오는 뿌리(상근) 위에 자구가 많이 생..
아마릴리스 블라썸피콕 입니다!!아마릴리스 전문농장에서 재배한 구근을 발송합니다 :D지금 화분에 식재하여 실내에 두시면 봄에 개화하여 너무나 아름다운 꽃을 볼 수 있습니다.화분에 식재시 구근의 3분의 1이 겉으로 드러나게 즉 3분의 2가 묻히게 심는게 좋아요.심고나서 물한번 듬뿍주세요!!담부터는 화분 흙이 마르면 한번씩 주시면됩니다.물을 너무 자주 주면 과습이 됩니다.햇빛을 많이 보여주어야 웃자람을 막을 수 있답니다.^^ 구근을 좀 더 건조시킨 후 그대로 겨울동안 신문지에 싸서박스에 넣어 보관했다가봄에 화분이나 정원에 심어도 좋습니다.노지에 심는 경우엔 물을 주지않는게 좋아요 :) ..
리팩터링이란 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정 버그가 생길 가능성을 최소로 줄이면서 코드를 정리하는 방법 리팩터링한다는 것은 코드를 작성하고 난 뒤에 설계를 개선하는 일 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 위한 형태로 리팩터링 후 원하는 기능을 추가한다 리팩터링 전에 제대로 된 테스트부터 마련한다 테스트는 반드시 자가진단하도록 만든다 테스트를 작성하는데 시간이 좀 걸리지만, 신경써서 만들어두면 디버깅 시간이 줄어서 전체 작업 시간은 단축된다 리팩터링은 프로그램 수정을 작은 단계로 나눠 진행한다 그래서 중간에 실수하더라도 버그를 쉽게 찾을 수 있다 컴파일-테스트-커밋 간단한 수정이라도 ..