본문 바로가기

개발

(23)
[Python] 키워드 인자에서 **kwargs 주의점 쓰게 된 이유파이썬 **kwargs, *args이라 검색만 해도 관련 내용이 많이 나온다.하지만 키워드 인자를 사용한 예시는 내 기준 구글 1~2페이지에선 보이지 않았고 다 비슷한 내용들이었다.개념만 슥 보고 넘어가기엔 이후에 팀원들도 같은 실수를 할 수 있다 생각해서 공유하기 전에 생각을 정리하기로 했다. 급한 분들을 위해 요약하면**kwargs에 키워드 인자를 사용하면 키워드 인자도 딕셔너리에 들어간다**kwargs인수를 딕셔너리 형태로 만든다.하지만 키워드 인자처럼 사용하면 이런 결과가 나온다.def test1(**kwargs):    print(kwargs)    passdata = {'A': 1, 'B': 2}test1(kwargs=data)결과{'kwargs': {'A': 1, 'B': 2}}..
리눅스 환경에서 버전 관리 한 줄 요약: 블로그 명령어 믿지 말자. 할 거면 링크 주고 이 사이트 보고 진행하겠다고 말하자서론팀 문서를 보고 작업하다 버전 업이 필요하단 부분이 있었다.블로그에서 버전 업에 관한 포스팅을 찾아보고 진행하던 중 굳이 이렇게 해야 하나? 싶은 부분이 있었다아무리 생각해도 좀 아닌 거 같아서 물어봤지만, 이미 이전 명령어를 수행했던 시점에서 문제가 발생해버렸다.apt-get(yum)? wget?패키지 설치 시 apt-get이나 wget으로 설치하는 글 2가지로 나뉜다. 예외가 있겠지만 대부분의 상황에선 wget이다.만약 서버에 구 버전이 있는 경우 버전업 하지 말고 wget으로 다운로드한 폴더의 bin에 들어가서 해당 버전에 맞춰 레포를 빌드하거나 실행하자 apt-get 은 삭제해도 잔존물이 남아있거나 ..
서버에서 rm 실수를 줄일만한 방법 들어가기 전에특정 상황에선 필요 없는 파일을 지워서 공간을 확보하겠지만 내 기준 대부분의 상황에서는 파일을 지우기보단 손 안 닿는 곳에 옮겨두는 게 낫다 생각한다. 즉, 저장공간 차지하는 문제가 삭제로 발생하는 문제보다 덜 위험하다 생각한다 주의할 점리눅스를 바닐라로 설치할 때 /etc 내부 설정 파일들에 이 방법을 쓰면 매우 위험하다그 쪽을 만질 상황이 오진 않겠지만 가끔 몇몇 블로그들을 보면 극단적인 방법들을 소개하기 때문에 해당 파일들을 만지게 된다면 반드시 상급자한테 물어보자1. 메모장에 적고 복사하기생각보다 탭 자동완성으로 인한 실수가 잦다. 특히 명령어 순서나 철자 하나 빼먹는 경우 많다2. mv [삭제할 파일] ~/trash리눅스엔 휴지통이 없다. 홈 디렉토리든 어디든 휴지통 역할을 하는 디..
무지성으로 final 쓰지 않기 문제 제기 코드 리뷰 과정에서 immutable 을 아는지란 질문을 받았다. 처음엔 final 키워드를 사용해 불변으로 만드는 것이라 생각했었다. 하지만, 컬렉션을 사용할 때 immutable을 제대로 보장하지 않는다는 걸 알게 됐다. 한 줄로 요약하면 뒷문이 열려있었다고 보면 된다. immutable을 보장하는 방법은 다음과 같다. 클래스의 하위 클래스화 방지 setter 메서드 사용 X 외부 참조를 취하는 생성자 관리 final 객체 참조를 반환하는 Getter 처리 모든 필드에 private final 사용 왜 final을 쓰나? 1. gc 오버헤드를 감소시킬 수 있다. 오버헤드가 주제가 아니라 더 다루진 않는다. 링크: https://docs.oracle.com/javase/tutorial/ess..
자바가 엔진단에서 어떻게 동작할까 큰 흐름은 다음과 같다. JIT 컴파일러 (Just-In Time Compiler) 인터프리터에서 읽은 코드를 또 읽으면서 생기는 부하 문제가 있다. 해결 수단으로 메서드를 다시 읽지 않고 JIT 호출을 통해 기계어를 바로 읽는다. 관련 기술인 JRockit 기준 스레드를 모니터링해 자주 사용되는 메서드의 기계어를 저장해놓는다. 자주 사용되는 메서드라 판별될 때 까진 인터프리터가 바이트코드를 한 줄씩 해석하는 문제가 있다. 즉, 재시작 등에서 발생하는 콜드 미스의 비용이 매우 크다. 네이티브 컴파일러와 차이? C의 경우 .exe, .elf 같은 형태로 디스크에 저장되지만 Java의 JIT는 JVM의 메서드 영역에 저장된다. 즉, 휘발성이다. 메서드 영역에 어떤 형태로 저장됐는지는 관련 문서가 없어 알 수..
redis 2.0 분석 들어가기 전에 Redis 2.0 버전을 기준으로 작성한 글입니다. 해당 버전의 코드는 다음 링크에서 확인하실 수 있습니다. http://redisgate.kr/redis/introduction/redis_release2.php Redis Release Notes 2 redisgate.kr 해시 테이블 resize 해시 테이블을 resize 하는 과정에서 데이터를 옮겨야 하기 때문에 다른 요청을 수행할 수가 없다. 이를 해결하기 위해 2버전에선 db 당 해시 테이블을 2개로 만들어 관리한다. 0번 해시 테이블이 메인이지만, resize가 된 시점부터 1번 해시 테이블이 메인이 된다. 데이터를 모두 옮기면 1번 해시 테이블이 0번으로 변환된다. 이 작업은 cron을 통해 주기적으로 옮기거나 조회, 삽입, 수..
[java] Spring 애플 로그인 구현 과정 애플 로그인은 구글이나 국내 소셜 로그인과는 다른 방식으로 구현해야 한다. 관련 포스트를 참고해 구현했지만, 일부 포스트는 필요 이상으로 의존성을 사용했고 무엇보다도 내 방식으로 정리를 해놔야 나중에 애플 로그인이 기억나지 않을 때 빠르게 이해하려고 작성했다. swift와 Java Spring Boot를 사용했고, 내 역할은 백엔드였기 때문에 swift 코드는 올리지 않는다. 애플 소셜 로그인 구조 다른 로그인이 인증 서버에서 받은 토큰을 가지고 리소스 서버에 요청하면 사용자가 제공하기로 한 정보를 얻는다. 애플 로그인의 경우 id_token 이란 jwt 토큰을 주고 백엔드에서 이 토큰이 애플에서 만든 토큰인지 검증하고, Claim을 추출해 사용자 정보를 가져온다. 1, 2 번은 IOS에서 담당할 부분이..
redis 1.0 분석 - 공유 메모리 풀 업데이트 내역 2023.12.16 현재도 공유 메모리 기술을 쓰는지에 대한 글 추가 들어가기 전에 Redis beta 1 버전을 기준으로 작성한 글입니다. 해당 버전의 코드는 다음 링크에서 확인하실 수 있습니다. http://redisgate.kr/redis/introduction/redis_release1.php Redis Release Notes 1 redisgate.kr 해당 기술고 관련된 포스트입니다. https://groups.google.com/g/redis-db/c/cHTu12jRr78/m/h-L0-EOn9WgJ Object sharing is fun! Hello, some hour ago I implemented a new feature in Redis, object sharing, in ..