전체 글 55

MacOS에서의 Git 403 error : 아이디 수정 이후에도 계속 된다면...

github token을 재발급한 이후로 403 오류로 인해 CLI 환경에서 아무런 작업도 할 수 없었다. 한동안 급한대로 IDE와 깃헙 데스크탑에 의존하다가, 삭제된 옛날 토큰이 키체인에 캐시된 것이 원인임을 파악해서 해결 과정을 공유하려고 한다.config를 수정한 경우에도 키체인을 재생성해야하기 때문에 동일한 과정을 거쳐야한다. *OS keychain이란...Mac에서 사용자의 암호 및 계정 정보를 저장하기 위해 사용하는 앱. Window에서는 Credential Manager가 같은 역할을 한다. 1. 웹페이지에서 자격 확인실제로 권한이 없어서 403 오류가 발생했을 수 있으므로 다시 한번 토큰에 잘못이 없다는걸 확인해주자. 개인 토큰은 우측 프로필의 Setting > 좌측 사..

기타 툴/Git 2024.01.08

[Kotlin] 서브 클래스의 반복작업을 위한 여러 방법 : Reflection, Branch, Strategy pattern

* 이 글은 Kotlin 문법에 익숙하다는 것을 전제로 작성했다. interface, inline function, 각종 함수형 패러다임 지원을 위한 문법을 사용할 수 있다면 어렵지 않을 것이다.문제상황자식 클래스가 아주 다양하고, 이들이 다들 비슷한 처리를 요구할 때가 있다. Android의 AudioEffect 같은 경우가 그렇다.처리를 변경할 때 마다 일일이 메서드를 찾아다니기는 무리여서, 자식 클래스들을 효율적으로 관리할 수 있는 방법이 필요했다. 이런 과일 클래스가 있다고 생각해보자. 각 과일은 Fruit로부터 상속받은 여러 메서드를 구현하고 있다. 이 클래스는 더 이상 바꿀 수 없다고 가정하자.interface Fruit { fun buy() fun wash() fun dry(..

HTTP Request Message : User-Agent

User agent란 무엇이고, 어떤 포맷으로 만들어야하는지 알아보자. 🔸User agent란? User agent의 사용 목적 User agent는 클라이언트가 어떤 환경에서 요청을 보냈는지 설명하는 필드이다. 우리가 user agent에 아무 정보도 주지 않고 구글에 'user agent'를 검색하는 요청을 날렸다고 생각해보자. 서버 입장에서는 이 요청을 보낸 사용자가 브라우저는 어떤걸 쓰는지, os를 뭘 쓰는지, 버전은 몇인지 알 방법이 없다. 아무리 응답의 유연성을 높인다해도 오늘날의 클라이언트 환경은 너무도 다양하기에, 사용자의 환경을 알지 못하면 기껏 서버가 응답을 보내도 제대로 작동하지 않을 수 있다. 이러한 이유로 RFC 9110에서는 서버측에서 거부하는게 아닌 이상 반드시 User age..

표준/통신 2023.07.16

compiler version error 원인

아래와 같은 에러가 발생했고, 세부적으로는 NoSuchMethodError 유형이라고 떴다. > A failure occurred while executing org.jetbrains.kotlin.compilerRunner .GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction 더보기 java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.cli.common.messages.MessageCollector.report$default(org.jetbrains.kotlin.cli.common.messages.MessageCollector, org.jetbrains.kotlin.cli.common.messag..

Android와 이미지 형식

Bitmap과 Vector 사진을 컴퓨터에 저장하는 형식은 크게 비트맵/벡터로 나눌 수 있다. 1. 비트맵방식 (Bitmap) : 그림을 아주 작은 화소(픽셀)로 분해하고 각 화소의 색상과 위치를 기록해 저장하는 방식. 비트의 지도라는 뜻으로 픽셀을 하나씩 채워가면서 전체를 표현한다. ex) JPG, PNG, GIF, WEBP 2. 벡터방식 : 그림을 구성하고 있는 점이나 직선, 곡선 등의 위치와 기울기 등을 산술적인 데이터로 기록해 저장하는 방식. 파일 하나로 여러 화면 밀도에 대응할 수 있어 apk 크기를 줄일 수 있다. 복잡한 이미지는 표현할 수 없어서 간단한 도형이나 로고 등에 주로 사용한다. API 20 이상에서부터 Vector Asset Studio로 SVG, PSD를 프로젝트에 벡터 이미지로..

헷갈리기 쉬운 TCP/IP 4계층과 TCP, IP 통신

OSI 7계층을 대체하는 TCP/IP 4계층과 TCP, IP 각각을 혼동하는 경우가 많아서 각 용어를 제대로 정리하려고 한다. OSI 7계층 : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 7 layer로 나눈 것. TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 4 layer로 나눈 것. TCP : Transport layer에서 정보를 주고받는 데 사용하는 프로토콜 중 하나. IP : OSI의 Network 계층, TCP/IP의 Internet 계층에서 두 컴퓨터가 정보를 주고받는 데 사용하는 프로토콜 중 하나. 1. TCP/IP 4계층이란 우리가 인터넷상에서 정보를 주고받는 데에는 여러 프로토콜이 필요하다. 유저 인풋을 안전하게 전달하는 방식부터 전기신호를 전선으로 보..

속성값으로 enum 객체 얻기 (value to enum)

아래와 같은 Enum class가 있을 때, 객체 이름이나 속성값으로 객체를 얻는 것이 가능하다. enum class Type(val num: Int) { A(1), B(2), C(3), } // "A" -> Type.A // 1 -> Type.A "A" → Type.A : valueOf 메서드 사용 Enum class에는 객체의 이름으로 enum 객체를 찾는 메서드가 이미 존재한다. 이걸 사용하자. EnumClass.valueOf(value: String): EnumClass // Type.valueOf("A") -> Type.A 반환 없는 객체를 검색하려고 시도하면 excpetion을 던진다는 점에 유의해야한다. 1 → Type.A : 직접 메서드 정의 그러나 다른 속성값에서 enum 객체를 찾고싶다..

탐색을 위한 Position Class

data class Position( var x: Int, var y: Int, ) { operator fun plus(other: Position): Position { return Position(this.x + other.x, this.y + other.y) } // 깊은 복사에는 .copy 호출(data class에서 구현해줌) } enum class Direction(position: Position) { TOP(Position(-1, 0)), BOTTOM(Position(1, 0)), LEFT(Position(0, -1)), RIGHT(Position(0, 1)) } * copy 사용시 주의할 점 : x, y에 Primitive type이 아닌 객체를 사용한다면, 직접 깊은 복사를 구현해야한다..