spring (11) 썸네일형 리스트형 스프링 3대 기술 IOC / DI IoC(Inversion of Control, 제어의 역전) IoC는 객체의 생성부터 생명주기 관리까지 모든 객체에 대한 제어권을 개발자가 아닌 스프링 컨테이너가 대신 관리하는 것을 말한다. 전통적인 방식에서는 개발자가 new 키워드로 직접 객체를 만들고 필요한 의존성을 연결했지만, IoC에서는 컨테이너가 객체를 생성하고 주입하며 전체 흐름을 관리한다. 즉, 애플리케이션 코드가 필요한 객체를 직접 호출하지 않고, 컨테이너가 흐름에 맞게 객체를 대신 공급하는 구조다. 이 때문에 흔히 헐리우드 원칙(Don’t call us, we’ll call you)이라고도 불린다. 스프링에서 IoC 컨테이너는 객체(Bean)를 생성하고, 의존성을 연결하며, 생명주기를 관리한다. 따라서 개발자는 객.. [JPA] JPA 속 키 매핑 방법과 배치 전략 속 키 매핑 방법 JPA는 데이터베이스의 기본 키(Primary Key) 생성 전략을 지원하기 위해 다양한 옵션을 제공합니다. @GeneratedValue 어노테이션을 사용하여 엔티티의 @Id 필드에 키 생성 전략을 지정할 수 있습니다. 이 글에서는 각 전략의 동작 방식, 장단점, 그리고 실제 활용 사례를 다뤄보겠습니다. JPA 키 매핑 전략 종류 AUTO 전략 AUTO 전략은 데이터베이스 방언(dialect)에 따라 적합한 키 생성 전략을 자동으로 선택합니다. MySQL IDENTITY 전략 사용 Oracle SEQUENCE 전략 사용 범용 DB TABLE 전략 사용 @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; AUTO .. [DB] 낙관적 락 vs 비관적 락 이번에 낙관적 락과 비관적 락에 대해서 어떠한 기능이 있고 무슨 차이를 나타내고 또 어떠한 방법으로도 동시성 문제를 해결할 수 있는지를 정리를 하며 블로그 글을 남기려고 합니다. 락이란? 락(Lock)은 동시성 문제를 해결하기 위해 사용되는 대표적인 동시성 제어 기법 중 하나로, 데이터베이스의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 장치입니다. 주로 두 명 이상의 사용자가 동시에 같은 데이터를 접근하는 상황에서 데이터 충돌이나 손실을 방지하기 위해 사용됩니다. 예를 들어, 트랜잭션만으로는 해결할 수 없는 갱신 손실 문제나 동시 요청으로 인해 발생하는 오류를 방지할 수 있습니다. 이를 통해 데이터의 일관성과 무결성을 유지할 수 있게 되는 것입니다. 락은 왜 필요할까? .. 스프링에서 쓰레드는 어떻게 사용되고 멀티쓰레드는 언제 사용할까? 먼저 스프링에서는 하나의 작업을 어떻게 처리하는지 부터 알아야 합니다. 스프링 애플리케이션에서 서비스 로직은 기본적으로 멀티쓰레드 동기 방식으로 실행됩니다. 클라이언트로부터 웹 요청이 들어오면, 톰캣이나 넷티 같은 웹 서버가 요청마다 Thread Pool에서 하나의 쓰레드를 할당하여 처리합니다. 이러한 방식으로 스프링은 다수의 요청을 처리할 수 있는 동시성을 지원하게 됩니다. 멀티 쓰레드가 필요한 경우는 언제일까? 멀티 쓰레드는 애플리케이션의 성능을 높이고 동시성을 관리하기 위해 사용하는 중요한 기술입니다. 하지만 모든 작업에 멀티 쓰레드를 사용하는 것이 적합한 것은 아닙니다. 적절한 상황에서 멀티 쓰레드를 활용하면 작업을 효율적으로 처리할 수 있습니다. 멀티 쓰레드는 단일한 개념이 아니라, 여러 쓰레.. JPA에서의 N+1 문제란? 제가 프로젝트를 진행하면면서 JPA를 많이 사용을 하였는데, 그 때 많이 맞이하였던 문제이기도 하고 제일 발생할 수 있는 대표적인 성능 문제 중 하나가 N+1 문제입니다. 이 문제는 JPA에서 1개의 쿼리로 기대했던 결과를 가져오는 대신, N개의 추가 쿼리가 발생하는 현상입니다. 특히 일 대 다 관계에서 지연 로딩이 적용될 때 자주 발생하는데, 이번 포스팅 글에서는 그 N+1 문제의 개념과 해결 방법을 코드로 한 번 살펴보려고 합니다 N+1 문제와 지연로딩이란? 코드를 설명하기에 앞서 좀 더 자세히 해당 문제를 들여다 보면 좋을 것 같은데요, N+1 문제는 간단히 말해 한 번의 쿼리로 가져오려던 데이터를 여러 개의 추가 쿼리를 통해 가져오는 현상을 의미합니다. 예를 들어, 하나의 Parent 엔.. AOP와 스프링 AOP란? AOP(Aspect-Oriented Programmig)는 관점 지향 프로그래밍으로 프로그램의 모듈성을 높이기 위해 횡단 관심사(Cross-Cutting Concern)를 분리하는 프로그래밍 패러다임입니다. 애플리케이션의 핵심 비즈니스 로직과 상관없이 공통으로 적용되는 부가 기능(예시로는 로깅, 트랜잭션 관리, 보안 등등)을 별도의 모듈로 관리함으로써 코드 중복을 줄이고, 핵심 비즈니스 로직에만 집중할 수 있게 합니다. 사실 말로만 들었을 땐, 이해도 안 가고 무슨 말인지 감도 안 잡혔습니다, 뭐 모듈화에 중점을 둔 매커니즘이라는 것은 알겠는데 하나의 방법론인가? 라는 생각까지 했지만 알아보니 그런 단순한 개념은 아니였었습니다. 위에서 말하는 횡단 관심사는 여러 모듈에서 반복적으로 발생하는 로직이나.. 스프링 세션과 Redis 응용 Spring Session은 세션 관리를 간편하고 효율적으로 처리할 수 있게 해주는 Spring 프레임워크의 모듈 중 하나입니다. 일반적으로 세션은 서버의 메모리나 파일 시스템에 저장되지만, Spring Session은 이러한 세션을 중앙화된 저장소에 저장할 수 있도록 지원합니다. 이를 통해 애플리케이션이 여러 서버에 분산되어 있더라도 세션을 공유하고 관리할 수 있습니다. 특히, Spring Session은 Redis와의 통합을 통해 세션 관리를 더욱 효율적이고 확장 가능하게 만들어 주게 됩니다, 오늘은 Spring Session이란 무엇인지, 그리고 Redis를 활용한 세션 관리가 왜 중요한지에 대해 포스팅 해보도록 하겠습니다 현대의 분산 시스템과 마이크로서비스 아키텍처에서는 사용자 세션을 효율적으로.. [MileStone 프로젝트] 계층형 데이터베이스 구축 - JPA 쇼핑몰 프로젝트에서 CRUD 및 페이징 기능과 댓글과 대댓글을 구현하고 싶어 커뮤니티 페이지를 구현하였습니다. 사실 많은 시행착오를 겪었지만, JPA로 엔티티 클래스 내부에서 계층형 데이터베이스를 만드는 것이 큰 경험이 되었기에 포스팅하기로 하였습니다.댓글과 대댓글 기능을 구현하면서 JPA를 이용해 계층형 데이터베이스 구조를 어떻게 설계하고, 그에 따른 로직을 어떻게 구현했는지에 대해 설명할 것이고 실제로 구현된 코드와 함께 JPA의 장점을 살린 설계 방식을 중심으로 서술하겠습니다. 계층형 데이터베이스 설계 이론 계층형 구조는 데이터가 트리 구조를 형성하는 방식입니다. 트리 구조에서 부모 노드가 자식 노드를 가지는 것처럼, 댓글 시스템에서는 하나의 댓글이 다른 댓글의 부모가 될 수 있습니다. 이를 구현.. 이전 1 2 다음