본문 바로가기

프로그래밍

(9)
1차 캐시, 영속성 컨텍스트는 어디에 있나? JPA의 구현체 중 하나인 하이버네이트(Hibernate)를 기준으로 설명한다. 하이버네이트에는 영속성 컨텍스트(PersistenceContext) 인터페이스가 존재한다. 이 인터페이스의 구현체를 찾아보면 StatefulPersistenceContext 라는 클래스가 존재한다. 이게 우리가 찾는 영속성 컨텍스트다. 1차 캐시로도 불려진다. StatefulPersistenceContext에는 엔터티를 관리하기 위한 수많은 컬렉션들이 존재한다. Id 생성 전략이 IDENTITY인 엔티티를 persist()하면, 해시맵인 entitiesByKey에 저장된다.
하이버네이트 6에서 사용자 정의 함수 추가하기 (Adding user defined function in Hibernate 6) 하이버네이트 5에서 사용자 정의 함수를 추가하는 방법이 하이버네이트 6에서는 다소 많이 바뀌었습니다. 하이버네이트를 단독으로 사용하는 환경에서는 사용자 정의 함수를 작성하고 이를 Persistence.xml에 추가하면 됩니다. 스프링부트를 기반으로 하이버네이트를 사용한다면 사용자 정의 함수를 작성하는 것은 동일하나 작성된 사용자 정의 함수를 Persistence.xml이 아닌 application.properties에 추가하면 됩니다. 1. 사용자 정의 함수 작성 Hibernate 5 Hibernate 6 2. Persistence.xml에 사용자 정의 함수 추가 Hibernate 5 Hibernate 6 3. (Spring Boot Project) application.properties에 사용자 정의..
[DB] Character Set, Collate이란 무엇인가? Mysql에서 DB를 생성할 때 Character Set과 Collation을 지정할 때가 있다. CREATE DATABASE hardlearner CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Character Set은 무엇인가? 문자들과 그 문자들을 코드화한 인코딩들의 조합이다. mysql 공식문서는 character set을 다음과 같이 설명하고 있다. https://dev.mysql.com/doc/refman/8.0/en/charset-general.html A character set is a set of symbols and encodings. Suppose that we have an alphabet with four letters: A, B, a,..
세션(session)이란 무엇인가? What is Session? HTTP(HyperText Transfer Protocol 이하 HTTP)를 통해 Client와 Server간 통신하는 맥락에서 session의 의미는 상태를 가지지 않는 HTTP로 통신할 때 클라이언트로부터 서버에 전달된 요청이 동일한 사용자의 요청임을 서버에서 식별하기 위한 기술이다. Why use Session? HTTP의 특징은 상태를 가지지 않는다. 상태를 가지지 않는 다는 것은 앞의 요청과 뒤의 요청이 어떤 연결고리도 가지지 않는 것이다. 따라서 상태를 가지 않는 사용자A의 여러 요청을 서버는 동일한 사용자A로부터 요청된 것임을 알 수 없다. 동일한 사용자가 보낸 요청임을 알기 위해 session을 사용한다. How Session works? 일반적으로 백엔드 개..
CQS(Command-Query Separation) CQS는 Bertrand Meyer에 의해 제안되었다 CQS의 목적은 커맨드와 쿼리를 분리하는 것이다 command(명령)은 결과를 반환하지 않는다. 시스템의 상태를 변경한다 command라는 용어대신 컨텍스트에 따라 modifier, mutator라고 부를 수 있다 query(질의)는 결과를 반환한다. 시스템의 관찰 가능한 상태를 변경하지 않는다(사이드 이펙트가 없다) 사이드 이펙트의 정의는 맥락마다 다르지만 여기서 쓰인 의미는 내부에 변경이 일어나는지 아닌지를 말하는 것이다. 즉, 내부에 변경이 발생하지 않으면 사이드 이펙트가 없는 것이다. 예외사항 CQS의 예외사항으로 좋은 사례는 stack의 pop이다 stack의 pop은 가장 최근에 push된 값을 반환하고 stack에서는 제거하는 명령이다 p..
AWS EC2 INSTANCE SCHEDULER로 INSTANCE 자동으로 켜고 끄기 AWS EC2 INSTANCE SCHEDULER로 INSTANCE 자동으로 켜고 끄기 소속된 개발팀에서 데스크탑을 개발서버(DB포함)로 사용하고 있었다. 해당 장비들 대부분 노후화되었고 일부는 인터넷 연결이 간헐적으로 끊켜 재부팅을 해줘야 다시 연결되는 상황이었다. 우여곡절이 있었지만 AWS의 EC2를 개발서버로 도입하자고 제안드렸고 승인이 떨어졌다. 모든 것을 혼자서 구축해야하지만 방대하면서도 자세한 AWS의 매뉴얼, 구글링 그리고 나보다 먼저 삽질하신 분들의 글을 믿고 진행했다. EC2를 사용하여 개발서버를 구축하고자 제안할 수 있었던 이유는 다음과 같은 경험이 있었기 때문이다. 코드스쿼드 백엔드 과정 중 학생들은 스프링부트를 사용하여 만든 웹 애플리케이션을 배포할 외부 서버가 필요했다. 1인당 1대..
스프링부트 - Controller란 무엇인가 스프링부트 Controller Spring Boot - Controllercontroller란 무엇인가?사용자의 요청이 진입하는 지점(entry point)이며요청에 따라 어떤 처리를 할지 결정해주며단, controller는 단지 결정만 해주고 실질적인 처리는 서비스(Layered Architecture)에서 담당한다.사용자에게 View(또는 서버에서 처리된 데이터를 포함하는 View)를 응답으로 보내준다. controller를 왜 쓰는가?대규모 서비스로 갈수록 처리해야할 서비스들이 많아지는데, 이를 하나의 클래스에서 몰아 처리할 게 아니라 controller라는 중간 제어자 역할을 하는 것을 만들어서 A요청에 대한 것은 A-controller가 맡아 필요한 로직처리를 위한 서비스를 호출하게 된다. co..
자바 StringBuilder 사용법 및 사용하는 이유 StringBuilder 사용법 및 사용하는 이유 자바에서 문자열하면 자연스럽게 String이 떠오른다. String은 소위 불변(immutable)객체라고 한다. String str1 = "abc";, String str2 = "def"; 2개의 String객체가 있을 때, 만약 str1 + str2;와 같은 연산을 하게 되면 새로운 String을 생성한다. 즉, String객체와 String객체를 더하는(+)행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능적으로 좋지 않다. 그래서 나온 것이 StringBuilder이다. 이름만 봐도 String 잘 만들게(?) 생겼다. StringBuilder는 String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데..