전체 글

전체 글

    가볍게 써보는 AI 개발 1차 후기

    24년 3월 8일부로 플로우에 AI 기능이 추가되었다. 1월 초부터 AI 기능을 만들기 시작했다. 단 2달 만에 여러 기능을 찍어내기 위해 야근도 많이 하고 고생도 많았다. 선두를 달리고 있던 부장님도 AI 개발의 길을 개척하느라 많은 고생을 하셨다. AI 개발은 우리 회사의 1분기 핵심 과제였다. 그래서 많은 주목을 받았다. 나는 이 주목받는 곳에서 일하는 것이 즐거웠다. 2달 동안 급하게 기능을 만들면서, 뭔가 부족해도 “일단 이대로 가자!” 하며 만들어진 것이 많다. 대표님이 빠른 출시를 통해 경쟁사 견제를 주 목표로 삼았기 때문에, 이해는 한다. 하지만 더 사용성이 좋은 방향으로 개선되었으면 한다. ‘임시’가 ‘완성’이 아니길 바라면서.. 배운것도 많고 배울 것도 많다. 이번 AI 프로젝트를 통해..

    2023년 하반기 회고

    쓰고 지우고 쓰고 지우고 하다가 다시 쓴다. 나쁜말은 다 빼고 좋은말만 간단히 해보자. (그렇게 말했던 간단히는 없었다.) 사실은 23년 하반기를 좋은 말을 해보려고 해도 나에겐 정말 심리적으로 힘든 일만 있었던 것 같아서 감정이 조금 새어 있을 수 있다. 하지만 페르소나를 써서라도 웃는모습 보여주며 힘내본다. 웃으며 살다보면 그것이 어느순간 내 모습이 될 것이니 말이다! 아자아자! 먼저 회사 이야기를 하자면, 나의 하반기 회사에서 했던 일은 단 하나로 설명할 수 있을 것 같다. 유지보수!! 하반기의 반 이상은 배포담당자를 맡으면서, 최대한 서비스의 안정성을 지키기 위해 노력했다. 배포담당자 하반기에 한번 서버가 크게 멈춘적이 있다. 언제인지 자세히 기억은 나지 않으나, DB 버전을 업데이트 하면서 생긴..

    Svelte와 vite로 CSR 개발 환경 세팅

    Svelte는 웹 애플리케이션 개발 프레임워크입니다. 직관적이고 쉬운 문법을 가지고 있는 Svelte로 만든 SSR 기반 프레임워크가 SvelteKit 입니다. 최근에 Svelte에 관한 공식 문서를 보다가 한가지 이상함을 느낌적이 있습니다. Svelte 공식 문서를 보는데, 이상하게 설치는 SvelteKit을 알려주고 있습니다. 공식적으로 CSR(Client Side Rendering)인 Svelte보다 SSR(Server Side Rendering)을 사용하라는 말인것 같네요. 그런데 저는 최근에 오직 CSR을 위해 Svelte를 사용하고 싶었습니다. 그것은 크롬 익스텐션 때문입니다. 크롬 익스텐션은 SSR은 당연히 사용할리 없고.. CSR만 쓰고 싶은데 왜 설치 방법은 따로 없는거지..? . . ...

    서버에서 이메일 발신자 한글(UTF-8)로 설정하기 feat. AWS SES

    플로우를 개발하면서 메일과 관련된 기능을 개발하던 중, 서버에서 메일을 발송하는데 발신자 이름이 한글로 안나오고 글자가 깨지는 현상을 발견했습니다. 메일과 관련된 공통 지식인 것 같아서 블로그에 올려봅니다. 증상은 위와 같이 발신자 이름이 한글로 깨지는 문제가 발생 했는데, 발신자 이름은 "협업툴 플로우" 라고 보냈습니다. 메일 서비스는 AWS SES를 사용하고 있었는데, 아무리 인코딩을 해서 보내도 계속 깨지는 문제가 있어서, 무엇이 문제인지 찾아보다 AWS에 문의를 넣은 적이 있습니다. AWS 측 답변 You would need to use MIME encoded-word syntax to use non-ASCII characters in the Source text. There's some addi..

    REST (Representational State Transfer)란 무엇인가?

    REST는 Representational State Transfer 줄임말이며, 웹 서비스 아키텍처의 한 형태입니다. 서버의 자원을 정의하고, 자원에 대한 주소를 지정하는 통신 규약입니다. 통신 규약! 즉,일종의 약속입니다. REST의 기본 원칙 자원 (Resource) 웹 서비스에서 제공하는 모든 것들을 각각의 이름으로 식별합니다. 예를 들어, 사용자 정보 /users, 제품 정보 /products 등 각각이 자원입니다. 표현 (Representation) 각 자원은 클라이언트가 원하는 형식으로 표현되어야 합니다. 흔히 사용하는 형식은 JSON, XML, 텍스트 등이 있습니다. 상태 없음 (Stateless) 서버는 클라이언트의 상태를 기억하지 않습니다. 각각의 요청은 독립적으로 처리되며, 클라이언트는..

    REPL(Read Eval Print Loop) 이란?

    REPL은 "Read Eval Print Loop"의 약자로, 인터프리터 기반의 프로그래밍 언어에서 사용되는 대화식 환경을 제공하는 도구입니다. REPL은 사용자가 코드를 입력하면 해당 코드를 읽어들이고(Read), 평가하여 실행합니다(Eval), 그리고 실행 결과를 출력합니다(Print). 이후 다시 새로운 코드를 입력할 수 있도록 반복적으로 동작합니다(Loop). REPL의 동작 REPL은 다음과 같이 동작합니다: 1. Read (읽기): 사용자가 입력한 JavaScript 코드를 읽습니다. 2. Eval (평가): 읽은 코드를 평가하고 실행합니다. 3. Print (출력): 코드의 결과 값을 출력합니다. 4. Loop (반복): 이후 사용자가 더 많은 코드를 입력할 수 있도록 반복합니다. REPL은..

    2023 상반기 회고 1편 (플로우, 도시부엉)

    늘 메모와 기록을 중요시 생각해 왔지만, 요즘 들어 더더욱 기록이 중요하다고 느끼고 있다. 내가 늘 성장을 하고 싶고, 성장을 하려면 나를 돌아보는 시간을 가지는 것이 필요하다. 기록할 때가 바로 그때이다. 요즘은 예전에 비해 기록하는 습관이 적어진 것 같다. 최근에 하는 일이 많아서 그렇다고 생각한다. 다시 이 생각을 하게 되었으니 지금 당장 상반기 회고를 통해 기록을 하는 습관을 길러보려고 한다. 플로우 (flow) 첫번째로 우리 회사 서비스인 플로우를 개발하고 유지보수를 어떤 것을 해왔는지, 어떤 생각을 했는지 적어보자! 올해 상반기 내가 맡은 일 플로우 플랜과 프로 버전 플로우 플랜과 프로버전은 작년 12월부터 시작하여 올해 1월쯤에 개발이 끝난 기능이다. 플랜 기능은 짧은 시간 내 만들어야 했던..

    PostgreSQL 사용자 정의 함수 (User-Defined Function)

    원래 PostgreSQL의 저장 프로시저(Stored Procedure)와 사용자 정의 함수(User-Defined Function)에 대한 차이점을 설명하려고 했으나, 먼저 사용자 정의 함수와 저장 프로시저에 대한 설명을 먼저 작성해야겠다고 생각했습니다. 먼저 사용자 정의 함수에 대한 글을 작성해봅니다. 사용자 정의 함수란? (User-Defined Function) 사용자 정의 함수는 일부 작업을 수행하도록 지정된 임의의 SQL 문 그룹입니다. 보통 “function”이나 “함수”라고 부르고 때로는 “UDF”라고도 합니다. 일반적으로 여러 SQL들 또는 로직을 정의해 일련의 과정으로 데이터를 처리하기 위해 생성됩니다. 함수 내에서 SELECT, INSERT, UPDATE, DELETE 등의 다양한 쿼..

    Sveltekit + Vercel + Supabase 삼위일체 사용 후기

    sveltekit + vercel + supabase 사용 후기 평소에 토이 프로젝트를 만드는 것을 좋아하기 때문에, 가볍고 쉽게 배포할 수 있는 방법 없을까 하며 고민을 많이 했다. 그러다 이번에 sveltekit, vercel, supabase라는 것을 알게 되고 간단한 토이 프로젝트를 이 서비스에 적용해 보았다. 삼대장을 만나게 된 계기 이번에 만들어본 프로젝트는 예전에 만들었던 회사 근처 식당 추천기이다. 그냥 간단히 회사 근처의 식당 중 어떤 것을 먹을까 고민하다, 대신 골라주는 “메뉴 추천기”가 있으면 좋겠다는 생각을 하면서 만들게 되었었다. 24년 03월 21일 아래 메뉴추천기 사이트는 현재 작동하지 않습니다. ㅎㅎ 그냥 그런게 있었다. 라고 생각해주세요. https://flow-mereco..

    rel 속성 - noopener, noreferrer, nofollow

    HTML의 a tag에 rel이라는 속성을 보신적이 있으실 겁니다. a tag는 보통 href에 target=”_blank” 같은 속성만 사용해보고 rel 속성에 대해 잘 모르는 경우가 대부분입니다. 저도 이번에 HTML을 작성하면서 “이 rel 속성의 역할은 뭘까?” 라는 생각이 들어 찾아봤습니다. rel 속성 rel 속성은 현재 HTML 문서와 링크된 두 문서 사이의 관계를 명시하는 데 사용됩니다. 이 속성은 href 속성과 함께 사용되며, 검색 엔진은 이를 통해 링크에 대한 추가 정보를 파악할 수 있습니다. rel 속성은 주로 (하이퍼링크), (외부 스타일시트 연결), (이미지 맵 영역), (폼 제출) 태그와 함께 사용됩니다. : 링크를 표현하는 태그입니다. 예시 링크 : 외부 스타일시트를 연결하는..

    Shadow DOM - DOM을 캡슐화 하자!

    Shadow DOM이란? 웹 페이지의 DOM 트리 안에 또 다른 독립되는 DOM 트리를 생성하는 방식입니다. Shadow DOM을 이용하면 웹 페이지 내의 요소들을 잘 캡슐화하여 외부에서의 접근 제한하고, 컴포넌트 간의 의존성을 관리할 수 있습니다. 우리가 많이 사용하는 input, button, video.. 등등 html 요소들이 shadow DOM으로 만들어진 요소들입니다. 이런 요소는 이미 기능, 동작, 모양, 스타일 등등 이미 만들어져 있는 템플릿이라고 볼 수 있습니다. 많은 div, span 등 그리고 내부 스크립트와 스타일 등을 결합하여 캡슐화하면 이렇게 shadow DOM을 만들 수 있습니다. 기본으로 제공하는 이런 html 요소 뿐만 아니라, 우리도 shadow DOM을 만들 수 있습니다..

    V8 Liftoff와 웹 어셈블리: 웹 성능을 향상시키는 강력한 조합

    웹 성능은 현대 소프트웨어 개발에서 매우 중요한 측면입니다. 웹 애플리케이션이 점점 더 복잡해지면, 웹 성능을 최적화하여 부드럽고 반응성 있는 사용자 경험을 보장하는 것이 더욱 중요해집니다. 이를 위해 V8 Liftoff와 웹 어셈블리라는 두 가지 기술이 큰 영향을 미치고 있습니다. 웹 어셈블리 (WebAssembly) 란? 웹 어셈블리(WebAssembly) 라는 것은 무엇일까요? 웹을 개발할 때 주로 사용하는 언어는 무엇인가요? 바로 자바스크립트입니다. 우리는 웹을 개발할 때, 자바스크립트 없이는 개발할 수 없습니다. 그러나 만약 자바스크립트가 아닌 다른 언어로 웹 개발을 하는 방법이 있다는 사실 알고 계셨나요? C언어와 C++로 웹 개발을 할 수 있습니다. 이것은 웹 어셈블리가 있음으로써 가능합니다..