목록전체 글 (232)
거인의 코딩일지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bcuzj9/btsxgn4cmhn/mHKUNwIubRvPpkHQHWrAQ0/img.png)
JPA의 N+1 문제란?? 한번 조회해야 할 것을 N개의 종류의 데이터 각각을 추가로 조회하게 되서 총 N+1 번 DB를 조회하는 문제! 언제 발생하는가 ? JPA Repository 를 활용해 인테페이스 메소드를 호출할 시! 누가 발생시키는가 ? 1:N 또는 N:1 관계를 가진 엔티티를 조회할 때! 어떻게 발생하는가 ? JPA Fetch 전략(Fetch type) 이 EAGER 전략으로 데이터를 조회하는 경우 JPA Fetch 전략(Fetch type) 이 LAZY 전략으로 전체 데이터를 가져온 이후 연관관계인 하위 엔티티를 사용할때 다시 조회하는 경우 왜 발생하는가? JPA Repository 로 find 할 때 실행하는 첫 쿼리에서 하위 엔티티까지 한번에 가져오지 않고 하위텐티티를 사용할 때 추가로..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/yGj5J/btsrZz3uRy1/BqBQ3ZJeokunBcH1s9RM7k/img.png)
영속성 컨텍스트란? JPA 를 이해하는데 가장 중요한 용어이다. 엔티티를 영구 저장하는 환경 이라는 뜻 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다. 엔티티 매니저 (EntityManager)? 영속성 컨텍스트는 논리적인 개념으로서 눈에 보이지 않는다 따라서 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 엔티티 생명주기 비영속 (new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 ( managed ) : 영속성 컨텍스트에 관리되는 상태 준영속 ( detached ) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 ( removed ) : 삭제된 상태 비영속 // ..
선언적 트랜잭션 ( @Transctional ) 소스코드에 직접 트랜잭션 관련 로직을 넣어두지 않고 비지니스 로직에서 완전히 분리 하는 방식이다 프로그래밍에 의한 트랜잭션에서 나온 단점인 트랜잭션 코드 중복문제, 소스코드 유지보수의 문제를 모두 해결 가능 트랜잭션이라는 횡단 관심사를 비지니스 로직에서 완전히 분리하기 때문에 SRP 관점에서 봤을 때도 적합하고 많은양의 트랜잭션 로직을 적용하기에도 합리적 트랜잭션의 격리 수준 (Isolation Level) DEFAULT : 데이터베이스에서 설정된 기본 격리 수준을 따른다 READ UNCOMMIT 트랜잭션에서 처리 중인, 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 Dirty Read, Non-Repeatable Read, Phantom R..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cFPxL9/btsrVunoQFl/zsdO6LK0b6XcQgYHVQgwr1/img.png)
프록시(Proxy) 란??? 사전적 의미로는 대리 의 의미이다. 내부 네트워크에서 인터넷 접속을 할 때 빠른 액세스나 안전한 통신등을 확보하기 위하여 중계서버를 "프록시서버" 라고 한다. 클라이언트와 web 서버의 중간에 위치하고 있어 대신 통신을 받아주는 것이 프록시 서버 이다. 프록시 서버의 종류 포워드 프록시 리버스 프록시 포워드 프록시 기본적으로 포워드 프록시는 클라이언트쪽의 설정을 한다. 클라이언트 대신 프록시서버가 목적 서버에 통신해 주는 구성을 포워드 프록시 라고 한다. ex) 프록시를 사용하지 않은 경우! ex2) 포워드 프록시의 경우 포워드 프록시의 장점 캐시저장(엑세스 고속화) 프록시 서버에 캐시를 저장할 수 있다 다시 동일한 페이지를 리퀘스트 했을 땐 캐시에 남아있는 정보를 클라이언트..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/uhws8/btsr4JQ4IOM/o2G8A1EhpCK7YgGKLFqYQ1/img.png)
트랜잭션이란? "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 영어로 간략히 Tx라고 표기하기도 한다. 1초당 처리할 수 있는 트랜잭션의 개수를 TPS라고 한다. 트랜잭션의 목적? 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용된다. 데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 데이터베이스 완전성(integrity) 유지를 확신할수 있다. 단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다. 이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다. 트랜잭션의 특징 원자성(Atomicity) 일관성(Consistency) 독립성, 고립성 (Iso..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/niDdE/btsrS5Ilr7n/SAzR02PBsLtfwDtBYECOAk/img.png)
class Solution { public int solution(int n) { int answer = 0; for(int i = 1; i
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bkNk8L/btsrIfEgBw1/CLJO3e2htLgjN2QnrEVc11/img.png)
class Solution { public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) { boolean answer = true; boolean result1 = true; boolean result2 = true; if(x1 != x2){ result1 = true; }else{ result1 = x1; } if(x3 != x4){ result2 = true; }else{ result2 = x3; } if(result1 != result2){ answer = false; }else{ answer = result1; } return answer; } } 빨리 풀기위해서 마구잡이로 코드를 작성하고 풀었는데 회의감이 들어서 다시 정리한..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bfUkg5/btsrUtOLjz5/1G9y3J3c2H2ZbEK8WH41q1/img.png)
class Solution { public int[][] solution(int[] num_list, int n) { int[][] answer = new int [num_list.length/n][n]; int k = 0; for(int i = 0; i < answer.length; i++){ for(int j = 0; j< answer[i].length; j++){ answer[i][j] = num_list[k++]; } } return answer; } } 우선 answer 의 배열의 길이를 맞춰준 뒤 이중for 문을 통해서 answer[i][j] 값에 도달한 후 int k 를 선언한 뒤 하나씩 추가해 주었다!
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MvBbX/btsrErrsUgR/FDJXaVn6A3Hgh2xU6sPaiK/img.png)
class Solution { public int solution(int balls, int share) { long answer = 1; int shareIndex = 1; for(int i = share+1; i
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/EnYnW/btsrEqTy3YI/O9YcWleBLttfECchkHrbS0/img.png)
class Solution { public String solution(String letter) { String answer = ""; String [] arr = letter.split(" "); String [] mose = {".-","-...","-.-.","-..",".","..-.", "--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}; String [] word = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v"..