Spring

    스프링 멀티모듈 나누기 개념 및 실습(메이븐, 그래들)

    네이버 웹툰 인턴십 과제를 진행하다가 서비스가 커지면서 기존 프로젝트를 멀티모듈로 나눠서 개발하게 되었는데 개인적으로 서버 통신 관련해서 튜토리얼 당시 그래들을 통해서 간단한 멀티 모듈을 진행하였었는데 인턴 과정에서는 메이븐을 통해서 진행하게 되어 개념을 정리하고 그래들, 메이븐 실습을 진행하겠습니다. 메이븐 프로젝트 코드 주소 : https://github.com/whdals7337/maven-multi-module 그래들 프로젝트 코드 주소 : https://github.com/whdals7337/gradle-multi-module 멀티모듈이란? 멀티 모듈이란 개념은 한 프로젝트 안에 라이브러리처럼 사용 가능한 상태로 모듈들을 구성하고 그것들을 다른 모듈에서 가져다 쓸 수 있도록 만드는 것이라고 이해..

    트랜잭션 격리 수준

    트랜잭션 격리 수준 데이터베이스에 N개의 트랜잭션을 동시에 처리하다 보면 같은 데이터에 접근할 수 있다. 트랜잭션의 목적은 로직의 흐름 속에서 데이터를 일관되게 처리하기 위한 것이나, 동시에 같은 데이터에 write 접근을 하는 경우엔 문제가 될 수 있다. 이러한 상황에서 트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준을 말한다. 단순하게 생각하면 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 격리수준에는 4가지가 있다. READ_UNCOMMITED (level 0) READ_COMMITED (level 1) REPEATABLE_READ (level 2) SERIALIZABLE (level 3) 격리 수준이 높아질수록 동시성(Concurrency..

    Spring에서 사용하는 어노테이션 정리

    면접에서 @SpringBootApplication에 대해서 질문을 받았는데 분명 스프링부트 프로젝트에서 항상 사용하는데 제대로 답변하지 못한 충격으로 Spring에서 사용하는 어노테이션들을 볼때마다 정리 할려고 만든 글입니다. 제대로 설명 못하는 것들을 전부 적어두고 정리해 나아갈려고합니다 .ㅎ 미정리 목록 // Lombok @Slf4j - 로그를 남기기 위해 Logger 변수를 선언을 따로 하지않게 해주는 어노테이션 @Getter - 클래스나 필드 위에 적용하면 getter 메서드를 생성 @Setter - 클래스나 필드 위에 적용하면 setter 메서드를 생성 @NoArgsConstructor - 파라미터가 없는 기본 생성자 생성 @RequiredArgsConstructor - final, @NonNu..

    Spring 트랜잭션 전파

    Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 스프링에서는 어떻게 처리하고 있을까요? 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있을 것입니다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 간단한 실습 코드를 먼저 작성합니다. import lombok.ToString; import javax.persistence.*; @Entity @ToString public class TestObject { @Id @GeneratedValue(..

    springboot에서 redis 다루기

    스프링 스타터를 통해서 프로젝트를 만들고 사용하지는 IDE에서 열어줍니다. 테스트 환경에서 embedded redis 사용하기 위해서 아래의 의존성을 추가해 줍니다. implementation 'it.ozimov:embedded-redis:0.7.2' redis을 repository로 사용하기 위해서 configuartion 설정을 해줍니다. Jedis, Lettuce만 현재 공식지원 Jedis가 거의 업데이트 되지 않음 두 라이브러리 성능 테스트(https://jojoldu.tistory.com/418) Spring Boot에서는 다음과 같이 기본 의존성인 lettuce - (기본 의존성이 lettuce인 이유: https://github.com/spring-projects/spring-session/..

    Spring Interceptor

    Spring Interceptor 인터셉터는 중간에서 가로챈다는 의미를 가진다. 스프링에서도 말 그대로 중간에 요청을 가로채서 어떠한 일을 하는 것을 말한다. 인터셉터의 정식 명칭은 핸들러 인터셉터(Handler Interceptor)이다. 클라이언트의 요청이 컨트롤러에 가기 전에 가로채고, 응답이 클라이언트에게 가기전에 가로챈다. 즉, 인터셉터는 DispatcherServlet이 컨트롤러를 요청하기 전,후에 요청과 응답을 가로채서 가공할 수 있도록 해준다. 1. HandlerInterceptor 인터페이스를 상속받아 interceptor 구현 HandlerInterceptor 인터페이스를 상속받으면, 아래 3개의 메소드를 오버라이드한다. - preHandle : 클라이언트의 요청을 컨트롤러에 전달하기 ..

    Spring Filter

    HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 서블릿 2.3 규약에 새롭게 추가되었다. 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종자원(서블릿/JSP/기타 문서) 사이에 위치하며 클라이언트의 요청 정보를 알맞게 변경할 수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답(response) 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다. 이러한 필터는 인코딩, CORS, XSS, LOG, 인증, 권한 등 을 구현하는데 사용합니다. 스프링 시큐리티, 네이버의 lucy-xss-servelt-fiter 등이 대표적이 예입니다. 필터는 여러개 를 등록하고 요청이 해당 필터를 순서대로 통과하도록 할수 있습니다. 이런 필터들을 필터 체인이..

    Spring AOP

    AOP란? Aspect-Oriented Programming의 약자이다. 흩어진 Aspect들을 모아서 모듈화 하는 기법이다. 서로 다른 클래스라고 하더라도 비슷한 기능을 하는 부분이 있다. DB를 연결하거나 끊거나 하는 작업이 대표적인 예시이다. 이로한 부분을 횡단 관심사라고 불린다. 이런 횡단 관심사와 비즈니스 로직을 분리하고 해당 관심사가 필요한 경우 aspect를 통해서 설정한 부분에서 실행되게 한다. AOP 주요 개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Adv..