Backend/공부,개념
-
[Kotlin] Kotest, mockkBackend/공부,개념 2023. 9. 3. 17:50
코틀린 스타일 테스트코드 기존에 사용하던 Junit, AssertJ, Mockito를 이용해서도 테스트코드를 작성할 수 있지만, 중괄호를 활용한 코틀린 dsl 스타일을 적용하기 쉽지 않은데 kotest와 mockk(코틀린에서 사용하는 mocking라이브러리)를 이용하면 Mocking이나 assertion 과정에서 Kotlin dsl이나 infix를 사용해 조금 더 코틀린스럽게 테스트코드를 작성할 수 있다. Kotest 코틀린 진영에서 가장 많이 사용되는 테스트 프레임워크 코틀린 DSL을 활용해 테스트코드를 작성할 수 있다. 다양한 테스트 레이아웃(StringSpec, FunSpec, BehaviorSpec 등 ) 제공 Kotlin DSL 스타일의 Assertion 기능 제공 # kotlin dsl이란 D..
-
[Kotlin] DSL (Domain Specific Language) 이란Backend/공부,개념 2023. 7. 18. 23:41
DSL Domain Specific Language 특정 과업, 영역에 초점을 맞추고 그 영역에 필요하지 않은 기능을 없앤 영역 특화 언어 ex) SQL, 정규식 SQL 문장을 실행할 때 클래스나 함수를 선언하는 것부터 시작하지 않고, 모든 SQL 문장은 첫 키워드가 수행하려는 연산의 종류를 지정하고, 각 연산은 처리해야 할 작업에 맞춰 각각 서로 다른 문법과 키워드를 사용한다. 범용 프로그래밍 언어 컴퓨터로 풀 수 있는 모든 문제를 충분히 풀수있는 기능을 제공 ex) C, C++ 언어 DSL의 특징 선언적 선언적이다 명령적(범용 프로그래밍 언어) 어떤 연산을 완수하기 위해 필요한 각 단계를 순서대로 정확히 기술하는 명령적 언어와는 달리, 선언적 언어는 원하는 결과를 기술하기만 하고 세부 실행은 언어를 ..
-
[Monitoring] APM, Spring Boot Actuator, micrometerBackend/공부,개념 2023. 5. 24. 03:18
서버 모니터링에 사용되는 기술/개념들을 하나씩 찍먹 해보아야겠다. 다른 블로그나 공식 문서에 아주 잘 나와있어서 나는 대략 개념만 이해할 정도로 적으려고 한다 @_ @ APM(Application Performance Management/Monitoring) : 애플리케이션 성능 관리 / 모니터링 어느 구간에서, 어느 사용자가, 어떤 애플리케이션 사용 중 어느 과정에서 문제가 생긴 것인지를 신속하게 탐지하는 것이 중요함 APM 구성 APM은 Agent / Repository Server / Application Server로 구성됨 Agent : 웹 서버에 설치되어 데이터를 수집한 뒤 Repository Server : Agent에서 데이터를 전송하거나 Agent서버로 pull하여 데이터를 받아감 App..
-
Local Cache, Rate LimiterBackend/공부,개념 2023. 4. 15. 21:51
Local Cache vs Global Cache Local Cache 서버마다 캐시 따로 저장 로컬 서버 장비의 리소스 이용 (Memory, Disk) 서버 내에서 작동하므로 속도가 빠름 (네트워크를 타지 않음) 코드 내에서 Map에 넣고 꺼내오는 방식과 유사하다. (직접 로컬캐시를 구현한다면ConcurrentHashMap) 분산 시스템에서 데이터 정합성이 깨질 수 있다. ex) Caffeine Cache, Ehache Global Cache 여러 서버에서 캐시 서버에 접근하여 참조 서버간 데이터 공유 가능 네트워크 트래픽 이용 데이터 분산하여 저장 (Master / Slave, Sharding) ex) Redis 출처 Local Cache, Global Cache 차이 Guava Cache Googl..
-
헥사고날 아키텍처 공부중..Backend/공부,개념 2023. 3. 6. 01:43
쓰면서 정리하고 있어서 좀 더 보완해서 다시 수정할 예정 레이어드 아키텍처 인터페이스를 통해 의존성을 낮춘다고 해도, 데이터 액세스 계층이 변경되었을 때 비즈니스 로직 계층의 클래스가 데이터 액세스 계층에 존재하는 인터페이스를 의존하기 때문에 영향을 받을 수밖에 없다. 데이터 액세스 인터페이스의 위치 데이터 액세스 계층에 존재 항상 하위 계층에 의존해야함 애플리케이션 -> 비즈니스 로직이 핵심임 프레젠테이션, 데이터 액세스 계층을 저수준영역이라 하고 비즈니스 영역을 고수준영역이라고 하는데 레이어드 아키텍처의 규칙에 따르면 고수준 영역이 저수준 영역에 의존하게 되는 상태 DIP를 이용해 데이터 액세스 계층에서 정의한 인터페이스 위치를 비즈니스로직 계층으로 이동시켰음. 데이터 액세스 계층의 구현체는 비즈니스..
-
[Spring] Spring DataBackend/공부,개념 2023. 2. 27. 04:34
회사에서 신규 프로젝트에 도입할 기술들을 정하고 있어서 개념정리할 겸 적어본다. JDBC (Java DataBase Connectivity) - Java와 데이터베이스를 연결하기 위한 Java 표준 인터페이스 - 다양한 DB미들웨어의 드라이버 제공, JVM기반에서 어디든지 사용 가능 - class.forName(driver), driverManager.getConnection, con.prepareStatement, pstmt.executeQuery 그 완전 기본 형태 - 커넥션 종료시 일일이 close 해주어야 함 Spring JDBC - 스프링에서 DB를 사용하기 위한 오리지널 디펜던시 - JDBC사용 시 자주 사용하는 객체와 코드를 클래스 화하였음 - Connection 열고 닫기, Statemen..
-
[Spring Boot] Validation 유효성 검증Backend/공부,개념 2022. 2. 17. 22:25
Validation - 유효성 검증 우리는 입력하는 값에 대한 유효성 검사를 해야할 필요가 있다. 단순한 예로 회원가입 ID/PW 값에 대해서도 ID는 4자리 이상이어야 하며, PW에는 소문자,영어,특수문자와 같은 문자들이 들어가야한다는 조건이 있다. 더 단순하게는 null에 대한 처리도 있을 것이다. 프론트엔드 단에서도 이 값에 대해서 검사를 하겠지만, 그것만 믿고 요청 부분에 유효성 검사를 하지 않으면 business, db 레이어에서 올바르지 않은 값으로 인해 서버에 문제가 생길 수 있다. 그렇다면 유효성 검사(Validation)은 어디서 해야할까? 데이터 검증이 여러 계층에 걸쳐서 이루어 진다면, 동일한 내용에 대한 검증 로직이 중복되거나 계층간 검증 로직의 불일치로 오류가 생길 것이다. 이를 ..
-
[Spring Boot] Controller의 Request data 받아오는 방식Backend/공부,개념 2022. 2. 12. 16:59
github에 정리한 내용 중 너무 복잡하거나 불확실한 내용 빼고 정리해서 다시 올려본다. SpringBoot에서 RestController 구현 시 요청을 받아오는 방법에 대해서 정리해보려고 한다. 지금 정리하는 방식에는 form data 형식의 요청은 일단 제외하고 클라이언트가 json형태의 데이터를 보내거나, url query에 담아서 보내는 방식만을 정리하려고 한다. ( content-type: application/json ) 1. HTTP Method 먼저, HTTP METHOD 중 GET, POST, DELETE에 대해서 간단히만 정리하면 다음과 같다. GET 리소스 조회에 사용 query(쿼리 스트링, 파라미터)로 전달 body 지원 일부 안함 (Getmapping일 때 requestBod..