분류 전체보기 210

23.09.12 오버로딩 오버라이딩

오버로딩 (Overloading) 같은 이름의 메서드가 다른 매개변수를 가질 수 있음을 의미한다. 특징: 매개변수의 수, 타입, 혹은 둘 다가 달라야 한다. 반환 타입은 오버로딩을 구별하는 기준이 아니다. 사용 이유: 코드의 중복을 줄이고, 프로그래머가 메서드 이름을 일일이 다르게 지정하지 않도록 하여 가독성을 높인다. 다형성을 구현하며 코드의 유연성을 높인다. 오버라이딩 (Overriding) 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의하는 것을 의미한다. 특징: 메서드 시그니처 (이름, 매개변수 타입 및 개수)가 반드시 같아야 한다. 반환 타입은 같거나 하위 타입이어야 한다. 접근 제어자는 부모 클래스의 것과 같거나 더 넓은 범위로 설정해야 한다. 사용 이유: 부모 클래스의 기능을 확장하..

23.09.11 정렬 알고리즘

버블 정렬 (Bubble Sort) 작동 원리: 인접한 두 원소를 비교하여 필요하면 스왑(swap)한다. 이 과정을 반복하여 가장 큰 원소가 배열의 마지막으로 이동하게 하는 방식이다. 시간 복잡도: O(n^2) 특징: 구현이 간단하나, 실제 사용에서는 비효율적이다. 삽입 정렬 (Insertion Sort) 작동 원리: 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분의 원소를 정렬된 부분에 올바른 위치에 삽입한다. 시간 복잡도: O(n^2), 하지만 이미 정렬된 배열에 대해서는 O(n) 특징: 작은 데이터셋에서 효율적이며, 안정적인 정렬 알고리즘이다. 선택 정렬 (Selection Sort) 작동 원리: 주어진 리스트 중에서 최소값을 찾아서 첫 번째 위치에 있는 값과 교체한다. 그..

23.09.10 엘라스틱서치(Elasticsearch)

엘라스틱서치 실시간 분산 검색 엔진이다. 이는 주로 로깅 및 로그 분석, 실시간 데이터 분석, 검색 엔진 등 다양한 용도로 사용된다. 엘라스틱서치는 JSON 기반의 RESTful API를 제공하며, 다양한 프로그래밍 언어에서 쉽게 접근할 수 있다. 이는 또한 Apache Lucene을 기반으로 하고 있어, 텍스트 검색에 매우 뛰어난 성능을 보인다. 주요 특징 분산 처리: 데이터를 여러 노드에 분산해서 저장하고, 병렬 처리를 통해 빠른 검색과 집계를 제공. 확장성: 작은 규모의 단일 머신부터 수백 대의 서버까지 확장이 가능. 실시간 분석: 거의 실시간으로 데이터 검색 및 분석이 가능. 다양한 데이터 타입 지원: 텍스트, 숫자, 지리 위치, 정렬된 데이터 등 다양한 타입의 검색을 지원. 고급 검색 기능: 다..

23.09.09 도커(Docker)

도커 컨테이너 기반의 오픈 소스 가상화 플랫폼이다. 여기서 "컨테이너"란 애플리케이션과 그에 필요한 라이브러리, 의존성 등을 하나의 패키지로 묶는 기술이다. 작동 원리와 방식 이미지와 컨테이너 -이미지(Image): 응용 프로그램과 그 의존성을 패키징 한 것. -컨테이너(Container): 이미지를 실행한 인스턴스. Docker Daemon 도커 데몬은 컨테이너의 생명 주기를 관리. 데몬은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등을 관리할 수 있다. Docker Client 사용자가 명령어를 입력하는 인터페이스. (docker run, docker pull 등). Docker Registry 이미지를 저장하는 장소. Docker Hub가 가장 유명한 레지스트리이다. 컨..

23.09.08 발표 후 피드백 아쉬운 부분

발표 후에 들어온 질문이나 피드백이 많이 있었다. OAuth에 대한 부분 : 구글이나 깃허브는 표준을 따르고 카카오는 표준을 따르지 않는다. 그 차이를 알고 있으면 좋다. 이건 찾아보고 정리해서 알아둬야겠다. 패스포트를 이용해서 인증처리가 간편하게 되는 것만 알고 있었으며 소셜 로그인 모두 같은 표준을 따른 다고 생각했었다. 토큰 보관에 레디스 사용 : 지금은 작은 프로젝트라서 레디스 클라우드를 이용해서 작은 용량으로 처리할 수 있지만 실제 서비스에서는 좋지 않은 선택일 수 있다. 기업에서 레디스를 사용한다면 많은 비용이 발생한다. 그래서 토큰을 보관하는 것 정도는 레디스가 아니라 서버에 전역 변수를 만들어서 그 안에 저장을 해도 되고, mysql에 저장을 해도 충분히 속도적으로 문제가 없었을 것이다. ..

23.09.07 깃허브 액션스(GitHub Actions)

GitHub Actions GitHub에서 제공하는 CI/CD (지속적 통합/지속적 배포) 서비스이다. 이 서비스는 소프트웨어 개발 작업을 자동화하는 데 사용되며, 특히 레포지토리에 대한 다양한 이벤트에 반응하여 코드 통합, 테스트 실행, 배포 등의 작업을 자동으로 수행할 수 있다. 주요 기능 이벤트 기반 워크플로우: GitHub 레포지토리에서 발생하는 다양한 이벤트(예: 풀 리퀘스트 생성, 이슈 등록, 새 브랜치 생성 등)에 따라 워크플로우를 실행할 수 있다. YAML 구성: 워크플로우는. github/workflows 디렉터리에 YAML 파일로 저장된다. 이 파일을 통해 워크플로우의 동작을 정의하고 구성할 수 있다. Matrix Builds: 하나의 워크플로우 내에서 다양한 환경(예: 다른 OS, 다..

23.09.06 유저 테스트

처음 해보는 유저 테스트가 끝났다. 분명 사전에 점검하고 문제가 없을 것이라 생각했지만 생각하지 못했던 에러들이 많이 생겼다. 그래서 급하게 원인을 파악해서 처리했다. 카카오 로그인의 경우 비밀번호가 없었기 때문에 회원 탈퇴 시에 비밀번호를 입력받아서 탈퇴처리를 할 수 없었으며 URL주소로만 접근해서 다른 사람의 게시글을 볼 수 있는 문제도 있었다. 그리고 아이폰에서 로그인을 못하는 문제와 이외에도 사용법이 어렵다는 의견과 사용법이 직관적이라는 의견이 대립되기도 했고 기획의도가 전달되지 않아서 사용자가 불편하게만 느껴지는 부분도 있었다. 가장 먼저 에러에 대한 부분을 처리하고 의견이 대립되거나 우리의 기획 의도와 다른 부분 의견에 대해서 그에 대해서 다시 회의를 하고 어떤 부분을 반영하고 어떻게 처리할지..

23.09.05 캐시(cache)

캐시 간단히 말하면 빠른 데이터 저장소를 의미하는데, 이전에 계산한 값을 다시 사용하기 위해 일시적으로 저장하는 공간이다. 캐시는 메인 메모리나 디스크보다 빠르지만, 용량은 작은 특별한 저장 영역이다. 데이터나 결과를 캐시에 저장함으로써, 같은 연산이나 데이터 요청이 다시 발생했을 때 빠르게 응답할 수 있다. 캐시의 필요성 속도 향상: 캐시는 데이터 처리 속도를 높일 수 있다. 예를 들어, 웹 브라우저는 자주 방문하는 웹 페이지의 데이터를 캐시에 저장할 수 있으며, 이는 페이지 로딩 시간을 줄여준다. 네트워크 트래픽 감소: 캐싱은 네트워크의 부하를 줄일 수 있다. 많은 사용자가 동일한 데이터에 접근할 경우, 한 번만 원본 데이터를 읽어 캐시에 저장하면 이후의 요청은 캐시에서 처리할 수 있기 때문이다. 캐..

23.09.04 운영체제(Operating System, OS)

운영체제는 컴퓨터 시스템의 핵심 소프트웨어로서 하드웨어와 응용 프로그램 간의 중간 역할을 한다. 인터페이스를 제공하고, 컴퓨터 자원을 효율적으로 관리하며, 사용자 및 응용 프로그램에 서비스를 제공하는 소프트웨어 시스템이다. 이를 통해서 하드웨어의 복잡성을 숨기고 효과적으로 컴퓨터를 사용할 수 있다. 다양한 운영체제가 존재하며, 그중에서도 윈도우, 리눅스, macOS 등이 널리 사용되고 있다. 자원 관리: 운영체제는 하드웨어 자원(중앙 처리 장치, 메모리, 디스크, 네트워크 등)을 관리하고, 다양한 응용 프로그램 및 프로세스 간에 공정한 자원 분배를 담당한다. 이를 통해 시스템 자원의 효율적인 활용을 보장한다. 프로세스 관리: 프로세스는 실행 중인 프로그램을 나타내며, 운영체제는 프로세스를 생성, 스케줄링..

23.09.03 스웨거(Swagger)

스웨거 API 문서를 설계, 문서화, 테스트 및 시각화하기 위한 오픈 소스 프레임워크 및 도구 세트이다. 주로 RESTful 웹 서비스 및 HTTP API에 대한 문서화에 사용된다. 이를 활용하면 개발자 및 API 사용자가 API를 더 쉽게 이해하고 사용할 수 있으며, 개발자 간의 협업을 간편하게 할 수 있습니다. 주요 구성 요소와 기능 Swagger 스펙 또는 OpenAPI 스펙: Swagger는 API 설계 및 문서화에 사용되는 스펙을 정의한다. 이 스펙은 API 엔드포인트, 요청 및 응답 형식, 파라미터, 응답 코드 및 기타 API 정보를 정의하는 JSON 또는 YAML 형식의 문서이다. 여기에 API의 형태와 동작을 기술한다. Swagger UI: Swagger UI는 Swagger 스펙을 시각적..