본문 바로가기

전체 글

(276)
JPA - Auditing JPA를 사용하면서 한가지 항상 해야할 것이 있다. 항상 DTO를 Entity로 바꿔주는 일이다. 이러한 과정을 거칠 때면 한가지 상황이 생길 수 있다. 예를들어 DTO는 아이디, 비밀번호로 구성이 되어있고 Entity는 아이디, 비밀번호, 생성일자, 최근 수정일자, 생성한 사람, 수정한 사람의 프로퍼티로 구성되어있다고 가정하자. MappedSuperClass 이 때, 추가적인 정보들에 대해서 또한 자주 다른 Entity 생성시에도 저런 정보가 계속 추가된다면, 하나로 묶어놓고 항상 자동으로 생성해 삽입된다면 굉장히 편할 것이다. JPA Auditing 사전적인 의미로는 감사, 감시라는 의미이다. 리스너처럼 JPA의 상황을 주시하다가 특정 동작을 수행(누가, 언제 이 엔터티에 접근했는지 변경했는지)하는 ..
JPA - EntityManager, EntityMapping, Context 이번에는 ORM-JPA-Hibernate 가 어떻게 동작을 하는지 자세히 알아보려고 한다. 또한 Spring Data JPA를 사용하는 것과 안하는 것의 차이 또한 같이 알아보려고 한다. 데이터를 처리하는 Layer를 DAO라고 하고 저장하려는 DB가 Mysql이라고 가정하자. 이때, 동작 과정은 다음과 같을 것이다. DAO에 데이터 전달 DAO가 MySql에 데이터 전달 Mysql은 데이터 저장 Mysql은 데이터를 DAO에게 반환한다. 이 때, 서로 데이터 전달, 반환을 돕는 것을 JPA가 한다고 하였다. 내부 구조를 좀 더 상세히 보려고 한다. Service Layer에서 DTO를 Entity로 변환 후 DAO에 전달 DAO는 설정 정보를 주입받은 EntityManagerFactory 객체 생성 E..
곱하기 혹은 더하기 문제 0에서 9로 이루어진 문자열이 있을 때, 순서대로 곱하거나 더하여 만들 수 있는 가장 큰 수를 구하라 유형파악 가장 큰 이라는 말이 나왔고 딱히 자료구조를 사용해야할 상황이거나 게임을 만드는 것과 같은 상황이거나 정렬 상황이거나 시간 복잡도를 크게 고려해야하는 상황이 아니라면 그냥 그리디 알고리즘이지 않나 싶다. 아이디어, 정당성 우선, 가장 먼저 드는 생각은 곱하기를 많이 해야 큰 수를 만들 수 있다. 하지만 항상 그런 것은 아니고 0에 곱하기를 하면 안된다. 또한 1은 더하는게 더 큰 수를 만들 수 있다. 예를 0123456이 있을때 0+1 = 1 1+2 = 3 3*3 = 9 이런식으로 곱하기만 하면 안된다. 구현 피연산자 중 0이나 1이 있는지 체크해가며 연산을 진행하되 0, 1 이 아니면 곱..
모험가 길드 문제 공포도가 X인 모험가는 반드시 X명 이상의 길드원이 필요하다. 예를 들어, 한 모험가의 공포도가 3이면 그 사람은 3명 이상의 길드에 들어간다. 모험가들의 수, 각각의 공포도가 주어질 때, 만들 수 있는 길드의 최대 수를 구하라 (단, 모든 모험가가 길드에 속할 필요는 없다.) 유형 파악 그리디 문제들은 최소한의, 최대한의, 가장 큰, 가장 작은 등의 단어가 들어간다. 이런 단어가 나온다면 항상 그리디는 아니지만 그리디를 먼저 의심하는 습관이 필요하다. 아이디어 및 정당성 만약, 공포도가 2 3 1 2 2이라고 가정하자 이 때, 정렬하면 1 2 2 2 3 이다. 1은 혼자서도 그룹이 가능하다. 2는 둘 이상의 사람이 필요하다, 3은 세명 이상의 사람이 필요하다. "공포도가 적은 사람일 수록 많은 팀..
1이 될 때까지 문제 N이 1이될 때까지 1을빼거나 K로 나눈다. 이 때, 최소한의 연산으로 1을 만들어라. 유형파악 다른 알고리즘 연결이 안된다. 그리디 알고리즘이다. 아이디어 직관적으로 최대한 K로 나누는게 숫자 1을 만드는데 더 빨리 가까워진다. 나누어 떨어지면 K로 나누고 아니면 1을 뺸다. 정당성 직관적으로 나누는게 항상 1을 빼는거 보단 숫자가 더 빨리 작아지므로 정당하다고 볼 수 있다. 구현 - K로 나눠지는지 확인 - 나눠지면 K로 나눈다. 아니면 1을 뺀다 - 1이 될때까지 반복한다. 코드 n = int(input("입력 : ")) k = int(input("입력 : ")) count = 0 while n != 1: if n % k == 0: n /= k count += 1 else: n -= 1 cou..
RestTemplete Client는 HTTP 등 다양한 형태로 Server와 통신을 하고 만약 HTTP를 사용한다는 가정하에 서버는 Restful API를 통해 Client가 필요한 데이터를 전달한다. 가끔, 서버 또한 이런식으로 다른 서버에 데이터가 필요한 경우 사용을 하곤한다. 이 때, 한 서버가 클라이언트가 되어 다른 서버에 데이터를 요청하는 방식이 필요하다. 하지만 다르지 않다. 서버또한 HTTP 통신으로 다른 서버와 통신을 한다. 어떻게 서버에서 HTTP통신을 할 수 있을까? 자바에서 기본으로 제공해주는 방법을 사용할수도 있지만 RestTemplete으로 통신이 가능하다. 이번엔 RestTemplete을 사용하는 방법에 대해서 정리해보려고 한다. RestTemplete - 스프링에서 제공하는 템플릿으로 HTTP 통신..
숫자 카드 게임 문제 - 여러개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한장을 뽑는다 - 카드는 행, 열로 구성되어 있다. - 찾는 순서는 행선택, 그 행에서 가장 숫자가 낮은 카드를 뽑는다. - 행을 선택할때 해당 행에서 가장 낮은 숫자를 뽑는 구조인데 이를 고려해, 행마다 가장 낮은 숫자 중 가장 높은 숫자를 뽑도록 해야한다. - 용량 : 128MB, 시간 : 1초 - 1
큰 수의 법칙 문제 큰수의 법칙 : N개의 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더해서 가장 큰 수를 만드는 법칙 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없다. - 용량 : 128MB, 시간 : 1초 - 2