본문 바로가기

Spring&SpringBoot31

서버 구조 바로 알기 - WAS? Tomcat? Servlet Conainer???? (feat. Jar vs War) 스프링 부트의 패키징 방식의 차이점! Jar : 단독으로 실행 가능한 자바 프로그램 패키지 형식으로, 애플리케이션 코드와 라이브러리 코드가 모두 포함됨. Jar로 패키징한 스프링부트 애플리케이션은 내장 서버를 포함하므로 JVM에서 바로 실행 가능하다. War : 웹 애플리케이션을 패키징하는 형식으로, 웹 애플리케이션에 필요한 파일들을 하나의 파일로 압축. War 파일은 톰캣과 같은 WAS에 배포되어 실행되며, 서블릿 컨테이너에서 실행한다. …을 알아보다가 WAS와 웹 서버, 서블릿 컨테이너가 갑자기 헷갈려서 개념을 다시 정리해보았다. Web Server! 웹 서버는 클라이언트로부터 요청을 받고 응답을 하는 소프트웨어를 말한다. (하드웨어의 의미로 본다면 웹 서버 소프트웨어가 동작하는 컴퓨터를 말한다) 클.. 2023. 5. 14.
Containerless Spring Boot 들어가기에 앞서 이 문서는 토비 님의 스프링 부트 강의 독립 실행형 애플리케이션 파트의 큰 흐름을 요약합니다. 개선 과정 전체를 따라해보고싶다면 강의를 구입해서 들어보세요. 정말 좋은 강의입니닷 이러한 내용을 다룹니다. 스프링 애플리케이션이 무엇에 독립적으로 실행된다는 의미인가? 스프링 애플리케이션이 뜨기 위해서 서블릿 컨테이너가 왜 필요한가? 요청과 응답을 처리하기 위해 필요한 작업은 무엇인가? 서블릿 등록 코드를 어떻게 개선하기 위해 도입한 패턴은 무엇인가? 스프링은 어떻게 매핑과 바인딩 정보를 등록하는가? 스프링부트는 어떻게 서블릿 컨테이너와 스프링 컨테이너 초기화를 모듈화하는가? Containerless 컨테이너리스를 지향한다는 것은 서블릿 컨테이너와 관련된 복잡한 설정과 지식을 몰라도 배포를 할.. 2023. 5. 12.
애노테이션 트랜잭션과 테스트 트랜잭션 애노테이션 지금까지 포인트컷 패턴이나 트랜잭션 속성을 이용해 트랜잭션을 일괄적으로 적용하는 방법을 알아보았다. 이번에는 클래스나 메소드에 세밀하게 튜닝된 트랜잭션 속성을 적용할 때 사용하면 좋은 트랜잭션 애노테이션을 사용해본다. 일괄적으로 속성을 부여하는 대신 직접 타깃에 트랜잭션 속성정보를 가진 애노테이션을 지정하는 방법을 사용한다. 포인트컷은 따로 지정할 필요가 없다. 애노테이션이 붙은 메소드나 클래스가 곧 포인트컷으로 선정한 결과가 되기 때문이다. 트랜잭션 속성을 애노테이션에 지정하면 된다. 애노테이션으로 트랜잭션을 지정하는 방법은 유연하면서도 직관적이고 간단해서 애용되는 방법이다. 하지만 일괄적인 패턴에 트랜잭션을 적용할 때는 포인트컷을 사용하는 것이 더 경제적이고 빠뜨릴 위험도 적을 것.. 2023. 4. 20.
TransactionInterceptor 적용하기 TransactionInerceptor는 스프링이 제공하는 트랜잭션 경계설정 어드바이스이다. 프록시로 동작하므로 타깃이 호출될 때 트랜잭션을 시작해서 부가기능을 적용한다. TransactionInerceptor는 트랜잭션 정의를 메소드 이름 패턴을 이용해서 다르게 지정할 수 있는 방법을 제공한다. 트랜잭션 정의 TransactionDefinition 인터페이스는 트랜잭션의 동작방식에 영향을 줄 수 있는 네 가지 속성을 정의한다. 트랜잭션 전파 : 트랜잭션 실행 도중에 독자적인 트랜잭션을 가진 코드를 실행해야할 때 어떤 영향을 미치게 할 것인지 결정한다. PROPAGATION_REQUIRED : 이미 진행중인 트랜잭션이 있으면 참여한다. PROPAGATION_REQUIRES_NEW : 새로 시작한다. PR.. 2023. 4. 20.
스프링 AOP 요약 : 부가기능은 핵심기능에 강하게 의존하므로 OOP의 객체 DI 방식으로는 중복을 완벽하게 제거할 수 없다. 그래서 관점(부가기능)을 중심으로 프로그래밍하는 AOP를 도입하여 부가기능을 완벽하게 모듈화했다. 스프링 AOP는 프록시를 사용하여 타깃 메소드가 호출되는 순간에만 부가기능을 적용하다록 만들었다. 프록시를 사용하면 별다른 설정 없이 스프링 컨테이너와 JDK 프록시만으로도 처리가 가능하기 때문이다. 5장부터 6장까지 트랜잭션 코드를 서비스 코드로부터 완벽하게 분리하는 방법을 알아보았다. 그 결과 트랜잭션 코드는 어떠한 서비스에도 중복 없이 적용될 수 있게 되었다. 이 과정에서 다이나믹 프록시, 빈 후처리기 등과 같은 다양한 기술을 사용했다. 목표는 중복 제거와 변경 유연성 목표는 핵심기능에 부여.. 2023. 4. 20.
트랜잭션 코드 분리를 위한 개선 과정 : 프록시, 다이나믹 프록시, 팩토리 빈, 빈 후처리기, 포인트컷 목표 서비스의 트랜잭션 코드 분리. 확장 가능한 설계를 고려하여 서비스나 부가기능이 늘어나더라도 코드 변경을 최소화할 것 개선 과정 Step1 : 서비스에 데코레이터 적용 서비스의 트랜잭션 코드를 분리하기 위해 데코레이터 패턴을 적용하여 프록시를 만듦. 이때 프록시는 클라이언트와 타깃 사이에서 요청을 중개하며 기능 위임과 부가기능을 적용할 메소드를 선택하고 부가기능을 적용하는 역할을 한다. 프록시를 코드로 직접 생성하면 기능위임 코드를 일일이 작성해야하고, 부가기능 코드가 메소드와 타깃마다 반복된다. Step2 : 다이나믹 프록시로 변경 프록시 클래스를 코드로 작성해서 발생한 문제이므로 런타임 시점에 동적으로 프록시 클래스를 만드는 방법을 적용한다. 다이나믹 프록시는 리플렉션으로 생성한다. 리플렉션을 사.. 2023. 4. 20.