전체 글 74

[Git] 이미 Push한 커밋 메시지 수정

1. git 파일이 있는 폴더로 이동 2. git rebase HEAD~[거슬러 올라가고 싶은 커밋 수] -i ex) git rebase HEAD~1 -i : 바로 직전 3. 에디터 진입했으면 i를 입력 -> insert 편집 모드로 전환 4. 맨 앞 첫 줄 pick을 reword로 수정 -> esc -> :wq! 5. 커밋 메세지 수정 완료 후 esc -> :wq! (저장 후 편집기 나가기) 6. 강제 push로 수정 내용 원격 저장소에 반영 git push --force git push origin [브랜치명] -f

Git 2023.01.16

[Spring] JPA ddl-auto 옵션

spring.jpa.hibernate.ddl-auto만 따로 정리하는 이유 매번 update로 쓰고 살았는데.. 개인프로젝트를 구상하면서 알게 된 점 운영 서버는 update를 사용하면 안된다고 한다 제발 제대로 알고 쓰렴 !!!! (네..) 1. create 기존 테이블을 삭제한 후 다시 생성 drop -> create 운영 서버에서 이걸 쓴다 ? 싹다 날아가고 난리 나겠죠? 2. create-drop create을 하나 종료 시점에 테이블을 drop한다 운영 서버에서 이걸 쓴다 ? 1번과 이하동문 3. update 내가 뭣도 모르고 매번 썼던 것.. 변경된 부분만 반영한다 개발 초기 단계나 테스트 서버에서만 쓴다고 한다 4. validate 엔티티와 테이블이 정상 매핑되었는지만 확인한다 5. 그냥 안..

Spring 2023.01.05

[Spring] Swagger로 API 문서 자동화하기

Swagger REST API를 설계, 빌드, 문서화 및 사용하는 데 도움이 되는 OpenAPI 사양을 중심으로 구축된 오픈 소스 도구 세트 Spring REST Docs보다 Swagger은 적용하기 훨씬 쉽다 그리고 이쁘다 (이쁘면 다야) Spring REST Docs는 테스트를 돌리면서 성공하는지 실패하는지를 확인하지만 Swagger은 문서 화면에서 API를 바로 테스트 할 수 있다 따라서 Spring REST Docs의 장점, Swagger의 장점만 뽑아 둘이 같이 사용한다고 한다 1. dependency 추가 (gradle) implementation 'io.springfox:springfox-boot-starter:3.0.0' implementation 'io.springfox:springfox..

Spring 2023.01.04

[Spring] Spring Security

Spring Security 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 스프링 시큐리티는 필터(Filter) 흐름에 따라 처리한다는 점 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 일일이 보안 관련 로직을 작성하지 않아도 된다 굿! 참조 : https://mangkyu.tistory.com/76 [SpringBoot] Spring Security란? 대부분의 시스템에서는 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 한다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능 mangkyu.tistory.com 1. dependen..

Spring 2022.12.19

[Spring] JavaMailSender 이메일 전송하기

JavaMailSender MailSender 인터페이스를 상속받고 본문에 html 메일을 작성할 수 있도록 기능이 추가된 인터페이스 MimeMessage를 정의해 본문이 html로 이루어진 메일을 발송할 수 있다 이메일 인증 등을 편리하게 할 수 있다는 점 1. pom.xml 파일에 dependency 추가 (Maven) org.springframework.boot spring-boot-starter-mail 2. 환경 파일에서 mail에 대한 설정 spring: mail: host: smtp.gmail.com port: 587 username: h2ju1004@gmail.com password: xxxxxxx properties: mail: smtp: starttls: enable: true user..

Spring 2022.12.09

[DB] 윈도우 MariaDB utf8 설정 방법

https://ryureeru.tistory.com/4 [DB Error] 한글 입력 오류 SQL Error [1366] [22007]: (conn=20) Incorrect string value why ? 한글은 utf-8을 사용해야 한다는 점 !! 1. 기본 변수 확인 2. 테이블 인코딩 값 확인 3. 컬럼 인코딩 값 확인 해결 방법 테이블 기본 인코딩 값을 utf-8 ryureeru.tistory.com 예전에 my.ini 파일을 건드리지 않고 끝냈던 게 생각나서 .. !! 정리합니다 ~ 1. MariaDB 서비스 중지 2. mariadb-x.x.x\data\my.ini 파일 기존 거에서 추가해 주세요! [mysqld] init_connect="SET collation_connection = utf..

DB 2022.12.06

[알고리즘] 최소 신장 트리

최소 신장 트리 Minimum Spanning Tree (MST) 그래프 상의 모든 노드들을 최소 비용으로 연결하는 방법 1. 크루스칼 (Kruskal) 간선 중 최솟값을 가진 간선부터 연결한다 (간선들 정렬하고 시작) 사이클이 발생하면 다른 간선을 선택한다 간선 수가 적을 때 사용 알고리즘 복잡도 : O(간선 수 * log(간선 수)) static int parents[]; public int kruskal(int[][] data, int v, int e) { int weightSum = 0; // 간선 가중치 오름차순 정렬 Arrays.sort(data, (x, y) -> (x[2] - y[2])); // union-find 배열 초기화 parents = new int[v + 1]; for (int ..

Coding/알고리즘 2022.11.08

[알고리즘] 최단 경로 알고리즘

최단 경로 알고리즘 가중 그래프 상에서 두 노드를 연결하는 가장 짧은 경로를 찾는 방법 지도 경로 탐색, 네트워크 구축에 드는 비용을 최소화 하는 데에 사용 1. 다익스트라 (Dijkstra) 한 노드에서 모든 노드로의 최단 경로를 구할 수 있다 간선에 음의 가중치가 없어야 한다 알고리즘 복잡도 : O(간선 수 * log(노드 수)) class Node { int to; int weight; public Node(int to, int weight) { this.to = to; this.weight = weight; } } public void dijkstra(int v, int[][] data, int start) { ArrayList graph = new ArrayList(); for (int i = ..

Coding/알고리즘 2022.11.07

[알고리즘] 다이나믹 프로그래밍

다이나믹 프로그래밍 (Dynamic Programming) 동적 계획법 어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고, 과거에 구한 해를 활용하는 알고리즘 즉, 답을 찾아가는 과정에서 계산된 결과를 기록하고 재활용하며 문제의 답을 구하는 방식 중간 계산 결과를 기록하기 위한 메모리가 필요 한 번 계산한 부분을 다시 계산하지 않기 때문에 속도가 빠름 타뷸레이션(Tabulation) : 상향식 접근 방법 메모이제이션(Memoization) : 하향식 접근 방법 원래 재귀 호출로 구현한 피보나치 수열을 DP를 이용해 구현해보자 public static int fib(int n) { if (n

Coding/알고리즘 2022.11.07