Spring 7

[Spring] JPA - 1

안녕하세요? 오늘은 스프링 파트 중 JPA 같은 ORM을 왜 쓰는지, 그리고 JOIN개념을 JPA 관점에서 어떻게 이해하면 좋은지 공부하려 합니다.ORM이란 무엇인가요?ORM(Object-Relational Mapping)이란, 객체(자바 클래스)와 관계형 데이터베이스의 테이블을 매핑해서 다루게 해주는 방식입니다.즉, DB에 데이터를 넣고 빼는 일을 할 때, 자바에서는 객체로 생각하고, DB에서는 테이블/행(row)로 저장되는데,이 둘 사이의 간극을 ORM이 메워줍니다.JPA는 ORM?정확히 말하면 JPA는 ORM 표준입니다.JPA 자체는 규격이고실제 구현체로는 보통 Hibernate 같은 구현체가 동작합니다.그래서 실무에서 JPA 쓴다는 말은 보통JPA 표준 + Hibernate 구현체 조합을 의미하는..

Spring 2026.02.17

[Spring] Spring WebFlux와 Spring MVC - 1

오늘은 스프링 WebFlux와 MVC에 대해서 알아보겠습니다.Spring에서 웹 애플리케이션을 만들 때 대표적으로 사용하는 방식이 Spring MVC와 Spring WebFlux입니다.두 기술은 모두 웹 애플리케이션을 만들기 위한 프레임워크이지만, 요청을 처리하는 방식이 다릅니다.1. Spring MVCSpring MVC는 동기 방식(Synchronous)으로 동작하는 전통적인 웹 프레임워크입니다.사용자가 요청을 보내면 서버는 해당 요청을 처리하는 동안 스레드 하나를 계속 점유합니다.==> 처리가 끝나야 스레드가 반환됩니다.즉, 요청 하나당 스레드 하나가 필요합니다.이 방식은 구조가 단순하고 이해하기 쉬워서 대부분의 웹 서비스에서 널리 사용되고 있습니다.특징- 동기 방식 처리입니다.- 스레드 기반 모델입..

Spring 2026.02.11

[Spring] controller에서 repository를 참조하는 코드를 짜면?

controller에서 repository를 참조하는 코드를 짜면? 이라는 주제를 가지고 이야기 해보겠습니다. 컨트롤러에서 레파지토리를 참조하는 코드를 짜는 것은 가능합니다. 하지만 실제로 그렇게 코드를 작성한다면 안정성이 떨어집니다. 컨트롤러의 역할을 살펴보겠습니다. 컨트롤러는 HTTP레이어입니다. 요청 파라미터 검증/변환인증/인가 결과 반영서비스 호출응답 형태로 변환 등을 담당하게 됩니다. Q. 그 곳에 비지니스 로직이 섞이면 어떻게 될까요? 1. 책임 분리가 깨진다.2. 트랜잭션 경계가 애매해져서 버그가 생길 수 있다.3. 도메인 규칙이 옅어져 일관성이 무너진다.4. 테스트가 어려워진다.5. 보안, 검증, 예외 처리를 한 곳에 모으기 어렵다.6. 확장이 어렵다. 등의 문제가 발생합니다. 다시말..

Spring 2026.02.02

[Spring] 필터와 인터셉터

오늘은 Spring MVC 중 Servlet / Container / Filter / Interceptor를 “어디에서 동작하는가?” 기준으로 정리해보겠습니다.이는 인증/인가, 로깅, 트랜잭션(@Transactional) 같은 주제가 전부 같은 뿌리에서 이해됩니다. 0. 전체 큰 그림[클라이언트] ↓[서블릿 컨테이너(Tomcat)] ↓[Filter] ===> 서블릿 컨테이너 레벨에서 동작. (DispatcherServlet 이전) ↓[DispatcherServlet] ↓[Interceptor] ===> Spring MVC레벨에서 동작. (Controller 전후) ↓[Controller] ↓[Service(@Transactional)] ↓[Repository(JPA)] ↓[..

Spring 2026.01.31

[Spring] 컨테이너가 빈을 생성하는 과정

지난 포스트에서 예고한 대로 컨테이너가 빈을 생성하는 과정에 대해서 살펴보겠습니다. 1. 컨테이너 생성SpringApplication.run() 위의 코드가 실행되면 내부적으로 ApplicationContext가 만들어집니다. 이는, bean 생성을 위한 초기 상태입니다. 2. 어떤 클래스를 빈으로 만들지 찾기 다음은 후보 찾기 입니다.컨테이터는 바로 객체가 만드는게 아니라 설계도(BeanDefinition) 를 먼저 작성합니다. 후보 등록되는 경로들은 아래와 같습니다. @ComponentScan으로 찾는 것들@Component, @Service, @Repository, @Controller 등@Configuration 안의 @Bean 메서드스프링부트의 @EnableAutoConfiguration(자동 ..

Spring 2026.01.29

[Spring] IoC, DI

오늘은 스프링의 IoC, DI에 대해서 설명해보겠습니다. 1. IoC제어의 역전이라고도 하며, 객체의 주도권이 개발자 ---> 스프링으로 넘어간 것입니다.즉, 개발자가 하나하나 코드를 책임지지 않아도 된다는 것! 개발자class OrderService { private final PaymentService paymentService = new PaymentService();} 스프링class OrderService { private final PaymentService paymentService; public OrderService(PaymentService paymentService) { this.paymentService = paymentService; }} --> ..

Spring 2026.01.28

[Spring/JPA] @Transactional을 활용한 엔티티 수정 방식 비교

이번 Spring 섹션에서는 스프링부트를 사용하면서 마주쳤던 트러블 슈팅 및 개인 공부에 대해서 정리하려고 합니다. * 인프런의 강의를 들으며 생겼던 개인적인 궁금증, 개인 프로젝트를 진행하면서 마주치는 이슈들입니다. 오늘의 요약 : @Transactional을 활용한 엔티티 수정 방식 비교하고 예외 처리 유무에 대한 정리 Spring Data JPA로 프로젝트를 진행하다 보면 엔티티를 수정하는 코드를 자주 작성하게 됩니다. 비슷해 보이지만 세부적인 구현 방식에 따라 가독성과 안정성이 달라질 수 있습니다. 두 가지 코드 스타일을 비교하며 어떤 차이가 있고, 어떤 방식이 더 권장되는지 정리해 보겠습니다. 1. 두 코드 비교하기먼저 비교할 두 코드는 다음과 같습니다. 공통적으로 아이디, 닉네임을 찾아서 ..

Spring 2026.01.19