반응형 IT 개인 공부95 [JPA] 영속성 컨텍스트 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이란 의미이다. JPA는 실제로 내부에서 영속성 컨텍스트를 기반으로 동작한다. 즉, 엔티티 매니저를 통해 엔티티를 Persist할 경우 DB에 저장되는 것이 아니라 영속성 컨텍스트라는 논리적인 저장소에 저장된다. 영속성 컨텍스트를 공부하기 전에 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 간단하게 알고 넘어가자. JPA는 클라이언트의 요청을 엔티티 매니저를 통해 처리하고 내부적으로 DB Connction Pool을 사용해서 DB에 접근한다. 엔티티 매니저 팩토리는 바로 엔티티 매니저를 생성해주는 친구이다. 웹 애플리케이션에서는 엔티티 매니저 팩토리를 하나 생성하여 클라이언트의 요청이 올 때마다 새로운 엔티티 매니저를 생성하여 제공한다. 이는 스프링같은 프레임.. 2021. 8. 31. 프레임워크 vs 라이브러리 vs API 개발자라면 프레임워크, 라이브러리, API를 모두 들어봤을 것이다. 다른 개념이지만 헷갈릴 수 있는 요소를 충분히 가지고 있기 때문에 애매하게 알고 넘어간다면 누군가 물어봤을때 대답하는데 있어 난처해지는 상황이 발생할 수 있다. 따라서 이들에 대해서 정리해보도록 하자. 프레임워크 범용 기능들을 제공해줌으로써 애플리케이션을 개발하기 쉽도록 해주는 소프트웨어이다. 덕분에 개발자는 핵심 로직에만 집중할 수 있음 Java로 Web 애플리케이션을 개발할 경우 Servlet 관련 로직들을 구현해야 하지만, Spring 프레임워크를 사용하면 이러한 부분들을 추상화시키고 @RequestMapping 같은 기능으로 쉽게 구현할 수 있게 편의성을 제공해줌 제어의 흐름을 개발자가 아닌 프레임워크가 가지고 있음 즉, 프레임워.. 2021. 8. 30. JDBC vs SQL Mapper vs ORM 데이터를 단순히 메모리에 저장한다면 애플리케이션이 종료될 경우 모든 데이터가 사라지게 된다. 왜냐하면 메모리는 휘발성이기 때문에 데이터의 영속성을 보장해주지 않기 때문이다. 영속성(Persistence)이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 따라서 애플리케이션이 종료되어도 데이터를 유지하기 위해서는 영속성을 보장해주는 데이터베이스 같은 저장소에 따로 저장 및 관리해야 한다. Layered Architecture의 Persistence Layer가 바로 데이터에게 영속성을 부여해주는 계층이다. Java는 Persistenc Layer를 JDBC(Java Database Connectivity)로 구현한다. JDBC를 통해 우리는 영속성이 보장되는 데이터베이스에.. 2021. 8. 29. 캐시(Cache) : 검증 헤더와 조건부 요청 클라이언트가 특정 데이터를 자주 요청한다고 하자. 해당 데이터를 매번 요청마다 서버를 통해 DB에게 접근하여 반환하는 방법은 상당히 비효율적이다. 왜냐하면 이전에 사용했던 데이터와 새롭게 요청하는 데이터는 차이가 없음에도 불구하고 비싼 네트워크 통신을 통해 해당 데이터를 서버로부터 다운로드하여야 하기 때문이다. 이를 해결하기 위해 우리는 캐시(Cache)라는 것을 사용한다. 캐시(Cache)란 한번 조회된 데이터를 미리 특정 공간에 저장해놓고, 똑같은 요청이 발생하게 되면 서버에게 다시 요청하지 말고 저장해놓은 데이터를 제공해서 빠르게 서비스를 제공해주는 것을 의미한다. 즉, 캐시를 통해 자주 사용하는 데이터를 저장하여 서버의 부담을 줄일 수 있게 된다. 하지만 캐시는 보통 디스크나 메모리에 저장하기 때.. 2021. 8. 28. 메시지 큐(Message Queue)란? 최근 백엔드 직무를 지원하다 보면 자격 요건이나 우대사항에 메시지 큐(Message Queue)라는 역량이 적혀있는 것을 자주 볼 수 있다. 메시지 큐, 말 그대로 메시지들을 큐라는 자료구조에 담아서 관리한다는 의미인 것 같다. 이에 대해서 알아보도록 하자. 우선 메시지 큐는 메시지 지향 미들웨어를 구현한 시스템이기 때문에 메시지 지향 미들웨어가 무엇인지부터 알고 넘어가자. 메시지 지향 미들웨어(MOM) 응용 소프트웨어 간의 데이터(비동기 메시지) 통신을 위한 소프트웨어 메시지 지향 미들웨어는 메시지를 전달하는 과정에서 보관하거나 라우팅 및 변환할 수 있다는 장점을 가진다. 보관 : 메시지의 백업을 유지함으로써 지속성을 제공, 덕분에 송수신 측은 동시에 네트워크 연결을 유지할 필요 없음 라우팅 : 미들웨.. 2021. 8. 26. 웹 서버 : Nginx vs Apache 학부시절 인터넷 프로그래밍 수업을 배울 때는 웹 서버는 Apache, WAS는 Tomcat으로 웹 사이트를 구현하였었다. 예전에는 웹 서버로 Apache를 많이 사용하였지만 최근에는 Nginx를 사용하는 추세이다. 그렇다면 어떤 이유 때문에 Nginx를 점점 더 사용하는 것일까? 바로 Nginx가 트래픽이 많은 웹사이트에 적합하기 때문이다. Nginx는 대용량 트래픽을 처리하기 위해 가벼움과 높은 성능을 목표로 하는 경량 웹 서버이다. 초기에는 정적 파일을 제공하는 웹 서버로 Apache를 보조하는 역할을 수행하였지만 오늘날에는 리버스 프록시, 로드 밸런서, 메일 프록시 및 HTTP 캐싱 등 전체 범위의 서버 작업을 처리하는 웹 서버로 발전하였다. 즉, Nginx 웹 서버는 Apache 웹 서버의 성능 .. 2021. 8. 25. 여러 대의 서버가 세션(Session)을 공유하는 방법 HTTP 프로토콜의 특징 중 하나는 무상태성(Stateless)이다. 상태가 없기 때문에 서버는 요청이 왔을 때 이전 클라이언트와 동일한 클라이언트인지 확인할 방법이 없다. 이는 세션(Session)을 통해 해결한다. 세션이란 쿠키를 기반으로 일정 시간 동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술이다. 또한, 세션은 서버에 저장 및 관리된다. 서비스의 규모가 조금만 커지더라도 대부분의 서비스들은 하나가 아닌 여러 대의 서버를 두고 운영한다. 하지만 트래픽이 여러 서버로 분산되지 않고 한 서버로만 집중된다면 여러 대의 서버를 둘 이유가 없어진다. 따라서 트래픽을 여러 대의 서버에 적절히 분산시켜줘야 하는데 이를 가능하게 해주는 친구가 바로 로드 밸런싱(Load Ba.. 2021. 8. 24. [Spring] 빈 스코프(Scope) 종류 스프링 컨테이너에서 다양한 빈들을 관리해줌으로써 애플리케이션을 개발할 때 굉장히 편리하게 개발할 수 있는 장점이 있다. 스프링 빈의 생명주기는 다음과 같다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 빈 스코프란 빈이 스프링 컨테이너에서 존재할 수 있는 범위를 의미한다. 스프링은 다양한 스코프를 지원하는데 싱글톤, 프로토타입, 웹 관련 스코프들에 대해서 알아보도록 하자. 싱글톤 스코프 스프링 컨테이너에 빈을 등록하면 기본적으로 싱글톤 패턴으로 빈을 관리해준다. 애플리케이션 생명주기 동안 해당 빈의 요청이 발생할 때마다 항상 동일한 빈을 제공해줘야 하기 때문에 싱글톤 스코프는 스프링 컨테이너의 시작과 종료, 모든 생명주기.. 2021. 8. 23. [Spring] 싱글톤 컨테이너 : CGLIB 스프링 컨테이너에 빈(Bean)을 등록하면 기본적으로 싱글톤 패턴으로 빈을 관리하게 된다. 따라서 해당 빈을 요청하게 되면 항상 동일한 빈을 반환해주는 것을 확인할 수 있다. 물론 기본 빈 등록 방식이 싱글톤 방식이라는 의미이며, 요청할 때마다 새로운 객체를 생성하여 반환해주는 프로토타입 방식 등 빈 스코프에 따라 다른 방식도 제공한다. 싱글톤 패턴이란 클래스의 인스턴스가 1개만 생성됨을 보장해주는 디자인 패턴으로 해당 인스턴스를 공유하여 사용함으로써 메모리를 절약할 수 있는 장점이 있다. 싱글톤 패턴에 대해서 공부하고 싶다면 다음 글들을 참고하길 바란다. https://sorjfkrh5078.tistory.com/107?category=1007502 싱글톤 패턴(Singleton Pattern) 싱글톤.. 2021. 8. 22. 이전 1 2 3 4 5 ··· 11 다음 반응형