본문 바로가기

분류 전체보기

(94)
Stack(C언어) Stack Stack은 데이터를 담는 자료구조로, 데이터를 역순으로 저장할 수 있는 자료구조이다. Stack은 나중에 받은 데이터를 제일 처음(Top)에 저장하고, 마지막으로 받은 데이터부터 반환하는 Last In First Out(LIFO) 구조이다. Stack은 다음과 같은 기본적인 연산을 가진다. 1. push() - Stack에 데이터를 넣는다 2. pop() - Stack의 Top에 있는 데이터를 제거, 반환한다 3. peek() - Stack의 Top에 있는 데이터를 제거하지 않고 반환한다 4. isEmpty() - Stack이 비어있는지 여부를 반환한다 5. size() - Stack의 크기를 반환한다 상황에 따라 추가적인 연산을 구현할 수 있다. 그림을 통해 Stack을 이해해 보자. 비어..
LinkedList(C언어) LinkedList LinkedList는 자료구조의 일종으로, 배열과 같이 여러 개의 자료를 저장할 수 있는 새로운 자료형이라고 이해하면 된다. 여러 개의 정수, 심지어 여러 개의 구조체도 저장할 수 있다. LinkedList의 개념은 다음과 같다. 우선, LinkedList 구조체부터 선언한다. struct LinkedList { int data;//Linked List가 가지는 데이터 LinkedList* next;//다음 Linked List의 주소 } typedef LinkedList; 그림으로 보면 다음과 같다. 이제, next에 다른 LinkedList*를 넣어 다음(next) LinkedList에 연결해 주자 이렇게 하면 두 개의 LinkedList가 연결되었다. a의 next가 b의 주소를..
2023 2학기 C/자료구조 튜터링 2023년 1학기부터 학교에서 튜터링 프로그램에 참여하여 후배들에게 프로그래밍 기초를 가르치고 있었다. 방학 동안에도 밴드 동아리 후배들에게 C언어를 가르쳐주고, 작은 해커톤을 진행했다. 이번 학기에는 가르치는 내용을 정리하려고 이 카테고리를 개설했다. 필자도 아직 공부 중이라 미숙하고 많은 부분을 이해하지 못하지만, 지식을 나누고 소통하는 즐거움을 경험하고자 한다. 이번 학기에는 C언어를 사용한 기초 자료구조와 C++의 클래스를 가르칠 예정이다.
HTTP status 401과 403의 차이점 401(Unauthorized) 뜻 그대로 권한이 없는, 인증되지 않은 클라이언트라는 의미이다. 인증되지 않은 클라이언트는 다양한 경우가 있겠지만, 로그인을 하지 않은 사용자를 예시로 들 수 있다. 로그인을 하지 않은 사용자가 로그인이 필요한 기능에 대한 요청을 했을 때 throw 하기 적절한 응답이다. 403(Forbidden) Unauthorized와 비슷하지만 명확하게 다른 점이 있다. Forbidden은 클라이언트가 보낸 요청에 대해서 해당 클라이언트에게 권한이 없음을 나타내는 status code이다. 일반적인 유저가 관리자 페이지에 접근하는 경우(관리자 권한이 없는 유저가 관리자 권한이 필요한 기능에 대한 요청을 한 경우) throw하기 적절한 응답이다. 이 차이점만 두고 보면 권한이 없으면 ..
Role을 통한 User 인가 프로젝트를 진행하며 모든 데이터에 대한 CRUD API를 만들었다. 기능을 추가해 가면서 CRUD API를 관리자 전용으로 바꾸기로 해서 모든 User에 Role을 부여하고 이를 통한 인가를 구현하기로 했다. 인증? 인가? 인증이란, 사용자의 신원 그 자체를 검사하는 프로세스를 말한다. 로그인을 인증의 예시로 들 수 있다. 인가란, 요청을 보낸 클라이언트를 식별하여 해당 클라이언트의 요청에 대한 권한을 검사하는 것을 말한다. 관리자 전용 API 등을 예시로 들 수 있다. User Entity User Entity를 다음과 같이 정의할 수 있다. User Entity의 role을 사용해 인가를 구현할 것이다. (예시 코드) /** * @description * 일반 사용자 - USER * 관리자 - ADM..
Cookie와 Session HTTP 프로토콜을 통한 통신을 할 때 사용되는 Cookie와 Session은 HTTP 프로토콜의 특징이자 약점인 Stateless, Connectionless를 보완하기 위해서 사용된다. Stateless와 Connectionless Stateless: 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식으로, 클라이언트와의 이전 통신에서 데이터를 주고받았다 해도, 다음 통신에서 이전 데이터를 유지하지 않는다. 상태 정보가 없기 때문에 서버는 클라이언트의 정보를 기억하고 있을 수 없다. Connectionless: 클라이언트가 서버에 요청을 보내면 Connection을 하고, 응답을 보낸 뒤 Connection을 닫는다. 각 통신마다 새로운 Connection을 맺는다. 위 특징들은 HTTP 프로토콜의..
CORS, credentials 배포를 하는데 프론트 쪽에서 CORS 정책 에러가 발생했다는 소식을 들었다. 처음 듣는 말이라 구글링을 해 봤다. CORS는 다른 도메인(Origin) 간에 데이터를 주고받을 수 있도록 허용하는 보안 메커니즘으로, 프론트에서 백엔드에 데이터를 요청하는 경우 CORS를 기반으로 하여 HTTP 요청을 하게 되는데, 적절한 설정이 되어있지 않은 경우 코드상 문제가 없다고 하더라도 HTTP 에러가 발생할 수 있고, 보안 측면에서도 허용되지 않은 출처의 서비스가 악의적인 목적으로 데이터를 요청하고 응답받는 등의 사고가 발생할 수 있기 때문에 CORS 관련 설정을 해 주어야 한다는 사실을 알았다. NestJS에서 CORS 설정을 하려면 main.ts에 enableCors()코드를 추가하면 된다. // main.ts..
NestJS에서 openAI API 연동으로 ChatGPT 활용하기 해커톤을 하며 서비스에 ChatGPT를 활용해 보기로 결정하였다. 검색 교육 프로그램이기 때문에 다양한 답을 정답으로 인정해줘야 했기 때문이다. 언어 모델을 직접 만들어 사용하는 방법도 있었지만, 인공지능에 대해선 아는 게 없었기 때문에 ChatGPT를 활용하기로 했다. ChatGPT를 사용하려면 먼저 KEY를 발급받아야 한다 https://platform.openai.com/overview OpenAI Platform Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform. platform.openai.com 여기에 들어가서 API KEY를 발급받으면 된다. ..
Throttler를 사용한 Rate Limiting 해커톤 동안 프로젝트를 하면서 요청을 제한해야 할 일이 생겼다. chatGPT를 사용한다는 것이 그 이유인데, 처음엔 chatGPT billing 문제로 인해 요청을 제한하고 싶었는데, 다른 곳(사용자 인증과 연관된 곳)에서도 써야 될 것이라 생각해 전역으로 적용하기로 했다. 사용 방법은 다음과 같다. 우선, NestJS에서 제공하는 throttler 패키지를 설치한다. yarn add @nestjs/throttler 설치가 잘 되었다면, rate limiting의 구체적인 내용을 정하면 된다. AppModule에서 ThrottlerModule을 import 할 때 정하면 된다. @Module({ imports: [ ThrottlerModule.forRoot({ ttl: 60, limit: 10, }),..
8/18 ~ 8/19 해커톤 멋쟁이 사자처럼의 가장 큰 행사인 중앙 해커톤에 참석했다. 한 달 전부터 기획, 개발을 시작해 해커톤 당일 발표하는 방식이다. 팀장을 맡게 되어 한 달 전부터 팀원들과 밤낮없이 개발과 기획을 했다. 많이 힘들었지만, 나와 같이 개발에 진심으로 몰두하는 분들과 함께할 수 있는 기회에 감사한 마음을 가지고 임했다. 동아리에 들어온 이유가 같은 꿈을 가지고 있는 사람들과 소통하며 프로젝트를 해 보고 싶었던 것이라 행복한 한 달이었다. 해커톤은 양재 aT센터에서 진행되었다. 위메이드, 네이버클라우드, 동아제약 등의 회사에서 후원을 받아 행사장에 도착하니 박카스와 박카스 젤리를 비롯한 많은 물품들을 나눠주었다. 부스도 운영했는데, 스킨케어 제품, 마우스 장패드, 음료를 받을 수 있는 이벤트에 참여해 보기도 했다...