2024/01 29

[회고][프로젝트 2~4일차] 회원가입, 로그인 기능 구현

✅ 로그인 시 JWT 토큰 발급 JWT 생성 시 쿠키 생성하여 Client의 Header에 추가 ✅ Security Role(ADMIN / USER) 나누기 페이지별 권한 처리 [앞으로 보충해야 할 일] 👉 회원가입 시 ADMIN 권한 부여 하는 방법 👉 thymeleaf-springsecurity 이용해서 권한에 따른 버튼 활성화/비활성화 처리 ✅ 간단하게 화면단 만들어서 연결 메인페이지, 회원가입, 로그인 페이지 구현(thymeleaf 이용) 저번 프로젝트때는 화면단을 React로 하면서 페이지 이동을 화면단에서 다 하다보니 화면단 만들고 ajax 쓰는데 좀 헤맸음 thymeleaf는 처음 이용해보는데 조금만 문법 잘못 쓰면 바로 에러 나서 당황했다. 근데 security랑 같이 쓰기 좋다하고, 나름..

[spring security] 로그아웃 기능 구현

로그인은 JWT 생성한 서버에서 쿠키를 직접 생성해 Client의 Header로 전달하는 방식으로 구현했다. 로그아웃은 어떻게 할 것인가? 한번 발급된 토큰은 만료될때까지 삭제가 되지 않기 때문에 쿠키에서 지워주는 방식으로 구현할 것이다. Handling Logouts :: Spring Security If you are using Java configuration, you can add clean up actions of your own by calling the addLogoutHandler method in the logout DSL, like so: Custom Logout Handler CookieClearingLogoutHandler cookies = new CookieClearingLogou..

[회고][프로젝트 1일차] 환경 세팅, API 명세서 작성, ERD 설계, 테이블 생성

오늘의 한 일 ✅ 환경 세팅 - 프로그래밍 언어: Java 17 - 빌드 툴: Gradle - 프레임워크: Spring boot 3.2.2 - 데이터베이스: MySQL 8.0.36 - ORM: JDBC - JPA ✅ API 명세서 작성 노션에 작성해둠, 계속해서 수정할 예정 - 회원가입, 로그인 - 마이페이지 - 게시물 - 댓글 - 게시물 좋아요 - 댓글 좋아요 - 팔로우 ✅ ERD 설계 ✅ DB 작업 - 테이블 및 컬럼 생성(시퀀스, PK, UNIQUE ) - FK 지정(CASCADE) 설정 👉 테이블 DROP할 때 FK 고려해서 순서 중요함! 회고 1. 개인 프로젝트는 처음이라 환경 세팅부터 결정할 것이 너무 많다. 모든 결정에는 이유가 있어야 한다. 2. 오늘 진짜 세팅 끝! 개발 하다보면 중간에 ..

Intellij - MySQL 연결 오류 (com.mysql.cj.jdbc.Driver)

✔️ 나의 개발 환경 - Java 17 - Spring boot 3.2.2 - MySQL 8.0.36 지난번 프로젝트때는 Oracle을 사용해서 이번엔 MySQL을 써보고자 설치를 끝냈다. 스프링 부트 새 프로젝트 생성해서 dependencies 등등 세팅을 다 끝내고 db연결을 해보려니까 갑자기 바보가 된 기분이었다. JDBC란? Java Database Connectivity의 약자로 자바 기반 애플리케이션과 데이터베이스에 저장된 데이터를 연결해주는 API이다. 연결을 위해서는 Connector를 다운받아 설정해주면 된다. 👉 데이터베이스와 연결하기 위해서 해야할 일 1. JDBC 드라이버 MySQL Connector를 다운받는다. MySQL 공식문서를 타고 들어가면 Connector 파일이 있다. ..

[baekjoon] 2212. 센서

✅ 문제 💡 문제 이해 최대 k개의 집중국의 수신 가능 영역 길이의 합의 최솟값을 구하는 문제 1. 센서를 묶어 k개의 집중국으로 나눔 2. 각 집중국 내의 센서 간 수신거리의 합이 최소가 되는 경우 = 집중국간 경계의 거리가 최대가 되는 경우 ✅ 풀이 문제 자체를 이해하는데 한참 걸렸다. 그리디 알고리즘 방식으로 접근하면 된다고는 생각했지만 실제적으로 구현이 좀 어려웠음 💡 문제 풀이 Point 1. 집중국이 k개일 때 집중국 경계 영역은 k-1개 2. 원점으로부터 거리 -> 오름차순 정렬 후 인근 센서 사이 거리 구하기 3. 센서 간 거리를 배열에 담고 오름차순하여 가장 큰 수 k-1개를 제외한 나머지 합을 구하기 아래에 예제 입력 2가지 경우를 모두 그림으로 그려 보았다. 각 센서간 거리를 구한 다..

[baekjoon] 10026. 적록색약

✅ 문제 💡 문제 이해 1. 섬 개수 구하기와 비슷하지만 R, G, B로 섬 구분 2. 적록색약의 경우 R, G 구분이 안가므로 R+G / B로 구분 3. 각 구역 수 count 후 출력 ✅ 나의 코드 💡 문제 풀이 Point 1. 적록색약의 여부를 isblind로 구분해서 dfs 탐색시 같이 넘김 2. dfs 탐색 시 2-1) 적록색약인 경우 B인 경우와 B가 아닌 경우를 나누어서 탐색 2-2) 적록색약이 아닌 경우 일반적인 dfs 탐색 import sys input = sys.stdin.readline sys.setrecursionlimit(10000) def dfs(x, y, color, isblind): for i in range(4): nx = x+dx[i] ny = y+dy[i] if 0

[baekjoon] 7562. 나이트의 이동

✅ 문제 원하는 위치로 나이트를 이동시킬 때의 최단 거리를 구하는 문제 최단 경로를 구하는 문제라서 bfs 방식으로 풀었다. ✅ 나의 코드 import sys from collections import deque input = sys.stdin.readline # 이동 좌표 dx = [-2, -1, 1, 2, -2, -1, 1, 2] dy = [1, 2, 2, 1, -1, -2, -2, -1] def bfs(x, y, x2, y2, visited): q = deque() q.append((x,y)) while q: currentX, currentY = q.popleft() if currentX == x2 and currentY == y2: # 이동이 끝나면 이동거리 -1 반환(현재 위치 제외) print..

[leetcode] 543. Diameter of Binary Tree

✅ 문제 - 두 정렬 리스트의 병합 이진트리에서 두 노드 간 가장 긴 경로의 길이를 출력하는 문제! ✅ 풀이 💡 Point 1. 1부터 시작해서 각 노드별로 좌, 우 서브트리를 dfs 방식으로 확인 2. 더이상 서브트리가 없을 경우 0 반환하고 부모 노드로 다시 올라감 3. 부모노드 기준 좌, 우 서브트리 확인하여 더 깊은 쪽 길이에 +1 4. 항상 최댓값을 반환하므로 가장 긴 길이를 출력할 수 있다. 출력 샘플 그림으로 그려보며 이해해 봤다. 1부터 시작하여 서브트리 순회를 각각 하는데, 2로 내려가면 또 4, 5 서브트리가 있으니 더 이상 서브트리가 없을 때까지 dfs 탐색을 한다. 서브트리가 없으면 0을 반환하며 다시 부모 노드로 올라가는데 이때 좌 우 트리깊이 중 더 깊은 값에 +1을 해준다. 2..

[baekjoon] 2493. 탑

✅ 문제 ✅ 풀이 solution 1) 힙 이용 - 시간 초과 💡 Point 1. 인덱스와 함께 리스트를 힙 정렬함(최소 순으로 정렬) 2. 조건 확인 후 1) 현재 탑보다 숫자가 커야 함(숫자가 작으면 송신 불가) 2) 최초 리스트 기준 왼쪽으로 순회한다는 말 = 현재 탑보다 인덱스가 작아야 함 3. 결과 리스트 0으로 세팅해 두고, 현재 탑의 자리에 발사한 레이저를 송신한 탑의 인덱스+1 값을 넣어줌 n = int(input()) top = list(map(int, input().split())) # 송신탑 자리번호를 매겨 최소힙으로 만들어 정렬 top_list = [(num, i) for i, num in enumerate(top)] heapq.heapify(top_list) result = [0]..

[baekjoon] 4949. 균형잡힌 세상

✅ 문제 ✅ 풀이 이 문제는 이전에 풀어본 괄호를 이용한 문제와 굉장히 비슷하다. 👇 괄호 문제 풀이 보기 더보기 [Leetcode] 20. Valid Parentheses ✅ 문제 - 유효한 괄호 이 문제는 s의 괄호 짝이 맞는 경우 true, 맞지 않는 경우 false 반환하는 문제이다. ✅ 풀이 코드 이 문제는 전형적인 스택 구조이다. 예를 들어, s가 {[]} 라면 [ 가 나중에 들 writtenbyrla.tistory.com [baekjoon] 9012. 괄호 ✅ 문제 💡 사용자에게 정수 하나를 입력받아 그 수만큼 문자열을 입력받고 괄호가 모두 쌍이 있는 경우 YES 출력(VPS에 해당), 괄호가 남는 경우 NO 출력 ✅ 첫 번째 시도 - 실패 # 파이썬에서 사용 writtenbyrla.tist..