전체 글

안녕하세요 💻
23년도에 네이버 부스트캠프에서는 좋은 동료들과 저 자신의 "성장"을 위해 달렸다면, 24년도에 싸피에서 저 자신에 대한 "증명"을 위해 달렸던 것 같습니다.  싸피 지원싸피 지원 단계에서는 크게 준비를 하지 않았던 것 같습니다.네이버 부스트캠프,  우테코 프리코스, 학업을 모두 병행하다 보니 싸피의 우선순위는 후순위로 생각했던 것 같습니다.지금 와서 생각해 보면 동시에 여러 개를 잡으려고 하다 보니, 온전하게 하나에 집중하지 못한 것이 마음에 걸리네요. 코딩테스트는 프로젝트 준비 때문에 준비를 하지 못했고, 언어 이슈로 한문제를 풀지 못했었습니다.문제 난이도가 쉬웠던 탓에 탈락을 예상했지만, 합격을 해서 조금 놀랐었습니다..ㅎ(입과 후 동기들에게 물어보니 대부분 2문제를 풀었더라고요) 이후, 면접 준비..
디자인 패턴디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안으로 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 모범 사례다. 디자인 패턴은 객체 지향 4대 특성(캡슐화,상속,추상화,다형성)과 설계 원칙(SOLID)을 기반으로 구현되어 있다. 패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하고 있기 때문이다.알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의패턴은 해결책에 대한 더 상위 수준의 설명알고리즘은 요리법에 비유할 수 있지만 패턴은 요리법이 아닌 청사진에 더 가깝다. 알고리즘과 요리법 둘 다 목표를 달성하기 위한 명확..
· Skils/Kotlin
이전 글[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-2)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)개요launch 코루틴 빌더를 통해 생성되는 코루틴은 기본적으로 작업의 결과를 반환하지 않는다.코루틴으로부터 결과를 수신해야 하는 상황이 생길 것이다. 예를 들어 네트워크 통신 이후, 응답을 받아 처리해야 할 경우 네트워크 통신을 실행하는 코루틴으로부터 결과를 수신받아야 한다. 코루틴 라이브러리는 비동기 작업으로부터 결과를 수신해야 하는 경우를 위해 async 코루틴 빌더를 통해 코루틴으로부터 결괏값을 수신받을 수 있도록 한다.launch..
· Skils/Kotlin
이전 글[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)코루틴의 취소 확인cancel 함수나, cancelAndJoin 함수는 코루틴을 즉시 취소하는 것이 아닌 취소 요청을 보내는 함수이다. 취소 요청을 받은 코루틴이 요청을 확인하는 시점에 비로소 취소가 된다. 만약 코루틴이 취소 요청을 확인하지 않는다면 영원히 취소되지 않는다.그렇다면 이 코루틴들은 언제 취소를 확인할까? 코루틴이 취소를 확인하는 시점은 일반적으로 일시 중단 지점이나 코루틴이 실행을 대기하는 시점이며, 이 시점들이 없다면 코루틴은 취소되지 않는다.fun main(): Unit = r..
· Skils/Kotlin
이전 글[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)코루틴 빌더코루틴을 생성하는 데 사용하는 함수, 빌더 함수를 호출하면 새로운 코루틴이 생성된다.ex): runBlocking, launch모든 코루틴 빌더 함수는 코루틴을 만들고 코루틴을 추상화한 Job 객체를 생성한다. launch 함수 또한 코루틴 빌더이므로, 다음과 같이 launch 함수를 호출하면 코루틴이 만들어지고, Job 객체가 생성돼 반환된다. 반환된 Job 객체는 코루틴의 상태를 추적하고 제어하는 데 사용된다.join을 사용한 코루틴 순차 처리코루틴 간에 순차 처리가 필요한 경우는 어떤 경우일까?대표적인 예로는데이터베이스 작업을 순차적으로 ..
· Skils/Kotlin
이전 글[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1) CoroutineDispatcher란 무엇인가?디스패처는 dispatch와 -er의 합성어로 dispatch의 보내다는 뜻에 -er이 붙어 무언가를 보내는 주체라는 뜻이다.즉 CoroutineDispatcher는 코루틴을 보내는 주체라는 뜻이다. CoroutineDispatcher 객체는 스레드로 코루틴을 보낸다.코루틴은 일시 중단이 가능한 작업이기 때문에 스레드가 있어야 실행될 수 있으며, CoroutineDispatcher는 코루틴을 스레드로 보내 실행시키는 역할을 한다.CoroutineDispatcher는 코루틴을 스레드로 보내는 데 사용할 수 있는 스레드나 스레드풀을 가지며, 코루틴을 실행 요청한 스레드에서 코루틴..
· Skils/Kotlin
단일 스레드 애플리케이션의 한계스레드는 하나의 작업을 수행할 때 다른 작업을 동시에 수행하지 못한다.메인 스레드 또한 예외가 아니어서 메인 스레드에서 실행하는 작업이 처리되는 동안 다른 작업 수행 X—> 메인 스레드 하나만 사용하는 애플리케이션은 하나의 작업이 오래 걸리면 다른 작업을 전혀 할 수 없다.—> 이에 따른 응답성에 문제가 생길 수 있다. 휴대폰에서 애플리케이션을 메인 스레드만 사용해 만 들 경 우, 메인 스레드에서 UI 상호작용을 처리하는 작업이 반복된다.여기서 네트워크 요청을 하고 응답을 대기하거나 복잡한 연산 작업을 수행하는 오래 걸리는 작업을 하고 있다면, 애플리케이션은 UI를 그리는 작업을 멈추고, 사용자 입력 또한 제대로 전달받지 못하게 된다.이는 안드로이드 휴대폰이 버벅이는 주요 ..
개요매번 프로젝트를 진행할 때마다 네트워크 응답 처리에 대한 구조를 고민하곤 합니다. 어떻게 하면 직관적인 코드로 깔끔하게 처리할지, 다른 사람이 이해하기 쉬울까를 고민하다 보니매 프로젝트때마다 다른 에러 핸들링 코드가 만들어지는 것 같습니다.이번 프로젝트에서는 조금 새롭게 Interceptor를 활용한 에러 핸들링 코드를 구현했고, 그에 대한 내용을 작성할까 합니다.  InterceptorInterceptor의 역할은 다양하게 있는데, 주된 역할은 다음과 같습니다. 로깅Retrofit을 사용한다면 반드시 들어봤거나, 사용해봤을 것이라 생각합니다.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) 아마 네..
개요웹개발이나, 클라이언트에서 사용자 인증을 위해서 JwtToken을 도입하고 있습니다. 안드로이드에서도 JwtToken을 기존에 처리했었는데, 이번 프로젝트에서 Authenticator를 활용해서 처리해 봤습니다.그에 대한 내용을 포스팅할까 합니다.  Authenticator 허락되지 않은 사용자, 인증되지 않은 사용자일 경우 HTTP 상태코드 중 401을 받게 됩니다. 이전에는 401 에러를 받을 경우 갱신 요청을 보내는 로직을 작성했다면, 네트워크 통신 단계에서 401에러를 검증하고 작성한 로직을 실행시킬 수 있는 Authenticator에 존재를 알게 되었습니다.(사실 이 전에 몰랐던 것이 말이 안 된다..라고 생각이 들긴 합니다)class JwtAuthenticator @Inject ..
재한
짜이한