TIL(Today I Learned) 53

TIL - 댓글을 가져올 때 순환 참조 발생

Todo 프로젝트에 댓글 기능을 추가하면서 순환 참조 문제가 발생했다.테스트 코드에서는 문제가 없었지만 swagger에서 테스트를 하려고 보니 Response Example Value에 문제가 있는 게 보였다.comments 내 todo에 comments가 다시 들어가 있어서 순환 참조가 발생할 코드였다. [Execute] 버튼을 누르면 예상대로 다음과 같이 순환참조 되면서 중복되는 많은 데이터가 출력된다. 서버 로그에는 다음과 같은 예외 메시지가 출력된다.2024-05-13T20:25:33.474+09:00 WARN 12560 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Ignoring exception, response comm..

JPA(Java Persistence API)의 이해 2

JPA의 Entity Manager영속성 컨텍스트(Persistence Context)를 두어 Entity를 관리하는 주체@PersistenceContext 어노테이션을 통해 주입하거나 생성자 주입을 했을 시 자동적으로 주입 됨import org.springframework.stereotype.Serviceimport jakarta.persistence.EntityManagerimport jakarta.persistence.PersistenceContext@Serviceclass MyService { @PersistenceContext private lateinit var entityManager: EntityManager}EntityManager는 여러 종류의 함수를 지원하여, Entity의..

JPA(Java Persistence API)의 이해 1

JPA(Java Persistence API)ORM의 한 종류, Java 및 Kotlin의 객체를 사용해 DB를 쉽게 조회, 조작할 수 있도록 해 줌 ORM(Object-Relational Mapping)객체와 관계형 DB 간의 매핑을 담당별도의 SQL 쿼리를 작성하지 않아도 객체를 DB에 저장 및 조회 가능객체를 활용하므로 객체 지향 프로그램 가능 및 재사용성 증대DB에 종속적이지 않음(DB 변경 시 코드 최소화)필요에 따라 데이터를 캐싱하므로 효율적인 데이터 조회 가능 ORM 개념 학습 러닝 커브 有복잡한 쿼리나 특수한 DB 기능을 사용하는 경우 직접 SQL 작성이 효율적JDBC, Hibernate, JPA, Spring Data JPAJDBC(Java Database Connectivity)Java..

TIL - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

처음 작성한 틀린 쿼리SELECT month(start_date), car_id, count(car_id) AS recordsFROM car_rental_company_rental_historyWHERE car_id IN ( SELECT car_id FROM car_rental_company_rental_history WHERE start_date BETWEEN '2022-08-01' AND '2022-10-31' GROUP BY 1 HAVING count(car_id) > 4) GROUP BY 1, 2ORDER BY 1, 2 DESC 서브 쿼리의 where절에 조건에 맞게 대여 시작일(start_date)이 2022년 8월 ~ 2022년 10월의 자동차 ID만을 필터링했고 그..

Baekjoon 구간 합 구하기 4 문제를 풀면서 삽질하기

문제 링크 : https://www.acmicpc.net/problem/11659 처음 작성한 코드는 다음과 같고 결과는 시간 초과다.fun main() { val countInput = readln().split(" ").last().toInt() val array = readln().split(" ").map { it.toInt() }.toIntArray() val sumArray = intArrayOf(0, *array) for (i in 1..array.size) { sumArray[i] = sumArray[i - 1] + sumArray[i] } for (i in 1..countInput) { val input = readln().spli..

숫자 야구 게임을 구현하면서 다시 객체 지옥에 빠지다.

Kotlin으로 숫자 야구 게임을 구현했다.https://github.com/hellou8363/week3 첫 시작은 각자의 역할을 하는 객체를 만들기 위한 많은 클래스로 시작했다.난수를 생성하는 클래스힌트를 갖고 있는 enum 클래스게임 이력을 저장하는 클래스사용자에게 출력되는 내용들을 담은 클래스입력값 검증을 위한 클래스사용자의 입력값과 정답을 비교하는 클래스클래스를 많이 생성하게 된 첫 번째 이유는 이다.숫자 야구 게임 안에서 협력하는 등장인물들을 보자면 내 주관으로는 위와 같이 나누어지기 때문에 클래스가 많아질 수밖에 없었고 다시 클래스 지옥에 빠질 수밖에 없었다. 두 번째 이유는 클래스는 설계도이고 인스턴스(객체)는 제품이라는 것이다.클래스가 설계도라면 난수를 생성하는 기계를 만들기 위해 당연히..

계산기 프로젝트 코드 수정 및 예외 처리

단순하게 시작했던 계산기 프로젝트에 문제점들이 생기면서 코드를 수정하고 예외가 발생하는 부분들을 찾아 예외 처리를 하면서 생각보다 시간을 많이 쓰게 되었다. 다음은 변경된 사항이다.모든 것은 객체라고 생각해서 만들었던 단순 안내 문구들을 담았던 클래스를 삭제계산할 값들을 저장하는 클래스에서 입력값에 대한 검증을 하는 부분을 제거검증만을 담당하는 클래스를 생성검증 후 바로 계산을 시작하면 저장을 할 필요가 없으므로 저장을 담당하는 클래스 삭제모든 값을 받아서 계산하는 방식에서 두 개의 값만 받아서 계산하는 방식으로 변경계산 방식 변경으로 인한 main 함수에 반복문(while) 추가 - 모든 값의 계산이 끝날 때까지 반예외 처리 추가0으로 나누는 경우 - 이 부분은 식을 검증하는 과정에서 처리할 수 없었고..

TIL - Kotlin에서 main 함수 실행 시 LinkageError 발생

문제 없이 실행되던 main 함수가 갑자기 다음과 같은 에러 메시지를 띄우면서 실행이 되지 않았다. 오류: 기본 클래스 lv1.MainKt을(를) 로드하는 중 LinkageError가 발생했습니다. java.lang.UnsupportedClassVersionError: lv1/MainKt has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0 [파일] → [프로젝트 구조] → [프로젝트 설정] → [프로젝트] → [SDK]를 확인한다. 위와 같은 에러가 발생한..

SQL - 날짜에 관한 group by 문제

해당 문제는 프로그래머스의 Level 3 SQL문제 중 group by에 대한 문제이다.https://school.programmers.co.kr/learn/courses/30/lessons/157340 이 문제에 대해 내가 생각한 풀이는 다음과 같다.자동차 ID 별로 max를 이용해 최근 대여 시작일과 대여 종료일을 가져온다.두 날짜 사이에 '2022-10-16'이라는 특정 날짜가 있다면 현재 대여중이고 아니라면 대여가 가능한 상태이다.위 풀이대로 쿼리를 작성했고 결과는 오답이다.SELECT car_id, CASE WHEN '2022-10-16' BETWEEN start_date AND end_date THEN '대여중' ELSE '대여가능' END availabil..

두 번째 Kotlin 계산기 구현 - 객체지향에 대해 생각하기

두 자리 단순 계산에 이어 이번에는 키보드로 수식을 입력하면 연산 후 값을 출력해주는 계산기를 만들어 봤다.계산기 프로그램을 실행하면 다음 이미지와 같이 작동된다. 코드는 깃허브에 올려져 있어서 링크만 첨부한다.https://github.com/hellou8363/kotlin-individual-assignment/tree/main/week2 동작 방식은 다음과 같다. (이것도 README에 작성되어 있다.)Guidance 클래스의 usageGuide 함수가 계산기 사용에 대한 안내를 출력하고 키보드 입력을 받는다.입력 받은 값을 Storage 클래스의 save 함수에 전달한다.save 함수는 입력 받은 값이 다음에 해당할 때 Guidance 클래스의 errorGuide 함수에게 전달..