본문 바로가기
728x90

카테고리249

13장 - 코루틴 스코프 만들기 코루틴 스코프 객체를 만드는 가장 쉬운 방법은 CoroutineScope 팩토리 함수를 사용하는 것입니다 fun main() { // CoroutineScope 팩토리 함수를 사용하여 코루틴 스코프 생성 val scope = CoroutineScope(Dispatchers.Default) // 코루틴 스코프 내에서 코루틴 실행 scope.launch { // 비동기적으로 작업 수행 delay(1000L) println("CoroutineScope Example") } // 메인 스레드를 1.5초 동안 차단하여 코루틴이 완료되기를 기다림 Thread.sleep(1500L) } Ktor 에서 모든 핸들러는 기본적으로 중단 함수이다.따로 스코프를 만들 필요는 거의 없습니다 https://tech.kakaopa.. 2024. 2. 26.
1장 - 데이터 타입 자바스크립트의 데이터 타입에는 크게 두가지가 있다 기본형 과 참조형 기본형 숫자, 문자열, 불리언, null, undefined 등, ES6 에서 심볼 추가 참조형 객체, 배얄, 함수, 날짜, 정규표현식 등, ES6 에서 Map, WeakMap, Set, WeakSet 등 Data Type │ ├─ Primitive Type │ ├─ Number │ ├─ String │ ├─ Boolean │ ├─ Null │ ├─ Undefined │ └─ Symbol │ └─ Reference Type ─ Object ├─ Array ├─ Function ├─ Date ├─ RegExp ├─ Map, WeakMap ├─ Set, WeakSet └─ ... 일반적으로 기본형은 할당이나 연산 시 복제되고 참조형은 참조된.. 2024. 2. 22.
12장 - 디스패처 코틀린 코루틴 라이브러리가 제공하는 중요한 기능은 코루틴이 실행되어야 할 스레드를 결정할 수 있다는 것 디스패처를 이용해 이러한 기능을 사용할 수 있다. 기본 디스패처 디스패처를 설정하지 않으면 기본적으로 설정되는 디스패처는 CPU 집약적인 연산을 수행하도록 설계된 DIpatchers.Default 입니다. 코드가 실행되는 컴퓨터의 CPI 개수와 동일한 수(최소 두 개 이상)의 스레드 풀을 가지고 있습니다. runBlocking은 주로 테스트나 메인 함수와 같은 블로킹 환경에서 코루틴 코드를 실행하기 위해 사용됩니다. runBlocking을 호출하면 호출한 스레드를 블로킹합니다. 즉, runBlocking 블록 내의 모든 코루틴 작업이 완료될 때까지 현재 스레드가 대기 상태가 됩니다. runBlockin.. 2024. 2. 20.
11장 - 코루틴 스코프 함수 코루틴에서 GlobalScope를 사용하여 async를 호출하면, 생성된 코루틴은 부모 코루틴과 아무런 관계가 없습니다. 즉, GlobalScope로 시작된 코루틴은 애플리케이션의 전체 수명 주기와 연결되어 있으며, 특정 부모 코루틴에 속하지 않습니다. 부모코루틴이 취소되어도 'GlobalScope' 로 시작된 코루틴은 취소되지 않습니다. GlobalScope로 시작된 코루틴은 애플리케이션의 생명 주기와 직접 연결되므로, 애플리케이션이 종료될 때까지 종료되지 않을 수 있습니다. 에러 처리가 부모-자식 관계에 의존하는 일반적인 코루틴 구조와는 다르게, GlobalScope 코루틴에서 발생하는 에러는 자동으로 부모에게 전파되지 않습니다. suspend fun getUserProfile(scope: Corou.. 2024. 2. 20.
헥사고날 아키텍처 src/ └── main/ └── kotlin/ └── com/ └── yourapp/ ├── common/ or core/ or shared/ │ ├── mail/ │ │ ├── port/ │ │ │ └── MailService.kt │ │ └── infrastructure/ │ │ └── MailServiceImpl.kt ├── user/ │ ├── controller/ │ ├── domain/ │ ├── service/ │ └── infrastructure/ └── otherdomain/ ├── controller/ ├── domain/ ├── service/ └── infrastructure/ --- 애플리케이션의 핵심 비즈니스 로직을 외부요소(ex:데이터베이스, 웹 프레임워크 등)로부터 분리하여.. 2024. 2. 12.
JPA 및 Spring Data JPA에서 find와 get 프리픽스 find 메서드 find 메서드는 데이터를 찾으려고 시도하지만, 해당 데이터가 없는 경우 null을 반환할 수 있습니다. 예를 들어, findById 메서드는 찾으려는 엔티티의 인스턴스가 존재하지 않을 때 null을 포함할 수 있는 Optional를 반환합니다. get 메서드 get 프리픽스를 사용하는 메서드는 데이터가 반드시 존재한다는 기대 하에 사용됩니다. 예를 들어, getOne 메서드는 실제 엔티티 대신 프록시를 반환하며, 해당 엔티티가 실제로 존재하지 않는 경우에 접근 시점에 EntityNotFoundException을 던집니다. 이는 get 메서드가 호출될 때 데이터가 반드시 존재해야 한다는 기대를 반영합니다. 그러나 이러한 메서드는 실제로 데이터에 접근하기 전까지는 존재 여부를 확인하지 않습.. 2024. 2. 11.
@SpringBootTest 옵션 @SpringBootTest는 Spring Boot 기반의 테스트를 위한 통합 테스트 어노테이션입니다. 이 어노테이션을 사용함으로써, Spring Boot 애플리케이션의 전체 컨텍스트를 테스트에 로드할 수 있습니다. 즉, @SpringBootTest는 실제 애플리케이션을 실행할 때처럼 모든 스프링 빈을 로드하고, 의존성 주입, 설정 파일 처리 등을 포함한 전체 애플리케이션 환경을 테스트에서도 사용할 수 있도록 해줍니다. @SpringBootTest에 webEnvironment 속성을 설정하는 것은 테스트 시에 웹 환경을 어떻게 구성할지를 결정합니다. SpringBootTest.WebEnvironment에는 다음과 같은 옵션이 있습니다: MOCK: 기본값으로, 내장된 서블릿 컨테이너를 실행하지 않고, 웹 .. 2024. 2. 11.
용어 Regression - 회귀 버그 잘 동작하는 기능들이 이번 배포로 인해서, 동작하지 않던 시절로 '회귀'하는 버그가 생겼을때. 2024. 2. 10.
명언인가 명언인가 의 글을 옮김 괴로우면 더 자주해라. 내가 생각하는 기회란? 어떤걸 하기 위해서는 문제가 되는 단계가 있다면 어떻게 해결할지 생각하고, 해결할 수 없는 문제라면 그 문제의 전 단계를 해결하라. 삶에 커다란 문제가 있다면 그건 당신이 작은 사람 이라는 뜻이다. 문제의 크기를 처다보지 말고 당신의 크기를 처다보라. 오늘이 내 인생의 마지막 날이라면, 오늘 내가 하려던 일을 할 것인가? 휼륭한 팀이 훌륭한 선수를 만든다. 기술을 향상시키는 정도로 연습의 효과를 판단한다면 의식적인 연습이 가장 으뜸이다. 다른 사람으로부터 열렬한 욕구를 불러 일으켜라, 이것을 해내는 자는 세상을 얻게 될 것이다. 다른 사람에게 진심으로 관심을 가져라. 개인적으로 "괴로우면 더 자주해라" 라는 문구가 맘에 듦. 2024. 2. 9.
728x90