본문 바로가기
728x90
반응형

전체 글328

Tokio 생태계에 등장한 새로운 웹 풀스택 프레임워크, Topcoat 최근에 tokio 생태계에 새로운 녀석이 등장했습니다. 바로 Topcoat이라는 웹 풀스택 프레임워크입니다.Topcoat이란?Topcoat는 서버 중심 렌더링으로, 서버에서 HTML 조각을 렌더링하고 메타데이터로 "반응형 지시문"을 추가하는 방식으로 더해집니다. (HTMX와 유사) Topcoat로 만든 "hello wolrd"앱 입니다.#[tokio::main]async fn main() { topcoat::start(Router::builder().discover().build()).await.unwrap();}#[page("/")]async fn home() -> Result { view! { .. 2026. 7. 26.
메이플스토리 통계 서비스를 만들며 겪은 시행착오 개인 프로젝트를 진행하면서 겪었던 거에 대하여 작성해보고자 합니다. 현재 메이플스토리의 모든 캐릭터들에 대한 정보들을 가지고, 이에 대한 통계를 보여주는 페이지를 구현하고자 했습니다.어떻게 했는데?초기 구상로직은 검색된 유저들에 대한 정보를 기록하는 db에서 서버별, 레벨별로 select로 데이터를 가져와서 처리하고자 했습니다. 그렇게 구현하니 db에서 데이터를 정리해서 가져오는데 6분 정도의 시간이 소요되었습니다. 해당 부분은 문제가 있다고 생각이 들어 해당 데이터들을 미리 저장해두는 db를 구현하고 이에 데이터를 저장하도록 했습니다.현재까지 로직검색된 유저들에 대한 정보를 가지고 있는 db에 원하는 부분 데이터는 where 조건걸고 가져옴가져온 데이터를 화면에 보여줌보여지는데 필요한 정보들만 있는 D.. 2026. 7. 19.
Bun은 왜 RIIR를 선택했을까 Bun이라고 Node.js의 대안으로 나온 프로젝트가 있었습니다. 해당 프로젝트는 Zig라는 언어로 이루어져 있었고, 많은 관심을 받은 상태였습니다. 그러던중, 어느 날 하나의 PR이 올라옵니다. Zig로 이루어진 프로젝트를 Rust로 재포팅한다는 pr이였습니다. 바로 GeekNews에 올라왔고, 많은 관심이 쏠리게 되었습니다. bun이 왜 Zig에서 Rust로 언어를 바꾸게 되었고, 이로 인해 어떤 이득을 얻게 되었는지에 대하여 다뤄보고자 합니다.왜 언어를 바꾸게 되었는가?Bun은 esbuild의 JavaSciprt, TypeSciprt 트랜스파일러를 Go에서 Zig로 라인 단위 포팅한 프로젝트로 출발했습니다. 2021년 4월 16일에 저수준 제어와 성능 지향 설계에 매료되어 Zig를 사용하여작성되었습.. 2026. 7. 12.
Rust 서버 성능 개선을 위해 병목부터 측정해봤습니다 이번에는 각 API들이 얼마만큼의 시간을 소비하고, 어디서 가장 많은 시간을 소비하는지 측정하기 위하여 개인 프로젝트에 해당 시스템을 도입했습니다. 이에 대한 내용에 대해 적어볼까 합니다.왜서버 성능 향상을 위해, 어느 시점에 가장 많은 시간을 소요하는지, 이에 대한 해결책을 찾아보고자 해당 시스템을 도입하게 되었습니다. 현재 서버는 서버 -> nexon open api / DB -> 서버 -> 클라이언트 구조를 기본적으로 가지고 있습니다. 여기서 어느 시점에 가장 오래걸리는지 확인하기 위하여 다음과 같이 구간을 나누었습니다.Nexon open apiDBLogicRest apiCache어떻게?현재 사용중인 tracing-subscriber을 활용하였습니다. 가장 먼저 해당 로직은 release모드가 아닌.. 2026. 7. 5.
NDC 오프라인 2일차 후기 이번 NDC(NEXON DEVELOPERS CONFERENCE)에 2일차로 신청해서 방문했었다. 오프라인을 통해 NDC에 참여했던 후기에 대해 적어보고자 합니다.내가 미소녀 목소리를 만들 수 있을 리 없잖아, 무리무리! (※무리가 아니었다?!) - SBV2 오픈소스를 활용한 한국어/일본어 TTS 모델 개발기가장 먼저 1994홀에서 내가 미소녀 목소리를 만들 수 있을 리 없잖아, 무리무리! (※무리가 아니었다?!) - SBV2 오픈소스를 활용한 한국어/일본어 TTS 모델 개발기라는 주제로 9년차 개발자 김명지님께서 이야기해주셨습니다. 일본어 전용 TTS 모델인 Style-Bert-Vites2를 활용해서 개발을 진행했다고 했는데, 모델명에서 익숙한 BERT라는 내용이 들어가서 혹시 연관이 있나? 하고 듣기 .. 2026. 6. 24.
cargo update가 만든 의외의 함정 저는 이전 포스팅에서도 말씀드렸다시피, 최신 버전을 계속해서 업데이트합니다. 그래서 항상 러스트 라이브러리들의 최신 버전을 유지하기 위해, cargo update를 수행합니다. 해당 포스팅에서는 무턱대로 cargo update를 수행하다가 발생한 문제와 이를 해결하는 방법에 대하여 설명드리고자 합니다.뭘 업데이트 했는데?최근에 cargo update를 통해 다음와 같이 새로운 라이브러리와 2개의 다른 라이브러리를 업데이트 하였습니다. 모두 dropbox의 레포에서 업데이트된 라이브러리들입니다.Adding alloc-no-stdlib v3.0.0Updating alloc-stdlib v0.2.2 -> v0.2.3Updating brotli-decompressor v5.0.1 -> v5.0.2이게 무슨 문제.. 2026. 6. 14.
Rust Lint로 숨겨진 Warning 찾기 Rust에는 다양한 warning 로그가 존재합니다. 물론, 모든 warning로그를 지우지 않아도 되지만, 사용하지 않는 코드가 남아있다거나, 불필요한 변수를 선언한 경우 등 다양한 케이스들에도 warning로그가 발생해, 저는 왠만하면 제거하고 있습니다. 그러던 중 [workspace.lints.rust]이라는 것을 알게 되었고, 이를 프로젝트에 적용한 후, cargo build --all-targets --all-features를 실행하게 되면, 숨겨진(?) warning 로그들을 찾아서 알려줍니다. 몇몇 lint들에 대하여 이야기 드리자면버그 발견unused_must_use = "warn"을 사용하게 되면 다음과 같은 케이스를 발견할 수 있습니다.fn process() -> Result { .. 2026. 6. 7.
작은 PR 하나에서 시작된 Rust 오픈소스 기여 3월 17일부터 rust라는 레포에 기여를 진행해 왔습니다. issue에 있는 내용 중, 처리가 가능할거 같다는 내용들만 찾아서 assignee을 받고, pr을 올려 merge까지 진행했었습니다. document 수정부터, issue에 이렇게 수정하면 될거 같다 라던가, 이런 설명은 추가하면 좋겠다 등 다양한 종류들의 issue를 처리해왔습니다. 5/28 오늘 Rust의 신규 버전이 1.96.0 버전이 출시되었습니다. https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/ Rust는 신규 버전이 나올때마다, Rust blog에 해당 내용을 올리고, 새로운 버전이 나오는데 기여해주신 분들을 github 닉네임과 Contributions 횟수를 같이 작성해줍니다. 처음으로.. 2026. 5. 29.
Timing Attack 방지를 위한 Constant-Time 비교 암호학에서 사용하는 constant-time 연산(타이밍 공격 방지용)에 대하여 알려드리고자 작성하였습니다. 특정 key 인식을 통한 인증 시스템을 구현하는 경우, 보통 언어의 equals 기능을 사용하여 적합한 key인지 판별하게 됩니다. 그러나, 해당 방식으로 사용하게 된다면 문제가 될 수 있다.어떻게 구현되어 있는데?언어별 equals에는 문자열 비교는 1byte씩 비교하다가 다른 글자가 나오면 false를 반환합니다.예시 java 내부 코드public boolean equals(Object anObject) { if (this == anObject) { return true; } return (anObject instanceof String aString) .. 2026. 5. 25.
728x90
반응형