Spring boot - @Transactional 전파 주의 사항
·
SpringBoot
주제 ( 전체 트랜잭션이 롤백되는 상황에 대한 해결책 )이번 포스팅에서는 @Transactional의 propagation 속성을 사용시 집중해볼만한 부분을 살펴본다.주 내용은 마지막으로, @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용할 때, 전체 트랜잭션이 롤백되는 상황에 대한 해결책을 얘기한다.테스트를 위한 코드 작성테스트를 위해 다음과 같은 6 가지 클래스를 작성한다.이 상황에서 수정하며 테스트할 클래스는 TransactionDisabledService, TransactionEnabledService 둘이다.Parent ( Entity )@Entity@NoArgsConstructor@Getterpublic class Parent { @..
Spring boot - Cache (2) 페이지 조회 캐싱
·
SpringBoot
이전 포스팅에서 스프링부트의 캐싱을 사용방법을 알아봤다.이번 포스팅에서는 페이징 처리에 캐시를 도입하기 위한 방법을 살펴본다.어느 부분을 캐싱할래?캐시는 key-value로 캐시 메모리에 저장된다.페이징 조회에서 사용되는 key는 Pageable에서 사용되는 sort,size, offset임으로, 특정 레코드의 데이터가 변경됐을 때, 이 데이터가 포함된 캐시를 갱신할 수 없다.예시를 들어보자. // 1. id 를 이용해 특정 사용자의 이름을 수정하는 메소드 @Caching( put = @CachePut(key = "#id"), evict = @CacheEvict("'all'") ) @Transactional(readOnly = false) ..
Spring boot - Cache
·
SpringBoot
스프링 부트 CacheConcurrentMapCacheManager스프링 부트에서는 @EnableCaching 사용 시, 인메모리 캐싱이 활성화 된다.이를 이용해 어플리케이션 내에 ConCurrentHashMap을 활용한 캐싱이 간단하게 이루어진다.@Configuration@EnableCachingpublic class CacheConfig { @Bean CacheManager cacheManager() { return new ConcurrentMapCacheManager(); }}다만,캐싱되는 데이터의 유효기간을 설정하지 못한다는 단점.다른 어플리케이션과 캐싱 데이터를 공유하지 못한다는 단점.두 가지가 크게 작용한다.RedisCacheManager@Configuration@..
[백준 1000] 알 수 없는 문장 - Java
·
Computer Science/Algorithm
백트래킹으로 접근하고자 생각했다.주어진 단어들을 무제한 사용할 수 있음으로, 문자열을 해석하는 각 순간에 같은 단어를 여러번 사용할 수 있다.알고리즘주어진 인덱스부터 적용가능한 모든 단어들을 탐색한다.해석가능한 단어를 찾는다.2-1. dp테이블에 현재까지의 비용을 계산 후, 최솟값으로 업데이트 한다.2-2. 업데이트 시, 2 부터 다시 시작한다.2-3. 업데이트가 안될 시, 이를 무시한다.(2) 과정을 통해 특정 인덱스에서 실행 가능한 최소비용으로만 프로그램을 실행할 수 있도록 한다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import j..
Socket Pair
·
Computer Science/Network
OS가 Tcp Connection을 어떻게 적절한 Socket으로 넘기는지 탐구한다.1. 문제 인식이전까지, TCP 패킷들은 포트번호를 통해 프로세스로 통한다고 이해하고 있었다. 이에 따라, ServerSocket이 TCP Connection을 받을때 새로 생성되는 소켓은 항상 새로운 포트를 점유하고, 클라이언트는 이 소켓과 통신한다고 이해했었다. 결론부터 말하자면, 틀렸다. OS는 TCP 패킷을 수신하면 이를 Socket Pair를 확인하여 적절한 Socket으로 매핑한다. 2. 이론출처 1: 컴퓨터 네트워킹 하향식 접근 55p출처 2: UNIX Network Programming : The Sockets Networking API https://books.google.co.kr/books?id=ptS..
Java IO / NIO
·
Java
ref :1.https://www.baeldung.com/linux/kernel-system-call-implementation2.https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl3. https://www.baeldung.com/linux/kernel-system-call-implementation4. https://stackoverflow.com/questions/54878237/is-there-a-separate-kernel-level-thread-for-handling-system-calls-by-user-proces5. https://0xax.gitbooks.io/linux-insides/cont..
외부에서 학교 컴퓨터 접속하기
·
이것저것
이거 글 다 구라입니다. 학기중 LLVM관련 프로젝트를 수행하기 위해 연구실 컴퓨터에 컴파일해뒀다. 한번 컴파일하는데만 약 3시간 4시간이 걸리는 작업이라, 집에서 다시 하는것은 오바.학교는 외부에서의 원격 접근을 굉장히 싫어하기 때문에 잠깐만 접근해 과제를 수행해보자.제일 초기 구성은 다음과 같다. Client = 접근 주체Target = 접근 대상1. SSH 를 통해 접근해보자SSH는 원격 컴퓨터에 접근하기 위한 가장 편리한 도구다. 공유기 망에서는 당연히 접근될꺼니 ,Target Computer는 공유기를 통해 학교망과 연결되어 있음으로, 포트포워딩을 통해 SSH서버 프로세스의 포트를 학교망으로 노출하자.이제 해볼 수 있는 방법은 학교안에서 접근할 때, 학교 밖에서 접근할 때 두 경우만 존재한다.이..
[컴파일러] Scanner Generator
·
Computer Science
1. 과제 소개 Scanner 는 입력 Character Stream 을 Token Stream 으로 변환하는 역할을 컴파일러 내에서 수행합니다. 각각의 토큰들을 식별하기 위한 Recognizer 들을 내부적으로 가지며, 각각의 Recognizer 는 Scanner Generator 가 RE(Regular Expression)을 바탕으로 생성한 DFA 를 통해 각각의 토큰을 식별합니다. Scanner Generator 가 RE 를 바탕으로 한 DFA 의 생성은 다음과 같은 과정으로 이루어집니다. RE to NFA w/ε-move NFA w/ε-moves to DFA DFA → Minimized DFA DFA→RE 이번 과제는 위 네가지 과정 중 첫번째 단계, RE to NFA w/ε-move 과정에 집중..