트랜잭션의 개념데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 정확한 데이터를 유지해야 하며, 장애 발생 시 빠른 시간 내에 원상태로 복구할 수 있어야 한다. 트랜잭션은 하나의 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로, 데이터베이스에서
자원 회수는 클라이언트가 놓치기 쉬워 예측할 수 없는 성능 문제로 이어지며, 안전망으로 finalizer를 제공하지만 finalizer 사용을 지속적으로 지양하고 있다.try-with-resources를 사용하려면 AutoCloseable 인터페이스를 구현해야 한다.
자바가 제공하는 두 가지 객체 소멸자인 finalizer와 cleaner는 예측할 수 없고, 수행 시점을 보장할 수 없어 사용을 지양한다.언제 호출될 지 예측할 수 없다.상황에 따라 위험할 수 있다.Java 9에서는 finalizer 메서드를 deprecated API
GC가 메모리 관리를 자동으로 해준다고 해도 메모리 관리에 신경쓰지 않으면 안된다.대표적으로 스택의 pop 메서드 처리 과정에서 메모리 누수가 발생한다.img스택에서 꺼내진 객체들은 가비지 컬렉션의 대상이 되지 않기 때문에 메모리에 그대로 남아있게 되며, 성능이 저하된
문자열 s1, s2, s3는 모두 "TEST"라는 문자열을 갖지만 각각 참조하는 주소가 다르기 때문에 메모리 낭비가 발생한다.imagenew 연산자를 통해 문자열 객체를 생성하는 경우 메모리의 Heap 영역에 할당되어 총 3개의 인스턴스가 생긴 것을 알 수 있다.위 코
정적 멤버만 담은 유틸리티 클래스는 인스턴스를 생성하지 않아도 사용할 수 있다. 하지만, 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어주기 때문에 사용자는 이 생성자가 자동으로 생성된 것인지 구분할 수 없다. 추상 클래스로도 인스턴스화를 막을 수 없
싱글턴이란 오직 하나의 인스턴스를 생성할 수 있는 클래스를 말한다. 한 번 생성된 인스턴스를 공유하기 때문에 메모리 낭비를 방지할 수 있으나, 멀티 스레드 환경에서 동시성 문제가 발생할 수 있다.싱글턴을 만드는 방법private 생성자는 Elvis.INSTANCE를 초
최근에 커밋 되돌리기하면서 반나절을 보낸 경험이 있어 git 강의를 듣기 시작했다.자주 쓰는 git 명령어 외에 제대로 git을 공부해 본 적이 없어서 매번 구글링으로 해결했었는데 이번 기회에 git을 공부해 보기로 했다.프로젝트를 진행하다보면 기능별로 브랜치를 생성하
윈도우에서 Maven을 설치하다가 Scoop이라는 것을 알게 되었다. 한 때 리눅스 명령어를 익히겠다고 우분투 설치해서 명령어로 여러 프로그램을 설치했던 경험이 있다. 잠깐이었지만 윈도우에서는 설치 페이지에서 파일 다운받아서 프로그램을 설치했지만, 리눅스에서 짧은 명령
항상 디폴트로 JAR를 사용했는데 처음으로 WAR를 선택하면서 어떤 차이점이 있는지 궁금했다.언제 JAR를 써야하고 WAR를 써야하는지 깔끔하게 정리한 그림이 있다.그림을 보면 JSP를 사용하는 경우나 외장 WAS를 사용하는 경우, WAR를 사용하고 그 외에는 JAR
스터디 때 MockMvc에 대해서 알게 되었고 바로 적용해보았다.MockMvc를 사용하면 실제 서블릿 컨테이너를 사용하지 않고 가짜 서블릿 컨테이너를 통해 Http Method 응답을 테스트 할 수 있다.처음 테스트 코드를 작성했을 때 @SpringBootTest, @
상황에 따라 적절한 기술을 사용하기 위해서는 기술에 대한 이해뿐만 아니라 동작 원리에 대한 이해가 필요하다고 생각한다. JPA를 공부하면서 JDBC와 어떤 차이점이 있는지 궁금했고 공부한 내용을 정리해보았다.먼저, JDBC와 JPA를 이해하기 위해서는 영속성(Persi
https://www.acmicpc.net/problem/10162문제 풀기 전 데이터 유형과 길이를 확인하고 조건을 다시 한 번 확인한다. 해당 문제의 데이터 유형은 정수로 10,000보다 작은 자연수이다. 구하고자 하는 것은 요리시간 T를 맞추기 위한 최소
오늘은 스프링을 공부하면서 한 번쯤 들어봤을 MVC 패턴에 대해서 공부해보았다.이론적으로 Model, View, Controller의 약자로 Model에서는 데이터 처리, View는 화면, Controller는 Model과 View 사이에서 동작하는 것으로 알고 있는데
나는 비전공자로서 처음 접한 언어가 파이썬이다. 인터프리터 언어로 초보자도 쉽게 배울 수 있다는 특징이 있는데 나는 파이썬에 큰 흥미가 없었다. 자바에 처음 눈을 뜬 순간 주력 언어로 삼아야겠다고 생각했다. 변수 선언 시 데이터 유형을 지정해야 하고 파이썬에 비해 코드
여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 문제인데, 각 행에서 가장 숫자가 낮은 카드를 뽑아서 최종적으로 가장 높은 숫자의 카드를 뽑아야 한다.2차원 배열로 카드의 숫자가 주어지고 n과 m이 100이하여서 2중 루프로 최솟값을 찾아서 리스
이코테 그리디 알고리즘 문제 중 하나인 큰 수의 법칙 문제이다.자연수가 주어졌을 때, M번 더하여 가장 큰 수를 만드는 문제인데 연속해서 K번까지만 더할 수 있다는 조건이 있다. 가장 큰 수를 만들기 위해서는 첫 번째로 큰 수를 M번 더하면 되는데 연속해서 K번까지만
공통 관심 사항과 핵심 관심 사항을 분리하기 위해 AOP를 적용할 수 있다. AOP 객체 생성 후 빈을 등록해줘야하는데 1\. 컴포넌트 스캔 2\. 자바 코드로 직접 스프링 빈 등록두 가지 방법 모두 가능하다.강의에서 컴포넌트 스캔 방식을 다루어서 나는 직접 스프링 빈
구현이 잘 안풀려서 코드업 기초 100제를 다시 풀어보기로 했다.자주 쓰지 않아서 헷갈렸던 개념에 대해서 리뷰하고자 한다.해당 문제는 if문으로 구현할 수 있지만 if문의 조건식 결과는 참, 거짓 두 가지밖에 없기 때문에 경우의 수가 많아질 경우 코드가 길어지고 처리시
https://www.acmicpc.net/problem/18352그래프는 인접 행렬과 인접 리스트 두 가지로 표현할 수 있다. 이전에 BFS 문제를 인접 행렬로만 풀어서 이번에도 인접 행렬을 이용해서 거리를 구하려고 했으나 0과 1로만 이루어진 2차원 배열이