전체 글
Java Programming - Thread basic
멀티 프로세싱 하나의 응용프로그램이 여러 개의 프로세스를 생성하고, 각 프로세스가 하나의 작업을 처리하는 기법입니다. 각 프로세스는 독립된 메모리 영역을 보유하고 실행합니다. 프로세스들 사이의 변수를 공유할 순 없습니다. 프로세스 사이의 문맥 교환에 따른 과도한 오버헤드와 시간 소모의 문제점이 있습니다. ( 브라우저의 중복 실행 ) 멀티 스레딩 하나의 응용프로그램이 여러 개의 스레드를 생성하고, 각 스레드가 하나의 작업을 처리하는 기법입니다. 모든 스레드가 응용프로그램 내의 자원과 메모리를 공유하므로 통신 오버헤드가 크지 않고, 문맥 교환이 빠릅니다. 현재 대부분의 운영체제가 멀티스레딩을 기본으로 하고 있습니다. 이와 같이 웹 서버시스템에서 멀티 스레드를 사용할 수 있습니다. 자바 스레드와 JVM JVM..
[Carrot Market] #11 - PRODUCT - FINISH
Product Observe 이제 Product와 관련된 UI를 본격적으로 구축해 보도록 하겠습니다. 먼저 저희는 저번에 prisma Product Model을 생성하고 URL페이지에서 Product들 몇개를 추가해 보았습니다. 그럼 이제 저희가 mock up했던 데이터들을 실제 데이터 들로 치환해 주는 작업을 해주어야 할 것입니다. 그럼 자연스럽게 SWR을 사용하여 전역으로 productData를 관리해야 할것이고, 이 데이터를 가져올 api가 필요합니다. /pages/api/products/index.ts import client from "@libs/client/client"; import withHandler, { ResponseType, } from "@libs/server/withHandler..
[Carrot Market] #11 PRODUCTS - START
Product Model 상품에 대한 정보를 찾아와야 합니다. 따라서 앞으로는 같은 과정을 거칠겁니다. 일단 model을 만들고 -> 데이터베이스를 수정하고 -> mutation을 한 다음 -> 데이터를 가져올 겁니다. ( by useSWR ) 이것을 하기 전에 Prisma Client가 여러번 생성되는 것을 막기 위하여 전역으로 client를 만들고 만약에 있다면 다시 생성하지 않는 방법을 채택하여, 여러번 instance가 생성되지 않게 해보겠습니다. https://www.prisma.io/docs/support/help-articles/nextjs-prisma-client-dev-practices Best practice for instantiating PrismaClient with Next.js..
[ Basic Security ] - Ubuntu in Server
이 포스트는 다 이해 안하셔도 됩니다. 그냥 우리가 배운 리눅스 서버를 어떻게 활용하고 보안전문가, 해커, 개발자가 어떻게 바라보고 있는지에 대한 큰 그림만을 그리셔도 됩니다. 기본 설정 기본 EC2 로그인은 ssh로 설정되어 있습니다. 서버에 공개키를 두고 각 사용자마다의 개인의 개인키를 두어서 로그인을 하는 구조이죠 만약 로그인 체제를 password로 바꾸어서 로그인하고 싶다면 어떻게 할까요? 우선 아래의 명령어로 ubuntu라는 user의 password를 설정해 주도록 하겠습니다. $sudo passwd ubuntu 그 다음에 저희는 root유저의 passwd를 설정하고 root유저로 접속하고 싶으니까 아래의 명령어도 쳐줍니다. $sudo passwd root 그리고 아래의 명령어로 root계정..
[Carrot Market] #10 - AUTHORIZATION
Protected Handlers 다음과 같은 상황을 생각해 봅시다. 로그인도 안한 사용자가 GET /api/users/me을 보낸다고 해 봅시다. 그런데 이는 인가가 되지 않은 사용자 입니다. 당연히 오류가 나겠죠. 이 api에서는 req.session.user가 있어야 prisma client에서 이에 해당하는 user를 찾을 수 있기 대문입니다. 이에 대한 해결방안은 많습니다. 당연히 me.txt에 하나하나씩 req.session.user가 있는지 확인하면 됩니다. 하지만 모든 페이지에서, 이를 하기란 매우 귀찮기 짝이 없을 수 없습니다. 저희는 그래서 withHandler에서 이를 1차로 막고 가자는 생각을 해 볼 수 이씃ㅂ니다. withHandler에서 isPrivate값을 받고, 이가 true..
[Carrot Market] #9 - Authentication - 2
Twilio Setup 우선 twilio를 들어가기 전에 코드를 리팩토링 좀 하고 들어가겠습니다. /pages/api/enter.tsx import client from "@libs/client/client"; import withHandler, { ResponseType, } from "@libs/server/withHandler"; // prettier-ignore import type { NextApiRequest, NextApiResponse, NextApiHandler } from "next"; interface reqDataType { email?: string; phone?: string; } const handler: NextApiHandler = async ( req: NextApiReq..
[Carrot Market] #9 - Authentication - 1
Accounts Logic 이제 본격적으로 로그인 form을 위한 로그인 api를 만들어 보도록 하겠습니다. 앞서 정리한 내용을 한번 서술해 보도록 하겠습니다. enter page에서 저희는 useMutation hook을 작성해서 fetch api로 데이타를 쉽게 보낼 수 있게 포장했습니다. 그리고 useMutation의 반환 값으로는 이를 실행할 수 있는 함수를 주어주었고, 각종 loading, data, error즉 api의 요청의 결과와 작동과정과 관련된 데이터를 반환하게 했습니다. 그리고 저희는 /page/api/enter에서는 withHandler(HOF)를 반환하게 하여, api가 작동하게 했습니다. 자 여기부터 이제는 prisma client를 반환하게 하여서, 유저의 form에 따른 da..
[Basic Security ] - Linux basic
linux Basic 여기서는 리눅스에 대한 기초적인 내용을 다룹니다. 개발자의 입장에서, 보안전문가의 입장에서 모두 중요한 명령어와 팁들을 정리했으니, 편하게 보시면 될 것 같습니다. 또한 이 포스트는 KERT의 기초 보안교육에 활용하기 위해 제작되었습니다. pwd ( print word direcetory ) 현재 작업중인 디렉토리의 이름을 보여줍니다. $pwd cd ( change directory ) cd는 디렉토리를 이동할 때 쓰는 명령어 입니다. 기본적으로 .는 현재 디렉토리를 가르키고, ..는 하위 디렉토리를 가리키며 ~는 루트 디렉토리를 가리킵니다. $cd .. $cd .././testFolder $cd ~/Desktop $cd / $cd testFolder 대충 예제를 적어 보았습니다. ..
Typescript Practice - Block Chain Project -implements
Definitely Types Definitely Typed는 타입스크립트의 가장 큰 장점 중 하나입니다. 커뮤니티는 효과적으로 자바스크립트 프로젝트의 거의 90%가 자연스럽게 진행되고 문서화되었습니다. @types 사용 npm을 이용해서 꽤 간단하게 설치가 가능합니다. 예를 들어 jquery에 대한 타입 정의를 다음과 같이 간단히 할 수 있습니다. npm i @types/jquery --save-dev @types는 전역과 모듈 타입 정의를 모두 지원합니다. 기본적으로 전역 소비를 지원하는 모든 정의가 자동으로 포함됩니다. 예: jquery의 경우 프로젝트 전역에서 $를 사용할 수 있어야 합니다. 그러나 jquery와 같은 라이브러리의 경우 일반적으로 모듈로 사용하는 걸 추천합..
Typescript Practice - Block Chain Project - Basic
tsconfig - lib 기본 설정은 끝냈다 가정하고, tsconfig.json의 속성중 몇가지에 대해 알아보도록 하겠습니다. 우선 "lib"입니다. 보통 설치한 타입스크립트 모듈에 lib파일들이 있습니다. 예를 들어, npm install -g typescript를 하게 되면, /usr/local/lib/node_modules/typescript에 설치가 됩니다. 다음과 같이 ECMAScript 규격에 정의된 자바스크립트 객체들에 대한 인터페이스들이 정의되어 있는 것을 보실 수 있습니다. ~~/lib.dom.d.ts prepend(...nodes: (Node | string)[]): void; /** Returns the first element that is a descendant of node t..