여기서 포스팅을 확인하세요!문제 링크원래 특정 문제에 대한 포스팅은 지양하는 편이지만, 이 문제는 나를 너무 고생시킨 기념으로 포스팅한다.기본적인 아이디어는 "매개 변수 탐색"이다. 주어진 C번 만큼만 끊어서, 특정 숫자((min+max)/2)만 하품하는 경우를 만들
2-SAT(satisfiability) 문제는 n개의 bool 변수로 이루어진 2-CNF 식이 true가 되게 하는 경우가 있는지, 있다면 각 변수에는 어떤 값이 들어가야 하는지 정하는 문제이다. 이 문제에서 2-SAT이 무엇인지 잘 설명해주고 있다.f = (¬x1 ∨
구간 합(range sum)은 부분 합(partial sum)을 이용하여 아주 빠르게 계산할 수 있다.부분 합: psumpos = arr0 + arr1 + ... + arrposleft, right의 구간 합: psumright - psumleft-1펜윅 트리(Fenw
모스 알고리즘은 업데이트가 없는 구간 쿼리들을 빠르게 처리하는 알고리즘이다. 이때 쿼리는 구간의 합, 최댓값, 최솟값 등이 될 수 있다.기본 아이디어는 아주 간단하다. '앞선 쿼리로 인해 계산된 값을 최대한 활용하자'이다. 특히 쿼리의 순서를 자유롭게 바꿀 수 있는 환
은 그래프 이론에서 사용되며, 최대 유량(maximum flow)을 찾는 알고리즘이다. 유량(flow)은 한 노드에서 다른 노드로의 데이터 전송량을 의미한다.예를 들어, 기름을 전송하는 파이프(pipe)
N명의 사람이 M개의 일을 처리해야 한다. 각 사람은 최대 1개의 일만 할 수 있고, 각 일(job)도 최대 1명만 담당할 수 있다. 최대한 많은 일을 처리하려면 어떻게 해야 할까?사람과 일을 매칭할 때, 그 매칭 수가 최대가 되게 하면 된다. 이를 위해 사용하는 알고
세그먼트 트리는 배열의 연속된 구간의 합, 최댓값, 최솟값 등을 구하는데 O(logN)으로 처리할 수 있다. 특히 배열의 한 원소의 값이 변경됐을 때 O(logN)으로 업데이트가 가능하다. 백준 기준 골드 상위권 티어부터 자주 사용되는 알고리즘이다.하지만 i번째 수부터
스프링이 제공하는 environment abstraction(환경 추상화)이란 무엇인가?애플리케이션이 동작하는 환경은 목적이나 사용자에 따라서 조금씩 다르다. 스프링은 동작 환경에 맞춰서 코드를 매번 수정하지 않더라도, 애플리케이션의 구성 설정을 바꿀 수 있는 매커니즘
전 게시물의 마지막 부분에서는 자동 구성 정보를 외부 파일에서 읽은 후, 동적으로 자동 구성을 등록하도록 했었다. 이 기능을 만들기 위해 MyAutoConfiguration 애노테이션 클래스를 만들고, 이 클래스의 full path+name 으로 만들어진 텍스트 파일(
애플리케이션 빈: 개발자가 어떤 빈을 사용하겠다고 명시적으로 구성 정보를 제공한 것을 말한다.컨테이너 인프라스트럭처 빈: 스프링 컨테이너 자신이거나, 스프링 컨테이너가 계속 기능을 확장하면서 추가해온 것들을 빈으로 등록시켜서 사용하는 빈들. 개발자가 이런 빈들을 등록
메타 애노테이션이란 애노테이션 위에 붙은 애노테이션이라는 뜻이다. 보통 애노테이션은 클래스나 메소드 앞에 붙지만, 애노테이션 위에도 애노테이션을 또 붙일 수 있다. 이때 애노테이션 위에 붙어있는 애노테이션을 ‘메타 애노테이션’이라 한다.메타 애노테이션을 한 개 이상을
스프링 컨테이너를 대표하는 인터페이스는 ApplicationContext이다. 이 인터페이스를 이용해 애플리케이션을 구성하고 있는 많은 정보(어떤 빈이 등록되었는지, 리소스에 접근 방법, 이벤트 전달 및 구독 등)를 담고있는 오브젝트들을 구현해야한다.Applicatio
서블릿은 자바의 표준 기술이고, 이 표준 기술을 구현한 제품들이 많이 존재한다. 그 중 가장 대표적인 서블릿 컨테이너가 톰켓이다.톰켓도 자바로 만들어진 프로그램이다. 즉, 클래스에 오브젝트로 만들고 어떤 메소드를 실행하면 동작한다.톰켓은 ‘임베디드 톰켓’이라는 라이브러
jasypt을 사용하기 위해 구글 서칭을 하면, 많은 블로그와 사이트에서 예제 코드를 확인할 수 있다.대부분의 코드들이 아래와 같이 3.0.4를 사용하는 것을 확인할 수 있다.하지만 스프링 부트 3에서는 3.0.4를 사용하면 정상적으로 동작하지 않는다.결론부터 이야기하
스프링 개발을 도와주는 여러가지 도구의 모음이자 스프링 자체를 확장하고 있는 프레임 워크, 라이브러리기존의 스프링을 사용하기 위해선 너무 복잡한 고민이 필요하고, 시작을 빠르게 하기 어려웠다.스프링이 제공하는 많은 선택지와 스프링과 함께 사용하는 표준 기술, 라이브러리
스프링 부트 3.0의 중요 변경 부분은 아래와 같다.1\. Java 17 이상을 사용해야 한다.2\. javax 패키지 이름을 jakarta로 변경해야 한다.(오라클과 자바 라이센스 문제)보통 h2 db를 사용할 때는 테이블 생성 문제 때문에 1.4.200 또는 1.3
아래 블로그를 통해 리눅스 환경에서 spring server을 무중단 배포하는 기술을 적용해봤다. 너무 친절하게 포스팅이 되어 있어서, 따라하는데 큰 어려움은 없었다.https://wbluke.tistory.com/39?category=418851내가 해당 작
본 게시물은 스스로의 공부를 위한 글입니다.잘못된 내용이 있으면 댓글로 알려주세요!여기의 마지막 트랜잭션 사용 예시를 보자. 트랜잭션 기능을 사용하기 위해 서비스 계층의 클래스에 비즈니스 코드와 트랜잭션 관련 코드가 함께 섞여있다. 해당 코드의 상황은 다음과 같다.해당
본 게시물은 스스로의 공부를 위한 글입니다.잘못된 내용이 있으면 댓글로 알려주세요!데이터베이스에서 트랜잭션은 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.트랜잭션은 ACID를 보장해야 한다.원자성(Atomicity) : 트랜잭션 내의 작업들은