전체 글 239

DB 락

서로 다른 세션에서 동시에 같은 데이터를 수정하게 되면 치명적인 오류가 발생한다. 이러한 문제를 방지하기 위해 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에 서 해당 데이터를 수정할 수 없게 막아야 하는데 이러한 기능을 하는게 DB 락 이라는 개념이다.   set autocommit false; update member set money=500 where member_id = 'memberA'; 세션1에서 락을 획득하고 money를 500으로 변경하고 커밋을 안했다.   SET LOCK_TIMEOUT 60000; set autocommit false; update member set money=1000 where member_id = 'memberA'; 이때 세션..

BackEnd/Database 2025.01.19

프로그래머스 - 카펫(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이번 문제에서는 입출력의 패턴을 분석하여 풀려고 했다. 가로 * 세로 = brown + yellow(가로-1)*2 + (세로-1)*2 = brown 가로 * 세로가 전체 카펫의 넓이 인데, 세로가 가로보다 더 짧기 때문에 세로값을 이용하여 소인수 분해 공식을 활용 하였다.  세로의 길이가 정해지면 가로의 길이는 자동으로 정해지므로 가로 세로의 길이를 이용하여 조건 2를 사용하여 만족 여부를 확인하고 반환 해주면 정답이 된다.import java..

프로그래머스 - Lv2 소수찾기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이 문제에서 가장 어려웠던 부분은 입력된 문자열로 만들 수 있는 숫자를 모두 구하는 것 이다. 처음에 dfs 방식을 사용하면 되겠다고 생각을 했는데 dfs를 공부한지 오래되서 다른 풀이를 참고하면서 공부했다. import java.util.*;class Solution { static Set set; static boolean[] visit = new boolean[7]; public int solution(String ..

프로그래머스 - 모의고사(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제의 요구사항만 잘 파악한다면 어려운 문제는 아니다. 하지만 내가 푼 방식은 너무 원시적이라서 정답을 받고 다른 사람 코드도 분석해 봤다. 나는 문제에서 정답의 패턴을 분석했고 입력 배열의 인덱스에 따라서 그 자리에 와야하는 값과 비교하였다. 이러한 비교 함수를 각각의 답안지에 맞게 3개 만들어서 단순비교 후 결과를 반환 하였다. import java.util.*;class Solution { public int[] solution(in..

커넥션 풀 / DataSource

커넥션 풀 데이터베이스 커넥션을 획득하기 위해서는 DB드라이버가 DB와 TCP/IP커넥션을 연결한다. DB 드라이버는 TCP/IP 커넥션이 연결되면  ID/PW와 기타 정보를 DB에 전달한다. 그 후 DB 내부인증이 완료되면 DB세션이 생성되고  DB드라이버가 커넥션 객체를 생성하여 클라이언트에 반환한다. 하지만 이러한 방법은 과정도 복잡하고 시간도 오래걸린다. 이러한 문제를 해결해주는게 커넥션 풀이다.  DB 드라이버는 필요한만큼 커넥션을 미리 생성하여 풀에 보관한다. 이때 커넥션들을 모두 TCP/IP로 DB와 연결된 상태이다.  따라서 클라이언트는 필요할때마다 커넥션을 생성하는 것이 아닌, 커넥션 풀에서 커넥션을 객체 참조로 가져다 쓰기만 하면된다. 사용된 커넥션들은 다시 커넥션 풀로 이동하여 다시 ..

BackEnd/Database 2025.01.13

프로그래머스 - 최소직사각형(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  처음에는 제귀알고리즘을 사용해서 가로 새로가 바뀐 모든 경우의 수에서 넓이의 최소값을 구하려고 했는데 너무 복잡해졌다. 이 문제를 풀면서 너무 알고리즘의 틀에만 박혀서 문제를 풀면 더욱 어려워질 수 도 있다는 것을 알게 되었다. 지금까지 문제를 보면 어떤 알고리즘을 적용 할지부터 생각하는 나 자신을 반성하게 되었다. 정해진 알고리즘을 적용하는것이 아닌 사고방식만 틀어서 적용하면 더욱 쉽게 풀 수 있는 문제가 있는데 이게 바로 그 문제이다.  ..

데이터베이스 연결, JDBC개발 - 등록, 조회, 수정 ,삭제

서버와 데이터베이스를 연결하는 방법에 대해서 공부했다. 사용된 데이터베이스 : H2    데이터베이스에 접근하기위해 필요한 정보들을 상수로 만들어 관리package hello.jdbc.connection;public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = "";}   데이터베이스에 연결하려면 JDBC가 제공하는 DriverManager.getConnection(..) 을 사용하면 된다.이렇게 하면 라이브러리..

BackEnd/Database 2025.01.12

프로그래머스 - H-Index(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42747# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ex) 0, 1, 3, 5, 6 문제에서 가장 중요한 조건은 다음과 같다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 여기서 알 수 있는 사실은 H-Index는 배열의 길이보단 작다는 뜻과, 그 중에서 h번 이상 인용된 논문이 h편 이상이라는 것 이다. 따라서 크기 비교를 위해서 오름차순 정렬을 하는것이 바람직하다.  H-I..

알고리즘/정렬 2025.01.12

프로그래머스 - 가장 큰 수(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제의 요구사항 분석을 이해하는것은 쉬웠으나, 구현이 매우 어려웠다. 주어진 숫자들로 가장 큰수를 만들기 위해서는 숫자들을 문자열로 변경하여 사전순의 역순으로 정렬한 것을 이어 붙히면 가장 큰 수가 된다. 그러기 위해서는 일단 입력 배열을 정수 배열에서 문자열 배열로 변경해줘야한다. String[] arr = new String[numbers.length]; for (int i = 0; i   그 후  문자열 배열을 조건에 맞게 ..

알고리즘/정렬 2025.01.11

JDBC란 무엇인가

JDBC란? JDBC등장 전에는 다음과 같은 어려움이 존재했다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함 께 변경해야 한다. 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습해야 한다.  JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. - 위키백과  개발자는 사용되는 데이터베이스가 변경되어도 JDBC 구현 라이브러리만 변경하면 된다. 따라서 다른 종류의 데이터베이스로 변경해도 애플리케이션 서버의 사용 코드를 그대로 유지할 수..

BackEnd/Database 2025.01.11