본문 바로가기

전체 글377

[AI 채팅 프로그램 개발 일기] 왜 나는 내가 좋아하는 캐릭터들이랑 채팅 몬해..? 보호되어 있는 글 입니다. 2024. 4. 3.
[자료구조] Array, ArrayList, LinkedList 차이 (시간복잡도, 각각 언제 써야할까?) 목차 Array ArrayList LinkedList Array, ArrayList, LinekdList 시간복잡도 Array, ArrayList, LinedList 언제 써야 할까? 1. Array 배열은 선언 시에 배열의 크기가 결정되고, 이후 변경하지 못해 고정적이다. 인덱스라는 데이터의 논리적 위치와 디스크에 저장되는 물리적 위치가 동일하며, 인덱스를 알고 있다면 빠르게 접근할 수 있다. (특징) 크기가 고정적 논리적 위치와 물리적 위치가 동일 조회 시 인덱스를 알고 있다면 O(1)의 시간복잡도를 가짐 데이터의 개수가 제한되어 있고, 조회가 빈번한 경우에 배열을 사용 (장점) 캐시에 데이터가 존재할 가능성이 큼 조회 속도가 빠름 (단점) 배열의 크기가 한정되어 있음 2. ArrayList Arra.. 2024. 4. 2.
[네트워크] CORS 면접 질문 및 답변 정리 CORS가 뭔가요? 더보기 일반적으로 웹 애플리케이션은 자신과 다른 출처에서의 리소스 요청을 금지하고 있고, 이 정책을 CORS라고 합니다. 예를 들어, 프론트엔드와 백엔드 서버가 각각 따로 존재할 때, 브라우저는 각각 다른 출처에서 리소스를 불러온다고 판단합니다. 따라서 서버에서 응답할 때 사용하는 출처를 담아 전달하고, 브라우저는 출처를 확인함으로써 모든 리소스를 포함한 응답을 받을 수 있게 되는 것입니다. 출처에 대해서 좀 더 구체적으로 설명해주실 수 있나요? 더보기 출처는 URL을 의미합니다. 프로토콜, 호스트 이름, 경로, 포트 번호까지 모두 동일해야 같은 출처라고 판단합니다. 따라서 같은 로컬이라도 프론트엔드와 백엔드에서 사용하는 포트 번호가 달라 CORS 에러가 발생하는 경우가 많고, 저도 .. 2024. 4. 2.
[디자인패턴] 디자인 패턴이란? 목차 디자인 패턴이란? 디자인 패턴 종류 객체지향 4가지 특징, 5가지 원칙과의 관계 1. 디자인 패턴이란? 소프트웨어를 개발하다 보면 유사한 구조적 문제를 맞닥뜨리곤 한다. 구조적 문제를 어떻게 해결해야 할지 정형화시킨 소프트웨어 설계를 디자인 패턴이라고 부른다. 디자인 패턴을 사용함으로써 문제를 빠르게 해결할 수 있고, 패턴을 기반으로 기존 코드를 이해하기 쉬워 유지보수성이 좋다는 장점을 가진다. 2. 디자인 패턴 종류 가장 유명한 GoF의 디자인 패턴에서는 크게 생성, 구조, 행위 패턴으로 분류된다. 생성 패턴은 객체를 생성하거나 사용함으로써, 구조 패턴은 객체와 클래스를 구성함으로써, 행위 패턴은 클래스에 책임을 할당함으로써 문제를 해결하는 방법이다. 1) 생성 패턴 싱글톤 패턴 (Singleto.. 2024. 3. 29.
[네트워크] CORS란? (CORS가 필요한 이유, CORS 에러 해결 방법 스프링, CORS 동작 흐름) 목차 CORS란? CORS가 필요한 이유 : SOP CORS 에러 해결 방법 CORS 기본 동작 흐름 CORS 실제 동작 시나리오 Simple Request Preflight Request Credentialed Request 1. CORS(Cross-Origin Resource Sharing)란? CORS는 Cross-Origin Resource Sharing의 약자로, 직역하면 동일 출처 리소스 공유 정책이다. 이것은 서로 다른 출처에 있는 리소스에 접근할 수 있도록 브라우저에게 권한을 알려주는 정책이며, 웹 애플리케이션이 자신의 출처와 다른 리소스를 사용할 때 HTTP Origin 필드에 자신의 출처를 담아 리소스 서버에 요청하는 것이다. 여기서 출처는 URL 경로를 의미한다. URL 경로는 프로토.. 2024. 3. 14.
[네트워크] 토큰과 OAuth란? (OAuth 과정, JWT와 OAuth 비교) 목차 토큰이란? OAuth란? OAuth 과정 JWT와 OAuth 비교 1. 토큰이란? 토큰은 서버와 클라이언트 사이의 상태정보를 저장하기 위해 사용되는 데이터이다. 로그인한 사용자라는 인증 정보와 사용자의 권한 정보를 가지고 있고, 토큰을 이용해 웹사이트를 이용할 수 있다. 토큰을 이용한 로그인 기능을 구현할 때, 엑세스 토큰과 리프래시 토큰을 이용한다. 엑세스 토큰을 가진 사용자는 웹페이지에 접근할 수 있는, 즉 인증된 사용자임을 나타내며 권한 정보를 통해 제한된 웹페이지 접근을 허용한다. 하지만 엑세스 토큰이 탈취된다면 누구든지 웹페이지에 접근할 수 있다. 따라서 엑세스 토큰은 짧은 토큰 유효 시간을 설정하고, 리프래시 토큰을 이용해 새로운 엑세스 토큰을 부여한다. 리프래시 토큰은 서버 측 데이터베.. 2024. 3. 14.
[자료구조] 해시 테이블이란? (해시 함수, 해시 충돌과 해결 방법, 자바에서 HashMap과 HashTable) 목차 해시 테이블이란? 해시 함수 해시 충돌과 해결 방법 Seperate Chaining 방식 Open Address 방식 Resizing (테이블 크기 재할당) 자바에서 HashMap, HashTable 1. 해시테이블이란? 해시 테이블은 key-value 형태로, 각각의 key 값에 해시 함수를 적용해 배열의 인덱스를 생성하고, 인덱스에 데이터를 저장하거나 검색할 수 있는 자료구조이다. 해시 테이블은 내부적으로 배열을 이용하고 있고 key를 통해 배열의 인덱스에 접근할 수 있기 때문에, 속도가 매우 빠르다는 장점을 가지고 있다. 하지만 해시 함수에 의존하고 있기 때문에, 충돌이 일어나지 않고 빠르게 해시를 만들어내는 해시 함수의 역할이 중요하다. (특징) 삽입, 삭제, 검색 모두 평균적으로 O(1)의.. 2024. 3. 13.
[네트워크] 웹 캐시, Outh 면접 질문 및 답변 정리 쿠키와 세션, 웹캐시에 대해 설명해주세요. 더보기 쿠키와 세션은 웹 상에서 서버와 클라이언트의 상태 정보를 저장해두기 위해 사용됩니다. 쿠키는 클라이언트에 저장되고 브라우저를 종료할 때까지 데이터가 남아있기 때문에, 보안에 취약하다는 단점을 가지고 있습니다. 이에 반해 세션은 서버에 저장되고, 데이터베이스를 이용해 세션을 관리할 수 있어 로그인 인증을 위해 사용됩니다. 이 두 개념과 별개로 웹캐시는 HTTP 요청에 대한 응답 속도를 높이기 위해 로컬 스토리지에 접속한 사이트에 대한 css, 이미지 등의 정적 데이터를 저장해두는 방식입니다. HTTP 헤더의 e-tag를 통해 업데이트된 정적 데이터가 존재하는지 확인하고, 로컬에서 메타 데이터를 가져올 수 있습니다. 웹 캐시란 무엇인가요? 더보기 웹 캐시는 .. 2024. 3. 13.
[네트워크] 쿠키, 세션, 토큰 면접 질문 및 답변 정리 쿠키와 세션에 대해 설명해주세요. 더보기 쿠키와 세션은 웹 상에서 클라이언트와 서버의 상태 정보를 저장하기 위해 사용됩니다. HTTP는 Stateless한 특성으로 서버와 클라이언트 사이에 상태 정보를 저장해두지 않기 때문에, 이러한 상태 정보를 저장하기 위해 쿠키와 세션이 필요합니다. 쿠키는 클라이언트에 저장되고 브라우저를 종료할 때까지 남아있기 때문에, 보안에 취약하다는 단점을 가지고 있습니다. 따라서 팝업 창에서 오늘하루보지않기, 혹은 장바구니 등의 기능에서 사용됩니다. 세션은 서버에 저장되고 서버가 관리할 수 있기 때문에, 보안성이 좋다는 장점을 가지고 있습니다. 일반적으로 사용자가 로그인을 하면 서버는 세션ID를 생성해 데이터베이스에 저장하고, 클라이언트는 부여받은 세션ID를 이용해 권한이 필요.. 2024. 3. 13.