개발새발

· 개발새발
몇년간 NodeJS, TypeScript만 해오다 보니 새로운 언어를 배울 필요성에 대해 느끼게 됐다. TypeScript를 오랜 기간 사용해오면서 소위 말하는 '타입 장난질' 에 대해서 회의감을 느낀 바도 있고내가 주력으로 사용할 수 있는 언어가 제한되어 있다는 점에 경각심이 들었다. TS는 근본적으로 JS에 기생해서 살아간다는 점도 있고 말이다. C# 도 능숙하게 사용할 수 있지만 사용하면 뭐하는가.국내에서 게임만들때 말곤 쓰이지 않는데. Why go?Go를 선택하게 된 이유에 대해선 크게 두가지가 있다. 1. 언어의 철학Go는 단순성, 효율성, 실용성을 지향하며 설계되었다. JavaScript는 90년대, 웹이 등장하면서 혼돈과 같은 시대에서웹의 동적인 기능을 지원하기 위해 단 10일만에 탄생된 언..
얼마 전에 Svelte v5가 릴리즈 되었다.수정된 부분은 꽤나 많지만, 제일 눈여겨본 것은 export let의 deprecated와 props 변경이었다. 전체 변경사항은 아래에서 확인할 수 있다.https://svelte.dev/docs/svelte/v5-migration-guide 보이는 바와 같이  $props() 를 통하여 속성들을 내려줄수 있게 되었다. 별거 아닌거같아 보이지만, 이는 재사용 가능한 컴포넌트 작성에 아주 큰 이점을 안겨준다. 만약 button, a 등의 element를 재사용 가능하게 컴포넌트화 할 시에 기존에는 $$restProps 를 통하여 내려줄 수 밖에 없었다.근데 위와 같은 방식을 사용하게 되면 Type 안정성이 떨어진다. restProps를 사용하게 되면 해당 엘리..
필자는 비즈니스 서비스 운영 시, 유지보수에서 제일 중요한건 "정형화" 라고 생각한다. 가끔 오래된 프로젝트나 앱들을 살펴보면, 난잡한 API Endpoint들과 뒤죽박죽인 response가 보인다. 어떤 요청의 response는 ok: true,또 다른 요청은 success: true,status: "OK" 등등이 섞여있는 경우가 있었다. 응답의 정형화는 시스템의 맨 바닥 기반이다. 응답이 정형화되지 않은 서비스는 그 크기가 늘어날수록 유지보수에 어려움을 겪게 될 것이다. 필자의 경우, 응답의 정형화를 아래와 같이 구성했다. - code (required)- message (required)- data (optional) HTTP status가 있는데, 어째서 code를 별도로 전송하게 되었는가? 물론..
SvelteKit은 번들링 도구로 vite를 사용한다. vite에서의 환경변수 설정에 대한 가이드는 아래와 같다. svelte에서 vite dev로 실행 시, 위 패턴에 대한 환경변수들을 자동으로 로드 해준다. 하지만 어째서인지 node adapter를 사용한 경우, 배포 환경에서는 제대로 작동하지 않았다. 분명 .env와 .env.production에 환경변수를 제대로 설정했음에도 말이다.  SvelteKit의 Node servers 공식 문서를 확인해보았다.https://svelte.dev/docs/kit/adapter-node Node servers • Docs • SvelteTo generate a standalone Node server, use adapter-node. Usage Install..
Spring에서 인증/인가를 처리하기 위해서는 일반적으로 Session과 JWT중 하나를 선택해 사용한다. 둘중 어떤 방식을 선택하려면 Stateful / Stateless에 대해서 짚고 넘어갈 필요가 있다. Stateful 방식은 서버에서 클라이언트의 상태를 저장하고 관리한다.Stateless는 서버에서 클라이언트의 상태를 관리하지 않는다. Session의 경우는 Stateful이다.기본적으로 Session id를 client에 서빙하고, 해당 Session id에 대한 정보는 서버에 저장되며,서버에서 관리된다. JWT는 Stateless다.JWT의 토큰 안에 인가에 필요한 정보가 담겨있으며, 따라서 서버에서 인가에 필요한 정보를 저장하지 않아도 된다.  Session과 JWT 중 무엇을 쓰느냐는 자유..
이 글은 나와 같은 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..
필자는 며칠 전에 Spring과 aws 생태계에 입문했다. spring과 aws 모두 생태계가 방대해서 현재 내 인프라에 맞는 좋은 Best practice에 대해 많은 글을 찾아보고,삽질한 내역을 적어본다.  AWS에서 RDS 데이터베이스를 생성할 때, 비밀번호의 주기 관리를 secrets manager에 위임할 수 있다. 필자는 보안을 아주 민감하게 여기고, 어떤 서비스를 구축하던 보안을 최우선순위로 여긴다. 그런 면에 있어서 AWS에서 제공하는 secrets manager는 아주 매력적이게 다가왔다.1. RDS & Secrets manager 연동 이 부분은 AWS가 아주 간편하게 지원해주고 있다.RDS 자격증명 관리를 Secrets manager에 위임하면 끝이다. 설정 후 Secrets mana..
스벨트는 다양한 환경에 배포 가능하도록 어댑터를 지원해준다. 개인적으로 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와 사용..
Golang에서 비동기 작업, 멀티스레드 활용을 위해서는 고루틴이 사용된다. 고루틴은 Thread보다 작은 단위이며, 런타임 내부에서 관리되기 때문에 Thread보다 더 적은 리소스를 사용한다. Ex 1. Async taskingpackage mainimport ( "fmt" "math/rand" "time")func hello(n int) { r := rand.Intn(100) time.Sleep(time.Duration(r)) fmt.Println(n)}func main() { for i:=0; i "go" 키워드를 사용해서 고루틴을 실행할 수 있다. 하지만 Golang은 기본적으로 단일 cpu만을 활용하도록 설정되어있다.goroutine이 multi threading을 활용하게 하려면 GOMAXPR..
0xff
'개발새발' 카테고리의 글 목록