본문 바로가기

프로그래밍/이것저것 일하면서

(53)
코드값을 유니크로 만들어야 하는 이유 시스템 개발을 하다 보면 보통 공통 코드라는 것을 만들어 사용하게 된다. 공통 코드 테이블은 부모-자식 테이블로 분리할 수도 있지만, 하나의 코드 테이블에 상위코드 같은 컬럼을 만들기도 한다. 어쨋든 코드는 대개 계층형(hierachy) 구조를 가진다. 그리고 DB에서 관리한다. 그런데 코드를 정의할 때 001, 002 이딴 식으로 정의하는 경우가 간혹 있다. 그런데 해당 코드와 뭔가 처리해야 할 변경사항이 생겼다? 전체 소스코드에서 Find all 해서 문자열 검색을 할텐데, 이 코드가 A의 하위코드 001인지 B의 하위코드 001인지 일일히 소스를 분석해봐야 알 수 있다. 마스터코드를 상세코드의 접두사로 사용하거나, 변수명처럼 의미있는 문자의 조합으로 만들면 적어도 이런 상황은 피할 수 있다. 그럼 ..
각주구검 하듯 만드는 이벤트 주소(URL) 월 단위로 진행하는 이벤트가 있다. 기존에 URI가 이런 식으로 만들어져 있었다. /event/something/v1 /event/something/v2 /event/something/v3 ... URI 마지막에 붙는 버전은 PathVariable로, jsp 파일명의 접미사로 사용되고 있었다. 그런데 여기에는 쪼끄맣고 귀여운 문제가 있었다. 버전이 무엇을 의미하는지 모호하다. 이벤트 참여유도 푸시 발송에 해당 URL이 함께 나가는데, 푸시발송 시 URL 부분은 하드코딩이다. 이벤트를 새로 진행할 때마다 변경해야 한다. 사용자 앱 내 메뉴 링크를 변경해야 한다. 이벤트 팝업을 설정하는 기획자가 매번 URL을 개발자에게 확인해야 한다. 새로운 이벤트가 진행되면 하드코딩을 수정해야하는 곳이 최소 3개이다. 그..
Spring @Scheduled cron 표현식은 년도를 설정할 수 없다 (Cron expression must consist of 6 fields (found 7 in "cron expression...")) 문제 목표: 이벤트 당첨자에게 올해 3~12월 10달 동안 매월 쿠폰을 발급해야 한다. 그래서 쿠폰 발급 프로세스를 Batch 프로젝트에 추가하고 크론은 다음과 같이 설정하였다. // 2021년 3~12월 매달 1일 새벽 1시 30분 실행 @Scheduled(cron = "0 30 3 1 3-12 ? 2021") 그런데 배치 프로젝트 실행 시 이런 오류가 발생했다. Cron expression must consist of 6 fields (found 7 in "0 30 3 1 3-12 ? 2021")원인 Spring @Scheduled 크론은 6자리 설정만 허용한다.(연도 설정 불가) 참고 링크: https://docs.spring.io/spring-framework/docs/current/javadoc..
리눅스 프로세스별 CPU, 메모리 사용량 확인 및 정렬 top 명령어 $ top 엔터를 치면 CPU와 메모리 사용량이 나온다. 정렬 단축키 Shift + P: CPU 사용량 내림차순 정렬 Shift + M: Memory 사용량 내림차순 정렬
사용자 실수 어디까지 막아야 할까? 오래된 시스템 하나를 유지만 하고 있다. 오늘 로그인이 안 된다는 문의를 받았다. 그냥 안된다고 한다. 우선 패스워드 틀린 카운트를 확인해보았다. 이상 없다. 어떻게 안되냐, 증상이 무엇이냐 물으니 관리자 로그인을 하면 '다른 홈페이지'로 이동이 된다고 했다. 그래서 어디로 이동이 되는지 알려달라고 했다. 그리고 로그를 열어보았다. 로그에는 이상한 점이 보이지 않는다. 가입정보를 천천히 보다 보니 뭔가 이상하다. 줄이 안 맞는다. 자세히 보니 아이디 앞에 공백 한 칸이 들어가 있다. 가입할 때 당연히 막았어야 하는 것이다. 하지만 유감스럽게도 그렇지 않은 것 같다. 어쨌든, 그래서 오류가 발생했다. 사용자는 반드시 실수한다. 오타를 입력하거나, 엉뚱한 버튼을 누른다. 그러나 모든 상황을 완..
SSL 인증서 파일 유효기간 확인 명령어 명령어 openssl x509 -in 인증서파일 -noout -dates결과 $ openssl x509 -in cert.pem -noout -dates notBefore=Dec 24 00:00:00 2020 GMT notAfter=Jan 23 23:59:59 2022 GMT
모바일 브라우저에서 앱 실행하기 대작전(Android, iOS) 이 문서의 최종 수정일: 2020.12.24 Merry Christmas 웹개발자의 칼퇴근을 늦추는 원흉 중에 같은 코드 OS/Browser 별 다른 동작이 있다. 예전에는 최악의 브라우저 Internet Explorer 때문에 발생하는 경우가 많았다. IE가 거의 사장된 지금은 예전보다 다변화된 디바이스 환경 때문에 가끔 발생한다. 앱 랜딩 페이지가 하나 있는데, OS와 브라우저 별로 다르게 동작해서 골치였다. 어떤 OS와 브라우저 조합에서는 마음대로 앱을 실행시킬 수 없다. 그래서 앱 실행하기 버튼을 추가해야 했다. OS + Browser 조합별 테스트 결과 Android + Chrome: 페이지 로딩 시 코드로 앱을 실행시킬 수 없으며, 반드시 사용자의 액션(클릭 등)이 있어야 한다. Android..
모바일 크롬 브라우저에서 안드로이드 인텐트(Intent) 링크하기 브라우저에서 특정 페이지에 접속하면 앱을 실행시켜 달라고 하는데, iOS는 잘 되는데 안드로이드가 말썽을 부렸다. 그래서 관련 문서를 몇 개 찾아보았다. 우선 아래 링크는 안드로이드 앱에서 설정해줘야 할 내용이다. 안드로이드 앱 - 인텐트 및 인텐트 필터 설정 다음은 브라우저에서 보여질 화면에서 링크할 URI이다. host, scheme, package 등은 앞서 설정한 내용을 참고한다. Android Intents with Chrome 주의 화면 접속 시 앱을 실행하는 기능이 안되서 확인해보니 두 번째 참고 링크 마지막에 다음과 같은 문구가 있었다. And Chrome doesn’t launch an external app for a given Intent URI in the following case..