본문 바로가기

자바40

[Spring] Gmail SMTP를 활용한 이메일 인증 기능 개발 with Redis 안녕하세요. 프로젝트를 진행하는 과정에서 사용자가 회원가입을 위해 입력한 이메일이 실제 사용자의 이메일인지 확인할 수 없다는 문제가 발생했습니다. 따라서 사용자가 입력한 이메일이 정말 본인 이메일인지 검증하는 기능을 개발하게 됐습니다. 기존에는 사용자가 임의의 문자열을 입력해도 가입할 수 있었다면, 이제부터는 이메일로 발송된 인증코드를 입력해야만 가입할 수 있습니다. 이메일 발송 솔루션을 통해 기능을 구현하는 방법이 일반적이지만, 솔루션 구입에 추가적인 비용이 발생하기 때문에 간편하면서 무료로 사용할 수 있는 웹 메일 기반 이메일 인증 방식을 적용했습니다. 본 포스트에서는 Gmail SMTP를 바탕으로 이메일 인증 기능을 구현했습니다. 1. Flow (1) 이메일 인증 요청 & 인증코드 발송 사용자가 서.. 2024. 4. 14.
[Error] Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 안녕하세요. 스프링부트 환경설정 후 처음 실행했을 때 발생한 오류와 해결법을 공유하려고 합니다. 내용***************************APPLICATION FAILED TO START***************************Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following:If you want an embedded database (H2, HSQL or Derby), .. 2023. 11. 25.
[Java] N자리 랜덤 숫자+알파벳 대문자 문자열 생성 - Random Class 안녕하세요. 프로젝트를 진행하는 과정에서 숫자+영문 대문자 문자열로 이뤄진 중복되지 않는 무작위 인증코드를 생성하는 기능이 필요해서 개발을 진행하게 되었는데, 기능을 구현하는 과정에서 공부하고 정리한 내용을 공유하면 좋을 것 같아 포스팅하게 되었습니다. 오늘은 자바의 'Random' 클래스를 활용해서 무작위 영문 대문자 문자열을 생성하는 방법과 무작위 숫자 문자열을 생성하는 방법을 배워보고, 최종적으로 무작위 숫자+영문 대문자 문자열을 생성하는 방법을 알아보겠습니다. 무작위 숫자 문자열 생성 import java.util.Random; public class CreateRandomNumberCode { public static void main(String[] args) { Random random = .. 2023. 5. 5.
[BOJ] 백준 10971번 - 외판원 순회 2(with Java) 문제 알고리즘 1. 한 노드에서 다른 노드로 이동하는데 필요한 비용 데이터를 저장하기 위해서 인접리스트를 선언하고 값을 저장한다. 2. 최소 비용을 구하기 위해서 편의상 answer를 최대값으로 초기화 및 출발 지점 i를 방문처리하고 DFS를 시작한다. 3. DFS 메소드에서 매개변수 start와 인접한 각각의 노드까지의 이동 비용이 0이 아니고 방문하지 않았는지 확인한다. 4. 조건을 모두 만족하면 인접 노드 adj.idx를 방문처리 후에 i에서 출발하고 다시 돌아올 때까지 필요한 비용 sum에 인접 노드까지의 비용 adj.cost를 더해준다. 5. DFS를 수행할 때마다 start와 sum을 갱신하고 메소드를 빠져나올 때 다음 경우의 수를 확인하기 위해서 백트래킹을 수행한다. 6. target 노드를.. 2022. 6. 30.
[BOJ] 백준 2210번 - 숫자판 점프(with Java) 알고리즘 가능한 경우의 수를 찾는 문제이므로 정답 출력용 집합을 만들어준다. 각 위치에 대한 값이 모두 다를 수도 있고 이전에 방문한 위치를 재방문할 수 있으므로 전체에 대해서 DFS를 시작한다. 6자리 숫자를 만들어야하므로 다음 DFS를 수행할 때마다 nextVal을 통해서 값을 갱신하고 depth+1을 통해서 자릿수를 갱신한다. depth가 6이 되면 answer에 값을 추가하고 반환한다. 모든 위치에 대해서 위의 과정을 반복한 후에 answer의 크기를 출력한다. 소스코드 문제링크 2210번: 숫자판 점프 111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 21211.. 2022. 6. 30.
[BOJ] 백준 4963번 - 섬의 개수(with Java) 알고리즘 입력에 의해 프로그램의 종료가 결정되므로 while(true) 안에서 값을 입력받고 검사한다. 값이 유효하다면 각각의 위치에 대해서 값이 1이고 방문하지 않았는지 확인하고 DFS를 시작한다. 각 위치에 대해서 DFS를 수행한 이후에 cnt를 1씩 증가시키고 테스트케이스가 끝날 때마다 answer에 cnt를 추가한다. 1번에서 검사한 값이 유효하지 않으면 반복문을 탈출하고 answer에 포함된 값들을 순서대로 출력한다. 소스코드 문제링크 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 2022. 6. 30.
[BOJ] 백준 11060번 - 점프 점프(with Java) 알고리즘 미로에서의 현재 위치와 이동 횟수를 구하기 위해서 Node 클래스를 정의한다. 0번 이동한 상태에서 0번 위치에서 시작할 때 만들어지는 객체로 BFS를 시작한다. 현재 위치 idx에서 한번에 최대 arr[idx]만큼 이동할 수 있으므로 각각의 경우에 대해서 조건에 부합하는지 확인하고 탐색한다. 조건에 부합하면 방문처리해주고 다음 방문할 위치 idx와 time+1을 객체로 만들어서 큐에 넣어준다. 큐에서 꺼낸 객체의 번호가 끝 번호라면, 해당 객체의 time을 출력하고 종료한다. 소스코드 문제링크 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는.. 2022. 6. 30.
[BOJ] 백준 2667번 - 단지번호붙이기(with Java) 알고리즘 값이 1이고 방문하지 않은 각각의 위치에 대해서 방문처리해준 후에 DFS를 시작하고 types를 1 증가시킨다. DFS를 재귀적으로 수행할 때마다 cnt를 1씩 증가시키고, 재귀문을 빠져나오면 answer에 cnt 값을 추가한다. cnt를 재사용하기 때문에 cnt를 0으로 초기화해주고, 위의 과정을 모든 위치에 대해서 반복한다. answer를 오름차순으로 정렬해준 후에 types와 함께 출력한다. 소스코드 문제링크 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 2022. 6. 28.
[BOJ] 백준 2606번 - 바이러스(with Java) 알고리즘 1번 컴퓨터에서 시작하므로 방문했음으로 처리한 후에 1번에 대해서 DFS를 수행한다. DFS 이후에 visited 배열에서 값이 true인 원소의 개수만큼 answer를 1 증가시킨다. 감염된 컴퓨터의 개수에 대해서 묻고 있으므로 answer의 값이 1이상이면 answer에서 1을 빼준 후에 출력한다. 소스코드 문제링크 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 2022. 6. 28.
[BOJ] 백준 18405번 - 경쟁적 전염(with Java) 알고리즘 바이러스의 위치와 몇 초에 바이러스가 퍼졌는지 계산하기 위해서 Virus 클래스를 생성한다. 배열의 원소를 입력받을 때 값이 1이상인 경우에 대해서 grid[i][j]에 해당하는 인접 리스트에 좌표값을 갖고 있는 Virus 객체를 각각 삽입한다. 1부터 K까지의 바이러스 번호를 보유한 인접리스트로부터 좌표값을 갖고 있는 Virus 객체를 큐에 각각 추가한다. BFS를 수행하면서 다음 위치로 이동할 수 있을 때마다 좌표값과 현재 바이러스가 퍼지기까지 걸린 시간으로 Virus 객체를 구성한다. 위의 과정을 바이러스가 퍼지기까지 걸린 시간이 S인 Virus 객체를 큐에서 꺼낼 때까지 수행한다. 소스코드 문제링크 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다... 2022. 6. 28.