분류 전체보기108 REST API, RESTful API에 대해서 API는 프로그램과 프로그램 사이에서 정보를 주고 받는 일종의 방식이다. REST API는 HTTP를 이용해서 기계들이 통신을 할 때 HTTP가 가지고 있는 기능을 최대한 활용해서 명확하면서 단순하게 통신할 수 없을까?하는 고민에서 출발한 모범사례라고 할 수 있다. - REST API는 HTTP 통신을 제어하는 과정에서 어떻게 하면 시행착오를 줄이고, 더 좋은 API를 만들 수 있는 가에 대한 고민의 결과물이 REST API라고 할 수 있다. (- 생활코딩) REST REST(Representational State Transfer)는 '자원'을 이름(표현)으로 구분하여 해당 정보(자원의 상태)를 주고 받는 모든 것을 의미한다. REST API는 웹 서비스와 클라이언트 애플리케이션 간의 상호작용을 위한 .. CS, OS, Network 2023. 4. 17. [자바스크립트] HTTP와 HTTPS, 둘의 차이점 HTTP HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 인터넷에서 데이터를 주고받는 프로토콜이다. 클라이언트와 서버 간의 통신을 위해 디자인되었다. 주로 웹 브라우저와 웹 서버 간의 통신에 사용된다. 80번 포트를 사용한다. HTTP는 요청(Request)과 응답(Response)으로 이루어져 있다. 클라이언트는 HTTP 요청 메시지를 서버에 보내고, 서버는 요청에 대한 응답으로 HTTP 응답 메시지를 클라이언트에게 반환한다. 요청 메시지와 응답 메시지는 HTTP 헤더header와 본문body로 이루어져 있다. HTTP는 상태가 없는, Stateless한 프로토콜이기 때문에, 각각의 요청은 서버에 의해 독립적으로.. CS, OS, Network 2023. 4. 17. [운영체제] 프로세스와 스레드란? 그리고 차이점 프로세스와 스레드는 프로그램에서 실행되는 어떤 실행 단위를 의미한다. 프로그램(Program) 프로그램은 어떤 작업을 하기 위한 명령어 목록과 그에 필요한 데이터를 묶어 놓은 실행파일로, 보조기억장치에 정적인 상태로 저장되어있다. 프로그램의 실행과정은 다음과 같다. 1) 사용자가 컴퓨터에게 프로그램을 실행할 것을 요청하면 2) 컴퓨터가 프로그램의 정보를 읽고 프로그램이 메모리를 사용할 수 있게 할당한다. 3) 그리고 프로그램의 정보들이 메모리에 로드되며 프로그램이 실행된다. 정리하자면, 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 되는 것이다. 이 과정을 프로세스를 생성한다고 표현한다. 프로세스(Process) 프로세스(Process)는 '실행 중인 프로그램'으로.. CS, OS, Network 2023. 4. 14. [자바스크립트] 동기와 비동기, 코드 실행 방식에 대해서 동기(Synchronous)와 비동기(Asynchronous)는 코드 실행 방식의 두 가지 주요 접근 방식이다. 동기는 직렬적으로 태스크를 수행하는 방식으로, 이전 태스크가 완료되어야 다음 태스크를 수행할 수 있다. 한 작업이 실행하는 동안, 다른 작업은 실행을 기다린다. 다시 말해, 코드의 실행이 순차적으로 일어나기에 이전 작업이 완료되지 않으면 다음 작업을 수행할 수 없다. 이 방식은 코드가 실행될 때 보통 호출한 함수가 반환될 때까지 기다릴 필요가 있을 때 사용된다. 만약, 동기 방식에서 순차적으로 실행되는 코드에서 문제가 발생하면 전체 애플리케이션이 멈추거나, 느려지는 문제가 발생할 수 있다. 자바스크립트는 기본적으로 동기적인 방식으로 실행되지만, 동기적인 실행방식의 단점이 있기 때문에 비동기적으.. 개발기초 2023. 4. 14. [자바스크립트] 비동기적 처리를 돕는 '콜백 함수' 자바스크립트에서는 함수가 일급 객체(First-class Object)로 취급되므로, 함수를 다른 함수의 인자로 전달하고, 함수에서 새로운 함수를 반환하거나, 함수 내부에서 함수를 정의하여 사용할 수 있다. 콜백 함수는 다른 함수의 인자로 전달되어, 해당 함수의 작업이 완료된 후 호출되는 함수를 말한다. 다시 말해, 어떤 함수의 파라미터로 들어가서 나중에 호출되는 함수이다. function add(a, b, callback) { const result = a + b; callback(result); } function printResult(result) { console.log(result); } add(1, 2, printResult); // 3 콜백함수, 왜 필요한가? 주로 웹 브라우저에서 실행되는 .. 개발기초 2023. 4. 13. [자바스크립트] 비동기적 처리를 위한 '이벤트 루프'에 대해 알아보자 이벤트 루프의 존재 이유 : 비동기적 처리! 자바스크립트의 쓰레드 블로킹 최소화 자바스크립트는 싱글 쓰레드 기반의 언어로, 한 번에 한 가지 일만 처리할 수 있다. 즉 모든 작업을 순차적으로 처리하며 하나의 작업이 끝나기 전에는 다른 작업을 수행할 수 없다. 자바스크립트는 기본적으로는 동기적인 방식으로 동작한다. 동기적으로 동작할 때 발생할 수 있는 문제는 쓰레드 블로킹(Thread Blocking)이다. 쓰레드 블로킹은 어떤 쓰레드가 특정 작업을 수행하는 동안, 다른 쓰레드들이 해당 작업이 끝날 때까지 대기하는 상태를 말한다. setTimeout 같은 동작이 요구될 때를 말한다. 이러한 상황은 프로그램의 실행 속도를 느리게 하고, 성능에 영향을 미치고, 교착상태(데드락) 같은 문제를 초래할 수 있다. .. 개발기초 2023. 4. 13. TIL : 파이널 프로젝트 회고2 : 협업 경험 후기 https://veams.tistory.com/81 TIL : 파이널 프로젝트 회고1 : 담당 작업 정리. https://youtu.be/FRmkiWnzpkE NestJS, TypeORM, EJS 개발 환경이다. 디자이너나 프론트엔드 담당 없이, 5명의 백엔드 팀원끼리 만든 프로젝트이다보니, 시각적인 면은 좀 아쉬운 게 많지만, 그래도 DB를 다루는 veams.tistory.com https://youtu.be/FRmkiWnzpkE%EF%BB%BF 후기 익숙해진 express와 sequelize대신 NestJS와 TypeORM을 선택하는 게 좀 부담스럽고, 프레임워크를 새로 배운다는 게 쉽지 않았는데, 타입스크립트를 사용하는 게 익숙해지고, 의존성 주입에서 발생한 정체모를 에러를 해결하는 법을 익히게 됐.. 프로젝트 회고 2023. 4. 4. TIL : 파이널 프로젝트 회고1 : 담당 작업 정리 https://youtu.be/FRmkiWnzpkE NestJS, TypeORM, EJS 개발 환경이다. 디자이너나 프론트엔드 담당 없이, 5명의 백엔드 팀원끼리 만든 프로젝트이다보니, 시각적인 면은 좀 아쉬운 게 많지만, 그래도 DB를 다루는 방식에 대해 많이 공부할 수 있어서 의미가 컸다. 서비스 기획 사유 우리 팀의 서비스는 스파르타코딩클럽의 부트캠프 수료생을 대상으로한 커뮤니티이다. 주요 기능은 모임 매칭과 행사 알림 서비스이다. 예를 들어 개발자 면접 스터디, 포트폴리오 제작, 모여서 각자 코딩 등을 하고 싶을 때 우리 서비스에서 뜻이 맞는 사람을 찾아 팀원을 매칭할 수 있도록 돕는 것이다. 담당 기능 및 작업 나는 이 프로젝트에서 주로 조회 기능을 다루게 되었다. 주요 기능(회원가입 및 로그인.. 프로젝트 회고 2023. 4. 1. TIL : 트러블슈팅, NestJS 인터셉터 사용으로 리팩토링 (유저 로그인 정보에 따른 버튼 처리) NestJS, TypeORM, EJS 환경이다. 문제상황 : 네비게이션바의 Ajax 코드 에러 - 기존에 위 네비게이션바는 Ajax로 구현되어 있었다. 로그인정보 유무에 따라서 MyPage 버튼이 생기거나, Login 버튼에 변화가 생기도록 구현된 상태이다. - 문제는 작업시간이 길어지며 코드가 복잡해지자, 클라이언트 사이드에서 유저가 로그인 및 로그아웃 버튼을 동작시킬 때마다, 401 오류가 계속 발생했다. 파악해보니 아래 코드블록의 38번째 const userId = obj.value 코드가 제대로 작동되지 않고 있었다. - 나는 이 방식이 로그인 정보에 따른 변경이 필요한 적절한 응답을 못해주고 있다고 이해했고, 해결할 필요성을 느꼈다. 기존 코드 예시 : 네비게이션바 로그인 및 로그아웃 버튼 변경.. 개발 학습일지(TIL) 2023. 3. 31. TIL : typeORM 외래키 없이 조인. getRawMany() vs getMany() nestjs, typeorm mysql 사용환경 문제: 엔티티간 관계설정 없이 다른 엔티티의 컬럼 값 가져오기... 작업배경 게시글 내용이 기존에는 33 으로 단순하게 보여주고 있었다. 히지만 아무래도 유저들이 사용할 때는 화면에 표기되는 정보의 액션이 많아야 재미있을테니, 위 사진처럼 33 이외에 모임의 참가자, 대기자 명단을 불러오는 작업을 하려 한 것이다. 그래서 참가자, 대기자 명단을 추가하기 위해 쿼리를 새로 작성해야했다. 시도1 이 작업은 클럽 멤버스 엔티티를 기반으로한 리포지토리에서 값을 불러오면 된다. 참가자, 대기자를 단순하게 불러오는 것은 어렵지 않으나, 닉네임 정보는 user 라는 다른 테이블에서 조인해서 불러와야했다. 사실 엔티티간 관계설정을 했으면 별 고민없이 user 엔티티를 l.. 개발 학습일지(TIL) 2023. 3. 27. TIL : 리팩토링, 모듈화로 재사용성, 유지보수성 높이기(nestJS, EJS) Nest.js, ejs 사용 환경. 재사용성과 유지보수성을 높이기 위하여, 기존 코드를 모듈화 하였다. 이를 통해 각 게시판, 게시글 마다 반복적으로 들어가는 날짜 표기 기능에 대한 코드를 대폭 줄일 뿐만 아니라, 유지 보수의 편리성을 얻었다. 먼저, 어떤 상황이었는지 정리해본다. 문제상황 - 프로젝트 진행 초기에는 당장 기능 구현을 우선시하다보니, 일단 코드를 짜는데 급급하기만 했다. 그러다보니 동일한 기능에 대해서 조건문이 생기기 시작했고, 결국에 저렇게 코드가 길어져버렸다... - 반복문 코드가 들어가는 게시판 구역(HTML 테이블)은 최소 8개 이상(각 게시판, 인기글, 통합검색 결과, 각 게시판 검색페이지)이다. - 게다가 게시글 상세페이지 접속시 게시글 내부 본문의 시간표기, 본문 하단의 이전.. 개발 학습일지(TIL) 2023. 3. 24. TIL : NestJS, TypeORM, EJS 검색 결과 갯수 구하기 문제상황. NestJs, TypeORM, EJS 개발환경 검색결과는 불러와서 프론트 단에 연결해놨는데, 검색결과가 총 몇 개인지도 알려주고 싶다. 리포지토리 코드 async findClubPosts(data?: any) : Promise { //clubs 게시글 검색 { console.log(data, '리포지') const clubs = await this.clubRepository .createQueryBuilder('search') .leftJoinAndSelect('search.user', 'user') .where('search.title LIKE :s OR search.content LIKE :s', { s: `%${data.term}%` }) .orderBy("search.id", "DESC.. 개발 학습일지(TIL) 2023. 3. 22. 이전 1 2 3 4 5 6 7 ··· 9 다음