리팩터링 정의 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 여러가지 리팩터링 기법을 적용해서 소프트웨어를 재구성한다. 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 작업이 끝나지 않아도 언제든 멈출 수 있다 누군가 "리팩터링하다가 코드가 깨져서 며칠이나 고생했다"라고 한다면, 리팩터링한 것이 아니다 두개의 모자 소프트웨어를 개발할 때 목적이 '기능 추가'냐, 아니면 '리팩터링' 이냐를 명확히 구분해 작업 기능을 추가할 때는 '기능 추가' 모자를 쓴 다음 기존 코드는 절대 건드리지 않고 새 기능을 추가하기만 한다. 리팩터링할 때는 '리팩터링' 모자를 쓴 다음 기능 추가는 절대 하지 않기로 다짐한 뒤 오로지 코드 재구성에만 전념한다...
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가 묻히게 심는게 좋아요.심고나서 물한번 듬뿍주세요!!담부터는 화분 흙이 마르면 한번씩 주시면됩니다.물을 너무 자주 주면 과습이 됩니다.햇빛을 많이 보여주어야 웃자람을 막을 수 있답니다.^^ 구근을 좀 더 건조시킨 후 그대로 겨울동안 신문지에 싸서박스에 넣어 보관했다가봄에 화분이나 정원에 심어도 좋습니다.노지에 심는 경우엔 물을 주지않는게 좋아요 :) ..
리팩터링이란 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정 버그가 생길 가능성을 최소로 줄이면서 코드를 정리하는 방법 리팩터링한다는 것은 코드를 작성하고 난 뒤에 설계를 개선하는 일 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 위한 형태로 리팩터링 후 원하는 기능을 추가한다 리팩터링 전에 제대로 된 테스트부터 마련한다 테스트는 반드시 자가진단하도록 만든다 테스트를 작성하는데 시간이 좀 걸리지만, 신경써서 만들어두면 디버깅 시간이 줄어서 전체 작업 시간은 단축된다 리팩터링은 프로그램 수정을 작은 단계로 나눠 진행한다 그래서 중간에 실수하더라도 버그를 쉽게 찾을 수 있다 컴파일-테스트-커밋 간단한 수정이라도 ..
@ControllerAdvice의 basePackages, annotations 속성으로 Controller 별로 Exception을 구분해서 처리할 수 있지만 URL Path 별로 구분하기는 어렵다. 아래처럼 동일 Exception을 구분해서 처리할 때는 @RequestMapping 으로 URL 을 구분할 수 있다. @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @RequestMapping("/api/**") // Specify the URL path pattern public ResponseEntity handleApiExceptions(HttpServletRequest request,..
이슈 spring boot 2.4 업그레이드 후 bootstrap.yml 에 설정해둔 spring.config 제대로 동작하지 않고 부팅 시 에러 발생 No spring.config.import property has been defined Action: Add a spring.config.import=configserver: property to your configuration. If configuration is not required add spring.config.import=optional:configserver: instead. To disable this check, set spring.cloud.config.enabled=false or spring.cloud.config.import-c..
이슈 Spring Boot 2.7.8 버전 업그레이드 시 mysql-connector-java 의존성 에러가 발생 원인 MySQL JDBC Driver가 mysql-connector-java -> com.mysql:mysql-connector-j 으로 변경됨 https://github.com/spring-projects/spring-boot/releases/tag/v2.7.8 조치 com.mysql:mysql-connector-j 으로 의존성 변경 #AS-IS implementation 'mysql:mysql-connector-java' #TO-BE implementation 'com.mysql:mysql-connector-j' https://mvnrepository.com/artifact/com.mys..