본문 바로가기

전체 글

(276)
Cache - Redis 백엔드에서는 여러 스레드를 통해 이미 생성된 인스턴스들로 다양한 데이터를 CRUD를 한다. 하지만 항상 모든 데이터에 대해서 데이터베이스에서 가져오는 것은 데이터베이스에 큰 부하가되며 이어져 서버에도 많은 부하를 줄 수 있다. 또한 이런 현상은 서버의 전반적인 속도를 늦추는 문제가 생긴다. 이럴 때 사용하는 것이 캐시이다. Cache - 자주 사용하는 데이터를 미리 보관해둔 임시 저장소 - 저장 공간이 적고 비용이 좀 비쌈. - 빠른 I/O 가 가능하다. 캐시를 사용하는 사례 - 자주 호출되지만 프로그램 도중에 잘 변경되지 않는 데이터 Spring boot의 캐시 - JSR(Java Specification Requests) : 자바로 만들어진 플랫폼에 대한 규격을 제안하거나 기술한 것. - JSR-10..
Spring - Jasypt JASYPT - 프로젝트에 간단한 암호화 기능을 제공해주는 JAVA 라이브러리 이다. - 단방향, 양방향 암호화 기능을 제공한다. - 스프링과 같은 싱글톤 환경에서 멀티스레드의 동기화 문제 걱정없이 사용 가능. (여러개의 스레드가 하나의 자원에 동시에 접근할 때 생기는 문제가 없다.) - 다양한 언어를 지원해 원본 문자 사용에 대한 제약이 없다. (인코딩에 대한 제약이 없다, 즉, 한글을 암호화하는 것도 가능하다.) 1. Dependancy 설정 com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.5 2. Config 클래스 설정 package com.ReservationServer1.config; import org.jasypt.encryption.Str..
만들 수 없는 금액 문제 N개의 동전을 사용해 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램 유형 분석 최솟값을 구하며 딱히 다른 알고리즘이 생각나지 않는다. 아이디어 주어진 숫자리스트를 작은 순서대로부터 확인을 하면서 만들 수 있는 금액 체크 여부를 1부터 시작해서 차근차근 가능한지 확인한다. 과정은 다음과 같다. 1원을 만들 수 있는가? -> 1원이 있어야만 한다. -> 없다면 종료, 있다면 현재 만들 수 있는 최대 금액은 1원디다. 2원을 만들 수 있는가? -> 1원 또는 2원이 있어야만 한다. -> 없다면 종료, 있다면 현재 만들 수 있는 최대 금액은 3원, 4원디다. ... 이런식의 아이디어를 갖는다. 예를 들어, [1, 1, 4, 5, 6] 작은거 부터 확인해보면, 1원으로 1원까지 만들 수 있다. ..
문자열 뒤집기 문제 0, 1로만 이루어진 문자열을 뒤집어 모든 숫자를 같게 만들어야한다. 연속된 하나 이상의 숫자를 뒤집을 수 있다. 1->0 or 0->1 이 때, 최소한으로 뒤집어 모두 같은 문자열을 만들어라. 유형파악 "최소한"이라는 말이 나왔기에 합리적으로 그리디 알고리즘을 의심한다. 아이디어 "결과는 항상 00000 처럼 0으로만 이루어져 있거나 11111 처럼 1로만 이루어진다." 0001001010101110 가 있다고 가정할때, 모두 1로 만들기 위해서는 6번 뒤집는다. 모두 0으로 만들기 위해서는 5번 뒤집는다. 그냥 머리속에 있는 것을 만들어보려고 한다. 결과는 항상 1로만 이루어져 있거나 0으로 이루어질 것이다. 1개 이상의 연속된 0의 수와 1의 수를 구하여 더 작은 집합의 수를 출력한다. 정당성..
DataBase - ERD, 정규화 ERD에 대해서 정리를 하려고 한다. ERD - 데이터베이스를 구축할 때 가장 기초적인 뼈대 - 이 부분을 먼저 신경써서 서비스를 구축해야한다. - 건물을 지을 때, 골조로 생각. - 시스템을 설계할때 시스템의 요구사항에 맞추어 설계하는 것이 일반적 "ERD란 시스템의 요구사항에 맞추어 데이터베이스에 있는 테이블간 관계도를 의미한다." ERD의 장점, 단점 장점 시스템 설계 중 디버깅 또는 비즈니스 프로세스 재설계시 참고 가능 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용 단점 비정형 데이터를 충분히 표현할 수 없다. 비정형 데이터 - 비구조화 데이터를 의미하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보. ERD 예시 요구사항 - 영업사원은 0~N명의 고객을 관..
Spring - Multiple Requests, Threads 스프링에서는 많은 요청을 기본적으로 어떻게 처리되는지 그 방식이 궁금했다. 예를 들어, JPA에서는 영속 컨텍스트 안에 데이터 처리 요청이 들어오면 인스턴스가 생기고 그런 인스턴스들을 관리하다 트랜잭션이 끝남과 동시에 영속 컨텍스트는 종료된다. 스프링에서는 자체 내장된 tomcat container(context)를 사용한다. 앞서 설명한 영속 컨텍스트와 기본적으로는 동일한 개념이다. 사용자가 서버에 접속하면 스레드(인스턴스)가 생성되고 이를 활용해 여러 작업을 하는 것이다. 방식은 다음과 같다. 1. 서버 시작시 Tomcat은 스레드의 컬렉션으로 Thread Pool을 생성 2. HttpServeletRequest(Client의 요청, HTTP통신 , ServerSocket에서 accept한 객체)시 ..
JPA - @Query with Spring JPA 우리는 항상 쿼리메서드를 통해서나 JPARepository에서 제공해주는 기본 메서드를 사용해 모든 데이터를 처리하기에는 한계가 있다. 데이터베이스가 복잡해질 수록 정리할 데이터가 많아질수록 또 여러가지 서비스를 하면서 결국에는 쿼리문을 작성해야하는 경우가 생긴다. 다만, MyBatis보단 기본적으로 많은 양의 쿼리문을 지원해주기에 좀 더 낫기도 하면서 결국에는 쿼리문 대신 메서드를 다 숙지해야한다는 점에서 상속 관계에 속한다. 아무튼, 이번에는 이런 경우를 대비해 JPA에서 쿼리문을 작성하는법을 적어보려고 한다. @Query - JPQL로 쿼리를 작성하는 방법 - Native Query로 작성하는 것도 지원해줌. - Spring Data JPA에서 제공 - JPQL 문법은 SQL과 유사하며 객체지향적인..
JPA - Query Method with Spring JPA 지금까지 Spring Data JPA의 JpaRepository의 기본 메서드(save() 등)를 사용하거나 JPA의 기본 메서드(persist() 등)을 사용해 DB에 CRUD를 했다. 항상 이렇게 사용하는데는 어디까지는 한계가 있다. 따라서 직접 필요한 경우에 한하여 쿼리문을 생성하는 방법에 대해서 알아보려고 한다. JPQL - Java Persistence Query Language - 테이블이 아닌 엔터티를 대상으로 하는 객체지향 쿼리 - JPA는 JPQL을 베이스로 함. - JPA가 작성하는 쿼리문을 JPQL이라고 생각하면 쉽고 이를 설정들을 통해서 각 DB에 맞는 쿼리로 변경해주는 형태임. Query Method - Spring Data JPA에서 제공 - 여전히 쿼리를 직접 짜는 것이 아닌 ..