728x90
반응형

개념 정리/Spring 7

[Spring] JUnit5에서 예외테스트 하기

스프링 공부를 하던 중 예외테스트를 하는 법을 보았다. 하지만 직접 코드를 처보니 expected 자체가 존재하지 않았다. 알고 보니 아래 방식은 JUnit5에서 예외를 테스트 하는 법이다. @Test(expected = IllegalStateException.class) public void ExceptionTest() throws Exception { //code fail("IllegalStateException 예외 발생해야 한다"); } 위 메소드에서 IllegalStateException이 발생한다고 예측한다는 뜻이다. 만약 발생하지 않는다면 fail안에 있는 메시지가 출력된다. 그럼 JUnit5에서는 어떻게 할까? @Test public void ExceptionTest() throws Exc..

[Spring] ShedLock을 통해 서버간 스케줄 중복 수행 방지

꽤 스케일이 큰 프로젝트를 하다보면 서버를 여러개 열게 된다. 알림을 보내거나 이메일을 보내는 작업 등과 같이 여러개의 서버를 통해 같은 이벤트를 수행하려다 이를 중복 수행하게 되는 경우가 있다. 이런 경우를 방지하기 위해 스프링에서는 @SchedulerLock 어노테이션을 지원해준다. https://github.com/lukas-krecan/ShedLock GitHub - lukas-krecan/ShedLock: Distributed lock for your scheduled tasks Distributed lock for your scheduled tasks. Contribute to lukas-krecan/ShedLock development by creating an account on GitHu..

[Spring] @Scheduled 이용해 특정 시간마다 함수 호출하기

@Scheduled 란? Spring에서는 @Scheduled 어노테이션을 이용해 특정 시각에 혹은 일정 시간 간격마다 함수를 호출할 수 있다. 사용법 @EnableScheduling @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } } 먼저 @EnableScheduling 어노테이션을 Application 클래스에 추가한다. @Service public class TestService { //매일 아침 8시 실행 @Scheduled(cron = "0 0 8 * * *") public voi..

[Spring Security] 기본 로그인 화면 제거

프로젝트를 진행하다 로그인을 완성하지 못한상태로 다른 기능을 테스트를 해야할 경우가 생겼다. 로그인을 해야 유저정보를 추가하고 이를 이용해 테스트를 할 수 있는데 아직 로그인 기능을 완성하지 않아 막혔다. 테스트 코드를 짜면 해볼 수 있을것 같은데 아직 실력이 부족해 시간이 오래 걸릴것 같았다. 그렇게 방법을 찾던 도중 Security 기능을 끌 수 있다는 글을 보았다. 역시 스프링은 웬만한건 지원해준다. @SpringBootApplication(exclude = SecurityAutoConfiguration.class) public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestAppli..

[Spring] UUID와 increment PK를 언제 사용할까?

이번에 프로젝트를 진행하며 코드를 보고 있었는데 UUID를 사용하는 것을 보았다. 평소에 UUID의 존재를 알고 있었지만 당연하게 AUTO INCREMENT나 IDENTITY방식을 쓰고 있었다. 그래서 UUID와 AUTO INCREMENT를 언제 구분해서 사용하는지 궁금해져 알아보았다. 1. UUID UUID는 범용 고유 식별자라는 뜻으로 128bit의 긴 고유값을 PK로 사용한다. 고유값을 PK로 사용하기 때문에 중복될 일이 없는 수준이다. 2. AUTO INCREMENT auto increment는 PK를 순서대로 1부터 자동으로 증가시키며 부여해주는 것이다. 3. 비교 먼저 UUID의 장점은 보안이다. AUTO INCREMENT는 키 값이 외부에 노출될 수도 있기 때문에 보안상 위험하다. API를 ..

[Spring] 스프링 DTO

1. 기본적인 스프링의 구조 앞에서 Controller와 Service, Repository, Domain 에 대해 정리했었다. 이제 위 그림을 보면 사이사이 DTO라는 단어가 보인다. DTO는 위 그림과 같이 구조 사이 사이 데이터를 전달할 때 사용하며 계층을 나누어 관리한다. 2. DTO 란? DTO(Data Transfer Object) 단어 그대로 데이터 전달 객체라는 뜻이며, 데이터를 전달하기 위한 객체이다. 보통 DTO는 두가지로 나뉜다. Client가 요청을 보낼 때 사용하는 RequestDto, 다시 Client에게 응답을 해주는 ResponseDto이다. DTO는 오직 데이터를 전달하기 위한 객체로 getter와 setter만을 가진다. 하지만 setter는 데이터의 변경을 위해 존재하기..

[Spring] 스프링 Controller / Service / Repository / Domain

이번에 Spring에 대해 공부하게 되었는데 내용을 정리해봐야겠다. 1. 웹 애플리케이션 계층 구조 Domain : 엔티티 선언을 통해 DB에 저장되는 객체들을 구현한다. 즉, 테이블의 각 Column들이 하나의 도메인이라 보면 된다. Repository : 데이터베이스에 직접적으로 접근해 도메인 객체를 DB에 저장하고 관리한다. 보통 Interface로 만들고 JpaRepository를 상속받아 사용한다. SQL문을 직접 입력할 수도 있다. Controller : 웹 MVC의 컨트롤러 역할, Client가 요청을 하면 그 요청을 실질적으로 수행하는 서비스를 호출한다. Service : 핵심 비즈니스 로직을 구현, 주로 리포지토리를 이용해 CRUD을 구현한다. 2. Domain package hello...

728x90
반응형