Spring Boot 애플리케이션을 실행했는데 아래와 같은 에러가 나면서 서버가 뜨지 않을 때가 있다.***************************APPLICATION FAILED TO START***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.메시지 그대로 8080 포트를 이미 다른 프로세스가 사용 중이라서 톰캣이 포트를 잡지 못한 상황이다. 해결 방법은 크게 두..

전체 글
개발 이야기 모음집트랜잭션 동시성 제어와 락의 필요성데이터베이스에서 트랜잭션이 동시에 실행될 경우, 데이터 일관성과 무결성을 보장하기 위해 락 메커니즘이 필수적이다. 대표적인 락은 공유 락(Shared Lock)과 배타 락(Exclusive Lock)이다.공유 락 (Shared Lock)읽기 락(Read Lock)이라고도 한다.여러 트랜잭션이 동시에 같은 데이터를 읽을 수 있음.그러나 쓰기 작업은 허용되지 않음.트랜잭션이 커밋되거나 롤백되기 전까지 락이 유지된다.조회한 데이터가 중간에 변경되지 않도록 보장한다.SQL 예시:SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락 (Exclusive Lock)쓰기 락(Write Lock)이라고도 한다.락을 획득한 트랜잭션만 데이터에 접근..
이번 글에서는 MCP(Model Context Protocol) 서버를 CLI를 활용하여 빠르고 간단하게 구축하는 방법을 소개합니다.사전 요구사항Node.js v18 이상TypeScript v5.0 이상npm 또는 yarn 패키지 매니저프로젝트 생성1단계 : CLI 전역 설치npm i -g mcp-framework2단계 : 새 프로젝트 생성mcp create my-mcp-server3단계 : 생성된 프로젝트 폴더로 이동cd my-mcp-server4단계 : 종속성 설치npm install설치가 완료되면, 아래와 같은 기본 구성을 가진 TypeScript 프로젝트가 생성됩니다.날씨 도구 생성하기서버에서 유의미한 결과를 얻기 위해 새로운 날씨 도구를 추가해 보겠습니다.다음 명령어로 Weather 도구를 생성..
JPA의 N + 1 문제JPA의 N + 1 문제는 엔티티를 조회할 때 의도치 않게 추가적인 쿼리가 발생하는 현상이다. 처음 1개의 쿼리로 데이터를 조회한 뒤, 연관관계가 설정된 엔티티를 로딩하기 위해 조회된 데이터의 개수(N)만큼 추가적인 쿼리가 발생하는 문제다.예를 들어, 블로그 게시글과 댓글이 있다고 가정하면, 모든 게시글을 조회할 때 게시글의 개수만큼 댓글을 조회하기 위한 쿼리가 추가로 발생할 수 있다.findAll 메서드의 글로벌 패치 전략별 N + 1 문제 상황즉시 로딩(EAGER)인 경우즉시 로딩(EAGER)으로 설정된 엔티티를 findAll() 메서드를 통해 조회하면 N + 1 문제가 발생한다.이는 findAll() 메서드가 다음과 같은 JPQL 구문을 실행하기 때문이다.select u fr..
엔티티 매니저(EntityManager)의 역할엔티티 매니저(EntityManager)는 JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)를 관리하는 핵심 인터페이스로, 엔티티의 생명 주기를 관리한다. 이를 통해 애플리케이션과 데이터베이스 간의 객체 지향적인 상호작용을 지원하며, 개발자가 보다 직관적이고 효율적인 방식으로 데이터베이스를 조작할 수 있게 한다.엔티티(Entity)의 4가지 상태엔티티는 JPA에서 영속성 컨텍스트와의 관계에 따라 다음과 같은 네 가지 상태를 가질 수 있다:1. 비영속(New)Member member = new Member("홍길동");엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연결되지 않은 상태이다.오직 메모리..
새로운 Entity인지 판단3줄요약JpaEntityInformation의isNew(T entity)에 의해 판단된다.추가적인 설정이 없다면 JpaEntityInformation의 구현체 중 JpaMetamodelEntityInformation 클래스가 동작하게 된다.@Version이 사용된 필드가 없거나 @Version이 사용된 필드가 primitive 타입이면 AbstracEntityInformation의 isNew()를 호출한다.본문일반적으로 JpaEntityInformation의은 JpaMetamodelEntityInformation가 사용이 되는데해당 JpaMetamodelEntityInformation안에서 isNew(T entity)를 사용되며@Override public boolean ..
