본문 바로가기
728x90
반응형

Spring136

data.sql 적용하기 (스프링부트 버전 2.7.x 이상 ) application.yml 기준 spring: jpa: defer-datasource-initialization: true # 더미 데이터 적용 sql: init: mode: always # 더미 데이터 적용 resources 폴더 아래 data.sql 생성 DB에 먼저 넣어두고 싶은 sql 문을 작성해서 실행하면 완료. insert into ROLE (role) values ('USER'); 참고 https://devvkkid.tistory.com/262 data.sql이 동작하지 않을 때, 의심해봐야 할 것 스프링에서 test 패키지 내부에 data.sql을 넣은 것만으로도 data.sql 내부의 쿼리를 실행시킬 수 있다. 이런 방법으로 테스트용 더미 데이터를 생성하고 테스트를 동작시킬 수 있다. .. 2022. 11. 10.
Mockito BDDMockito 의 차이점 단위테스를 처음 작성하면서 스택오버플로우 및 여러 블로그를 참고했다. 어느 블로그에서는 When() . thenReturn() 으로 사용하는 것을 보고 참고해 작성하고 있는데, 다른 문제로 인해 스택오버플로우를 보니 given() . willReturn () 을 사용해서 작성했다. 두가지 모두 Mockito 를 사용하므로 동작에 대한 차이점은 없다고 한다. 나는 given() . willReturn() 방식이 가독성 면으로 편리해서 사용하기로 했다. 차이점에 대해서 자세한 내용은 아래 블로그를 참고했다. https://velog.io/@lxxjn0/Mockito%EC%99%80-BDDMockito%EB%8A%94-%EB%AD%90%EA%B0%80-%EB%8B%A4%EB%A5%BC%EA%B9%8C Mock.. 2022. 11. 4.
단위테스트(Unit Test) 를 작성하는 이유 단위테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위 테스트이다. 하나의 기능을 테스트하며, "어떤 기능을 실행하면 어떤 결과가 나온다" 라는 테스트를 진행한다. 장점 1. 의도한 대로 작동하는지 검증할 수 있다 2. 부수적으로 코드 변경에 의한 사이드 이펙트를 최대한 줄일 수 있는 예방책 3. 리팩토링으로 인한 코드 수정이 필요한 상황에서 유연하고 안정적인 대응 통합테스트는 서로 상호작용을 하는 서비스, 레포지토리 등 컴포넌트들이 구동된 상태에서 테스트를 진행하기 때문에, 비용이 상당히 커진다. 반면 단위테스트는 해당 부분만 독립적으로 테스트하기 때문에, 빠르게 실행하며 문제여부를 확인할 수 있다. 일반 애플리케이션은 1개의 기능을 처리하기 위해서는 다른 객체들과 서로 메시지를 주고받.. 2022. 11. 4.
docker 기초명령어 docker 기본 명령어 정리 ( cmd 창 기준 , httpd 기준 ) docker hub 에서 설치항목 및 설치 명령어를 확인할 수 있다. images : docker 에 설치된 프로그램 container : images 를 실행하는 것 https://docs.docker.com/ Docker Documentation docs.docker.com 목록 명령어 httpd 설치 ( 아파치 ) docker pull httpd 설치된 프로그램 조회 docker images 설치된 프로그램 으로 컨테이너 생성하기 ( httpd 기준 ) docker run httpd -> 이름이 랜덤하게 설정된다 docker run --name ws2 httpd -> 이름이 ws2 인 httpd 를 생성한다 사용하고 있는 프로.. 2022. 10. 29.
PSA(Portable Service Abstraction) 이란? PSA 는 한마디로 잘만든 인터페이스 라고 정의할 수 있다. 스프링을 사용하면 서비스 추상화를 통해 특정 환경이나 서버, 기술에 종속되지 않으며 유연한 애플리케이션 개발을 할 수 있다. 스프링에서는 추상화 계층을 통해 구체적인 기술과 환경에 종속되지 않도록 한다. 따라서, 추상화 계층을 사용해서 어떤 기술을 내에 숨기고 개발자에게 편의성을 제공해준다. 예로, ORM(객체 관계매핑) 이 새롭게 등장했을 때, ORM 기술을 사용하고 싶었다면, ORM 프레임워크 중 하나인 Hibernate를 사용해야 한다. 객체가 Hibernate 에 직접 의존하는 순간 기술에 종속적으로 되기 때문에, POJO 라고 할 수 없다. 스프링이 POJO를 유지하면서 Hibernate 를 사용할 수 있는 이유는 PSA 를 적용했기 .. 2022. 10. 28.
AOP 란 무엇인가? + 예제 AOP(관점지향 프로그래밍) 를 간단히 설명하면 공통 처리 등의 '횡단적 관심사(부가기능)'를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정함으로써 개발자는 실현해야할 기능인 '중심적 관심사'에만 집중하도록 해주는 것이다. AOP 는 내부적으로 아래와 같이 동작한다. 1. 다이나믹 프록시 객체의 생성 요청 2. 포인트컷을 통해 부가 기능 대상 여부 확인 -> 어디다가 적용할 건지 3. 어드바이스로 부가 기능 적용 4. 실제 기능 처리 AspectJ 라는 AOP 외의 기술이 있다. AspectJ 는 프록시를 이용하지 않았으며 CGLib 이라는 바이트 조작 라이브러리를 사용한다. 타깃 객체의 바이트를 고쳐서 부가기능을 직접 넣어주는 방법이다. 따라서 코드를 분리하지 않는다. 프록시를 사용하지 않고 복.. 2022. 10. 26.
DI 의존성 주입 방법에 대해 알아보자 먼저 의존성이란 무엇인지 알아보자. 사용하는 객체 A 와 사용되는 객체 B 가 있다고 예를 들어본다. 아래는 new 키워드를 사용하는 예시이다. 더보기 A는 B 를 사용하기 위해 new 키워드를 이용해 생성하고 B 의 메서드를 사용한다. ( DI 컨테이너에서는 new 키워드를 사용하지 않고, 스프링 프레임워크가 대신한다 ) 아래와 같은 형태를 A 는 B 에 의존한다 라고 한다. class A { B b = new B(); b.methodX(); } 위의 상황에서 설계가 변경되어서 B 클래스에서 C 클래스로 변경하고, methodY 를 호출해야한다고 하면 아래와 같이 코드를 변경해야 한다. class A { C c = new C(); c.methodY(); } 이러한 방식으로 설계가 변경된다면 10군데든 .. 2022. 10. 26.
Ioc(Inversion of Control) 제어의 역전이란? IoC ( Inversion of Control ) 제어의 역전 의 의미 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다라는 의미이다. 이전에는 개발자가 직접 객체를 생성하고 관리해 프로그램의 제어의 흐름을 스스로 관리했다. IoC 는 왜 필요할까? 결합도를 낮춰서, 변경에 유연한 코드를 작성할 수 있는 구조를 만들 수 있다. 스프링에서도 IoC 기능을 할 수 있는 IoC 컨테이너(=스프링컨테이너, DI컨테이너, ApplicationContext)를 제공한다. IoC 컨테이너에서 관리되는 객체를 Bean 이라고 부른다. 객체의 생성을 책임지며, 의존성을 관리한다. 개발자들이 객체를 직접 생성할 수 있지만, 컨테이너에게 역할을 위임한다. 스프링에서의 객체 생성 및 실행되는 순서는 아래.. 2022. 10. 26.
@Bean 과 @Component 비교 스프링 MVC 에서 사용하는 @Controller , @Service , @Repository 등 빈으로 등록하는 방법을 계속 써왔으나, 스프링시큐리티를 공부하면서 @Configuration 과 @Bean , @Component를 사용하면서 어떤 상황에 구분해 사용해야 하나 궁금했다. 미리 알아보면 아래와 같다. Bean Component 메소드에 적용 클래스에 적용 개발자가 컨트롤이 불가능한 외부 라이브러리 사용시 개발자가 직접 컨트롤이 가능한 내부 클래스에 사용 클래스 자체를 빈으로 등록하고 싶을 때 @Configuration 안에서 @Bean으로 등록한 메서드만 유연하게 등록하고 싶을 때 스프링은 개발의 제어권이 스프링 컨테이너(Ioc 컨테이너)에 있다. 제어권이 개발자가 아닌 스프링에 있는것을 I.. 2022. 10. 24.
728x90
반응형