목록분류 전체보기 (129)
YS's develop story
^ 시작을 의미함 ex) ^[.] ->.로 시작한다면.. String string = "...!@BaT#*..y.abcdefghijklm"; string = string.replaceAll("^[.]", "X"); System.out.println(string); // -> X..!@BaT#*..y.abcdefghijklm ^a -> a로 시작한다면.. String string1 = "apple"; string1 = string1.replaceAll("^a","X"); System.out.println(string1); // -> Xpple; 주의할 점은 괄호 [] 안에 ^가 있다면 부정의 의미로 사용됩니다. [^.] ->. 이 아니라면.. String string = "...!@BaT#*..y.abcd..
JSP, Tomcat 활용하여 MySQL 데이터 가져오기 아래 사이트에서 MySQL Connector을 plaform independent 선택 후 다운로드해줍니다. MySQL :: Download Connector/J MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0. dev.mysql.com 저는 프로젝트에서 lib폴더를 따로 생성해서 다운로드한 connector을 폴더에 넣어주었습니다. File - Project Structure Libraries 클릭 후 +를 눌러 폴더에 넣어준 mysql-connect.jar 파일을 선..
⌛ Problem Insert문을 활용하여 테이블에 1000개가 넘는 데이터를 넣으려면 어떻게 해야 할까요? Insert문을 1000번 실행하는 건 매우 비효율적으로 보입니다. 📜 Solution Procedure을 활용하면 같은 쿼리문을 반복적으로 실행할 수 있습니다. Person이라는 테이블에 아래와 같이 sql문을 활용하여 데이터를 반복적으로 넣을 수 있습니다. CREATE PROCEDURE loopInsert() BEGIN DECLARE i INT DEFAULT 1; WHILE i
⌛ Problem 동영상을 AWS S3 스토리지에 저장을 하는 API를 설계하고 TEST서버에서 API을 사용하여 제 컴퓨터에 있는 동영상을 저장하려고 테스트할 때 아래와 같은 에러가 발생했습니다. 어떻게 해결해야 할까요? 😕 📜 Solution Nginx의 파일 업로드 크기를 설정해 주어야 합니다. 설정되지 않은 경우 1M가 파일의 경우 에러가 발생하게 됩니다. 아래와 같이 Nginx의 허용 사이즈를 변경할 수 있습니다. 우선 설정 파일을 열어 줍시다. vim /etc/nginx/nginx.conf http에 해당하는 블록에 아래와 같이 허용 제한을 설정해 줍니다. http { ... .. client_max_body_size 100M; ... .. . } 위와 같이 설정을 맞춘 후, Nginx를 재시..
🥝 MySQL 시간 차이 계산하기 (TIMESTAMPDIFF 함수) ⌛ Problem 쿼리를 작성하다 보면 시간 차이를 활용해야 하는 경우가 존재합니다. 예를 들어 예약시간 30분 전에는 예약을 불가능하도록 막아야 한다거나 특정 이벤트일이 현재부터 얼마나 남았는지 등등의 경우가 존재할 것입니다. 이런 경우에는 어떻게 쿼리를 작성해야 할까요? 😕 📜 Solution TIMESTAMPDIFF라는 함수를 활용하면 매우 쉽게 시간 차이를 계산할 수 있습니다. SELECT TIMESTAMPDIFF(HOUR,'2021-08-22 11:00','2021-08-22 14:00') AS dayCount; SELECT TIMESTAMPDIFF(시간 단위, '날짜 1', '날짜 2') AS 이름; 위와 같은 쿼리를 통해서 ..
👩💻 다익스트라 알고리즘 정리 with Python 🥝 다익스트라 알고리즘 (Dijkstra Algorithm)이란? 두 노드를 잇는 가장 짧은 경로를 찾는 문제(가중치 합이 최소가 되도록 하는 경로를 찾는 문제)에서 하나의 정점에서 다른 모든 정점 간의 각각 가장 짧은 거리를 구하는 알고리즘입니다. 첫 정점을 기준으로 연결되어 있는 정점들을 추가해 가며, 최단 거리를 갱신하는 기법입니다. 우선순위 큐를 활용하여 다익스트라 알고리즘을 구현해 보겠습니다. 1. 초기화 첫 정점을 기준으로 배열을 선언하여 첫 정점에서 각 정점까지의 거리를 저장합니다. 초기에는 첫 정점의 거리는 0, 나머지는 무한대로 저장합니다. (inf라고 표현함) 우선순위 큐에 (첫 정점, 거리 0)만 먼저 넣습니다. 2. 우선순위 큐에..
👩💻 그리디 알고리즘 (탐욕법) 정리 with Python 🥝 그리디 알고리즘 (Greedy Algorithm)이란? 1. 매 순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행해서 최종적인 값을 구하는 방식입니다. 2. 각각의 선택은 그 순간 보았을 때는 가장 좋아 보이지만 나중에는 최적의 해가 아닐 수 있습니다. 3. 즉 매 순간의 선택은 locally optimal 하지만 globally optimal하지 않습니다. 그렇기에 그리디 알고리즘으로 최적해를 얻을 수 없는 것이 존재합니다. 🍋 그리디 알고리즘 예시 1 - 동전 문제 지불해야 하는 값이 7870원 일 때 가장 적은 수의 돈으로 지불하는 방법을 그리디 알고리즘을 활용하여 구할 수 있습니다. 가장 큰돈부터 최대한 지불해야 하는 값을 채우..
👨🏼💻 알리고 카카오 알림톡 API 연동하기 (with Node js) ⌛ Problem 특정 이벤트가 일어났을 때 특정 유저에게 카카오 알림톡을 어떻게 보낼 수 있을 까요? 😕 알리고 서비스를 활용해서 Node js로 이를 구현해 보겠습니다. 📜 Solution 알리고 알리고 - 국내 최저가 문자발송 알리고 스마트문자, 단문8.4원 장문25원 그림60원 알리고 대량문자/단체문자/문자사이트/문자발송 smartsms.aligo.in:443 카카오 알림톡을 보내기 위해서는 위와 같은 사이트에 가입을 해야 합니다. 알림톡을 보내는 기능은 건당 6원 정도가 발생하는 유료 서비스입니다. 알림톡을 보내기 위해서는 카카오 채널이 등록되어 있어야 합니다. 또한 알림톡을 보내기 위해서는 템플릿을 미리 생성하여야 합니다..
👩💻 너비 우선 탐색 (BFS), 깊이 우선 탐색 (DFS) 정리 with Python 🥘 너비 우선 탐색 (Breadth-First-Search) Node 같은 레벨에 있는 Node들 (형제 Node들)을 먼저 탐색하는 방식입니다. 파이썬을 이용한 그래프 표현 코드 graph = dict() graph['A'] = ['B', 'C'] graph['B'] = ['A', 'D'] graph['C'] = ['A', 'G', 'H', 'I'] graph['D'] = ['B', 'E', 'F'] graph['E'] = ['D'] graph['F'] = ['D'] graph['G'] = ['C'] graph['H'] = ['C'] graph['I'] = ['C', 'J'] graph['J'] = ['I'] 너비..
👩💻 순차 탐색(Sequential Search)과 이진 탐색(Binary Search) 정리 🥘 순차 탐색(Sequential Search) 데이터가 담겨있는 리스트를 앞에서부터 하나씩 살펴보아서 원하는 데이터를 찾는 방법입니다. 🍀 순차 탐색 코드 def sequentialSearch(list, search): for index in range(len(list)): if list[index] == search: return True return False ☘️ 순차 탐색 시간 복잡도 찾고자 하는 값이 리스트의 맨 마지막에 있을 때, 리스트의 길이만큼 데이터를 비교해야 합니다. 따라서 시간 복잡도는 O(n)입니다. 🍳 이진 탐색 (Binary Search) 탐색할 데이터를 정확히 반으로 나누어 한쪽에..