본문 바로가기

Spring/Spring-detail47

spring boot docker mysql 기본설정 3306 포트가 사용중이라면 아래와 같이 검색 후 종료가 가능하다. 3306 포트 찾기 : netstat -ano | findstr :3306 포트 죽이기(관리자모드로 실행) : taskkill /f /pid 5544 (pid 번호가 5544 일 경우 ) mysql 이미지 설치 버전지정 후 설치 : docker pull mysql:8.0.17 최신버전 : docker pull mysql 도커 이미지 확인 docker images 도커 설치 후 실행 + 한글 설정 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD= --name mysql:8.0.17 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_.. 2023. 1. 9.
spring 스케줄러(Scheduler) 적용하기 스프링 스케줄러에 대해 알아보고 적용해보려고 한다. ( 개인 프로젝트에 적용해보려고 했는데, 아직 어디에 쓸지 생각이 안나서 보류중이지만, 이후 기능을 추가하거나 나중에 무조건 쓸거라 생각한다. ) 스케줄러의 종류로는 Scheduler 말고 Quartz 라는 방식도 있다고 하는데 단순한 스케줄러 구현에서는 Scheduler 를 사용한다고 한다. Quartz는 조금 더 세밀하게 동작이 가능하지만 구현이 복잡하다는 단점을 가지고 있다. 먼저, 가장 기본이 되는 것부터 동작하는 것에 대해 이해하고 Quartz 는 나중에 필요할 때 추가로 공부해보려고 한다. 스케줄러는 간편하게 @Scheduled 어노테이션을 사용해서 일정한 시간 간격, 또는 특정 시간에 코드가 실행되도록 설정할 수 있도록 도와준다. 설정관련된.. 2023. 1. 4.
Springboot AOP 적용 + 어노테이션 기반 https://josteady.tistory.com/746 AOP 란 무엇인가? + 예제 AOP(관점지향 프로그래밍) 를 간단히 설명하면 공통 처리 등의 '횡단적 관심사(부가기능)'를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정함으로써 개발자는 실현해야할 기능인 '중심적 josteady.tistory.com 이전에 공부하면서 작성한 포스팅에 앞서, 현재 프로젝트에 적용함에 있어 다시한번 정리하고자 한다. 비슷한 내용이지만, 어노테이션을 직접 만들어본 경험이 없어 AOP 를 적용시키면서 같이 학습하는 좋은 경험이 되었다. AOP 는 공통 처리 기능(부가 기능) 을 추출해서 프로그램의 여러 곳에서 호출해 사용할 수 있도록 해준다. 내가 만들 AOP의 기능은 단순한 메서드 실행 시간 측정이다. AOP.. 2023. 1. 3.
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.
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.