전체 글

github: https://github.com/belljun3395 email: belljun3395@gmail.com
· 스프링
스프링 컨테이너에 빈을 등록하는 일은 객체 하나를 만드는 것으로 끝나지 않는다. 컨테이너는 인스턴스를 생성하고, 의존성을 주입하고, 정해진 순서로 여러 콜백을 호출한다. 이 과정을 모두 마쳐야 해당 빈을 사용할 수 있는 상태로 판단한다. 종료할 때도 역순의 절차를 거친다. 빈 하나가 초기화되는 과정// org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactoryprotected Object initializeBean(String beanName, Object bean, @Nullable RootBeanDefinition mbd) { // Skip initialization of a NullBean if (bean.ge..
· 스프링
다음 코드는 얼핏 자연스러워 보인다. 회원 저장에 실패하면 예외를 처리하고 실패 로그를 남긴다.@Transactionalpublic void register(Member member) { try { memberRepository.saveAndFlush(member); } catch (DataIntegrityViolationException e) { failureLogRepository.save(new FailureLog(member.getName())); }}하지만 실제로 실행하면 실패 로그까지 롤백되고, 메서드가 끝나는 시점에 UnexpectedRollbackException이 발생할 수 있다. 예외를 분명히 처리했는데 왜 이런 결과가 나올까?이 문제를 이해하려..
· 스프링
영속성 컨텍스트란?JPA에서 엔티티는 엔티티 매니저가 관리한다. 엔티티 매니저는 (ID, 엔티티) 구조의 영속성 컨텍스트를 통해 엔티티를 관리한다.사용자는 엔티티 매니저를 통해 엔티티의 상태를 제어하고 영속 상태인 엔티티의 정보를 변경할 수 있다.엔티티 매니저는 영속 상태인 엔티티와 변경 사항을 관리한다. 이를 통해 사용자는 데이터베이스의 세부 동작을 직접 다루지 않고도 엔티티를 조회하고 저장할 수 있다.하이버네이트에서 이 (ID, 엔티티) 구조는 StatefulPersistenceContext가 보유한 Map에 해당한다. 키인 EntityKey는 식별자 값과 엔티티 타입의 조합이다. 따라서 Member(1L)과 Order(1L)처럼 서로 다른 타입이 같은 ID 값을 사용해도 충돌하지 않는다.아래 문서의..
· 개발
SQL을 작성하다 보면 같은 조회처럼 보이지만 실제로는 데이터베이스가 전혀 다른 SQL로 인식하는 경우가 있다.SELECT VALUE3 FROM TEST001 WHERE VALUE1 = 6935; SELECT VALUE3 FROM TEST001 WHERE VALUE1 = 7406; SELECT VALUE3 FROM TEST001 WHERE VALUE1 = 8217; 사람이 보기에는 모두 TEST001 테이블에서 VALUE1 조건으로 VALUE3를 조회하는 SQL이다. 다른 점은 조건 값뿐이다.하지만 데이터베이스 입장에서 SQL 문장은 문자열이다. SQL 텍스트 안에 값이 직접 들어 있으면 값이 바뀔 때마다 SQL 텍스트도 달라진다.WHERE VALUE1 = 6935 WHERE V..
· 개발
SQL을 데이터베이스에 보내면 결과가 돌아온다. 그 사이에 데이터베이스 내부에서는 여러 단계가 순서대로 실행된다.전체 흐름클라이언트가 SQL 전송 ↓파서 (Parser) → 문법 검사 ↓시맨틱 분석 → 객체 존재, 권한 확인 ↓옵티마이저 (Optimizer) → 실행 계획 생성 ↓실행 엔진 (Executor) → 실행 계획대로 데이터 읽기/쓰기 ↓결과 반환파서 (Parser)SQL 텍스트를 받아 문법적으로 올바른지 검사한다.-- 문법 오류 예시SELCT * FORM member -- SELECT, FROM 철자 오류문법이 맞으면 SQL을 내부 트리 구조(파스 트리)로 변환한다. 이 단계는 SQL 텍스트만 보고 판단하므로 테이블이 실제로 존재하는지는 아직 확인하지 않는다.시맨틱..
· 끄적끄적
변화의 사전적 의미는 "사물의 성질, 모양, 상태 따위가 바뀌어 달라짐"이라고 한다. 성장도 결국 이전과는 다른 상태가 되는 일이라고 생각한다. 다만 변화를 만들기 위해 노력했다고 해서, 그 모든 노력이 곧바로 성장으로 이어지는 것은 아닌 것 같다.무언가를 하다 보면 나도 모르게 달라지는 순간들이 있다. 처음에는 어렵던 일이 익숙해지고, 낯설던 방식이 자연스러워진다. 분명 이전과는 다른 상태가 되었지만, 그 변화를 나중에야 알아차리면 어느새 당연한 것이 되어 있다. 그 과정에서 노력도 있었고 변화도 있었지만, 무엇이 어떻게 달라졌는지 의식하지 못했다면 성장으로 선명하게 남기 어렵다.예전에는 새로운 기술을 써보거나 새로운 방식을 적용하는 것 자체에서 즐거움을 느끼는 경우가 많았다. 새로움은 분명 성장을 위..
belljun
belljundev