[데이터베이스] 간편한 로컬 DB, H2 Database not found 에러
·
데이터베이스 메모
스프링프로젝트를 진행할 때, 테스트용 로컬 DB로 H2(Server방식)를 이용한다. 사용하는 이유는 설치와 구성이 간편하기 때문이다. 간단하게 환경 구성을 소개 해보자면, 공식 사이트에서 다운로드 받고, 스크립트를 이용해 콘솔을 실행하면 된다. 처음 DB를 생성할 때만  위와 같이 URL을 지정하면 되고, URL에 지정한 위치 이미지에선 루트 디렉토리에 test.mv.db 형태로 로컬 파일이 생성된다.H2는 해당 파일에 데이터베이스 데이터를 저장하고, 불러온다. 이후에는 URL에 tcp와 localhost를 추가하여 H2 서버에 접속하면 된다. 하지만 자바를 기반으로 구현돼서 그런지 자바 특유의 딱딱한 UI와 잡에러가 많이 일어나는 느낌을 지울 수가 없다. Database not found 에러한동안 ..
[스프링부트] Builder 패턴에 대해 알게 된 점
·
스프링부트 메모
✅ 새로 알게 된 점자연스럽게 클래스의 생성자를 정의하고 바깥에 @Builder를 붙였는데 에러가 발생했다.@Entity@Getter@Table(name = "card")@Builder // ---------> 문제 발생public class Card { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @EqualsAndHashCode.Include @Column(name = "id") Long id; @Column(name = "name", nullable = false) String name; @Column(name = "email") String email; @C..
[백준] 그리디(Tree, PQ) 코멘트 모음
·
알고리즘 메모
📝 Greedy(Tree, PQ)⭕️ 1135번 : 뉴스 전하기 (골드2)문제 유형 : greedy, sort, dp, tree시간 복잡도 : O(nlogn)풀이 방식 :- 트리 정보를 인접리스트를 이용하여 저장- 재귀를 이용해서 리프 노드부터 자신의 아래 위치에 뉴스가 전해지는 데 가장 오래 걸리는 시간을 구하여 리턴- 자식 노드(직속 부하 직원)들의 직속 부하 직원 수를 배열에 저장하고 내림차순 정렬한 뒤 한 번에 한 사람에게만 전달 할 수 있기 때문에 배열의 앞에서부터 1씩 늘려가며 소요시간을 더함 (+1, +2, +3, ... , +n) (많은 부하 직원을 가진 부하 직원부터 가장 먼저 전달해야 시간 소요가 최소화)- 배열을 오름차순 재정렬한 뒤에 가장 앞에 있는 시간(가장 오래 걸리는 시간)을..
[백준] 그리디(일반) 코멘트 모음
·
알고리즘 메모
📝 Greedy(일반)❌ 11509번 : 풍선 맞추기 (골드5)문제 유형 : greedy시간 복잡도 : O(n)풀이 방식 :- 높이별 존재하는 풍선의 개수를 저장하는 dp 배열 이용- 풍선의 위치를 순서대로 입력받을 때 현재 위치보다 앞선 풍선 중에 높이가 1 높은 풍선이 존재하면 다트가 날아오면서 현재 풍선은 자연스럽게 터지게 되기 때문에 선행 높이의 풍선 수를 줄이고 현재 높이의 풍선 수를 1 증가시킴- 높이가 1 높은 선행 풍선이 존재하지 않으면 다트를 무조건 하나 더 던저야 현재 풍선이 터지기 때문에 총 다트 수를 증가시킴 ❌ 2879번 : 코딩은 예쁘게 (골드2)문제 유형 : greedy시간 복잡도 : O(n)풀이 방식 :- 첫 풀이법에서 너무 복잡하게 생각하여 3중 for문 코드를 생각했는데..
[스프링부트] GenerationType.IDENTITY vs GenerationType.SEQUENCE
·
스프링부트 메모
흔히 엔티티에 Id를 지정할 때 Auto Increment 형태로 컬럼을 지정한다. 이를 스프링부트로 구현할 땐 다음과 같이 사용해왔다.@Id@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratredValue를 지정하면 따로 지정할 필요없이 자동으로 컬럼의 값이 생성된다.이때 생성 전략을 선택해야 되는데 이를 IDENTITY로 지정하면,Auto Increment로 Id 값을 생성하는데 이 과정을 데이터베이스에게 위임한다.즉, 데이터베이스에 저장할 엔티티에 대한 영속성 컨텍스트가 생성되면 Id 값에 해당하는 컬럼이 비워져있다. 그래서 Id가 비워져있는 엔티티를 디비에 insert하고 다시 디비로부터 지정된 Id를 받아와 영속성 컨텍스트에 저장한다. 복..
Github Submodule 연결하기
·
개발 메모
⭐️ 목적백엔드 프로젝트를 새로 시작하면서, 또 다시 AWS EC2를 생성하게 되었다. 실수로 노출되면 한 순간 엄청난 과금이 이루어지는 정보들을 또 다시 관리해야했다. 서비스 코드 레포는 추후 퍼블릭으로 변경하여 포트폴리오 용도로 사용할 예정이기 때문에 중요한 설정 정보들을 관리해야했다. .env에 환경변수로 관리하거나 .gitignore를 이용해서 yml 파일 자체를 안올리는 방법도 있지만,두 방법 모두 새로 배포를 할 때마다 수동으로 추가해야 된다는 점에서 굉장히 귀찮다고 생각했다. 이러한 이유로 민감한 정보가 포함된 yml 파일들을 저장하는 레포를 따로 만들어서 Submodule로 연결하게 되었다.  ✅ 서브모듈 연결먼저 서브모듈로 활용할 레포를 생성해준다. (평소 레포 생성하는 것과 똑같이하면 ..
[알고리즘] 2024.09.29 풀이
·
알고리즘 메모
풀이 사이트: 프로그래머스 고득점 Kit! # 완전 탐색📝 모음 사전 (lv 2) - https://school.programmers.co.kr/learn/courses/30/lessons/84512* 체감 난이도 : ⭐️ - - - -- 이건 그냥 수학 문제라 기록할 것도 없다.- 완탐까지 갈 필요도 없이 그냥 경우의 수만 따지면 되는 의미 없는 문제라고 생각한다.def solution(word): answer = 0 dic = {"A":0, "E":1, "I":2, "O":3, "U":4} for i in range(len(word)): for j in range(5-i): answer += dic[word[i]] * 5 ** (j) return..
[알고리즘] 2024.09.28 풀이
·
카테고리 없음
풀이 사이트: 프로그래머스 고득점 Kit! # 완전 탐색📝 피로도 (lv 2) - https://school.programmers.co.kr/learn/courses/30/lessons/87946* 체감 난이도 : ⭐️⭐️⭐️ - -- 체감 난이도가 별 3개나 되는 건 완전 탐색을 굉장히 오랜만에 풀어서이다.- 현재 방문 가능한 모든 던전을 무작위 순서로 방문해보는 모든 경우의 수를 알아야했다.- 재귀함수를 이용해서 방문체크를 하면서 현재 피로도 상태에서 중복되지 않는 던전을 모두 방문하는 방식으로 코드를 짰더니 백트래킹 형태가 되었다.- 그래서 게시판에서 사람들의 코드를 확인해보니, 까맣게 잊고 있던 완전 탐색을 위해 백트래킹을 활용하기도 한다는 점이 떠올랐다.- 풀고나니 백트래킹 느낌이라 이후로도 ..