java 2

Spring Boot에서 save 메소드의 동작 원리

entity 가 이미 영속성에 등록 되있으면 merge를 없으면 persist 를 실행하게 돼있다. merge 는 해당 ID 가 영속성에 존재하면 update 를 수행. 없으면 INSERT 를 수행한다. 여기서 주의할 점은 ID 가 없을 경우 SELECT 를 시도하는 경우가 있을 수 있다는 것. 기본키 생성 전략이 없을 경우 (애플리케이션에서 생성) SELECT 를 수행한 후, INSERT 를 실행하기에 쿼리가 2배로 실행됨. persist 의 경우 INSERT 쿼리만 실행 됨. 즉, 정리하면 merge 는 기존의 객체가 존재할 경우 사용하면 좋고, persist 는 새로운 객체를 생성할 때 좋음. 출처 : https://insanelysimple.tistory.com/155

개발 지식 2020.12.07

Json을 읽어올 때 BufferedReader.readLine() 사용을 조심해야하는 이유

서버로부터 Json을 읽어올 때 BufferedReader의 readLine()을 사용하였다. 콘솔에 잘 가져오나 찍어보아도 Json 데이터 모두를 가져오기에 이상이 없는 줄 알았다. 하지만 팀장님이 말씀하시길 이 메소드를 사용하면 문제가 발생할 수도 있다고 하였다. 한 줄로 서버가 Json을 전송하였기에 readLine()을 사용할 경우 한 줄을 읽을 때 끝까지 읽을 수 있는 것이지 이렇게 줄을 분리하여 Json 데이터를 보낼 경우 readLine()을 사용하면 첫 줄 데이터("{")만 읽게 되는 문제가 발생한다. 따라서 사전에 이러한 문제를 방지하기 위해서는 다른 방법을 사용할 필요가 있다. 위의 예시와 같이 만들어 주어 한 줄씩(readLine이기에 다음 번에 호출 시 마지막 호출 된 다음 줄 부터..

개발 지식 2020.11.23