인기 글

Spring - 이메일 인증 구현해보기 (랜덤 인증번호 보내기)
·
Spring
배경새로 시작하게 된 프로젝트에서 회원가입 중 이메일 인증을 하도록 했다.Spring에서 제공하는 API를 사용하면 생각보다 쉽게 구현할 수 있다. 나는 Google SMTP 서버를 이용해서 이메일 인증을 진행하도록 했다. 개발 환경Java 11Spring 2.xGradleMySQL, RedisIntelliJ 흐름사용자는 회원가입 화면에서 가입하려는 이메일을 입력 후 이메일 인증 버튼 클릭클라이언트 서버에게 사용자의 이메일로 인증 번호 전송 요청서버는 랜덤 인증 번호 생성. 인증 번호를 Redis에 저장 후 사용자의 이메일로 인증 번호 전송사용자는 인증 번호 확인 후 인증 번호 입력 후 확인 버튼 클릭클라이언트는 서버에게 인증 번호 검증 요청서버는 전달받은 인증 번호가 Redis에 저장된 인증 번호와 동..
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(); ..
IntelliJ Error - finished with non-zero exit value 1 해결 방법
·
나의 에러 일지
Execution failed for task ':Application.main()'. > Process 'command 'JDK경로/bin/java.exe'' finished with non-zero exit value 1 이번에 소개할 에러는 finishi with non-zero exit value 1 이 녀석이다. Intellij, Gradle 환경에서 Spring 코드를 실행한 후 해당 에러를 만났다. 해결 방법 [File > Settings > Build, Excution, Deployment > Build Tools > Gradle] 이 경로로 이동 [Build and run using]과 [Run tests using]을 IntelliJ IDEA로 변경 [Gradle JVM] 버전을 현재 ..
Oracle - 다중 Like (Like In)
·
SQL
기존 서비스에서 검색 기능에 대한 요구사항이 있었다.요구사항은 다음과 같다.복수 검색 가능검색 키워드를 포함하는 결과값 모두 조회ex) kim, lee, park 검색 -> 결과값: kimchanbin, leechanbin, parkchanbin, kimleepark 만약 검색어와 일치하는 결과값만 가져오면 됐다면 IN 연산자를 사용했으면 됐을텐데, 검색어를 포함하는 모든 결과값을 가져와야 했기 때문에 LIKE문을 사용해야 했다. IN 연산자SELECT NAMEFROM USERS WHERE NAME IN ('kim', 'leechan', 'parkchanbin');결과값: parkchanbin  LIKE 연산자SELECT NAMEFROM USERSWHERE NAME LIKE 'kim%'결과값: kimch..
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..
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" ..
Java - UnsupportedOperationException 원인과 해결법
·
나의 에러 일지
팀 프로젝트가 끝이 났다. 모든 정신을 프로젝트에 집중하다보니 한 달이라는 시간이 금방 지나갔다. 그동안 손을 놓아버린 알고리즘과 다시 친해지기 위해 오랜만에 문제 하나를 풀어보았다. 오늘 다루게 될 에러는 알고리즘을 풀면서 만난 UnsupportedOperationException이다. Array를 List로 변환한 후 List 요소를 삭제하고 싶었는데, 이 과정에서 에러가 발생했다. 아래는 에러가 발생했던 코드이다. class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; List compList = Arrays.asList(completion); for (String s..
Java - AES-128 양방향 암호화하기
·
Java
개요RefreshToken을 쿠키로 전달할 때 보안을 강화하기 위해 AES128 양방향 암호화를 적용했다.RefreshToken은 사용자가 재인증할 필요 없이 새로운 AcessToken을 발급받도록 해준다. 만약 해커가 RefreshToken을 가로채면 암호를 사용자의 계정에 접근하는데 사용할 수 있다. 이 때, AES128 암호화로 RefreshToken을 암호화하면 RefreshToken을 가로채더라도 사용하기 어려워진다. (물론 이 방법 또한 완벽하지 않다.) AES(Advanced Encryption Standard) 암호화저장중이거나 전송하려는 데이터를 보호하는 데 사용되는 대칭 암호화 알고리즘. 고정된 크기의 데이터 블록에 데이터를 암호화하는 블록 암호 암호화 알고리즘이다.AES 암호화는 데이..
QA - Test Case를 통한 QA 테스트
·
etc
개요이번에 회사에서 진행하던 프로젝트가 마지막 단계에 왔다. 이제 배포를 하기 전에 QA를 진행해야 했다. 하지만 우리 조직에는 체계화 및 구조적으로 QA를 진행하는 문화가 없었다. 당연히 QA 조직도 없다. 그래서 직접 QA 테스트를 진행하기로 했다. 본 글에 내가 QA테스트를 작성했던 내용을 남겨둔다. 부족한 부분이나 잘못된 내용이 있다면 언제든 댓글을 남겨주세요! QA 테스트(Quality Assurance)라고 하면 제조업 분야에서 기계 성능을 테스트하는 QA를 생각할 수 있다. IT에서의 QA는 서비스 기획 단계부터 참여하여 개발, 테스트 그리고 출시까지의 모든 과정에서 잠재적인 품질 리스크를 프로젝트 참여자들과 공유하고 해당 서비스가 사용자의 요구사항에 충족하는지에 대한 관리하는 활동이라고 볼..
Cold Bean
개발하는 콩