[우아한테크코스] 5월 4일 TIL
[Network] 네트워크 기본
- 서비스는 네트워크를 통해 사용자에게 전달되므로 안정적인 서비스 운영을 위해 공부해야 한다.
- 통신망: 노드들과 노드를 연결하는 링크로 구성된 하나의 시스템
- 노드: IP를 가지고 통신할 수 있는 대상(인스턴스, 네트워크 장비 등)
- ping: 현 네트워크 상태를 체크할 때 사용하는 Internet Control Message Protocol 중 하나로 IP 정보만으로 서버에 요청이 가능한지 확인한다.
- ICMP: IP가 신뢰성을 보장하지 않아 오류정보 발견 및 보고 기능을 담당하는 프로토콜 (TCP 아님)
[Spring] test
build.gradle에 test{useJUnitPlatform()}
의 의미
JUnit Vintage, JUnit Jupiter, JUnit Platform
junit api (@Display, @Test 등등)은 junit-jupiter-api로부터 오고, junit-jupiter-engine에서 동작,
이는 junit-platform-engin -> junit-platform-launcher
- junit의 동작 원리
[Spring] @SpringBootTest의 동작 원리
spring application의 빈 사용,
webEnvironment에서 웹 서버를 시작하는 기능 포함
@ExtendWith는 junit5에서 제공하는 라이브러리
- webEnvironment
mock: mocking된 웹 환경 제공
RANDOM_PORT: 실제 톰캣을 띄워 환경 구성
DEFINED_PORT: 지정한 포트에 톰캣을 띄워 환경 구성
none: 기본적인 applicationContext 로드
@AutoConfigureMockMvc: Mock 테스트에 필요한 의존성 제공으로 로직상 테스트 진행
[Spring] 통합테스트, 단위테스트
-
단위테스트
독립된 객체, 메서드의 검증
빠르고 작은 규모를 검증할 수 있다.
내가 무언가 검증하는데에 필요한 객체가 협력 객체
통합 Sociable 테스트
고립 Solitary 테스트
ex @WebMvcTest, @DataJpaTest, @RestClientTest, @JsonTest -
통합테스트
독립된 단위가 서로 연결될 때 올바르게 작동하는지 확인하는 테스트
db와 동작하는지, 서버와 통신하는지 등
모든 설정과 bean 로드
오래 걸리고 무겁다. 디버깅이 어렵다.
ex @SpringBootTest-properties, webEnvironment(Mock, @AutoConfigureMockMvc) -
End-to-End Test
사용자의 입장에서 시나리오, 기능 등을 테스트하는 것
ex 사용자(client)처럼 api요청을 보내면 원하는 값이 오는지 테스트
[Spring] Restassured vs MockMVC
-
RestAssured
rest 웹 서비스 검증을 위한 라이브러리로 end to end test인 통합테스트에 사용(@SpringBootTest로 전체 로직 테스트)
의존성 추가 필요testImplementation 'io.rest-assured:rest-assured:3.3.0'
등록된 spring bean 전부 로드
BDD 스타일 구현으로 가독성 좋음 -
MockMVC: 애플리케이션 서버에 배포없이 스프링 mvc의 동작을 재현할 수 있는 라이브러리
Presentation Layer의 bean 로드해서 빠름
모두 Mock 객체로 처리해주는 비용 존재
[Spring] annotation의 동작 원리
어노테이션 프로세싱은 컴파일 타임에 이루어진다.
어노테이션 프로세서는 JVM 위에서 돌아간다.
javac는 어노테이션 프로세서를 위해 jvm 실행
[Spring] ReflectionUtils
findField
, setField
, getField
, makeAccessible
메서드를 이용해 내부 변수를 원하는대로 바꾸는 클래스이다.
private 변수의 경우에도 field.setAccessible(true);
를 통해 접근할 수 있게 된다.
Field field = ReflectionUtils.findField(Station.class, "id");
field.setAccessible(true);
ReflectionUtils.setField(field, station, ++seq);
return station;
[node] 설치 관련
노드 버전 낮추기: sudo ln -sf /usr/local/bin/node node
출처
npm background 실행: npm run dev &