이 글은 나와 같은 Spring 초심자들을 위해 작성되었다.본 글에서 서술할 내용들을 알고있다면 글을 읽지 않아도 좋다. Spring의 문서에서는 Bean에 대해 아래와 같이 서술하고있다. In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Spring의 Bean은 IoC에 의해 관리되며, 인스턴스화되는 객체라고 한다. IoC는 Spring..
분류 전체보기

오랜만에 카카오톡 분석과 함께 loco 통신을 후킹으로 가져와서 출력해보았다. 마지막으로 카톡을 분석한게 9.8버전때였나.. 기억도 가물가물한데,벌써 10.9.0이다. 다른건 별 관심이 없었지만 Loco 구현체 관련해서 변경사항이 있나 찾아보았다. 기존의 LocoClient는 request와 response 함수가 LocoClient 내부에 분리되어있던 거로 기억한다. 지금은 좀 바꼈더라. LocoClient의 한 함수에서 간편하게 req/res를 받아올수 있게 되었다. 덕분에 후킹도 더 깔끔해졌다. 프로토콜이 특별히 바뀐건.. 없어보인다. 간단한 frida 후킹 예제 스크립트를 첨부한다.Java.perform(function () { try { var locoClient = Java.use("c..

필자는 며칠 전에 Spring과 aws 생태계에 입문했다. spring과 aws 모두 생태계가 방대해서 현재 내 인프라에 맞는 좋은 Best practice에 대해 많은 글을 찾아보고,삽질한 내역을 적어본다. AWS에서 RDS 데이터베이스를 생성할 때, 비밀번호의 주기 관리를 secrets manager에 위임할 수 있다. 필자는 보안을 아주 민감하게 여기고, 어떤 서비스를 구축하던 보안을 최우선순위로 여긴다. 그런 면에 있어서 AWS에서 제공하는 secrets manager는 아주 매력적이게 다가왔다.1. RDS & Secrets manager 연동 이 부분은 AWS가 아주 간편하게 지원해주고 있다.RDS 자격증명 관리를 Secrets manager에 위임하면 끝이다. 설정 후 Secrets mana..
drizzle의 latest release부터는 config 작성 및 migration 방법에 변경사항이 생겼다. 1. drizzle.config.ts 기존에는 JSON 형식으로 작성한 뒤, satisfied Config를 붙여서 타입 정의를 했었다.또한 driver를 정의했었는데, 현재는 다음과 같이 변경되었다. import { defineConfig } from 'drizzle-kit';import 'dotenv/config';export default defineConfig({ schema: './src/lib/server/database/schema/index.ts', out: './drizzle', dialect: 'mysql', dbCredentials: { host: process.env...

온프레미스로 운영을 하다 보면, 여러 원격지에 있는 서버간 통신이 필요할 때가 있다. 물론 ip에 다이렉트로 접근해도 되지만 ACL을 제대로 설정하지 않으면 보안상 취약해지고,ACL을 제대로 설정하는것도 여간 번거로운게 아니기에 다른 방법을 모색해보고 있었다. 그러던 와중 눈에 들어온건 wireguard였다. wireguard는 매우 빠르고 안전하면서도 현대적인 VPN이었다.기존에 내가 알던 VPN은 모든 트래픽을 라우트시켜서 터널링하는 것으로만 알고있었지만,wireguard는 달랐다. 특정 dest ip에 대한 연결만 터널링 할 수도 있었고,여러개의 peer(서버)를 서로 연결하여 중앙이 되는 장치 없이 상호간의 통신이 가능했다. wireguard의 설정은 아래 글을 참조하였다.https://blog...
공인 ip주소는 서브넷 길이 별로 클래스가 구분되어있다.클래스를 나열하자면 이렇게 되어있다. A 클래스: 첫 옥텟 첫 비트 0, 0~127까지 0, 127(루프백용)을 제외한 126개 가용 네트워크B 클래스: 첫 옥텟 두 비트 10, 128~191까지C 클래스: 첫 옥텟 세 비트 110, 192~223까지D 클래스: 첫 옥텟 네 비트 1110, 224~239까지E 클래스: 첫 옥텟 네비트 1111, 240~255까지, IETF 연구를 위해 예약 A, B는 대규모 네트워크 망 (ISP 등).일반적인 오피스, 가정에서는 C클래스를 할당받는다.D클래스는 멀티캐스트를 위해 사용된다. 사설 ip는 A~C 클래스로만 구분되어있다. A 클래스: 10.0.0.0 ~ 10.255.255.255B 클래스: 172.16.0..
2014년 3월 경 출시되어, 4월 무렵 "좀비고등학교" 로 바뀌게 되었던, 아오오니 레전드에 대해 간단하게 분석해보고 있다. 당시 개발진이었던 김원배, 송준원의 나이는 24살이었고,덤으로 14년도 당시에는 유니티 게임 개발에 대한 레퍼런스도 많이 적었는데도 게임 이론에 대해 모범적인 사례가 여럿 보였다. 1. 구조 아오오니 레전드는 2009년 개발되었던 레시아 온라인의 통신 구조를 그대로 사용하였다. - lesiam.dll레시아 모바일에서도 사용되었던 라이브러리로 보이며,모든 패킷의 DTO가 작성되어있다. - lesiamSerializer.dll통신에 사용되는 패킷들을 serialize/deserialize 한다.해당 라이브러리의 'LesiamSerializer' class는 protobuf-net의 ..
스벨트는 다양한 환경에 배포 가능하도록 어댑터를 지원해준다. 개인적으로 node, cloudflare 가 유용했다. 어댑터를 변경하려면 svelte.config.js의 어댑터를 변경해준 뒤, 모듈만 설치해주면 된다. 노드 어댑터의 경우는 빌드 후 node build 커맨드로 간단하게 실행할 수 있으며, cloudflare는 pages, worker 둘 다 지원해준다. 깃허브 프로젝트를 연동 후, 간단하게 실행해 볼 수 있었다. 서버리스 애플리케이션 배포에 아주 편리했다.
스벨트는 vite에 의존해서 돌아가기 때문에, vite에서 사용되는 파일 네이밍 양식 을 그대로 사용할 수 있다. https://vitejs.dev/guide/env-and-mode.html#env-files ViteNext Generation Frontend Toolingvitejs.dev 스벨트에서 환경변수는 public/private, static/dynamic으로 구분된다. Public은 서버 컴포넌트가 아닌 파일에서도 불러올 수 있는 환경변수들이다. public 환경변수를 사용하고 싶을 때는 접두사로 PUBLIC_ 을 붙여줘야만 한다.public이 붙지 않은 모든 환경변수는 private 취급되며 서버 컴포넌트에서만 불러올 수 있고, 외부에 노출되지 않는다. 스벨트를 typescript와 사용..
A* Pathfinding은 3개의 값을 가지고 최적의 경로를 도출해낸다. G = 시작점으로부터 이동한 거리H = 도착지점까지의 휴리스틱 거리F = G + H 여기서, 자연스러운 이동을 위해 dx, dy도 고려한다. dx = 도착지점까지의 x차dy = 도착지점까지의 y차 Grid 맵이므로 대각선 이동은 연산하지 않는다. 휴리스틱 거리는 맨하튼 계산을 사용했다.int Heuristic(Node node, Node dist) { return Math.abs(node.x - dist.x) + Math.abs(node.y - dist.y);} 이동경로의 우선순위는 아래와 같이 산출한다. 1. F값이 제일 작은 노드2. F값이 같다면 H값이 더 작은 노드3. F, H값이 같다면 부모 노드의 dx, dy 중 더 ..