인기 글

Github - Pull request template 작성과 설정
·
Git
💡Pull request template은 왜 필요할까? PR의 내용이 중요한 이유는 Pull Request를 통해 코드 리뷰를 받기 때문입니다. 코드 리뷰를 통해 팀원 간의 코드 스타일을 맞출 수 있고, 혼자서는 발견하기 어려운 위험 요소도 발견할 수 있습니다. PR 내용만으로도 변경 사항과 이유를 충분히 이해할 수 있어야 합니다. PR Template을 만들어 Repository에 추가하면 PR을 할 때 PR body에 template의 내용을 자동으로 볼 수 있습니다. PR의 내용을 표준화해서 일관성 있는 좋은 품질의 Pull Request를 유지할 수 있습니다. pull_request_template.md 파일 생성 프로젝트의 Repository에서 파일을 생성합니다. 템플릿은 다음 위치 중 한 ..
Javascript - Uncaught SyntaxError: Invalid or unexpected token 원인과 해결방법
·
나의 에러 일지
개요 평가 시스템을 만들고 있었다. 요구사항 중 특정 기간에만 url에 접근 가능하도록 설정할 수 있는 요구사항이 있었다. (수강 신청 기간을 떠올리면 된다.) 평가 기간을 지정하면 해당 기간 내에만 url에 접근 가능하고, 기간 외에 접근 시 평가 기간이 아니라는 alert창과 함께 로그인 화면으로 리다이렉트되도록 했다. Service public String checkOfficerEvaluationPeriod() { OfficerEvaluationPeriod officerEvaluationPeriod = this.getOfficerEvaluationPeriod(); LocalDate startDate = officerEvaluationPeriod.getStartDate().toLocalDate(); ..
Spring - 이메일 인증 구현해보기 (랜덤 인증번호 보내기)
·
Spring
배경새로 시작하게 된 프로젝트에서 회원가입 중 이메일 인증을 하도록 했다.Spring에서 제공하는 API를 사용하면 생각보다 쉽게 구현할 수 있다. 나는 Google SMTP 서버를 이용해서 이메일 인증을 진행하도록 했다. 개발 환경Java 11Spring 2.xGradleMySQL, RedisIntelliJ 흐름사용자는 회원가입 화면에서 가입하려는 이메일을 입력 후 이메일 인증 버튼 클릭클라이언트 서버에게 사용자의 이메일로 인증 번호 전송 요청서버는 랜덤 인증 번호 생성. 인증 번호를 Redis에 저장 후 사용자의 이메일로 인증 번호 전송사용자는 인증 번호 확인 후 인증 번호 입력 후 확인 버튼 클릭클라이언트는 서버에게 인증 번호 검증 요청서버는 전달받은 인증 번호가 Redis에 저장된 인증 번호와 동..
MariaDB - 행 번호 출력하기 ROW_NUMBER() OVER PARTITION BY
·
SQL
오라클에서는 RNUM()을 통해 쉽게 순번에 맞는 행 번호를 출력할 수 있었다. 이번에 JSP로 프로젝트를 진행하면서 MariaDB를 사요하게 되었고 MariaDB에서도 행 번호를 출력할 수 있는 방법에 대해 정리해본다. MariaDB에서는 ROW_NUMBER() OVER() 함수를 사용하면 된다. OVER 안에는 PARTITION BY와 OREDER BY를 사용할 수 있다. PARTITION BY : 결과 집합을 분할하는 데 사용하는 열을 지정한다. PARTITION BY를 지정하지 않으면 모든 행이 단일 그룹으로 취급된다. ORDER BY : 지정된 파티션 내에서 각 행의 고유 ROW_NUMBER가 할당되는 순서를 결정한다. 예제 SELECT ROW_NUMBER() OVER(ORDER BY name ..
SSH - ssh no matching key exchange method found 에러 원인과 해결 방법
·
나의 에러 일지
ssh chanbin@192.168.0.100 Unable to negotiate with 192.168.0.100 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 원인 ssh6 까지는 제공해주던 key exchange method가 ssh7부터는 보안의 이유로 별도 옵션을 추가해주어야 한다. 해결 방법1 ssh에 접속할 때 key exchange method 옵션을 담아 접속한다. ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1 cha..
QA - Test Case를 통한 QA 테스트
·
etc
개요이번에 회사에서 진행하던 프로젝트가 마지막 단계에 왔다. 이제 배포를 하기 전에 QA를 진행해야 했다. 하지만 우리 조직에는 체계화 및 구조적으로 QA를 진행하는 문화가 없었다. 당연히 QA 조직도 없다. 그래서 직접 QA 테스트를 진행하기로 했다. 본 글에 내가 QA테스트를 작성했던 내용을 남겨둔다. 부족한 부분이나 잘못된 내용이 있다면 언제든 댓글을 남겨주세요! QA 테스트(Quality Assurance)라고 하면 제조업 분야에서 기계 성능을 테스트하는 QA를 생각할 수 있다. IT에서의 QA는 서비스 기획 단계부터 참여하여 개발, 테스트 그리고 출시까지의 모든 과정에서 잠재적인 품질 리스크를 프로젝트 참여자들과 공유하고 해당 서비스가 사용자의 요구사항에 충족하는지에 대한 관리하는 활동이라고 볼..
Java - OutOfMemoryError:GC overhead limit exceeded 원인과 해결 방법 (Eclipse MAT)
·
나의 에러 일지
배경실행중이던 서버가 갑자기 다운이 되었다. 로그를 확인해보니 java.lang.OutOfMemoryError: GC overhead limit exceeded 에러가 발생했다. 서버를 재기동해서 그냥 넘어가기는 했지만 다시 발생할 수 있는 문제이기 때문에 원인과 해결 방법을 정리해본다. 개발 환경Java 1.8Spring 5.3Oracle 11gMacOS 원인GC는 더 이상 참조되지 않는 객체를 제거해주는 작업을 해주기 때문에 메모리 사용을 최적화하는데 도움을 준다. 하지만 GC가 너무 오랫동안 수행되면 실제 작업보다 많은 CPU를 사용하게 되어서 프로그램 실행이 느려지거나 중단될 수 있다.OOM은 JVM이 GC를 수행하는데 너무 많은 시간을 소비해서 애플리케이션을 실행할 수 없게 되는 상황에 발생하는..
Java - String 메소드 총정리!
·
Java
계속 추가중입니다. split() 지정된 분리자(regex)를 기준으로 문자열을 자르고 문자열 배열에 담아 반환해주는 메서드 String[] split(String regex) String[] split(String regex, int limit) 분리자(regex)으로 문자열 패턴을 받고, 패턴과 동일한 문자열을 기준으로 잘라준다. limit은 문자열을 나눌 수 있는 최대 개수이다. 예제 String str = "010-1234-5678-9101"; String[] result1 = str.split("-"); String[] result2 = str.split("-", 2); String[] result3 = str.split("-", 3); //결과 result1 = [010, 1234, 5678,..
Java - ArrayIndexOutOfBoundsException 원인과 해결법
·
나의 에러 일지
원인정해진 배열의 크기보다 크거나 음수 index에 대한 요청이 있으면 ArrayIndexOutOfBoundsException이 발생한다.배열의 index는 1부터 시작하는 것이 아닌 0부터 시작한다. 배열의 크기를 n이라고 한다면 index는 1부터 n까지가 아닌 0부터 n-1까지인 것이다. 보통 이 부분에서 해당 예외가 많이 발생하는 것 같다.ArrayIndexOutOfBoundsException은 자바 컴파일러에서 검사하지 않고 실행을 시켜야 알 수 있다.int[] arr = new int[5] // arr의 범위는 arr[0] ~ arr[4]로 총 5개의 인덱스를 생성arr[5] = 5; // arr[5]는 존재하지 않기 때문에 예외 발생!// 결과Exception in thread "main" ..
Oracle - 실행 계획으로 복잡한 쿼리 최적화해보기
·
SQL
배경백오피스를 운영하면서 항상 거슬렸던 부분이 있었다. 바로 느리게 로딩되는 주문 관리 페이지다. 원인은 굉장히 오래 걸리는 주문 목록 조회 쿼리였다. 주문 관리 페이지는 고객의 주문 정보, 배송 현황 등 다양하고 복잡한 데이터를 실시간으로 처리하고 표시해야 하는 중요한 화면이다. MD들은 업무 특성상 하루에도 수차례 이 페이지에 접속해야 하는데, 긴 로딩 시간을 감내해야 하는 상황이었다. 이는 단순히 개인의 불편함을 넘어서 전체적인 업무 효율성 저하로 이어질 수 있었다.(라고 생각한다.)그래서 팀에 건의하여 쿼리를 최적화해보기로 했다. 개발 환경Oracle11gDBeaver (Community Edition 24.1) 쿼리 구조쿼리 최적화를 할 때 가장 중요한 건 최적화하려는 쿼리의 역할과 기능을 아는..
Cold Bean
개발하는 콩