본문 바로가기

분류 전체보기81

Java 8, 11, 17에서의 변화 LTS란 LTS는 Long Term Support의 줄임말로, 출시 후 8년 동안 보안 업데이트 및 버그 수정을 지원하는 버전이다. 일반 버전과 달리 안정성에 중점을 둔 버전으로, 기능 업데이트는 최소한으로 이루어지거나, 아예 없는 반면 보안 업데이트의 지원이 일반 버전보다 훨씬 길다. 그렇기 때문에 서버 등 최신 기능보다 안정성이 중요한 곳에서 많이 쓰이며, 기업이나 기관 등에서 기능 업데이트로 인해 이용 중인 다른 소프트웨어가 영향을 받는 것을 피하기 위해 이용하기도 한다. 자바 8, 11, 17은 모두 LTS(Long Term Support) 버전이다. JAVA 8 Lamda Expression 도입 Lambda Expression은 익명 함수를 생성하기 위한 표현식. 익명 클래스의 한 개의 메소드.. 2023. 4. 17.
JPA N+1 문제 N+1 문제란 N+1 문제란 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 의미한다. 이는 1:N 또는 N:1 관계를 가진 엔티티를 조회할 때 발생하는데, JPA Fetch 전략이 EAGER인지 LAZY인지에 따라 두 가지의 경우로 나뉜다. 1) Fetch 전략이 EAGER일 때 특정 엔티티를 조회할 때 연관된 모든 엔티티를 같이 로딩하는 것을 즉시 로딩(EAGER Loading)이라고 한다. 집사 - 고양이의 관계를 표현할 때 다음과 같은 전제조건을 가지고 있다고 가정하자. 고양이 집사는 여러 마리의 고양이를 키우고 있다. 고양이는 한 명의 집사에 종속되어 있다. /** * @author Incheol Jung */ @Entity @Getter @Setter @NoArg.. 2023. 4. 17.
트랜잭션 전파 단계 트랜잭션의 개념 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻하고, 아래와 같은 성질을 가진다. Atomicity(원자성) : 각 트랜잭션이 성공/실패하는 단일 단위로 처리되도록 보장한다. Consistency(일관성) : 모든 데이터는 규칙에 맞는 일관성을 보장한다. (제약조건, 트리거 등의 모든 규칙에 유효해야 한다) Isolation(고립성) : 트랜잭션은 다른 트랜잭션의 영향을 받지 않는다. Durability(지속성) : 트랜잭션이 성공하면 그 결과는 영구적으로 저장된다. 트랜잭션의 전파 트랜잭션 전파는 어떤 트랜잭션이 동작중인 과정에서 다른 트랜잭션을 실행할 경우 '어떻게 처리하는가'에 대한 개념이다. 트랜잭션의 전파 설정은.. 2023. 4. 17.
멀티 스레드 환경에서 발생하는 이슈 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원(resources)과 쓰레드로 구성되어 있다. 프로세스의 자원을 이용해서 실제 작업을 수행하는 것이 바로 쓰레드이다. 하나의 프로세스는 하나 이상의 쓰레드를 가지며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스(multi-threaded process)'라고 한다. 멀티 스레드 환경에서는 여러 스레드가 동시에 하나의 자원을 공유한다. 그렇기 때문에 같은 자원을 두고 경쟁상태(raceCondition)와 같은 문제가 발생하는 것이다. 가시성 이슈 가시성 문제는 여러 개의 스레드가 사용됨에 따라, CPU Cache Memory와 RAM의 데이터가 서로 일치하지 않아 생기는 문제를 의미한다. 한 스레드가 변경된 값을 cache m.. 2023. 4. 17.
강한 결합과 느슨한 결합 강한 결합 객체간 의존 관계에서 강한 결합이란, 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있다는 것이다. 이는 구현 클래스(Concrete Class)를 직접 참조하고 있음을 의미한다. public class Person { private Chicken chicken; public Person() { this.chicken = new Chicken(); } public void startEat() { chicken.eat(); } } public class Chicken { public void eat() { System.out.println("치킨을 먹습니다."); } } 위와 같은 코드가 존재할 때, Person 클래스는 Chicken 클래스를 직접 참조하고 있다. 즉, Person 클래스가 .. 2023. 4. 17.
Mutable vs Immutable Immutable 객체 자바에서 객체는 기본적으로 heap영역에 할당되고 stack영역에 래퍼런스 값을 갖는 참조 변수들로 접근 가능하다. Immutable 객체란 불변 객체를 말하는 것으로, 이 객체의 값을 heap 영역에서 바꿀 수 없다는 뜻이다. 오직 새 객체를 만들어 래퍼런스 값을 주는 재 할당만이 가능하다. Integer i = 1; i = 3; 위와 같이 우리는 i라는 Integer 타입 변수를 1에서 3으로 변경할 수 있다. 그러나 i가 가리키는 객체의 값이 1에서 3으로 변경된 것이아니라 실제로는 3의 값을 가지는 새로운 객체를 생성하고 이 객체를 가리키도록 i의 참조값을 변경한 것이다. 기존 1로 할당되어 있던 객체는 Garbage로 남아있다가 GC(Garbage collection)에 .. 2023. 4. 17.