Back-end/Spring
-
Spring-Cloud-Config서버Back-end/Spring 2021. 12. 17. 22:42
문제 무중단 배포를 하려고 하면 로드 밸런서 하나에 서버가 최소 2개 이상은 필요로합니다. 그렇다면 저희는 서버를 4개 운영하고 있습니다. 하나하나 설정파일을 Git Pull해서 서버중단 후 배포해야할까요? 물론 이러한 불편함은 감수할 수 있지만 큰 문제점이 있습니다. 바로 코드와 설정 파일이 서로 의존성을 가지고 있어 설정파일 내용을 바꾸려고 하면 무조건 서버를 끄고 다시 실행해야하는 불편함이 있습니다. 아래 대표적인 예시를 들겠습니다. @Value("${username}") pritvate String username; 위의 @Value어노테이션은 환경설정 파일의 값을 정해놓고 읽어오는 변수입니다. 만약 서버의 admin권한을 가지려면 위의 필드에 값이 꼭 들어가야하는 경우 이름을 계속 필요할 때 바..
-
Spring(6) - Mock, MockitoBack-end/Spring 2021. 8. 25. 17:02
이번 포스팅은 Short Url API 프로젝트 도중 CI를 이용하려고 테스트 코드를 짜던 중 DB에 접근하고 설정해줘야하는것이 까다로웠습니다. 그래서 이러한 데이터들을 코드에서 바로 지정해 쉽게 테스트를 구성 할 수 없을까? 라는 생각이 들었습니다. 그 때 눈에 들어온 방법이 "Mockito"입니다. Mockito는 Mock을 Java Mock객체를 이용한 테스트를 편하게 해주는 라이브러리입니다. 그럼 자세히 살펴보겠습니다. Mock이란? Mock은 Object입니다. 테스트를 수행 할 경우 "가짜"모듈을 생성하여 테스트의 효율성을 높이는 데사용되는 객체입니다. 그럼 왜 이런 걸 사용할까요? 예를 들어 DB에서 멤버를 꺼내오는 작업이 있다고 합시다. 근데 여기서 DB에서 조회기능을 수행, DB에 있는 ..
-
Spring(5) - @TransactionalBack-end/Spring 2021. 8. 18. 15:46
이번 글은 흔히 쓰이는 @Transactional 어노테이션에 대해서 알아보려고합니다. 앞서 트랜잭션에 관한 글을 읽고 이 글을 읽으시면 이해가 잘될것입니다. 트랜잭션 어노테이션의 내부 동작은 크게 3가지로 나뉩니다. PlatformTransactionManager을 인터페이스로 활용하고 있습니다. 안의 메소드를 살펴보겠습니다. public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void..
-
Spring(4) - 의존 관계 주입, DI(Dependency Injection)Back-end/Spring 2021. 7. 11. 22:13
오늘은 DI에 대해서 포스팅하겠다. DI란 개념이 진짜 처음에는 와닿지 않았다. 어떻게 컨테이너가 주입을 해줄까? 그리고 왜 DI를 사용할까라는 생각이 계속 들었다. 그렇게 계속 Spring을 사용하여 코드를 짜니 이해가 됬다. DI에 대한 나의 생각을 정리해보겠다. 일단 DI(Dependency Injection)은 뭘까? 바로 우리가 @ApplicationContext로 컨테이너를 생성하고 @Component로 Bean을 등록하여 @Autowired를 통해 의존 관계를 주입시키는 것이다. 처음에 이해가 안 될 것이다. 아래의 그림을 참고하자. 위의 그림과 같이 Bean을 등록하면 DI 컨테이너가 Bean들을 관리한다. 그럼 어떻게 Bean을 이용해서 주입할까? 일단 쉽게 생각해서 Service나 Re..