본문 바로가기

전체 글

(166)
[Python] JSON 비표준 문제 배경PostgreSQL 16 버전이 나오고 JSON 관련 기능들이 강화되면서, 앞으로도 DB에서 제공하는 JSON 기능은 더 강력해질 것이라 생각했다.프로젝트를 진행될수록 단순히 값만 저장하는 response dto들 때문에 디렉터리가 난잡해지고 있었고, 무의미한 dto들을 줄여보고 싶었다.따라서, spring에서 dto를 반환하는 게 아니라, DB에서 생성된 결괏값 그대로 response를 하는 구성을 만들었다. 데이터 플로는 다음과 같다.client는 식별 코드 전달spring boot는 식별 코드와 매칭되는 task 전달celery는 task에 매칭되는 쿼리 작업을 rabbiyMQ에 생산(produce)rabbitmq는 받은 작업을 postgreSQL에 실행postgreSQL은 결과를 json 형태..
[Java] 토큰 인증 처리에 대한 정리 문제 제기토큰 인증 관련 글들을 보면 jwt의 만료 기간만 보고 인증을 결정하는 내용들을 자주 봤다.이 경우 인증을 stateless 하게 관리해 성능상의 이점이 있지만 로그아웃된 토큰 or 토큰이 탈취됐을 때에 대해선 대응이 부족한 것 같단 생각이 들었다.서비스 신뢰도나 최악의 상황을 고려하면 인증 관련 정보는 stateful로 관리하는 게 맞는다고 생각해 여기에 맞춰 토큰 인증을 만들었다. 2가지 토큰으로 인증을 처리한다.access 토큰: 실제 인증에 사용되는 토큰. 기간이 짧다.refresh 토큰: access 토큰 만료 시 갱신에 사용되는 토큰. 기간이 길다. 인증 EntityEntity를 생성하고 access, refresh 토큰과 memberId를 넣는다.디테일을 위해 넣은 거지만 @PreP..
[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리눅스엔 휴지통이 없다. 홈 디렉토리든 어디든 휴지통 역할을 하는 디..
[Java] 무지성으로 final 쓰지 않기 문제 제기코드 리뷰 과정에서 immutable 을 아는지란 질문을 받았다.처음엔 final 키워드를 사용해 불변으로 만드는 것이라 생각했었다.하지만, 컬렉션을 사용할 때 immutable을 제대로 보장하지 않는다는 걸 알게 됐다.한 줄로 요약하면 뒷문이 열려있었다고 보면 된다. immutable을 보장하는 방법은 다음과 같다.클래스의 하위 클래스화 방지setter 메서드 사용 X외부 참조를 취하는 생성자 관리final 객체 참조를 반환하는 Getter 처리모든 필드에 private final 사용왜 final을 쓰나?1. gc 오버헤드를 감소시킬 수 있다.오버헤드가 주제가 아니라 더 다루진 않는다.링크: https://docs.oracle.com/javase/tutorial/essential/concur..
삼성 청년 SW 아카데미(싸피, SSAFY) 9기 수료 후기 싸피 입과하기 전 후기 글들을 통해 정보를 수집했지만, 내가 원하는 정보를 찾기 힘들었다. 내 생각과 다르게 진행됐던 부분 + 알아두면 좋은 점 위주로 적었다. 준비 과정에 대해선 아래 링크를 참고 https://brorica.tistory.com/211 SSAFY 9기 전공자 합격 후기 이 글을 쓴다는 것은 올해 취업이 안 된 걸 광고하는 거라 써야 되나 고민을 좀 했다. 지원할 때 너 정도면 ssafy는 그냥 합격한다는 말을 많이 들었고 실제로도 면접 본 후에 합격을 확신했다. 에 brorica.tistory.com 왜 했나? 취업 못해서요 컴공과인데 이걸 왜 해요? 란 의문을 제기하는 면접관 분들도 많았다. 왜 싸피에 들어갔는지, 왜 싸피여야만 했는지 생각해두면 좋다. 1. 삼성이란 이름에서 나오는..
자바가 엔진단에서 어떻게 동작할까 큰 흐름은 다음과 같다. JIT 컴파일러 (Just-In Time Compiler) 인터프리터에서 읽은 코드를 또 읽으면서 생기는 부하 문제가 있다. 해결 수단으로 메서드를 다시 읽지 않고 JIT 호출을 통해 기계어를 바로 읽는다. 관련 기술인 JRockit 기준 스레드를 모니터링해 자주 사용되는 메서드의 기계어를 저장해놓는다. 자주 사용되는 메서드라 판별될 때 까진 인터프리터가 바이트코드를 한 줄씩 해석하는 문제가 있다. 즉, 재시작 등에서 발생하는 콜드 미스의 비용이 매우 크다. 네이티브 컴파일러와 차이? C의 경우 .exe, .elf 같은 형태로 디스크에 저장되지만 Java의 JIT는 JVM의 메서드 영역에 저장된다. 즉, 휘발성이다. 메서드 영역에 어떤 형태로 저장됐는지는 관련 문서가 없어 알 수..