공부 기록

DB 격리수준, 스프링의 트랜잭션
트랜잭션 일이 처리되기 위한 가장 작은 단위로 여러 개의 트랜잭션이 모여서 하나의 트랜잭션으로 묶일 수도 있다. 이걸 서비스라고 부른다. DB 격리수준 오라클, MySQL의 격리수준 전략이 다르다. 1. 오라클 오라클에서는 DB 격리수준 전략으로 READ COMMIT을 사용한다. COMMIT된 것만 READ 한다는 뜻! 이 상황에서 B가 empno가 11번을 찾으면 kim을 찾게 된다. 왜냐하면 오라클은 READ COMMIT 전략이라서 커밋된 것만 READ하기 때문이다. update문으로 kim이 park으로 update되긴 했지만 commit이 되지 않았기 때문에 이 타이밍에 11번을 찾으면 kim을 찾게 된든 것이다. 만약 이 이후에 A가 commit을 해준 후 B가 select 11번을 하게 되면 ..
메인화면 구성
1. 메뉴 부트스트랩 : https://www.w3schools.com/bootstrap4/bootstrap_get_started.asp 구글에서 만든 디자인 : https://materializecss.com/getting-started.html 여기선 부트 스트랩을 이용할 예정 bootstrap4 - navbar - Collapsing The Navigation Bar 복사 후 src/main/webapp/WEB-INF/views/index.jsp에 붙여넣기 controller 패키지의 BoardController를 만든 후 index 경로 설정 @Controller public class BoardController { // http://localhost:8000/blog 와 http://local..
스프링 기본 파싱 전략과 JSON 통신
1. Get 요청 (Select) 주소에 데이터를 담아 보낸다. http://localhost:8000/blog/dummy/user?username=key body로 데이터를 담아 보내지 않는다. -> body가 없음 2. Post, Put, Delete 요청 - 데이터를 변경 데이터를 변경 (Insert, Update, Delete) 데이터를 담아 보내야 할 양이 많다. 회원가입 시 username, pssword, email, address, createDate 등등.. Post 요청 시에는 form 태그를 사용해서 method='Post'로 하면 된다. 그러나 form 태그는 전부 데이터의 형태가 (key=value)이고, GET, POST 시에만 가능하므로 다른 경우엔 자바스크립트로 요청해야 한다..

BOJ 2470 - 두 용액 (투 포인터)
https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net - 서로 다른 두 용액을 더해서 합이 최대한 0에 가깝게 만드는 문제 - 산성 용액 (1 ~ 10억) - 알칼리성 용액 (-10억 ~ -1) 아이디어 기존의 이분탐색 풀이법을 생각해보면 먼저 용액들을 정렬을 해준 후 이분탐색을 통해 답을 구했었다. 새로운 관점으로 투 포인터를 활용해서 풀이를 해보자 포인터 L과 R을 사용한다. L은 제일 작은 원소(최소)를 가리키..
BOJ 2230 - 수 고르기
https://www.acmicpc.net/problem/2230 2230번: 수 고르기 N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 www.acmicpc.net N개의 정수로 이루어진 수열 A (1 ≤ N ≤ 10만) 수열 A의 각 원소는 (0 ≤ |A[i]| ≤ 10억) 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우 (0 ≤ M ≤ 20억) 아이디어 배열 A에서 두 수를 골라서 차이가 M 이상인 경우를 찾기 위해 먼저 모든 경우의 수를 생각해 봤다. 배열 A를 오름차순 정렬 후 이중 for문으로..
BOJ 15565 - 귀여운 라이언
https://www.acmicpc.net/problem/15565 15565번: 귀여운 라이언 꿀귀 라이언 인형과, 마찬가지로 꿀귀인 어피치 인형이 N개 일렬로 놓여 있다. 라이언 인형은 1, 어피치 인형은 2로 표현하자. 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의 www.acmicpc.net 인형 총 N개 (라이언 인형 K개 어피치 인형 N-K개 ) (1 ≤ K ≤ N ≤100만) 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의 크기 아이디어 연속 부분 수열에 관한 문제이므로 투 포인터 알고리즘으로 먼저 접근해보았다. L과 R 포인터를 설정한 후 R 포인터를 라이언 인형이 K개가 되도록 옮겨준 후 답을 갱신한다. 그 후 L 포인터를 다음 라이언 인형까지 옮겨준 후..
delete 테스트, Exception 처리
delete 테스트 @DeleteMapping("/dummy/user/{id}") public String delete(@PathVariable int id) { userRepository.deleteById(id); return "삭제되었습니다. id: " + id; } 요롷게만 해도 삭제는 되겠지만 없는 데이터의 삭제를 요청하게 되면 에러가 발생하기 때문에 위험한 코드이다. @DeleteMapping("/dummy/user/{id}") public String delete(@PathVariable int id) { try { userRepository.deleteById(id); } catch (EmptyResultDataAccessException e) { return "삭제에 실패하였습니다. 해당..

update 테스트, JPA 영속성 컨텍스트
update 테스트 id와 username은 수정하지 않고, password와 email만 수정할 수 있도록 한다. 기존에 Insert 테스트에서는 폼태그로 데이터를 받아왔는데 이번에는 JSON 데이터를 받는 방식으로 테스트 해본다. JSON 데이터를 받아올 때에는 @RequestBody를 사용한다. @RequestBody를 사용하면 json 데이터를 요청했을 때 MessageConverter의 Jackson 라이브러리가 Java Object로 변환해서 받아준다. // id와 username은 수정 X, password, email만 수정 // GetMapping과 주소가 겹칠 것 같지만 구분한다. @PutMapping("/dummy/user/{id}") public User updateUser(@Pat..
![[Algorithm] Two Pointers](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmJL4N%2FbtrCkflECIr%2F4tmVdQDmmM6GM5S2QaIXPk%2Fimg.png)
[Algorithm] Two Pointers
투 포인터 알고리즘 화살표 두 개에 의미를 부여해서 탐색 범위를 압축하는 방법 1차원 배열 위에 2개의 포인터를 만드는 경우 2개의 포인터가 모두 왼쪽에서 시작해서 같은 방향으로 이동 2개의 포인터가 양 끝에서 서로를 향해 이동 관찰을 통해서 문제에 등장하는 변수 2개의 값을 투 포인터로 표현하는 경우 투 포인터 팁 키워드 1차원 배열에서의 "연속 부분 수열" or "순서를 지키며 차례대로" 라는 말이 있으면 한번쯤 투포인터 알고리즘을 생각해볼 필요가 있다. 곱의 최소 - A x B를 최소로 하려면 A가 커지면 B가 작아져야 한다. 이 경우가 위에서 언급한 관찰을 통해서 문제에 등장하는 변수 2개의 값을 투 포인터로 설정하는 경우이다. BOJ 1806 - 부분합 https://www.acmicpc.net..

BOJ 20444 - 색종이와 가위
https://www.acmicpc.net/problem/20444 20444번: 색종이와 가위 첫 줄에 정수 n, k가 주어진다. (1 ≤ n ≤ 231-1, 1 ≤ k ≤ 263-1) www.acmicpc.net 색종이를 자를 때에는 한 변에 평행하도록 n번의 가위질을 했을 때 k개의 색종이 조각을 만들 수 있을까? n번의 가위질 (1 ≤ n ≤ 2^31-1) k개의 색종이 조각 (1 ≤ k ≤ 2^63-1) : long형 변수 아이디어 0.1초라는 적은 시간에 넓은 탐색 범위 안에서 최적의 조건을 찾아야 하므로 이분탐색으로 먼저 접근해보았다. n번의 가위질을 했을 때 k개의 색종이 조각을 만들 수 있는 지 판단해야 한다. 하나씩 해보니 아래와 같은 규칙을 발견했다. 가위질 수 = (가로로 자르는 횟..