전체 글

스파게티 코드라도 작성하고보자❗️
Backend/Database

[MySQL] Group by, Having, Having과 Where의 차이

Group by ~ Having 절 Group by: 특정 열을 기준으로 데이터를 그룹화. group by의 기준은 여러개가 될 수도 있다. Having: 집계 함수(예: COUNT, SUM, AVG)를 사용하여 그룹화된 데이터를 필터링. Having과 Where의 차이 HAVING Clause WHERE Clause The HAVING clause checks the condition on a group of rows. (한 그룹 내에서 조건을 확인 한다) The WHERE clause checks the condition on each individual row. (모든 행에 대해 각각 조건을 확인한다) The HAVING is used with aggregate functions. (집계 함수와 함..

Backend/Database

[MySQL] Date 관련 함수 정리

Date 타입 원하는 형식으로 출력하기 date_format(date, format) 날짜 %Y 4자리 년도 (1999, 2023) %y 2자리 년도 (99, 23) %M 영문 월 (January, Feburary, ..., December) %b 짧은 영문 월 (Jan, Feb, ..., Dec) %m 월 (01, 02, 03, ..., 12) %c 월 (1, 2, 3, ..., 12) %d 일 (01, 02, 03, ..., 31) %e 일 (1, 2, 3, ..., 31) %W 영문 요일 (Sunday, ..., Saturday) %a 짧은 영문 요일 (Sun, ..., Sat) %w 일주일의 몇번째 요일인가 (0: 일, 1: 월, ..., 6: 토) 시간 %k 24시 형식의 시간 (00, 01, ..

문제 풀이/알고리즘

[프로그래머스] (12984) 지형 편집

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12984 사용 언어 : JAVA 내 생각 초기 생각 // floor in [max_floor, 0] func(money, floor) { // 현재 floor를 기준으로 지형을 모두 메운다 // money1: floor까지 다 채우는 비용 money1 = fillFloor(floor); MIN = Math.min(MIN, money); // 현재 floor의 모든 지형을 삭제한다 // money2: floor를 다 삭제하는 비용 money2 = delFloor(floor); // 현재 층을 다 밀고 아래 층을 기준으로 func 반복 func(money + money2, floor-1);..

CS/자바 & 스프링

[JAVA] JVM, JVM 메모리 구조

JVM (JAVA Virtual Machine) 정의 자바를 실행하기 위한 가상머신 ARM 아키텍쳐 같은 하드웨어는 레지스터 기반으로 동작하는데 비해 JVM은 스택기반으로 동작한다. 역할 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 만듦 메모리관리, Garbage collection을 수행 구조 자바로 작성한 코드는 실행되기까지 크게 세단계를 거친다. 자바 소스코드(.java)가 작성됨 컴파일러가 소스코드(.java)를 바이트 코드(.class)로 변환 클래스 로더가 컴파일된 바이트 코드(.class)를 JVM의 실행 영역에 로드한 뒤 실행 더 구체적인 실행 과정은 접은 글을 참..

CS/자바 & 스프링

[JAVA] 변수와 메서드, 데이터 타입 (기본형, 참조형)

변수 데이터를 저장하기 위해 메모리에 공간을 만들어 할당하고, 이름을 부여한 것 클래스 변수 (Class variables) 클래스에서 선언된 변수. static 이 붙으면 클래스 변수, 클래스 메서드가 된다. (아무것도 없으면 인스턴스 변수, 인스턴스 메서드가 됨) 클래스가 로딩될 때 클래서 변수가 생성되고 JVM에 의해 클래스가 메모리에 올라가면 초기화 됨. 클래스 변수는 언제라도 바로 사용할 수 있고 프로그램 종료까지 유지된다. 모든 인스턴스가 공통된 값을 공유할 때, 인스턴스를 생성할 필요가 없는 값을 저장할 때 사용. JVM 메모리의 method 영역에 올라간다. 인스턴스 변수 (Instance variables) 클래스에서 선언된 변수. 클래스의 인스턴스를 생성할 때 만들어진다. 따라서 인스턴..

CS/알고리즘

[알고리즘] 최소 신장 트리, MST(Minimum Spanning Tree), Prim, Kruskal

최소 신장 트리, MST (Minimum Spanning Tree)개념신장 트리(spanning tree): 그래프에서 모든 정점에 대한 최소한의 연결만을 남긴 최소 연결 부분 그래프.최소 신장 트리(minimum spanning tree): 신장 트리 중 간선의 가중치 합이 가장 작은 트리특징(n-1)개의 간선만을 사용하며 간선의 가중치 합이 최소여야 한다.사이클이 없어야 한다. (사이클이 존재 == 한 곳으로 도달하는 경우가 두 개 이상 존재 != 최소한의 연결)그리디 기법으로 최적의 해를 구할 수 있다. 관련 알고리즘Kruskal's Algorithm작동그래프의 모든 간선의 집합 E을 만든다.E가 비어있지 않을 때까지 아래를 반복한다.E의 간선들 중 가중치가 최소인 간선을 지운다.삭제된 간선이 가리..

문제 풀이/알고리즘

[백준] (1167) 트리의 지름

링크 : https://www.acmicpc.net/problem/1167 사용 언어 : JAVA 문제 설명 짧은 하소연 🥲 더보기 이 문제도 정말..^^ 어이없는 실수로 근 이틀을 고민했었다. 정석대로 짠 것 같은데 왜 안되지? 다른 사람의 소스코드를 참고해봐도 내 코드랑 다른 게 없었다. 심지어 그 사람은 Scanner 쓰고 통과했는데 난 BufferedReader 썼는데도 안됐다ㅋㅋㅋ 그래서 뭐가 다른거지... 하고 코드 한줄씩 바꾸면서 계속 돌려봄 ㅋㅋㅋ 내가 이 문제 골2에서 골1로 올려버리겠단 마음으로 함. 근데 나중에서야 내 문제를 알게 되었고 내가 멍청이라는 걸 깨달았다. 내 생각 초기 생각 플로이드 와샬 처음에는 든 생각은 플로이드 와샬(Floyd Warshall)이었다. 골드 2라 안될..

Backend/JPA

[JPA] 상속 관계 매핑

상속 관계 매핑 전략 상속 관계 매핑이란 객체의 상속 구조와 DB의 슈퍼-서브타입 관계(아이템-영화/책/앨범 관계)를 매핑하는 것. 객체는 상속관계가 존재하지만 대부분의 RDB는 상속 관계가 없다. 이것을 슈퍼-서브타입 관계라는 모델링 기법으로 나타내 주는 것. 슈퍼-서브타입 자세히 DB모델링 - 관계 (슈퍼-서브타입) 논리 모델 → 물리 모델 구현 세가지 @Inheritance(strategy=InheritanceType.XXX) stategy 설정 JOINED SINGLE_TABLE(=default) : 단일 테이블 전략 TABLE_PER_CLASS @DiscriminatorColumn(name="DTYPE") 부모 클래스에 선언. 하위 클래스를 구분하는 용도의 컬럼을 생성함. (DTYPE 컬럼에 영..

Backend/JPA

[JPA] 연관 관계 매핑

연관 관계 정의 규칙 1. 방향 (단방향, 양방향) DB 테이블은 외래 키 하나로 양 쪽 테이블 조인이 가능하기 때문에 단방향, 양방향 나눌 필요가 없다. 그러나 객체는 참조용 필드가 있는 객체만 다른 객체를 참조할 수 있다. 그래서 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 있으면 단방향, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 한다. 무조건적인 양방향 매핑은 복잡성을 증가시키고 유지 보수도 어렵게 만들기 때문에 기본적으로 단방향 매핑을 사용하되 역방향 객체 탐색이 반드시 필요한 경우에 추가하는 것이 바람직하다. 고객(Member) 객체와 주문(Order) 객체가 있을 때, 고객이 주문한 내역을 모두 확인하기 위해서는 고객 객체에 주문을 참조할 수 있는 필드가 필요하다..

Backend/Testing

SpringBoot + JUnit으로 JPA 테스트하기 (mysql, mongodb)

1. build.gradle 설정 dependencies { ... // Junit5 testImplementation 'org.junit.jupiter:junit-jupiter' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } test { useJUnitPlatform { includeTags 'fast' excludeTags 'slow' } } build.gradle의 dependencies와 test에 위의 코드를 추가한다. 2. application.yml 설정 원하는 DB를 연결하면 된다. 나는 MySQL과 Mongo..