본문 바로가기
Skill Stacks/Java_Spring

스프링 MVC

by JayAlex07 2023. 8. 23.

스프링 MVC

 

 

Lombok

 

매번 기계적, 같은 코드를 작성하는 것을, 자동화해주는 라이브러리다

  • @Setter, @Getter : Java Bean 규약에 있는 setter, getter를 자동으로 생성해준다
  • @ToString : Object에 기본 구현되 ToString 대신 객체의 데이터를 보여주는 ToString을 자동으로 생성해준다
    • 객체가 담고 있는 값들을 쉽게 출력할 수 있도록 도와준다
  • @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor : 객체 생성자를 자동으로 생성
    • @RequiredArgsConstructor : final 타입이 있으면, 생성자가 필수적으로 있어야 한다
  • @Data : Getter, Setter, ToString, Equals, hasCode 등 다양한 기능을 모두 제공해준다
  • @Builder : 빌더 패턴을 자동 생성하여 제공해준다
  • @Slf4j : 해당 클래스의 logger를 자동으로 생성해준다
  • @UtilityClass : static method만 제공하는 유틸리티 성격의 클래스들의 생성자를 private으로 만들어서 객체 생성을 할 수 없도록 한다
@Getter
@Setter
@ToString
@NoArgsConstructor            // 생성자가 없어도 됨 (기본이라서 사용 안 해도 된다)
@AllArgsConstructor            // 생성자가 다 있어야 함
@RequiredArgsConstructor    // 필수적으로 생성자가 있어야 한다
@Slf4j                        // logger를 쉽게 사용할 수 있다
public class Practice {
    private String name;
    private String nickName;
    private int number;

    public void log() {
        log.error("currently under error");
    }
}

// Getter와 Setter가 Lombok으로 통해서 자동으로 만들어졌다
// getName, setName, getNickName, setNickName, getNumber, setNumber
// 위와 같이 getter와 setter를 불러온다

// ToString을 사용하면 나중에 .toString()을 사용하면, 제대로 출력을 해준다


@AllArgsConstructor    
@Data
public class Practice {
    private String name;
    private String nickName;
    private int number;
}
// Data에 위에 있는 내용 모두 포함이 된다

 

H2 DB

 

MySQL 과 Oracle과 비슷하지만, 조금 다르다

  • 설치할 때에 덜 부담스럽다 (설치 안 하고, 쉽게 사용할 수 있다)
  • 메모리/파일 관계형 DB이고 가볍고 빠르기 때문에 개발 단계에 활용하거나 테스트 코드에도 자주 활용이 된다

 

application.yml (H2 설치하기)

spring:
  datasource:
    url:  jdbc:h2:~/test
    username: sa
    password: 
    driverClassName: org.h2.Driver
  h2:
    console:
      enabled: true
  jpa:
    defer-datasource-initialization: true
    database-platform: H2
    hibernate:
      ddl-auto: create-drop
    open-in-view: false
    properties:
      hibernate:
        format_sql: true
        show_sql: true


 

트랜잭션

 

ACID

  • Atomic (원자성)
    • 모든 작업이 실행되거나, 모두 실행되지 않아야 한다
  • Consistency (일관성)
    • 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다
  • Isolation (격리성)
    • 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다
    • A 트랜잭션이 하는 일을 B 트랜잭션은 모르게 해야 한다
  • Durability (지속성)
    • commit을 하게 되면 지속(저장)이 꼭 된다

 

Redis

 

싱글 스레드 기반의 NoSQL과 비슷한 개념

  • 기본적으로 메모리 DB를 사용한다
  • 빠른 성능을 가지고 있다 (용량은 적다)

 


JUnit, Spring Boot, Mockito

테스트

셀프 코드 리뷰를 할 수 있다

  • 리팩토링도 할 수 있게 된다
    • 코드를 향상 시킬 수 있다는 것

 

 

JUnit (ctrl + shift + t)

  • Java용으로 개발된 유닛테스트 프레임워크
  • 단위테스트를 실행하고 결과를 검증해서 전체 결과를 리포트 해준다
  • spring-boot-starter-test에 기본적으로 Junit5가 포함된다
  • 사용자가 직접 동작시킬 수도 있고, Gradle이나 Maven 등을 통해 빌드하면서 테스트가 가능하다
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Test {
    @Test
    void testSomething() {
        String something = "Hello" + "world";

        assertEquals("Hello World", something);
    }
}
  • assertEquals(예상한 값, 나오는 값)
    • 실행하면, 나오는 값이 예상한 값과 같은지 확인을 해준다

📌테스트를 할 때에, 사전에 데이터를 미리 저장하고, 그 데이터를 기반으로 테스트를 해야 한다 (귀찮을 수도 있음)

 

Mockito

  • Mock (가짜)를 만들어서 개발자가 원하는 방식으로 동작하게 만들기
    • Mockito 라이브러리 활용
@ExtendWith(MockitoExtension.class)
class AccountServiceTest {

    // 가짜 repository만들기
    @Mock
    private AccountRepository accountRepository;

    // 위에서 만든 Mock을 accountService에 Inject해준다
    // AccountService는 AccountRepository를 파라미터로 받고 있다
    @InjectMocks
    private AccountService accountService;

    @Test
    @DisplayName("계좌 조회 성공")
    void testMock() {
    //given
        given(accountRepository.findById(anyLong()))
                .willReturn(Optional.of(Account.builder()
                        .accountStatus(AccountStatus.UNREGISTERED)
                        .accountNumber("65789")
                        .build()));
    //when
        Account account = accountService.getAccount(4555L);
    //then
        assertEquals("65789", account.getAccountNumber());
        assertEquals(AccountStatus.UNREGISTERED, account.getAccountStatus());
    }
}
Mockito에는 when().thenReturn() 이 있고, BddMockito를 사용할 때에는 given().thenReturn()을 사용한다
  • BDDMockito는 Mockito 프레임워크를 상속하고 있으며, 기능도 같다 (쉽게 읽힐 수 있도록 도와주는 것)
  • given이라는 상태가 주어졌을 때, thenReturn 어떤 결과가 되는지 테스트 해주는 것

'Skill Stacks > Java_Spring' 카테고리의 다른 글

스프링 테스트 코드  (0) 2023.08.30
스프링 패키지 구조  (0) 2023.08.29
스프링 구동시키기  (0) 2023.08.28
스프링 Initializer  (0) 2023.08.24
스프링  (0) 2023.08.14