담당하고 있는 시스템에 엑셀 양식을 다운로드받는 기능이 있다. 그냥 양식만 다운로드받는 게 아니라 데이터 유효성 검사 기능이 추가되어 있는데, 아래와 같은 기능이다. 이미지출처 : https://meaningone.tistory.com/546 엑셀 드롭다운 목록 만들기 및 삭제! 오늘은 엑셀 드롭다운 목록 만드는 방법에 대하여 알아보겠습니다. 엑셀에는 데이터 유효성 검사라는 기능이 있습니다. 용어가 확 와 닿지 않을 텐데요. 사용자가 셀에 입력하는 데이터를 제어 meaningone.tistory.com 이번에 이슈가 된 건 엑셀 양식 다운로드를 받았는데, 드롭다운 목록이 사라진 것이었다. 다운로드받은 엑셀을 열려고 하면 아래와 같은 화면이 뜬다. 그래서 "예"를 누르면 파일이 열리기는 하지만 드롭다운목록..
서버를 AWS로 옮기면서 배포자동화를 하고 있었는데, BeforeBlockTraffic에서 UnknownError가 났다. 알아보니 배포할 EC2에도 CodeAgent가 깔려있어야 CodeDeploy랑 연결이 되는데, 그게 없어서 문제였다. 아래 블로그글대로 EC2에서 CodeAgent를 설치후 실행하면 아래 이미지처럼 성공한다. https://jinmay.github.io/2020/05/13/aws/how-to-install-code-deploy-agent-ubuntu/
헤로쿠가 유료화된다고 해서 다시 AWS로 개인프로젝트 서버를 이사했다. 무료 도메인도 사서 쓸 수 있다길래 요번에는 그것도 사용해봤다. 그런데 HTTP 요청을 HTTPS로 리다이렉션하는 과정에서 조금 애를 먹어서 다음번에도 쓸 수 있게 하고, 혹시 나처럼 AWS가 익숙하지 않은데 HTTPS를 사용해야 하는 사람들을 위해 글을 쓴다. 리다이렉션 외에 인증서 발급, ACM, Route 53 설정 등은 제외한다. 나의 경우 애플리케이션은 8090 포트를 사용했다. 이럴 경우, 리스너와 대상 그룹(Target group)을 아래와 같이 구성해야 한다. 리스너는 요청을 받는 곳이다. 그러므로 HTTP 요청이 들어올 때 HTTPS로 리다이렉션하려면 HTTP의 80포트를 HTTPS의 443포트로 리다이렉션해주어야 한..
최근 진행했던 프로젝트에서 동시성 제어를 해결해야 했다. 자바에서 동시성 제어를 위해 제공하는 건 세 가지 방법이 있다. 첫째, synchronized, 둘째, Atomic variable, 셋째, volatile. 나는 이 중 Atomic variable을 사용했는데, 왜 Atomic Variable을 사용했는지 이유를 정리해보고자 한다. 나름의 리서치를 통해 Atomic Variable을 사용하긴 했지만 반드시 Atomic Variable을 사용해야 한다고 주장하는 글도 아니다. 성능 저하를 막기 위해 가장 일반적으로 알고 있는 synchronized 같은 경우는 가장 안전하다고 알려져 있지만, 성능 저하가 발생한다는 단점이 있다. 현재는 스케줄로 동작하지만 내가 작업한 부분의 경우, 후에 대규모 호..
TASK 이번에 맡아서 개발한 부분은 A시스템에서 B시스템이 사용할 파일을 업로드받고 B시스템, C시스템으로 API 연동하여 전송, 후처리 요청까지 하는 부분이었다. 그렇게 큰 업무는 아니었지만 이 기능이 본 프로젝트를 진행하는 이유였기 때문에 중요했다. 관건은 작업 요청 목록이 여러 개 있고, 스케줄로 작업을 실행하는데 작업이 하나 이미 실행중이라면 다음 작업은 작업이 끝날 때까지 실행되지 않아야 하고, 여러 시스템과 연동하면서 발생할 예외 처리를 적절히 해주어야 한다는 것이다. 당연히 트랜잭션도 고려해야했다. 그래서 개발을 진행하며 Transaction이 시작되고 끝나기까지 내부 코드는 어떻게 돌아가는지 살펴보고(Transaction 관련 내부 코드 뜯어보기) 중첩된 @Transactional을 실험..
로그인을 거쳐야만 수행 가능한 동작을 테스트코드로 작성해서 테스트해야 하는 경우가 있다. 나의 경우 로그인하면 Session에 정보를 저장하는데, 컨트롤러에 들어가기 전 interceptor에서 권한 체크를 해준다. 이 경우 테스트코드는 아래와 같이 짜면 된다. interceptor에서 Session에 id가 존재하는지 확인하고 존재한다면 컨트롤러로 들어가 게시물 신고 취소를 진행하게 된다. 그래서 테스트를 정상적으로 수행되도록 짜려면 session에 id를 넣고 그 session도 같이 넘겨줘야하는데 위 방법이 그 방법이다.
오늘은 개인프로젝트에 @ControllerAdvice를 추가해서 유효하지 않은 파라미터를 공통으로 처리해주는 작업을 하고 있었다. 테스트코드 작성해서 테스트하는데 분명 제대로 작성했는데 @ControllerAdvice가 적용되지 않는 것이었다. @ControllerAdvice가 다른 패키지에 있었는데, 혹시나 해서 컨트롤러 안에 @ExceptionHandler 메서드만 넣으니까 잘 작동하고. 위 이미지를 비교해보면 알 수 있듯이 제대로 작동하지 않은 경우에는 DefaultHandlerExceptionResolver로 BindException이 처리됐고, 제대로 작동한 경우에는 ExceptionHandlerExceptionResolver로 처리가 됐다. DefaultHandlerExceptionResolv..