목록전체 글 (154)
늘
문제 해결 처음에 문제에서 말하는대로 push pop을 하면 시간초과가 날것같다고 생각해서 다른 방법을 찾아보다가. 그냥 한 번 해보자고 생각해서 문제그대로 적었다. 위치와 우선순위를 담는 pair를 만들어서 저장하고, 반복문을 돌면서 우선순위가 높은 문서가 나오면 pop하고 찾는 location이면 리턴을 해줬고, 그렇지 않다면 다시 그 값들을 그대로 push해줬다. #include #include #include #include using namespace std; int solution(vector priorities, int location) { int answer = 0; queue q;// location, 순위 for(int i=0; i
compose사용하는 이유, 도커의 멀티 컨테이너들을 묶어서 관리할 수 있다. ex) redis 서버와 실제 운영할 서버처럼 두 개의 서버를 연결하면 --link와 같은 명령어를 사용해야 하지만 docker-compose를 이용하면 손쉽게 연결하여 사용할 수 있다. docker-compose.yml version: "3" # 도커 컴포즈의 버전 services: # 이곳에 실행하려는 컨테이너들을 정의 redis-server: # 컨테이너 이름을 지정 (원하는 이름) image: "redis" # 사용할 이미지 이름 giron: # 컨테이너 이름을 지정 (원하는 이름) build: "" # 현 디렉토리에 있는 Dockerfile을 사용하여 빌드 ports: - "5000:8080" # 로컬포트:컨테이너포트..
연관관계는 객체 참조가 있는 상태이다. A -> B로 영구적으로 갈 수 있는 경로가 있다고 보면 된다. class A{ private B b; } 의존관계는 파라미터의 타입이 나오거나, 리턴 타입에 나오거나, 메서드 안에서 그 인스턴스를 생성하면 인스턴스이다. 일시적으로 관계 맺고 헤어지는 관계 class A{ public B method(B b){ return new B(); } } 1. 양방향 의존성을 피하라 - 성능 이슈 - sync를 맞출 때, 많은 버그를 만날 수 있다. 2. 다중성이 적은 방향을 선택하라 - 즉, One-To-Many보단 Many-To-One방향을 잡는 게 더 좋다 - 성능 이슈, 컬랙션의 관계들을 유지하기 위해 노력하는 게 너무 힘들다. 3. 의존성이 필요 없다면 제거하라 4..
[build.gradle] plugins { id 'org.springframework.boot' version '2.3.1.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } depend..
이번에는 JPA 기본을 중심으로 Batch 처리에 대해서 조금 다뤄보려고 한다. 저번 시간에 얘기 했던 것처럼 수백만 건의 배치 처리할 때, 일반적인 방식으로 엔티티를 계속 조회하면, 영속성 컨텍스트에 많은 엔티티가 쌓이면서 메모리 부족 오류가 발생한다. 따라서 이러한 배치 처리를 적절한 단위로 영속성 컨텍스트를 초기화해야 한다. 또한 2차 캐시를 사용하고 있다면 2차 캐시에 엔티티를 보관하지 않도록 주의해야 한다. [JPA 등록 배치] 수만 건 이상의 엔티티를 한 번에 등록할 때 주의할 점은 영속성 컨텍스트에 엔티티가 계속 쌓이지 않도록 일정 단위마다 영속성 컨텍스트의 엔티티를 데이터베이스에 플러시하고 영속성 컨텍스트를 초기화해야 한다. EntityManager em = entityManagerFact..
요즘 공부하다 배치 애플리케이션을 자주 보게 되어서 공부를 해보았다. 공부하다 보니 자료도 적어 찾기 어려웠고 대용량 데이터를 다루는 데에 사용한다고 하니 나 같은 대학생 나부랭이에겐 어렵게 다가왔다. 하지만 언젠가는 사용할게 분명하기 때문에 미리 맛보는 겸 공부하고 기록해 보려고 한다! 우선 배치 어플리케이션이 왜 필요하는지 그 이유부터 알아보겠다. 왜 사용하는 가?why why.. wh.. [배치 애플리케이션] 배치(Batch)는 일괄처리라는 뜻을 가지고 있다. 만약 매일 전 날의 데이터를 집계해야 한다고 가정해보겠습니다. 집계 기능은 하루에 1번 수행됩니다. 이를 위해 API를 구성하는 것은 너무 낭비일 것이다. 데이터가 많아서 처리 중 5만 번째에서 실패했다면, 5만 1번째부터 다시 실행할 수 있..
진짜 간단해보였는데, 돌릴때마다 새로운 반례들을 만나면서 생각보다 시간이 오래걸렸다.. 알고리즘은 덱 이라는 자료구조를 이용하여 앞에서와 뒤에서 빼는 방식을 사용해야했다. 그렇지 않고 v.erase(v.begin())으로 앞에서 지우면 시간초과가 나왔다. 그리고reverse할 때, 진짜로 reverse하면 안되고 reverse했을땐 뒤에서, 정방향일 땐, 앞에서 pop해주는 방식으로 해결했다. 주저리 주저리 설명보단 역시 코드로 보는게 빠를듯 하다. 반례를 여러번 고치다보니 조금 지저분하긴 하다.... #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); in..
1차 캐시: @Id와 Entity 스냅샷: 1차캐시에 처음 영속되었을 때의 상태 findByName()과 같이 id가 아닌 값으로 조회를 하면 바로 DB에 접근하게 된다. 플러시 flush(): 영속성 컨텍스트의 내용을 디비에 반영 1차 캐시에 넣어둔게 사라진게 아님! 그냥 반영만 - 동기화 플러시 발생 flush()가 될때 -> 변경 감지-> 수정된 엔티티를 쓰기 지연 SQL저장소 등록 -> 쓰기 지연 SQL저장소의 쿼리 디비에 전송 같은 테이블, JDBC Driver지원, 하이버네이트 같을 때, 디비로 일괄 전송되는 것 영속성 컨텍스트 플러시 할 때 em.flush() - 직접호출 ex) test 트랜잭션 커밋 - 자동 호출 JPQL 쿼리 실행 - 자동 호출 jpql은 객체를 대상으로 하는 sql이므..
https://programmers.co.kr/learn/courses/30/lessons/17687# 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 간단한 진수바꾸기 문제였다. 반복문을 돌면서 원하는 진수로 바꿔서 string형태로 만들어주면 되었다. 너무 단순한 구현문제라 함정이 있을줄 알았는데 아니였다. 코테볼때도 이렇게만 풀리면 좋겠다.....ㅜㅜㅜㅜㅜ #include #include #include using namespace std; string convert(int n, int ..
JPA만 사용하다가 오랜만에 JDBC를 공부해보려고 한다. 어느 정도 JDBC의 작동원리를 알아야 나중에 JPA를 더 깊이 공부할 때도 도움이 될 것 같다고 생각되기 때문이다. 기본적인 사용법을 알아두면 나중에 쓰일 수(?)도 있으니... JDBC는 JPA와 다르게 db에 날리는 쿼리를 직접 작성해야하는 단점이 있다. 대신 복잡한 쿼리를 작성할때는 직접 쿼리를 작성하므로 jpa보다 좋다. JDBC package com.example.demo.controller; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.State..