본문 바로가기

백엔드 기술

(37)
QueryDSL 애플리케이션을 구현하다보면 사용자의 요구사항에 맞추어 DB에서 조건에 맞는 데이터를 가져오는 ORM은 여러가지가 있다. 내가 사용했던 대표적인 ORM에는 2가지가 있다. 1. JPA - Spring Data JPA 2. JPA - JPQL 하지만 위의 두가지 기술에는 데이터를 가져오는 조건을 모두 포함시키는 메서드 이름 컨벤션을 작성해서 사용하든, 직접 쿼리문으로 해당 조건들을 모두 기입하든, 개발자가 필터링 조건들을 모두 사전에 셋팅을 해야한다는 단점이 있다. 내가 진행했던 사이드 프로젝트에는 다음과 같은 요구사항이 있었다. A. 도서 제목 검색 B. 도서관 이름 검색 C. 도서관에 보관중인 도서 검색 D. 도서관에 등록된 회원 검색 E. 특정 태그를 가진 도서 검색 F. 연체 기록이 있는 회원 검색 ..
자료구조 - Stack, Queue 차이점 자료 구조 Java에서 자료 구조라 함은, 여러 데이터의 묶음을 저장하고 사용하는 방법을 정의한 것. 아래의 자료 구조 중 가장 많이 사용되는 대표적인 Stack, Queue에 대해 알아 보자. 1. Stack // ex)프링글스 통 #1. LIFO (Last In First Out) - 먼저 들어간 데이터가 제일 나중에 나온다. #2. 데이터는 하나씩 넣고 뺼 수 있다. #3. 하나의 입출력 방향을 가지고 있다. #4. 그래프 탐색 중 '깊이우선탐색(DFS)'에 사용된다. Stack stack = new Stack(); // int 형 스택 Stack stack = new Stack(); // char형 스택 브라우저 앞으로 가기, 뒤로 가기 1. 새로운 페이지로 접속할 때, 현재 페이지를 #Prev ..
Synchronized 키워드의 이해 [Synchronized 키워드] Java 언어에서 '동시성'은 필수 요소 이다. 여러 스레드가 공유 리소스에 액세스 할 때, 기타 동기화 관련 문제를 피하기 위해, 한 번에 하나의 스레드만 리소스에 액세스 할 수 있도록 하는 것이 중요하다. Java에서 이를 가능하게 하는 한 가지 방법은 synchronized 키워드를 사용하는 것이다. 이처럼 공유된 리소스의 '동시성' 문제와 동기화 관련 문제를 방지하는 synchronized 키워드의 대상은 instance method와 static method 가 된다. 이 글에서는 이 synchronized 키워드가 어떻게 동작하는지, 해당 키워드를 instance method와 static method에 적용하면 무엇이 다른지에 대해 알아볼 예정이다. 1. 스..
얕은 복사 VS 깊은 복사 얕은 복사 (Swallow Copy) 원본 객체의 non-static 필드를 복사하여 새로운 객체로 생성하는 것. 새로운 객체를 생성할 때 원본 객체의 필드 타입으로 나뉜다. 1. 원본 객체가 non-primitive 타입의 필드를 가지고 있을 때. 2. 원본 객체가 primitive 타입의 필드를 가지고 있을 때. *primitive 타입 : int, float, double, char, byte, short, long, boolean* 1. 원본 객체가 non-primitives 타입의 필드(변수)를 가질 경우, 원본 객체의 non-primitive 타입의 필드들을 복사하여 새로운 객체를 생성한다. 그 결과, 원본 객체와 얕은 복사의 결과인 새로운 객체는 동일한 non-primitive 타입 필드들을..
JDBC, Spring Data JDBC, JPA, Spring JPA 데이터 엑세스 기술 Spring에서 사용할 수 있는 데이터 액세스 기술에는 mybatis, Spring JDBC, Spring Data JDBC, JPA, Spring Data JPA 등이 있다. A. SQL 중심 기술 애플리케이션에서 DB에 접근하기 위해 SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하는 것. 즉, SQL 쿼리문을 기반으로 DB의 특정 테이블에서 데이터를 조회 후, Java 객체로 변환 mybatis, Spring JDBC가 대표적인 SQL 중심 기술. B. 객체(Object) 중심 기술 ( Object Relational Mapping ) 데이터를 SQL 쿼리문 위주로 다루는 것이 아니라, 모든 데이터를 객체의 관점으로 다루는 기술. 즉, DB에 접근하기 위해 SQL 쿼리문을 직..
DTO #DTO (데이터 전송객체 = Data Transfer Object)란 ? 계층간 데이터 교환을 위해 사용하는 객체(Java Bean)이다. MVC에서 View와 Model 사이에 상호작용을 하는 Controller에서 데이터를 다루는데 사용하는 객체. #DTO 역할 클라이언트에서 서버 쪽으로 전송하는 요청 데이터들을 하나의 객체로 전달받는 역할. 서버 쪽에서 유효한 데이터를 전달받기 위해 데이터를 검증하는 유효성 검증을 진행하는 역할. #DTO 장점 1. 간결한 통신 과정 Client와 Server 간 통신에서 필요한 데이터들을 주고 받는 과정에서 그 통신의 양은 필요 데이터의 양에 따라 여러번의 통신이 발생할 수 있다. 하지만 DTO를 사용한다면 통신에 필요한 데이터를 DTO 한 객체에 담아 통신을 ..
데이터베이스 - SQL, NoSQL, DB 설계 관계형 데이터베이스 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 한다. 테이블의 각 행은 KEY라는 고유 ID가 포함된 레코드 입니다. 테이블의 각 열에는 데이터의 속성이 들어가 있으며, 각 레코드에는 일반적으로 각 속성에 대한 값이 있으므로, 데이터 포인트 간의 관계를 손쉽게 설정할 수 있다. [데이터베이스의 필요성] [데이터를 In-Memory에 저장할 경우] PC를 끄면 데이터가 사라짐. [데이터를 File I/O 할 경우] 원하는 데이터만 가져올 수 없고, 모든 데이터를 호출한 뒤 서버에서 필터링 해야함. [DataBase의 경우] 필터링 외에도 File I/O 으로 구현이 힘든 데이터 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버. [데이터베이스] 데이터베..
Spring MVC에서 제공하는 CSR, SSR 방식 CSR, SSR 렌더링 방식을 나타내는 말이다. 즉, 클라이언트에서 보낸 요청을 서버에서 처리하여 만든 Model 데이터와 View로 생성한 응답 데이터를 활용하여 클라이언트 또는 서버 어느 곳에서 웹 페이지를 완성하느냐의 차이를 가진다. CSR (Client Side Rendering) 서버에서 클라이언트 측으로 데이터만 넘겨주고, 클라이언트 측에서 전달받은 데이터를 가지고 HTML을 생성해 클라이언트를 보여주는 방식. = 가구 공장에서 가구의 부품들을 클라이언트에게 보내, 클라이언트 측에서 조립하도록 하는 방식 [동작방식] 1. 클라이언트에서 서버로 Javascript 요청 2. 서버에서 응답하여 클라이언트에 Javascript 로직을 내려줌 3. 클라이언트 REST API 등을 이용해 데이터 요청 ..