Posts

Posts

해당 년도의 글은 티스토리 블로그에 있습니다.

티스토리 블로그 방문

읽기 전용 쿼리의 성능 최적화

읽기 전용 쿼리의 성능 최적화 엔티티가 영속성 컨텍스트에 관리되면 1차 캐시부터 변경 감지까지 얻을 수 있는 혜택이 많다. 하지만 영속성 컨텍스트는 변경 감지를 위해 스냅샷 인스턴스를 보관하므로 더 많은 메모리를 사용하는 단점이 있다. 이런 단점들을 극복하여 최적화하는 방법을 알아보자. 스칼라 타입으로 조회 가장 확실한 방법은 엔티티...

프록시 서버

프록시와 프록시 서버 프록시란? 프록시는 사전적으로 ‘대신’, ‘대리’를 뜻한다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 말한다. 프록시 서버란? 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 ...

관심사의 분리(OCP, DIP 위배 해결)

이전 장에서… 이전 장에서 순수한 자바 코드로 스프링을 구현하면서 아래와 같은 문제에 마주쳤다. 문제 : 할인 정책을 바꾸려면 클라이언트 코드를 수정해야한다…! 위 문제는 OOP설계 원칙 중 OCP를 위배한다. 참고로 OCP원칙은 개방-패쇄 원칙으로 확장에는 열려있어야 하나, 변경에는 닫혀 있어야 한다. 즉, 기능을 변경하거나 확장...

생성자 주입을 써라

생성자 주입을 선택해라! 왜 생성자 주입을 써야할까? 과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. 그 이유는 뭘까? 이유 1. 불변 대부분의 의존관계 주입은 한 번 일어나면 애플리케이션 종료 시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존...

정렬 알고리즘 직접 구현

정렬 알고리즘 정렬(Sorting)이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말한다. 정렬 알고리즘은 이진 탐색의 전처리 과정이기도 하기 때문에 확실히 알아둬야 한다. 정렬 알고리즘은 굉장히 다양한데 이 중에서 많이 사용하는 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬을 공부해보려고 한다. 오늘 프로그래머스의 K번째 수 ...

싱글톤 컨테이너

싱글톤 전의 문제점 스프링 없는 순수한 DI 컨테이너는 클라이언트의 요청이 올 때마다 새로운 객체를 생성했다. 그런데 만약 우리 서비스 사용자가 많아서 초당 10000개의 요청이 온다고 하면 순수한DI 컨테이너는 굉장히 많은 메모리를 낭비하게 된다. 이 문제에 대한 해결방안은 객체를 딱 1개만 생성하고, 공유하도록 설계하면 된다. 이것을 가능...

제1장 - 깨끗한 코드

코드란? 코드는 요구 사항을 표현하는 언어다. 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다. 새로운 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 깨끗한 코드란? ⒈ 반드시 필요한 내용만 담아야 한다.(하나의 기능만 수행) ⒉ 주의 깊게 작성한 코드다. ⒊ 중복을 피하는...

스프링 AOP개념

[ 핵심기능과 부가기능 ] 핵심기능은 해당 객체가 제공하는 고유의 기능이다. 부가기능은 핵심기능을 보조하기 위해 제공되는 기능이다. 그리고 보통은 아래의 그림 처럼 부가기능과 핵심기능이 섞여서 들어간다. 보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용된다. 예를 들어서 모든 애플리케이션 호출을 로깅 해야 하는 요구사항을 생각해보자. ...

데이터베이스 연결구조와 DB세션

데이터베이스 연결구조 1 사용자는 웹 애플리케이션 서버(WAS)나 DB 접근 툴 같은 클라이언트를 사용해서 데이터베이스 서버에 접근할 수 있다. 클라이언트는 데이터베이스 서버에 연결을 요청하고 커넥션을 맺게 된다. 이때 데이터베이스 서버는 내부에 세션 이라는 것을 만든다. 그리고 앞으로 해당 커넥션을 통한 모든 요청은 이 세션 을 통해서 ...

스프링이란?

스프링 스프링이란? 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술API 등을 제공한다. [ 애플리케이션 기본 틀 - 스프링 컨테이너] 스프링을 사용하려면 먼저 스...

네트워크 계층

들어가기 앞서… 프로토콜 프로토콜은 네트워크에서 통신하려는 두 시스템 간에 무엇을, 언제, 어떻게 통신할 것인지 미리 정해 놓은 약속이다. 즉, 시스템의 차이로인해 통신이 되지 않는 문제가 발생할 수 있기 때문에 서로 다른 시스템 간의 통신에는 일련의 표준이 필요한데 이러한 규칙이 프로토콜이다. 정리하자면 프로토콜은 네트워크에 연결된 컴퓨...