전체 글
-
벌크 연산JPA 2021. 2. 28. 18:23
벌크 연산은 쿼리 한 번으로 대량의 데이터를 수정할 때 사용된다. 하지만 벌크 연산을 사용할 때 주의해야 할 점이 있다. 다음 쿼리를 보자 long count = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); List result = queryFactory .selectFrom(member) .fetch(); for (Member member1 : result) { System.out.println("member1 = " + member1); } 모든 멤버의 나이를 1살 씩 더해주고, 멤버를 조회하였다. 쿼리 사용전 쿼리 사용후 그런데 쿼리를 날리기 전과 후의 차이가 없다? 여기가 바로 벌크 연산을 할 때 주의 해..
-
페치 조인(fetch join)JPA 2021. 2. 23. 20:41
페치 조인은 JPQL에서 성능 최적화를 위해 제공하는 기능이다. 보통 연관관계 매핑을 할 때 지연 로딩 전략을 많이 사용하게 되는데 페치 조인을 사용하게 되면 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 것이 가능하다. 사용방법 select m from Member m join fetch m.team Member와 Member에 연관된 team을 한 번에 조회하게 된다. 페치 조인은 X ToOne 관계에서 사용하면 정말 유용하게 사용할 수 있다. 하지만 X ToMany 관계에서는 함부로 페치 조인을 사용하면 안 된다. 예를 들어 위의 예시처럼 Member와 team이 OneToMany 관계라고 생각해보자. 여기서 컬렉션 페치 조인을 사용하면 Many를 기준으로 조인이 되기 때문에 데이터양이 예..
-
OSIV (Open Session In View)JPA 2021. 2. 22. 23:26
OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그런데 이 전략은 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있다. 이것은 결국 장애로 이어진다. OSIV를 끄면 트랜잭션 종료할 때 영속성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환한다. 따라서 커넥션 리소스를 낭비하지 않는다. OSIV를 끄면 모든 지연로딩을 트랜잭션 안에서 처리해야 한다. 그렇다면 OSIV를 끈 상태로 복잡성 관리를 어떻게 하면 좋을까? 바로 Command와 Query를 분리하는 것이다. 보통 비즈니스 로직은 특정 엔티티 몇 개를 등록하거나 수정하는 ..
-
쿠키 & 세션Web 2021. 2. 19. 20:53
저장 위치 쿠키: 클라이언트의 웹 브라우저가 지정하는 메모리나 하드디스크 세션: 서버의 메모리에 저장 만료 시점 쿠키: 저장할 때 expires나 max-age를 사용해서 쿠키 생명주기 정할 수 있음 (만료 날짜를 생략하면 브라우저 종료 시까지만 유지) 세션: 클라이언트가 로그아웃하거나, 설정 시간 동안 반응이 없으면 무효화되기 때문에 정확이 알 수 없음 (보통 브라우저가 종료될 때까지) 리소스 쿠키: 클라이언트에 저장되고, 클라이언트의 메모리를 사용하기 때문에 서버 자원을 사용하지 않음 세션: 세션은 서버에 저장되고, 서버 메모리로 로딩되기 때문에 세션이 생길 때마다 리소스를 차지함 용량 제한 쿠키: 쿠키 정보는 항상 서버에 전송된다. 따라서 문제가 생길 수 있어서 용량을 한 도메인당 20개, 하나의 ..
-
[BOJ] 1987번 알파벳Algorithm 2021. 2. 18. 11:22
https://www.acmicpc.net/problem/1987 보통 나는 그래프 탐색 문제가 나오면 대부분의 문제를 bfs로 푼다. (dfs보다 bfs가 편하고 좋음) 그래서 이 문제도 처음에 bfs로 접근을 하였는데, 이 문제의 포인트는 똑같은 알파벳을 한 번만 지나야 한다는 점이다. 그러면 queue 안에 지나간 알파벳을 저장할 자료구조가 필요할 것이고 그래서 set을 선택했다. 만약 set안에 알파벳이 있으면 탐색을 안하고 없으면 탐색을 하고 이런식으로... 그랬더니 메모리 초과가 발생했다. 조금만 생각하면 당연한 것이다. 모든 queue에 set을 담아야하면 탐색할 때마다 새로운 set이 추가가 되므로 엄청난 메모리를 먹을 것이다. #include using namespace std; usin..
-
스프링 Annotation 알아보기Spring 2021. 2. 14. 18:56
@RestController: @RestController는 @Contorller 어노테이션과 @ResposeBody 어노테이션을 합쳐놓은 어노테이션이다. @Controller는 일반적으로 View Page의 이름을 리턴해주어 사용자에게 View Page를 출력하게 하는데 @RestController는 return 값이 View Page를 통해 출력되는 것이 아니라 HTTP ResponseBody에 직접 쓰이게 된다. 따라서 사용자의 요청이 오면 MessageConverter를 통해서 Json방식이나 Text 형태로 return 하게 된다. 결론적으로 Spring MVC 패턴을 사용하면 @Controller를 사용하고 REST API 형태로 개발하게 되면 @RestController를 사용하게 된다. @..