일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- redis
- PSA
- Rest
- di
- Generic
- mockito
- JSON
- *
- reflection
- IOC
- OOP
- bounded context
- MSA
- spring
- JWT
- SOA
- AOP
- Java
- Exception
- Spring Data Redis
- 서명
- bytecode
- ddd
- Transaction
- rest api
- jvm
- junit5
- Today
- Total
목록분류 전체보기 (25)
개발자일기
ListenableFuture를 이용해서 NIO구현하기 AsyncRestTemplate를 Netty의 NioEventLoopGroup(NIO)를 이용하여 Api 호출 NIO사용시 API호출후 블로킹 않고 호출결과가 도달시 NIO를 통해 event를 전달받는 방식이다. 내부적으론 비블록킹 callback 방식, callback이 NioEventLoopGroup thread로 호출됨 결과적으로는 request, reponse는 웹서버의 쓰레드가 처리 API의 호출은 네티의 NioEventLoopGroup (논블럭킹 방식)으로 네티 쓰레드 사용 @Slf4j @RestController @RequestMapping() public class ListenableFutureController { AsyncRestT..
Mockito mockito란? mock객체를 생성하여 stubbing하고 검증 할수 있도록 한다. 용어 정리 Stub : 테스트에서 호출된 요청에 대한 미리 준비해둔 결과를 제공 Mock : stub + 행동에 대한 검증을 위한것 Spy : 실제 구현체 + mock, 실제 구현체의 일부만 mocking 할수있는 기능 제공 시작하기 스프링 부트 2.2+ 프로젝트 생성시 spring-boot-starter-test에서 자동으로 Mockito 추가해 줌. 스프링 부트 쓰지 않는다면, 의존성 직접 추가. org.mockito mockito-core 3.1.0 test org.mockito mockito-junit-jupiter 3.1.0 test Mock 생성 직접 생성 MemberService memberS..
스프링의 핵심 : POJO 스프링의 목적은 무엇일까? 자바 엔터프라이즈 어플리케이션을 쉽게 개발할수 있도록 한것이다. 그 목적을 위해서 POJO가 핵심이 되는 것이다. POJO란 plain old java object의 약자 간단한 자바 오프젝트를 의미하는데, JAVA EE의 무겁고 복잡한 프레임워크를 대항하기 위한 용어이다. POJO 프로그래밍? 특정 기술이나 환경에 의존적이지 않는 Object 다른 기술, 환경에서도 동작할수 있도록 확장성 지원 표준 스펙을 가진 인터페이스 하이버네이트를 사용하기 위해서 직접 하이버네이트에 의존하지 않고, 스프링의 JPA같은 표준인터페이스를 가진 POJO프레임워크를 제공 POJO는 추상화가 잘되어있기 때문에 테스트가 쉽고, 객체지향인 설계를 제공해 확장성을 높여주고, ..
더 자바, "코드를 테스트 하는 다양한 방법" 수강후 정리 카오스 엔지니어링 : 실제 환경 시스템의 불확실성에 대한 테스트 언제쓰냐 인프라장애시 Fallback이 정상 동작하는지 의존하는 api의 인프라장애시 fallback api가 정상 동작 하는지 시스템 지연에 따른 알람이 정상적으로 호출되는지 Chaos Monkey 스프링 부트 어플리케이션에서 적용해볼수 있는 라이브러리 https://codecentric.github.io/chaos-monkey-spring-boot/ 카오스 멍키 스프링 부트 주요 개념 공격 대상 (Watcher) : 해당 어노테이션을 가지고 있는 컴포넌트에 공격을 할수 있다. @RestController @Controller @Service @Repository @Componen..
Testcontainers JAVA 테스트에서 도커를 이용 할수있는 라이브러리 https://www.testcontainers.org 왜 도커를 사용해서 할까 좀더 실제 환경에 맞는 테스트 환경을 구축 별도의 환경 구축이 필요없다. 레디스, DB같은것들의 실행이 필요없다 디비 테스트를 할경우에는 H2메모리 디비를 쓰면 되자 않나? 디비경우 디비마다 트랜잭션 기본 설정같은게 다르니, 실제 환경이랑 다를수 있다. 그러면 단점은? 테스트의 속도가 느려진다. 컨테이너를 실행, 종료의 시간이 다ㅗㅅ 걸림 도커 컨테이너 디비를 이용한 테스트 시작하기 JUnit과 함께 : https://www.testcontainers.org/test_framework_integration/junit_5/ org.testcontai..
단위(Unit) 테스트 JUnit이란? 자바 단위테스트 프레임워크 xUnit이란 ? 자바만 단위 테스트 프레임워크 있는게 아니라, 다른언어도 단위테스트를 위한 프레임워크가 존재 이를 통칭해서 Xunit이라한다. CUnit(c), PHPUnit(PHP) 등등 그럼 단위 테스트란?? 단위를 바라보는 두가지 시각 객체지향에서는 하나의 클래스를 단위로 본다.(개인적 선호) 기능 자체를 단위로 본다. 예를들어 컨트롤러 서버스 까지 하나의 단위로 묶는다. 해당 단위가 정상적으로 동작하는지 검증이다. JUnit5 링크 : https://junit.org/junit5/docs/current/user-guide 3개의 컴포넌트(모듈로 구성) Junit Platform : 테스트의 런처, TestEngine의 인터페이스 ..
먼저 SOA (Service Oriented Architecture)에 대해 알아보자. 쉽게 말해 여러 서비스(비지니스)들을 모듈화해서 각각의 모듈들을 조립해서 사용하는 아키텍쳐이다. MSA(Micro Servie Architecture) 란 무엇인가? MSA는 SOA의 모듈화 패러다임을 상속을 한 개념이다. MSA란 하나의 큰 모놀로틱 어플리케이션에서 여러개의 작은 서비스로 분리하고 독립적으로 관리하는 아키텍쳐이다. 두개 모두 서비스를 분리한다는 공통점이 있다. 두개의 차이점은 무엇일까? 가장큰 차이점은 SOA는 서비스들의 재사용성에 중점, MSA는 서비스들의 독립성을 추구. 예를들어 A팀에서 a서비스를 B팀에서도 사용할수 있다. MSA는 서비스가 공유되기보단 독립적 실행되는것을 지향 디비의 경우도 S..
ByteCode 조작 compile결과인 bytecode를 조작 classLoader가 클래스를 읽어올때 javaagent의 premain에서 조작시도 이미 런타임에 조작시 클래스가 메모리에 로드된 상태임 ByteBuddy 라이브러리 사용 APM툴 같은것들이 조작을이용한다. Reflection 클래스로더에 의해 메모리에 로딩된 class정보 조회 필드, 메소드 , 상위 클래스, 상위 인터페이스를 가져옴, 어노테이션 annotion을 @Retetion을 runtime까지 유지시키면 annotion정보를 가져올수있다. Class를 이용한 객체생성 Constructor.newInstance(), Constructor.newInstance(params) 적합한 생성자 존재 필요 필드에 접근 private에도 접..