분류 전체보기 239

MyBatis

MyBatis는 Java에서 SQL을 보다 쉽게 다룰 수 있도록 도와주는 ORM 프레임워크이다. MyBatis는 기존의 JDBC보다 간편하게 데이터베이스와 연동할 수 있도록 SQL 매핑을 지원하며, XML 또는 애노테이션을 사용해 SQL을 작성할 수 있다. MyBatis의 장단점 장점동적 쿼리를 편리하게 작성할 수 있다.커넥션,트랜잭션과 관련된 기능을 MyBatis 스프링 연동 모듈이 자동으로 설정해준다.단점설정이 다소 복잡할 수 있다. MyBatis 사용  1. ItemMapper 생성 ItemMapper는 마이바티스 매핑 XML을 호출해주는 매퍼 인터페이스이다. SQL을 XML로 작성하면 @Mapper가 있는 인터페이스에 SQL을 자동으로 매핑시켜준다.package hello.itemservice.r..

BackEnd/Database 2025.02.08

H2 데이터베이스 포트 충돌 문제 해결 방법

h2 데이터베이스를 사용할때 Host not found가 뜨면서 실행이 안될때가 있다. 이유는 포트를 이미 사용중이기 때문이다. 따라서 사용중인 포트를 강제로 종료해주면 데이터베이스가 정상적으로 수행된다. 1. 해당 포트를 사용중인 프로세스 찾기netstat -ano | findstr :8082  2. 포트를 사용중인 프로세스 강제 종료taskkill /F /PID 프로세스아이디   3. H2 콘솔 이용해서 데이터베이스 접속

에러 일기 2025.02.08

프로그래머스 - 등굣길[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  이 문제에서 중요한건 최단 거리가 되기위한 조건이다.  목적지가 최하단의 가장 우측에 있으므로 최단 거리로 이동하기 위해서는 오른쪽으로 가거나, 아래로 가야한다. 만약 경로중 위로가거나 왼쪽으로 간다면 그것은 최단 경로에 포함이 안된다. 따라서  dp배열에 오른쪽으로 가거나 왼쪽으로 가는 경우를 저장하여 최종 목적지까지 가는 경우의 수를 더해줬다. 물 웅덩이는 dp 배열에 -1로 저장하여 방문을 막았다. import java.util.*;cl..

알고리즘/DP 2025.02.07

DB Test[@Transactional, 임베디드 모드 DB]

테스트에서의 @Transactional 테스트를 할때 테스트 후 데이터가 다시 삭제 되어야 할때가 있다. 이럴때 사용할 수 있는게 @Transactional 이다. 원래 @Transactional은 로직이 정상 수행되면 커밋되어 데이터베이스에 변경사항을 저장하지만, 테스트에서 사용될 경우 모든 로직이 트랜잭션 안에서 수행되고 테스트가 끝나면 롤백을 수행하여 테스트에서 생성되거나 변경된 데이터를 롤백시킨다.  package hello.itemservice.domain;import java.util.List;import static org.assertj.core.api.Assertions.assertThat;@Transactional@SpringBootTestclass ItemRepositoryTest { ..

BackEnd/Database 2025.02.07

JdbcTemplate

실무에서 가장 간단하고 실용적인 방법으로 SQL을 사용하려면 JdbcTemplate를 사용하면 된다.  기본 사용법 단건 조회(queryForObject)int rowCount = jdbcTemplate.queryForObject("select count(*) from t_actor", Integer.class); 단건 조회 - 숫자 조회, 파라미터 바인딩 int countOfActorsNamedJoe = jdbcTemplate.queryForObject( "select count(*) from t_actor where first_name = ?", Integer.class, "Joe"); 단건 조회 - 문자 조회 String lastName = jdbcTemplate.queryForObject( "se..

BackEnd/Database 2025.02.07

프로그래머스 - 정수 삼각형

https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   처음에는 dfs를 이용해서 문제를 해결했지만, 답은 맞게 나오나 시간초과가 발생하였다. 때문에 중복 계산을 방지하기 위해 메모이제이션 기법을 사용해야 한다. 메모이제이션 : 동일한 계산을 반복해야 할 경우 한 번 계산한 결과를 메모리에 저장해 두었다가 꺼내 씀으로써 중복 계산을 방지 import java.util.*;class Solution { int[][] dp; int answer = 0; public int solu..

알고리즘/DP 2025.02.05

프로그래머스 - 섬 연결하기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 크루스칼 알고리즘을 알면 바로 풀 수 있는 문제이다.https://developerwoohyeon.tistory.com/192 신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.developerwoohyeon.tistor..

신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)

신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.  최소 신장 트리 최소신장트리는 신장 트리중 간선의 가중치 합이 가장 작은 트리를 말한다. 알고리즘 문제에서 유용하게 사용될 수 있다.ex)섬 연결하기 (프로그래머스)전력망을 둘로 나누기 (프로그래머스)별자리 만들기 (백준 4386)네트워크 연결 (백준 1922)도시 분할 계획 (백준 1647) 최소 신장 트리 구현 최소 신장 트리 구현의 대표적인 알고리즘은 크루스칼 알고리즘이다. 크루스칼 알고리즘 과정 1) 간선은 가중치를 기준으로 오름차순 정렬한다.  2) 간선을 하나씩 살핀다. 간선을 MST에 추가했을 때 MST에..

JDBC를 이용한 반복문제 해결 - JdbcTemplate

리포지토리에서 JDBC를 사용하면 서비스계층의 순수함을 유지시키기 위해 많은 코드들이 반복되었다.커넥션 조회, 커넥션 동기화PreparedStatement 생성및 파라미터 바인딩쿼리 실행결과 바인딩예외 발생시 스프링 예외 변환기 실행리소스 종료하지만 스프링은 JDBC의 이러한 반복 문제를 해결하기 위해 JdbcTemplate이라는 템플릿을 제공한다. package hello.jdbc.repository;import hello.jdbc.domain.Member;import hello.jdbc.repository.ex.MyDbException;import lombok.extern.slf4j.Slf4j;import org.springframework.jdbc.datasource.DataSourceUtils;i..

BackEnd/Database 2025.02.04

스프링 예외 추상화

스프링은  데이터 접근과 관련된 다양한 예외를 추상화하여 제공한다.  예외의 최고 상위는 org.springframework.dao.DataAccessException 이고 그 밑은 NonTransient예외와 Transient예외로 나뉜다. NonTransient 예외 = 일시적이지 않은 오류(SQL 문법 오류, 데이터 베이스 제약조건 위배 ...)Transient 예외 =  SQL을 다시 시도했을때 성공할 가능성이 있는 예외 스프링 예외 변환기 스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다. package hello.jdbc.exception.translator;import lombok.extern.slf4j.Slf4j;import org...

BackEnd/Database 2025.02.04