본문 바로가기

전체 글

(33)
[Kotlin] - Channels Channel을 사용하면 서로 다른 코루틴들이 손쉽게 하나의 값을 공유할 수 있다. 채널은 BlockingQueue 와 유사하게 동작하며 값을넣기 위해 send() 를 사용하고, 값을 꺼내기 위해서 recieve() 를 사용한다. Channelfun main(){ val ch = Channel() runBlocking { launch { for(x in 1..5) { ch.send(x * x) println("-----") } } repeat(5){ println(ch.receive()) } }}// -----// 1// 4// ..
[Kotlin] - 기본 문법 정리 그냥 막 정리하는 코틀린의 기본문법 !!!! ✅ call back 함수 ✅fun main(){ doSomething() // 아무 동작 안함 doSomething{num, str -> println("$num : $str")} // 1 : 1}fun doSomething(callback: (Int, String) -> Unit = {_, _ -> }) { callback(1, "1")}doSomething{num, str -> println("$num : $str")} == doSomething( {num, str -> println("$num : $str")} ) ✅ generic type에서의 call back 함수 ✅fun main(){ processData(111)..
[Kotlin] 제네릭 generic타입 코틀린 + 스프링을 사용하는 회사 코드에 제네릭 타입이 많이 사용되는데 이참에 제네릭에 대해 정리하고 넘어가고자 한다 ! ✅ What is Generic ✅ 먼저 제네릭이란,자료형의 객체들을 다루는 메서드나 클래스에서 컴파일 시간에 자료형을 검사해 적당한 자료형을 선택할 수 있게 해주는 것 이다보통 앵글 브래킷() 사이에 형식 매개변수(자료형을 대표하는 용어, T와 같이 특정 영문의 대문자 사용)를 사용해 선언한다fun main(){ val appleStr = Fruit("apple") val bananaInt = Fruit(111)}class Fruit(t: T) { val value = t} 그렇다면 굳이 Any 를 사용하지 않고 generic 을 사용하는 이유가 뭘까 ✅ Any ty..
[Kotlin] 코루틴 (2) - Cancellation and Timeouts 중단함수 : 실행 중 취소 가능한 구간마다 취소 요청이 있었는지 확인하고 요청이 있었다면 실행을 즉시 취소하도록 구현runBlocking { val job = launch(Dispatchers.Default) { for (i in 1..10) { yield() println("I'm sleeping $i ...") Thread.sleep(500L) } } delay(1300L) println("main : I'm tired of waiting!") job.cancelAndJoin() println("main : Now I can quit.")}runBlocking { val job =..
[Kotlin] 코루틴 (1) - Basic GlobalScope.launch {} : 코루틴을 생성하기 위한 코루틴 빌더이며 실행중인 스레드를 블록하지 않음fun main(){ GlobalScope.launch { delay(1000) //1 println("world") //오기전에 종료 } println("hello") //2}// hello - 위의 코드는 hello를 찍은 후 쓰레드가 종료된다  runBlocking{} : 주어진 블록이 완료될때까지 현재 스레드를 멈추는 새로운 코루틴을 생성하여 실행하는 코루틴 빌더runBlocking { GlobalScope.launch { delay(1000) //1 println("world") //오기전에 종료 } ..
Kafka + Docker + Docker-compose 예제 내가 최종적으로 구현하고 싶은 것은 웹스크랩핑을 통해 얻은 데이터를 카프카를 통해 분산처리 하여 디비에 저장하는 것이다그러기 위해선 우선 연습용으로 로컬에서 Docker로 Kafka를 설치하는 방법을 기록해보려고 한다(상용서버에서는 최소 3개의 Kafka 클러스터를 구성한다고 하는데 aws 프리티어 계정을 쓰고 있는 현재로써는 우선 한개만...ㅜ)  Docker, docker-compose 가 설치되어 있다는 전재하에 진행해보겠다 !  kafka-compose.yml파일 생성우선 Docker로 kafka를 설치하기 위한 kafka-compose.yml파일을 만들어주자kafka-compose.ymlversion: '3.8'services: zookeeper: image: wurstmeister/z..
AWS 프리티어 계정인데 과금된 이유 feat.퍼블릭 IPv4 최근에 aws 프리티어 계정으로 인스턴스를 생성해서 배포 작업을 진행했다그런데 갑자기 요금을 납부하라는 메일이 왔다..!난 분명 프리티어 계정으로 진행중이고 만든지 얼마 안된 프로젝트라 용량도 크지 않은데.. 우선 어디서 비용이 청구되었는지 알아보자 빨간박스를 보면 ec2가 아닌 또다른 퍼블릭 IP가 사용되고 있었고 이것에 대한 비용이 청구되고 있었다  어떤 것이 public IP를 사용하고 있는지 확인해보자 AWS 콘솔 > VPC IP Address Manager > 퍼블릭 IP 인사이트 > 퍼블릭 IP주소 섹션 확인  지금은 삭제되어서 안보이지만 위의 EC2 public IP제외하고 RDS관련 public IP가 또 존재하고 있었다 ㅜㅜ 이전에 rds만들 때 내 로컬 피시의 디비 툴에서도 rds를 접..
[Spring boot] Gmail SMTP ( Simple Mail Transfer Protocol) 이메일 전송하는 방법 JAVA에선 이미 메일을 보낼 수 있게 개발 해놓은 인터페이스가 존재하는데 바로 'JavaMailSender' 이다. 그 중 나는 Gmail SMTP 를 사용해서 이메일을 발송할 것이다. SMTP ( Simple Mail Transfer Protocol) : 메일 서버에서 인터넷을 통해 보내는 전자 메일에 사용하는 전자 메일 프로토콜 먼저 코드를 작성하기에 앞서 보안 선처리가 필요하다. 구글 로그인 후 계정 > 보안 에 들어간다 2단계 인증 로그인이 완료되었으면 검색에 '앱비밀번호' 를 검색해서 들어가준다 그리고 다음과 같이 앱 비밀번호를 하나 만들어준다 나는 앱 이름을 my_exchange로 설정하였고 설정을 완료하면 다음과 같이 앱 비밀번호를 생성해준다 생성된 비밀번호는 코드에서 사용할 것이므로 따..