목록전체 글 (779)
쌓고 쌓다

@Transactional을 붙이면 스프링이 AOP를 사용해서 트랜잭션을 편리하게 도와준다.스프링 AOP를 통해 프록시를 도입할 수 있다. 프록시를 붙이면 다음과 같이 동작한다.프록시를 사용해서 비즈니스 로직을 사용하는 서비스와 트랜잭션을 사용하는 객체를 분리할 수 있다. 스프링 부트를 사용하면 트랜잭션 AOP를 처리하기위한 빈들을 자동으로 등록해준다.트랜잭션 AOP는 @Transactional이 붙어있다면 트랜잭션 프록시를 적용해준다. 그러나 트랜잭션 AOP는 스프링 빈에 등록된 트랜잭션 매니저를 찾아서 사용한다.이제껏 나는 DataSource나 트랜잭션 매니저를 빈으로 등록한적이 없는데 어떻게 빈을 찾아쓴걸까? 원래라면 다음과 같이 빈을 직접 등록을 해줘야하지만@Bean DataSource dataS..
https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 방법banned_id를 반복문으로 돌며일치하는 user_id를 하나씩 밴한다. 그리고 유저들의 인덱스를 가지고밴을 당했다면 1 안당했다면 0으로 String을 만들어 중복된 밴 목록인지 체크하면된다. 전체 코드import java.util.*;class Solution { public void dfs(int idx, String[] user_id, String[] banned_id, ..
https://school.programmers.co.kr/learn/courses/30/lessons/12971 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 방법DP를 사용해서 푼다.첫번째 스티커를 뗀 경우와 안 뗀 경우의 배열을 나눠서 푼다. dp[i] : i번째 까지의 최댓값 첫번째 스티커를 뗀 배열 dp라면dp[0]의 값은 첫번째 스티커를 뗀 값이므로 sticker[0]dp[1]의 값은 첫번째 스티커를 뗀 경우 index 1의 위치에서는 스티커를 뗄 수 없으므로 1의 앞 index인 0의 값이 최대가 된다. 첫번째 스티커를 떼지 않은 배열 dp..
https://school.programmers.co.kr/learn/courses/30/lessons/12979#qna 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 방법비전파 길이가 N일때이 비전파 길이를 최소한 기지국으로 전파를 하는 기지국의 개수는비전파 길이를 기지국 하나가 전파 가능한 길이로 나누면 된다. 위의 수학적 방법을 통해 반복문으로첫번째 기지국의 왼쪽 비전파 길이를 채우고두번째 이상 기지국 i는 i-1번째 기지국의 오른쪽 전파 끝 위치를 계산해서i 기지국의 왼쪽 전파 끝과 i-1번째 기지국의 오른쪽 전파 끝 위치 사이의 길이를 계산해서사..
https://school.programmers.co.kr/learn/courses/30/lessons/42884# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 방법진출 지점을 기준 오름차순 정렬한다.다음 차량의 진출 시점은 현재 차량의 진출 시점보다 같거나 크다가 보장된다.그럼 다음 차량의 진입 시점을 가지고 현재 카메라로 찍을 수 있는지 없는지 판별할 수 있다.첫 카메라는 첫 차량의 진출 지점에 설치한다.다음 카메라의 설치 필요는 현재 카메라로 다음 차량의 진입을 찍을 수 없을때 설치한다. 전체 코드import java.util.*;class Sol..
https://school.programmers.co.kr/learn/courses/30/lessons/12987#qna 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 방법최대 점수를 얻기 위해서상대가 내는 숫자 카드이상이면서 최대한 가까운 숫자 카드를 내야한다.그래야지 내가 가진 큰 숫자의 카드는 또 다른 상대의 큰 숫자 카드를 이기는데 사용할 수 있기 때문이다. A와 B의 숫자 카드를 오름차순으로 정렬한다.A의 숫자 카드를 반복문으로 끝에서부터 돈다.그럼 A가 가진 가장 큰 숫자 카드순으로 반복문을 돌텐데이때 B가 가진 가장 큰 숫자의 카드와 비교하..

보통 애플리케이션 구조는 다음과 같이 3가지 계층으로 나눈다.서비스 계층에서는 비즈니스 로직을 담당하며 특정 기술에 의존하지 않고 순수 자바 코드로 작성한다.데이터 접근 계층에서는 JDBC, JPA와 같은 기술로 DB에 접근하는 코드를 작성한다. 서비스 계층에서 JDBC 트랜잭션을 사용하기위한 코드는 다음과 같다.public void somethingWork() { Connection connection = dataSource.getConnection(); try { connection.setAutoCommit(false); // 트랜잭션 시작 bizLogic(); // 비즈니스 로직 connection.commit(); } catch (Excepti..

우리가 DB 커넥션을 획득할때 어떤 과정을 거칠까?애플리케이션은 DB 드라이버를 통해 커넥션을 조회.DB 드라이버는 DB와 TCP/IP 커넥션 연결을하며 이때 3-way-handshake 같은 동작들이 발생.DB 드라이버는 TCP/IP 커넥션 연결되면 ID/PW 같은 부가 정보들을 DB에 전달.DB에서 ID/PW를 통해 내부 인증을 거치며 내부에 DB 세션을 생성한다.DB는 DB 드라이버에게 커넥션 생성 완료를 응답.DB 드라이버는 커넥션 객체를 생성해서 애플리케이션(클라이언트)에 반환. DB가 필요할때 마다 커넥션을 맺고 끊음의 반복은 시간이 많이 드는 일이다.그래서 커넥션을 미리 생성해서 두고두고 사용하는 방법이 커넥션 풀이다.커넥션 풀에 커넥션들은 DB와 TCP/IP 커넥션이 맺어진 상태로 보관되어..