스프링

    @BeforeAll과 @Mock

    @BeforeAll과 @Mock

    최근 테스트를 학습하면서 기존에 진행했던 프로젝트에 테스트 코드를 작성하고 있었는데, 이 과정에서 @BeforeAll과 @Mock을 동시에 사용하며 문제가 발생했고, 이 문제가 왜 발생했는 지, 어떻게 해결했는 지를 중점으로 글을 작성하려고 한다!@BeforeAll테스트 코드를 작성하다 보면 테스트 수행 전에 초기 설정이 필요하거..

    스프링 트랜잭션

    목차 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 선언적 트랜잭션 🤔 스프링 트랜잭션 스프링은 트랜잭션 동기화, 트랜잭션 추상화, 선언적 트랜잭션을 지원한다 우리가 자주 사용하는 @Transactional 어노테이션이 바로 선언적 트랙잭션이다 트랜잭션 동기화 먼저 기존에는 트랜잭션 동기화가 어떻게 이루어졌고 어떤 문제점이 있었으며, 스프링은 어떻게 해결했는 지 살펴보자. 스프링 없이 트랜잭션을 동기화 하는 코드(jdbc 사용) public interface MemberRepository { Long save(Connection conn, Member member); Member findById(Connection conn, Long id); } public class MemberService { ....

    [스프링] Spring AOP

    목차 1. AOP란? 2. AOP 용어 3. Spring AOP 동작 과정 4. AOP 적용 예시 코드 🤔 AOP란? AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미한다 AOP는 핵심적인 비즈니스 로직으로부터 횡단 관심사 를 분리하는 것에 목적을 둔다 횡단 관심사: 애플리케이션에서 코드가 중복되고, 강력하게 결합되어 있어 다른 로직과 분리할 수 없는 애플리케이션 로직 ex) 로깅, 트랜잭션, 예외 처리, 보안 등 횡단 관심사 코드 예시 카트에 물건을 담는 메서드에 실행 시간을 측정하는 부가 기능 추가 만약 이 메서드 뿐 만 아니라 모든 메서드에 실행 시간을 측정하는 기능을 추가해야 된다면 코드가 중복되고, 강력하게 결합되는 문제가 발생 AOP를 이용하여 부..

    [스프링] 1 + N

    [스프링] 1 + N

    목차 1. 1+N이란? 2. 즉시로딩과 지연로딩 3. 1+N이 발생하는 케이스 4. 1+N의 해결방안 🤔 1 + N 이란? 연관관계가 설정된 엔티티 사이에서 한 엔티티(1)를 조회하였을 때, 조회된 엔티티의 개수(N)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제이다 예를 들어 게시글(1) 과 댓글(N) 이 있을 때, 게시글과 댓글이 조인된 형태로 함께 조회되기를 기대했지만, 게시글을 조회(1)하는 쿼리와 댓글을 조회(N)하는 쿼리가 따로 날아가며 총 1+N 번 쿼리가 발생 DBMS에서 직접 쿼리를 작성하면 발생하지 않을 문제지만, JPA와 같은 ORM이 등장하고, 쿼리가 자동화 되면서 발생되는 문제이다 즉시로딩 과 지연로딩 에 대한 개념을 먼저 설명하고, 간단한 예제를 통해 1 + N..

    [스프링] 동시 요청 처리(멀티쓰레드)

    [스프링] 동시 요청 처리(멀티쓰레드)

    앞선 포스팅에서 클라이언트가 싱글톤으로 관리되는 서블릿을 동시에 요청했을 때, 멀티쓰레드를 사용하여 이를 지원한다고 했었다. 멀티쓰레드가 뭔지, 어떻게 동시 요청을 처리하는지 간단히 알아보자. 멀티쓰레드 멀티쓰레드 이전에 쓰레드의 개념부터 살펴보자. 쓰레드란? 쓰레드란 프로그램(프로세스)실행의 단위이며 하나의 프로세스는 여러 개의 쓰레드로 구성이 가능하다 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며 실행 상태가 변할 때마다 문맥교환(Context Switching)을 수행한다 즉, 쓰레드는 프로그램 실행의 단위라고 생각하면 된다. 위 그림에서 서블릿 객체를 호출하는 것을 프로그램의 실행 단위인 쓰레드가 하..

    [스프링] 서블릿(Servlet)과 서블릿 컨테이너(Servlet Container)

    [스프링] 서블릿(Servlet)과 서블릿 컨테이너(Servlet Container)

    스프링으로 웹 개발을 하다 보면 서블릿이라는 단어를 자주 접하게 된다. 그만큼 중요한 개념이므로 웹 개발을 하기 위해 필수적으로 이해해야한다. 서블릿과 서블릿 컨테이너가 무엇인지 알아보자. 서블릿(Servlet)이란? 서블릿은 웹 프로그래밍에서 클라이언트 요청을 처리하고, 처리 결과를 클라이언트에 전송하는 기술이다. 쉽게 말해 자바를 사용하여 웹을 만들기 위해 필요한 기술이다. 이전 웹 프로그램들은 클라이언트의 요청에 대한 응답으로 정적인 페이지를 넘겨주었지만, 현재는 동적인 페이지를 가공하기 위해 웹 서버가 다른 곳에 도움을 요청한 후 가공된 페이지를 넘겨주게 된다. 이때 서블릿을 사용하게 되면 웹 페이지를 동적으로 생성하여 클라이언트에게 반환해 줄 수 있다. 서블릿의 특징 서블릿을 사용하게 되면, 1..

    [스프링] 싱글톤과 @Configuration

    스프링을 공부하다 보면 싱글톤이라는 말을 접하게 된다. 싱글톤이란 무엇인지, 스프링에서 싱글톤을 어떻게 적용하는지 알아보자 싱글톤이란? 싱글톤이란 디자인패턴 중 하나로, 객체의 인스턴스가 하나만 생성되는 패턴을 말한다. public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // 생성자는 외부에서 호출못하게 private 으로 지정해야 한다. } public static Singleton getInstance() { return instance; } public void say() { System.out.println("hi, there"); } } 위의 코드와 같이 외부에서 객체 ..

    [스프링] 스프링 빈과 빈 등록 방법

    [스프링] 스프링 빈과 빈 등록 방법

    스프링 빈이란? 스프링 빈이란 스프링 컨테이너에서 관리되는 자바 객체를 말한다. 일반적으로 우리가 new를 통해 생성하는 자바 객체와 달리 스프링 빈은 스프링 컨테이너에 의해 생성되고 관리되어지는 객체를 말한다. 스프링 컨테이너란? 스프링 컨테이너는 스프링 빈의 생명 주기를 관리, 즉 스프링 빈의 생성과 소멸을 관리하고, 생성된 빈을 빈 저장소에 등록하여 적절하게 사용할 수 있도록 빈을 관리해주는 컨테이너(공간)이다. 스프링 컨테이너는 스프링 빈에게 여러 기능을 제공하는데 대표적으로 의존관계 주입(DI)과 제어의 역전(IOC)이다. DI(의존관계 주입) 각 객체들은 다른 객체들과 의존관계를 가질 수 있다. 스프링 컨테이너는 이런 의존관계를 적절하게 주입해주는 역할을 한다. 스프링 빈 등록 정보를 통해 스..