All
100 posts
📚 [Data Engineering] 빅데이터를 지탱하는 기술 - CH2 2-1 크로스 집계, 2-2 열 지향 스토리지에 의한 고속화

데이터 엔지니어로 살아남기 - 빅데이터에 관리와 처리를 위한 전반적인 기술 데이터 엔지니어로서 필요한 기술에 대해 차근차근, 진득하게 공부해보려 합니다. 정리된 내용은 빅데이터를 지탱하는 기술 도서를 기반으로 합니다. 2-1. 크로스 집계의 기본 1. 크로스 집계의 개념 1. 크로스 테이블(Cross Table) 행과 열이 교차하는 부분(cross)에 숫자 데이터가 들어가는 테이블 주로 엑셀 등의 스프레드시트에서 테이블을 표현하는 형태 사람이 해석하기는 편하나, 데이터베이스에서 다루기 어려움 데이터베이스는 데이터가 추가될 때 행이 추가됨. 컬럼을 추가하려면 테이블 정의 자체를 변경해야 하므로 상대적으로 어려움. 2. …

March 19, 2023
bigdata
data-engineering
📚 [Data Engineering] 카카오의 분산 스토리지 - KAGE(KAkao storaGE)

카카오의 분산 스토리지 : KAGE(KAkao storaGE) 동일한 데이터를 3개의 파일(원본 + 2개의 복제본)로 만들어 분산 저장함 - 물리적으로 서로 다른 서버에 있지만, 논리적으로 같은 데이터를 갖고 있는 3개의 청크(청크셋)에 저장 파일 읽기 트래픽 분산, 빠른 장애 파악 및 처리 KAGE의 구성 - Datanode와 Namenode Datanode(데이터 노드) 실제로 파일이 저장된 공간. 파일을 읽고 전송하는 역할. 데이터 노드의 파일 저장소는 청크(Chunk)라는 일정한 크기를 가진 저장 공간의 모임으로 구성됨 청크가 3개(마스터 노드 1개, 슬레이브 노드 2개) 모인 청크셋 단위로 데이터를 관리함 N…

March 12, 2023
data-engineering
infra
📚 [Data Engineering] 스토리지 시스템 (DAS, SAN, NAS)

스토리지 시스템 기초 DAS(Directed-attached Storage) DAS(직접 연결 스토리지) 서버와 스토리지를 분리하고 둘을 연결하여 사용하는 구조 초기에는 주 기억장치(RAM)와 보조 기억장치(하드 디스크)가 분리되지 않고 같이 쓰임 계산의 성능을 높이고 데이터 보관의 용량과 효율을 높이기 위해 스토리지 시스템인 보조 기억 장치가 탄생하였고, 서버에 이를 연결해 사용함 장단점 DAS 구조에서는 추가적인 디스크 용량이 필요하다면 디스크를 물리적으로 교체해야 하는 불편함이 있음 SAN(Storage Area Network) SAN(스토리지 전용 네트워크) 스토리지를 여러 대 준비한 뒤 스토리지들을 연결하는 …

March 11, 2023
data-engineering
infra
📚 [Data Engineering] 빅데이터를 지탱하는 기술 - CH1 3, 4 데이터 프레임, BI 도구와 모니터링

데이터 엔지니어로 살아남기 - 빅데이터에 관리와 처리를 위한 전반적인 기술 데이터 엔지니어로서 필요한 기술에 대해 차근차근, 진득하게 공부해보려 합니다. 정리된 내용은 빅데이터를 지탱하는 기술 도서를 기반으로 합니다. 1-3. 스크립트 언어에 의한 특별 분석과 데이터 프레임 데이터 처리와 스크립트 언어 원천 데이터는 파일 서버, API 등 다양한 방법으로 수집하게됨. 이러한 다양한 전처리, ETL 과정을 처리하기 위해 스크립트 언어를 사용함. 대표적인 데이터 처리 스크립트 언어로는 R, Python 등이 있음. Python의 우수한 특징 다양한 라이브러리 지원 : API 호출, 문자열 처리 다양한 프레임워크 지원 : …

March 10, 2023
bigdata
data-engineering
📚 [Data Engineering] 빅데이터를 지탱하는 기술 - CH1 1_빅데이터의 정착, 2_빅데이터 시대의 데이터 분석 기반

데이터 엔지니어로 살아남기 - 빅데이터에 관리와 처리를 위한 전반적인 기술 데이터 엔지니어로서 필요한 기술에 대해 차근차근, 진득하게 공부해보려 합니다. 정리된 내용은 빅데이터를 지탱하는 기술 도서를 기반으로 합니다. 이 책에서 다루는 내용 자동화된 데이터 처리(데이터 처리를 시스템화) 데이터 처리 과정에서 사용되는 SW, DB, 프로그래밍 언어, 시각화 도구 특징, 데이터 처리를 자동화하는 기술(워크플로우 관리, 스트림 처리 등) *빅데이터 취급이 어려운 이유 데이터의 분석 방법을 모른다 (데이터 분석가의 역할) 데이터 처리에 수고와 시간이 걸린다 (데이터 엔지니어의 역할) 1-1. 배경빅데이터의 정착 분산 시스템에…

February 19, 2023
bigdata
data-engineering
☁️ [GCP] GCP Managed Services

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Managed Services GCP 자원과 함께 관리 역할까지 서비스의 형태로 제공하는 것 인프라, 플랫폼, 애플리케이션, 컨테이너 등을 관리하는 수준에 따라 서비스, 비용이 다름 서비스 제공 단계 클라우드 자원 SaaS Application . Application Runtime PaaS OS . Virt…

December 05, 2022
gcp
cloud
☁️ [GCP] Cloud Load Balancing

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Cloud Load Balancing 사용자의 트래픽을 여러 리전의 애플리케이션 인스턴스로 분배하는 역할 특징 Health Check : failure를 감지하여 살아있는 인스턴스로 라우팅 Auto Scaling : 자동으로 scale up & down Global Load Balancing : 단일 애니캐스…

December 04, 2022
gcp
cloud
☁️ [GCP] Gcloud

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Gcloud GCP 자원들을 사용하기 위한 Command Line Interface(CLI) GCP 자원의 75%는 로 제어 가능 googlc cloud SDK 설치하여 사용하거나, 웹 콘솔의 cloud shell에서 사용 가능 Configuration : Gcloud 초기화 : config 리스트 조…

December 02, 2022
gcp
cloud
☁️ [GCP] VM Practice & GCE Scenario

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. VM Practice Zone and Region 선택하기 costs, regulations, availability needs, latency, HW 바탕으로 고려 Machine Type 선택하기 추정이 어려울 경우 직접 여러 Machine Type 인스턴스 실행해본 뒤 성능 등 비교하여 판단 GPU 사용 …

December 01, 2022
gcp
cloud
☁️ [GCP] Instance Groups

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Instance Groups 여러개의 VM을 하나의 엔티티처럼 관리하기 위한 인스턴스 묶음 종료 Managed(MIG) Instance Template를 이용해 동일한 VM을 여러개 만들어 관리 Auto scaling, Auto healing 지원 Unmanaged 서로 다른 configurations로 다른…

November 30, 2022
gcp
cloud
☁️ [GCP] Optimizing Costs and Performances

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Costs Sustained Use Discounts 특정 달 동안 상당량의 자원 사용 시 자동으로 적용되는 할인 Google Compute Engine, Google Kubernetes Engine 인스턴스 적용 제약 특정 머신은 할인 제외(E2, A2) App Engine flexible, Dataflow…

November 30, 2022
gcp
cloud
☁️ [GCP] Google Compute Engine

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Google Compute Engine(GCE) GCP에서 VM을 프로비저닝 & 관리하는 역할 특징 VM 인스턴스의 라이프사이클 관리 Multiple VM 사용 시 Load Balancing & Auto Scaling 스토리지(ex.네트워크 스토리지) 제공 네트워크 연결, 설정 관리(IP 주소 관리) Mach…

November 29, 2022
gcp
cloud
☁️ [GCP] Region and Zones

GCP - Associate Cloud Engineer 준비기 GCP Certification 취득을 위해 공부합니다. GCP 전반에 대한 내용을 다룹니다. 정리된 내용은 “Udemy-GCP Associate Cloud Engineer - Google Cloud Certification” 강의를 기반으로 합니다. Data Center 원격지 데이터 센터 배포의 문제점 High Latency : 타 지역 사용자가 자원 접근 및 요청 시 오래걸림 Low Availability : 데이터 센터 고장나면 애플리케이션도 죽음 Multiple 데이터 센터에 배포 동일 지역에 데이터 센터를 이중화하는 것 1)번 문제 미해결 2)번…

November 28, 2022
gcp
cloud
🌿 [SpringBoot MSA] RESTful API

RESTful API 내 공부는 내가 한다, 내공내한… 정리된 내용은 “인프런-Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)” 강의를 기반으로 합니다. RESTful Web Service 단계 LEVEL 0 필요한 리소스를 웹 서비스로 경유해 전달받는 최소한의 목적만 달성. URL에 action을 바로 노출시킨 형태 ex) http://server/getPosts http://server/deletePosts http://server/doThis LEVEL 1 필요한 리소스를 URL에 적절하게 표기함. URL의 형식은 올바르나 HTTP Methods를 사용하고 있지 않음 ex) http://se…

August 31, 2022
spring
msa
📟 [Infra] 3계층형 시스템

3계층형 시스템(3 Tier System) 단순히 기능을 개발하는 것을 넘어 데이터의 흐름과 시스템의 동작을 이해하고 싶어 인프라 공부를 시작합니다. 정리된 내용은 “그림으로 공부하는 IT 인프라 구조”를 기반으로 합니다. 3계층형 시스템 3계층 아키텍처는 , , 로 구성되어 있으며, 각 서버는 스위치를 경유하여 연결되어 있다. 모든 서버는 독립된 하나의 컴퓨터와 동일한 구조로 구성되어 있다. 각 서버 내부에 CPU, 메모리, 디스크, NIC/HBA와 같은 하드웨어 부품이 존재하고 이러한 장치를 사용하기 위한 인터페이스로 OS 커널이 존재하고, 그 위에서 여러 프로세스가 실행된다. 각 서버의 CPU와 디스크를 이용하…

July 24, 2022
infra
📟 [Infra] OS 커널

OS 커널 (OS Kernel) 단순히 기능을 개발하는 것을 넘어 데이터의 흐름과 시스템의 동작을 이해하고 싶어 인프라 공부를 시작합니다. 정리된 내용은 “그림으로 공부하는 IT 인프라 구조”를 기반으로 합니다. OS 커널의 역할 한마디로 정리하면 ‘뒤에서 무슨 일이 벌어지는지 은폐하면서 편리한 인터페이스를 제공하는 것’ 이라고 할 수 있음. 모든 작업을 접수받고(인터페이스 역할), 작업을 위한 순서나 저장 공간 등을 스스로 제어하여 관리한다. 1) 시스템 콜 인터페이스 프로세스/스레드 -> 커널 간 인터페이스 애플리케이션이 OS에 작업을 명령하는 것을 “시스템 콜”이라 한다. 즉, 애플리케이션이 명령을 내릴 수 있도…

July 24, 2022
infra
✨ [Seoul Emergency Proj.] 하둡과 몽고DB 연결하고 맵리듀스 결과 몽고DB에 적재하기

하둡과 몽고DB 연결하고 맵리듀스 결과 몽고DB에 적재하기 ~일간~ 두더지 탈출기 (부제. 삽질 멈춰!…) Seoul Emergency 프로젝트를 진행하며 발생한 에러를 정리합니다. 의존성 설정(이 99%) 아래 블로그 설명 따라 2가지 라이브러리를 추가한다. [Hadoop] 하둡과 MongoDB 연동하는 코드 hadoop 연결에 대한 mongoDB 공식 문서 MapReduce Usage · mongodb/mongo-hadoop Wiki 문제의 시작..(벌써?) 일반적으로 maven 이나 gradle로 빌드하면 위에서 요구하는 2가지 라이브러리를 쉽게 추가할 수 있는데,,,(pom.xml에 태그로 설정하거나 buil…

March 16, 2022
project
seoul_emergency
hadoop
mongodb
✨ [Seoul Emergency Proj.] 재난 뉴스 형태소 분석해서 Map Reduce WordCount 해보기

재난 뉴스 형태소 분석해서 Map Reduce WordCount 해보기 ~일간~ 두더지 탈출기 (부제. 삽질 멈춰!…) Seoul Emergency 프로젝트를 진행하며 발생한 에러를 정리합니다. 재난뉴스 형태소 분석하기 파이썬 형태소 분석기 라이브러리 설치 그냥 기사 원문 긁어와서 txt 파일로 만들고 맵리듀스 돌리니 띄어쓰기로만 구분이 되어서… 어구과 명사로 구분할 수 있는 파이썬 형태소 분석기 라이브러리를 사용했다. Open Korean Text 형태소 분석기를 사용했으며 문장을 정규화하거나, 어구, 형태소, 명사 등을 파싱할 수 있다. 형태소 분석기, Okt(Open Korean Text) (구)트위터 형태소분석…

March 14, 2022
project
seoul_emergency
hadoop
✨ [Seoul Emergency Proj.] 서버에 MongoDB 설치하고 로컬 MongoDB Compass로 사용하기

서버에 MongoDB 설치하고 로컬 MongoDB Compass로 사용하기 ~일간~ 두더지 탈출기 (부제. 삽질 멈춰!…) Seoul Emergency 프로젝트를 진행하며 발생한 에러를 정리합니다. MongoDB 사용하기 목표 : 가상환경인 VMWare 우분투에 MongoDB 설치하고 로컬환경인 Windows에 MongoDB GUI인 MongoDB Compass 를 설치하여 연결한다! VMWare에 MongoDB 설치하기 아래 블로그를 참고하여 MongoDB를 설치하고 DB, User를 생성한다. [MongoDB/Linux] 우분투에 몽고DB 설치 및 외부 접속 허용 / MongoDB Compass로 외부 접속 이때 …

March 13, 2022
project
seoul_emergency
mongodb
✨ [Seoul Emergency Proj.] 서울시 지진 해일 데이터로 Hadoop MapReduce 해보기

서울시 지진 해일 데이터로 Hadoop MapReduce 해보기 ~일간~ 두더지 탈출기 (부제. 삽질 멈춰!…) Seoul Emergency 프로젝트를 진행하며 발생한 에러를 정리합니다. 데이터 준비하기 우분투에서 한글사용하기 요거 따라하기 Ubuntu 20.04 키보드 한글 입력 설정 하기 중요!!! 중간에 install 하다가 인터넷 커넥션 에러 뜰 경우 cmd 창에서 apt 명령어로 업데이트해주기 상단바에서 한글 꼭 설정해줘야함 서울시 열린데이터 광장에서 데이터 다운로드 파이어폭스에서 서울시 열린데이터 광장 접속한 뒤 csv 파일 다운로드 파일명 한글+띄어쓰기 있으면 나중에 귀찮아지므로 적절한 영어로 바꿔주기 …

March 10, 2022
project
seoul_emergency
hadoop
🌿 [Spring Security] 스프링 시큐리티로 관리자, 개발자 권한 추가 설정하기

스프링 시큐리티로 관리자, 개발자 권한 추가 설정하기 간단하게 부가적인 권한 설정을 해보자. Secured 일반적으로 글로벌한 권한 처리는 SecureConfig 클래스의 configure() 메서드에서 체이닝을 통해 설정한다. 하지만 어노테이션만 설정한다면 컨트롤러에서도 각 요청 메서드 별 권한 설정이 가능하다. SecureConfig에 어노테이션 설정하기 클래스 레벨에 어노테이션을 추가한다. : 컨트롤러 요청 메서드에서 어노테이션을 설정할 수 있다. : 컨트롤러 요청 메서드에서 , 어노테이션을 설정할 수 있다. 컨트롤러 요청 메서드 별 권한 설정하기 컨트롤러의 요청 메서드에 , 등의 어노테이션을 붙여 …

March 06, 2022
springboot
spring-security
🌿 [Spring Security] 스프링 시큐리티로 회원가입, 로그인 구현하기

스프링 시큐리티로 회원가입, 로그인 구현하기 지난 번에 이어 이번엔 회원가입과 로그인이다. 회원가입 회원가입의 사용자 기능 흐름은 다음과 같다. 권한이 없는 사용자가 요청을 할 경우 로그인 페이지를 띄워야 한다. 이때 로그인 페이지에 회원가입 페이지로 이동할 수 있는 링크를 걸어둔다. 이를 통해 사용자가 회원가입 링크로 접속하여 회원가입 폼을 작성한 뒤 서버에 제출한다. 서버는 회원가입 로직을 처리한 뒤 다시 로그인 페이지로 리다이렉트하여 로그인 후 사용할 것을 유도한다. 회원가입 페이지 만들기 간단하게 브라우저에 띄울 회원가입 페이지를 구현한다. 아래에 joinForm.html 파일을 생성한다. 컨트롤러로 요청 …

March 05, 2022
springboot
spring-security
🌿 [Spring Security] 스프링 시큐리티로 사용자 권한 설정하기

스프링 시큐리티로 사용자 권한 설정하기 부제 : 회원 관리 그 드높은 장벽! 로그인 만만하게 볼게 아니다…^^ Spring Security Framework 일반 사용자, 관리자, 개발자 이렇게 3개 그룹의 계정 관리를 해야한다고 가정하자. 각 사용자는 자신의 권한 범위 이내에서 접근이 허용되어야 한다. 보통 일반 사용자 < 관리자 < 개발자 순으로 넓은 권한을 갖고 있기때문에 일반 사용자가 접근하면 안 되는 페이지는 계정 검사를 하고 돌려보내야 한다. 이것을 아주아주아주 쉽고 논리적으로 해결한 것이 Spring Security 프레임워크다! Spring Security Configure 컨트롤러에서 다음과 같이 ,…

March 04, 2022
springboot
spring-security
🅿️ [Programmers] 섬 연결하기

Programmers 섬 연결하기 문제 문제 설명 Programmers - 섬 연결하기 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 입력 n개의 섬 사이에 다리를 건설하는 비용(costs) n costs return 4 [0,1,1,0,2,2,1,2,5,1,3,1,2,3,8]…

February 28, 2022
ps
programmers
🐧 [Hadoop] 하둡 맵리듀스 wordcount 예제

하둡 맵리듀스 wordcount 예제 Hadoop 설치 및 MapReduce 알고리즘 실습 환경 설정 VMWare 설치 Ubuntu Linux CD image 다운로드 VmWare 가상머신을 생성한 뒤 운영체제 이미지로 Ubuntu 이미지 설정하여 가상 리눅스 환경을 구축 콘솔에서 Hadoop 설치 콘솔에서 Hadoop 환경 설정 Linux, HDFS 디렉토리 구조 Linux 디렉토리 HDFS 디렉토리 wordcount 예제 실행 Project/src/Wordcount.java 구현 Project/src/Driver.java 수정하기 각 인자 : 실행할 alias, 파일, 멘트 맵리듀스 코드 컴파일 Project 디…

February 24, 2022
bigdata
hadoop
🐧 [Hadoop] 하둡 맵리듀스 프레임워크

하둡 맵리듀스 프레임워크 맵리듀스 프레임워크(MapReduce Framework) 맵리듀스 프레임워크란? 데이터 중심 프로세싱(빅데이터 처리)은 비싸고 복잡한 연산들이 요구된다. 복잡한 연산을 위해 컴퓨터의 성능을 향상시키는 scale-up(수직적 성능 향상) 방법과 scale-out(수평적 성능 향상) 방법이 있는데, scale-out한 방법이 비용 측면에서 더욱 유리하다. 맵리듀스 프레임워크란 저렴한 컴퓨터를 모아 클러스터를 만들고 이를 통해 빅데이터를 처리하도록 scalable한 병렬 소프트웨어를 구현하기 위한 프로그래밍 모델이다. 구글 맵리듀스(MapReduce), 아파치 하둡(Hadoop) 오픈 소스는 맵리…

February 21, 2022
bigdata
hadoop
📡 [Network] 네트워크 계층 모델 - 3계층, IPv4 조각화

네트워크 계층 모델 - 3계층, IPv4 조각화 IPv4 조각화 조각화(Fragmentation)란? MTU(Maximum Transmission Unit)보다 큰 IP 패킷을 전송하기 위해서는 이를 여러개의 작은 패킷으로 쪼개어 전송해야 한다. 이렇게 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환하는 과정을 조각화라고한다. 조각화된 패킷은 최종 목적지에 도달할 때까지 조각화된 상태를 유지하며, 무조건 최종 목적지에서만 재조립된다. IPv6에서는 출발지에서만 조각화가 가능한 것과 달리, IPv4는 발신지와 중간 라우터에서도 조각화가 가능하다. 일반적으로 MTU는 1500byte…

February 16, 2022
network
📡 [Network] 네트워크 계층 모델 - 3계층, 라우팅 테이블

네트워크 계층 모델 - 3계층, 라우팅 테이블 라우팅 테이블 라우팅 테이블이란? 최적의 경로를 찾아가기 위해 경로를 저장해둔 테이블 라우팅 테이블에 적혀있는 네트워크 대역만 찾아갈 수 있다. 기본값(0.0.0.0)은 알지 못하는 네트워크 대역을 표현하는데, 만약 아직은 IP 주소를 알지 못하는 네트워크 대역으로 찾아가고 싶을 경우 라우팅 테이블에 목적지 네트워크 대역을 기본값(0.0.0.0)으로 설정하고 대신 게이트웨이를 외부로 나가는 것으로 설정한다. 라우팅 테이블을 이용해 다른 네트워크 대역과 통신하는 과정 위의 그림에서 A 디바이스는 B 디바이스와 통신을 하고 싶다. 먼저 A는 자신의 라우팅 테이블을 확인하여 …

February 13, 2022
network
🎉 [PartyPeople] QueryDSL을 이용해 다중 해시태그 조회하기

QueryDSL을 이용해 다중 해시태그 조회하기 해피하우스 때와 동일하게 태그 서비스를 제공하여 파티룸 테마를 구분하고 목적에 따른 조회를 쉽게 만들고 싶었다. Spring + JPA 환경에서 태그 서비스를 제공하기 위해 고려해야 할 부분이 2가지가 있는데 바로 다대다 관계를 지키는 것, 그리고 이를 jpa에 맞게 매핑하는 것이라고 말하고 싶다. 간단해 보여도 막상 구현하다보면 복잡하니 이번에 잘 정리해두고 다음에 다시 찾아보고자 한다! 테이블 구성하기 연결 테이블(Join Table) 찬찬히 생각해보자. 파티룸을 설명하기 위한 수단으로 해시태그를 설정하기 위해서는 하나의 파티룸에 여러개의 해시태그를 걸어 각각의 해시…

February 11, 2022
network
📡 [Network] 네트워크 계층 모델 - 3계층, IPv4, ICMP 프로토콜

네트워크 계층 모델 - 3계층, IPv4, ICMP 프로토콜 IPv4 프로토콜 IPv4 프로토콜이란? 네트워크 상에서 데이터를 교환하기 위한 프로토콜이다. IPv4 프로토콜은 데이터가 정확하게 전달될 것을 보장하지 않는다. (악의적이든 오류가 발생하든) 패킷을 중복적으로 전송하거나 패킷의 순서를 잘못 전달할 경우 최종 목적지까지 데이터가 도달하지 않을 수 있다. 데이터의 순차적이고 올바른 전달은 상위 계층인 TCP에서 보장한다. IPv4 프로토콜의 구조 0 ~ 4 바이트 version : IPv4 버전임을 명시 (4) IHL(IP Header Length) : 헤더의 길이. IPv4 프로토콜 길이는 20 ~ 60 이…

February 10, 2022
network
📡 [Network] 네트워크 계층 모델 - 3계층, ARP 프로토콜

네트워크 계층 모델 - 3계층, ARP 프로토콜 ARP 프로토콜이란? ARP 프로토콜은 같은 대역의 디바이스와 통신 시 디바이스의 MAC 주소를 알지 못할 때 IP 주소를 통해 MAC 주소를 받아오기 위한 프로토콜이다. ARP 프로토콜의 통신 과정 요청 보내기 ARP 프로토콜은 OSI 7계층 중 3계층 프로토콜이므로 2계층 프로토콜인 Ethernet 프로토콜에 의해 캡슐화된다. 이때 2계층 Ethernet 프로토콜에는 도착지 MAC 주소와 출발지 MAC 주소를 작성해야 하는데, 도착지 MAC 주소를 알지 못하므로 브로드캐스트()로 보낸다. 3계층 ARP 프로토콜은 동작코드를 요청인 1번으로 작성하고 도착지 MAC…

February 07, 2022
network
📡 [Network] 네트워크 계층 모델 - 3계층, IP 주소

네트워크 계층 모델 - 3계층, IP 주소 3계층 3계층의 기능 LAN과 LAN을 연결하는 것과 같이 서로 다른 네트워크 대역을 연결하여 WAN을 만든다. 3계층에서 사용하는 주소 WAN에서는 IP 주소를 사용하여 통신한다. IPv4 : 각 디바이스(PC)에 할당된 IP 주소 서브넷 마스크 : IP 주소에 대한 네트워크 대역을 규정 게이트웨이 주소 : 외부와 통신할 때 사용하는 네트워크 출입구 역할 3계층 프로토콜 대표적으로 IPv4, ARP, ICMP 프로토콜 등이 있다. IP 주소 일반적인 IP 주소(Classful IP 주소) 초창기에는 Classful한 IP 주소, 즉 클래스별로 구분된 IP 주소를 사용했다. …

February 06, 2022
network
🅿️ [Programmers] 완전탐색 소수 찾기

Programmers 완전탐색 소수 찾기 문제 문제 설명 Programmers - 완전탐색 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 입력 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers numbers return “17” 3 “011” 2 출력 종이 조각으로 만들 수 있는 소수가 몇 개인지 출력한다. 제한 numbers는 길이 1 이상 7 이하인 문…

February 04, 2022
ps
programmers
🌿 [WEB] Vue + Spring Boot으로 파일과 DTO 함께 REST 통신하기(FormData() + MultipartFile)

Vue + Spring Boot으로 파일과 DTO 함께 REST 통신하기 Spring Boot Controller 부분 @PostMapping 어노테이션 인자 중 를 로 설정 file(MultipartFile)과 DTO를 인자로 받기 위해 어노테이션 사용 이때 프론트에서 FormData() 객체 보내줄 때 key로 @RequestPart에서 설정한 value를 잘 설정해야함 Vue Axios 부분 file을 받는 input 태그 자체를 getElementById()로 받아와서 파일 배열의 첫번째 파일로 인덱싱하고 이를 파일 변수로 저장 room 객체는 new Blob()안에 을 통해 JSON 형식으로 변환한 뒤, t…

January 28, 2022
spring
springboot
web
restapi
vue
📡 [Network] 네트워크 계층 모델 - 2계층, 데이터 링크 계층

네트워크 계층 모델 - 2계층, 데이터 링크 계층 2계층에서 하는일 하나의 네트워크 대역(같은 네트워크 대역)에 존재하는 장비 간 데이터를 공유 LAN(Local Area Network) 범위의 장비 간 통신 서로 다른 LAN에 존재하는 장비끼리는 2계층에서 통신할 수 없음 MAC 주소 2계층 통신이 커버하는 LAN 범위에서 사용하는 주소는 물리적인 주소인 MAC 주소 이다. 전세계 장비는 모두 다른 MAC 주소를 갖고 있으며 물리적인 주소인 만큼 바꾸기는 것이 거의 불가능하다. Mac 주소는 위와 같이 16진수 6바이트로 이루어져있다. 앞 3 바이트 : OUI로 일종의 장비 제조회사 식별 ID 뒤 3 바이트 : 제조…

January 27, 2022
network
📡 [Network] 네트워크와 네트워크 계층 모델

네트워크와 네트워크 계층 모델 네트워크 네트워크란? 노드들이 데이터를 공유할 수 있도록 하는 전기 통신망. 분산되어있는 컴퓨터를 통신망으로 연결한 것 네트워크 분류 크기에 따른 분류 LAN(Local Area Network) WAN(Wide Area Networ) MAN(Metropolitan Area Network) LAN < WAN < MAN 으로 범위가 커지며 LAN과 LAN들이 모인 네트워크가 WAN이 됨. 연결 형태에 따른 분류 star형 : 중앙 노드에 모든 장비가 연결됨. 중앙 노드가 고장나면 해당 네트워크에 연결된 모든 장비가 영향을 받음. mesh형 : 여러 노드가 서로 연결된 형태. 노드에서 다른 노…

January 26, 2022
network
🌿 [JAVA] PriorityQueue 정렬 왜 안돼?

PriorityQueue 정렬 왜 안돼? PriorityQueue 내림차순 정렬하는 법 근데 정렬 왜 안돼…? 위의 방법으로 정렬이 되긴하지만 정렬 결과를 보장하지는 않는다. 오로지 연산을 수행할 때 최솟값을 반환하는 것만을 보장할뿐! PriorityQueue 정렬 왜 안돼? PriorityQueue 내림차순 정렬하는 법 근데 정렬 왜 안돼…?

January 21, 2022
java
language
🖥 [WebRTC OpenVidu] OpenVidu

OpenVidu가 뭘까? 우리의 웹 프로젝트 동작 흐름은 다음과 같다. 웹 페이지 접속 vue로 구현한 프론트엔드 클라이언트 페이지가 띄워진다. 프론트 단에서 클라이언트가 http 요청을 보낸다. spring으로 구현한 백엔드 서버가 http 요청을 받아 처리한다. 백엔드 단에서 서버가 http 응답을 보낸다. 프론트엔드 클라이언트 페이지는 서버로부터 받은 응답 결과를 출력한다. 즉 vue 클라이언트 + spring 서버 로 구성된 상태 여기에 클라이언트끼리 실시간으로 화상 데이터를 주고받기(WebRTC) 위해 미디어 서버를 추가한다.(사실 프론트 단(클라이언트)에서 P2P 통신이 가능하지만 부하가 많이 걸릴 경우 이…

January 21, 2022
project
🌿 [WEB] PUT vs PATCH

PUT vs PATCH PUT과 PATCH 모두 데이터를 수정하기 위한 목적 PUT 데이터가 없다면 새롭게 생성, 데이터가 존재한다면 새로운 값으로 덮어쓰기 서버에 데이터가 없을 경우 인자로 들어온 값을 새롭게 저장해주어야하므로 개체의 모든 속성이 완전한 상태여야함(일부 값만 보낼 경우 새롭게 생성 시 특정 속성은 null로 채워짐) PATCH 존재하는 데이터 중 일부 값을 변경 일부 값을 변경하기 위해 일부 값만 갖는 클래스(객체)를 생성하여 인자로 받음 PUT vs PATCH PUT PATCH

January 19, 2022
spring
springboot
web
restapi
🅱️ [BOJ] 1937 욕심쟁이 판다

BOJ 1937 욕심쟁이 판다 문제 문제 설명 Baekjoon Online Judge - 1937번 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서 대나무를 먹는다. 그런데 단 조건이 있다. 이 판다는 매우 욕심이 많아서 대나무를 먹고 자리를 옮기면 그 옮긴 지역에 그 전 지역보다 대나무가 많이 있어야 한다. 이 판다의 사육사는 이런 판다를 대나무 숲에 풀어 놓아야 하는데, 어떤 지점에 처음에 풀어 놓아야 하고, 어떤 곳으로 이동을 시켜야 판다가 최대…

January 16, 2022
ps
baekjoon
🅱️ [BOJ] 1701 Cubeditor

BOJ 1701 Cubeditor 문제 문제 설명 Baekjoon Online Judge - 1701번 Cubeditor Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고생한 끝에 새로운 에디터를 만들게 되었고, 그 에디터의 이름은 Cubeditor이다. 텍스트 에디터는 찾기 기능을 지원한다. 대부분의 에디터는 찾으려고 하는 문자열이 단 한 번만 나와도 찾는다. Cubelover는 이 기능은 Cubelang에 부적합하다고 생각했다. Cubelang에…

January 04, 2022
ps
baekjoon
📚☕️ [JPA] JPA 시작하기

JPA 시작하기 1. JPA란? 1) JPA 도입 이전의 문제들 프로그램에서 다루는 데이터를 계속해서 조회하고 보관하기 위해서는 DB(데이터 베이스)를 사용해야 합니다. 개발자들은 어쩔 수 없이 DB를 조작하고 관리하는 명령어인 SQL에 익숙해졌고, 어쩔 때는 비즈니스 로직을 위한 프로그래밍보다 SQL문 구현에 더 많은 시간을 들이게 됩니다. 특히 객체지향 프로그램에서 DB를 사용하기 위해 SQL문을 직접 다루면서 많은 불편한 점이 부각되었습니다. 개발자들이 가장 싫어하는 반복적인 작업과 중복되는 코드 SQL 수정이 불러오는 나비효과 객체 지향의 매력을 누릴 수 없는 엔티티 구조 이외의 많은 귀찮은 문제들…😕 이 모든…

December 28, 2021
jpa
📚☕️ [Effective Java 3/E] 생성자 대신 정적 팩터리 메서드를 고려하라

2장 객체의 생성과 파괴 - item1. 생성자 대신 정적 팩터리 메서드를 고려하라 생성자(constructor)와 정적 팩터리 메서드(static factory method) 다시 생성자부터 생성자란 클래스의 객체를 생성하고 이러한 인스턴스를 초기화하는 역할을 담당하는 특별한 메서드이다. 일반적으로 객체를 생성하고자 할 때 생성자를 사용하는데, 기본 생성자를 필요에 따라 오버로딩하여 다양한 형태의 생성자를 만들어 활용할 수 있다. 정적 팩터리 메서드 그럼 정적 팩터리 메서드(static factory method)는 뭘까? 이름을 하나씩 뜯어보면 알 수 있듯이, 정적 팩터리 메서드는 객체 생성 역할을 하는 클래스 메…

December 19, 2021
java
effective-java
🅱️ [BOJ] 13013 접미사 배열

BOJ 13013 접미사 배열 문제 문제 설명 Baekjoon Online Judge - 13013번 접미사 배열 문자열 S의 i번째 접미사는 S의 i번째 글자에서 시작하는 접미사(Suffix)이다. 예를 들어, S = “abcde”인 경우에 0번째 접미사는 “abcde”, 3번째 접미사는 “de” 이다. S의 접미사 배열은 S의 모든 접미사를 사전 순으로 정렬한 배열이다. 이때, 배열에 들어있는 값은 접미사 번호이고, 정렬은 접미사 번호에 해당하는 접미사로 수행하게 된다. 예를 들어, S = “abca”인 경우에 접미사 배열은 (3, 0, 1, 2)가 된다. 길이가 N인 접미사 배열이 주어졌을 때, 그 접미사 배열을…

December 15, 2021
ps
baekjoon
🅱️ [BOJ] 5052 전화번호 목록

BOJ 5052 전화번호 목록 문제 문제 설명 Baekjoon Online Judge - 5052번 전화번호 목록 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 걸리기 때문이다. 따라서, 이 목록은 일관성이 없는 목록이…

December 14, 2021
ps
baekjoon
🅱️ [BOJ] 21609 상어 중학교

BOJ 21609 상어 중학교 문제 문제 설명 Baekjoon Online Judge - 21609번 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록이 있다. 일반 블록은 M가지 색상이 있고, 색은 M이하의 자연수로 표현한다. 검은색 블록은 -1, 무지개 블록은 0으로 표현한다. (i, j)는 격자의 i번 행, j번 열을 의미하고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸 (r1, c1)과 (r2, c2)를 인접한 칸이라고 한다. 블록 그룹…

December 08, 2021
ps
baekjoon
🅱️ [BOJ] 1799 비숍

BOJ 1799 비숍 문제 문제 설명 Baekjoon Online Judge - 1799번 비숍 서양 장기인 체스에는 대각선 방향으로 움직일 수 있는 비숍(bishop)이 있다. < 그림 1 >과 같은 정사각형 체스판 위에 B라고 표시된 곳에 비숍이 있을 때 비숍은 대각선 방향으로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수 있다. 그런데 체스판 위에는 비숍이 놓일 수 없는 곳이 있다. < 그림 2 >에서 체스판에 색칠된 부분은 비숍이 놓일 수 없다고 하자. 이와 같은 체스판에 서로가 서로를 잡을 수 없도록 하면서 비숍을 놓는다면 < 그림 3 >과 같이 최대 7개의 비숍을 놓을 수 있다. 색칠된 부분에는 비숍이…

December 08, 2021
ps
baekjoon
🅱️ [BOJ] 2023 신기한 소수

BOJ 2023 신기한 소수 문제 문제 설명 Baekjoon Online Judge - 2023번 신기한 소수 수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수이고, 7도 소수이다. 즉, 왼쪽부터 1자리, 2자리, 3자리, 4자리 수 모두 소수이다! 수빈이는 이런 숫자를 신기한 소수라고 이름 붙였다. 수빈이는 N자리의 숫자 중에서 어떤 수들이 신기한 소수인지 궁금해졌다. N이 주어졌을 때, 수빈이를 위해 N자리 신기한 소수를 모두 찾아보자. 입력 첫째 줄에 N(1 ≤…

December 07, 2021
ps
baekjoon
🏡 [HappyHouse Proj.] axios 통신 시 params 붙여서 GET 방식 통신하기

axios 통신 시 params 붙여서 GET 방식 통신하기 일간 두더지 탈출기 (부제. 삽질 멈춰!…) HappyHouse 프로젝트를 진행하며 발생한 에러를 정리합니다. 문제 상황 문제가 발생한 배경은 다음과 같다. 게시판 서비스를 구현하던 중 특정 태그들이 포함된 게시글을 조회하고자 했다. “조회” 목적이기때문에 요청 메서드는 방식으로 보내야 했고, 태그 리스트를 함께 보내야하므로 로 보내려고 했다. 근데, 아무리 프론트에서 태그 리스트를 바디에 포함해서 보내도 백엔드 서버에서는 바디가 없다고 하는거다!! URI가 충돌하는 줄 알고 경로도 바꿔보고 이것 저것 다해봤는데 알고보니 GET + Body가 불가능했던 것…

November 22, 2021
project
happyhouse
🏡 [HappyHouse Proj.] axios 통신 시 http 상태코드 받아오기

axios 통신 시 http 상태코드 받아오기 일간 두더지 탈출기 (부제. 삽질 멈춰!…) HappyHouse 프로젝트를 진행하며 발생한 에러를 정리합니다. 현재 진행하는 HappyHouse 프로젝트는 환경의 백엔드 서버와 환경의 프론트로 구성되어 있다. vue의 강점이라고 생각하는 컴포넌트 기반 SPA(Single Page Application) 프로젝트를 진행하기 위해서는 비동기 통신이 필수적인데, 이 때 를 쓴다. JQuery 라이브러리로 프론트를 만들 땐 로 통신했지만, vue에서는 axios를 강력 권장하고 있기 때문에 현재 프로젝트로 axios로 통신하도록 구현하고 있다. SPA 프로젝트에서 비동기 통신…

November 19, 2021
project
happyhouse
🌿 [Spring Boot] 스프링 부트 초기 설정

Spring Boot Spring 초기 설정 에서 본 것처럼, 를 생성할 경우 방대하고 복잡한 초기 설정(라이브러리, 의존성 등)에 압도되기 쉽다. SpringBoot는 자주 사용되는 라이브러리 조합을 만들어 복잡한 설정을 자동으로 처리할 수 있게 하는 Spring의 발전된 버전이라고 생각하면 된다. Spring Boot 특징 내장 서버를 포함하고 있기때문에 Tomcat과 같은 WAS를 추가하지 않고도 사용할 수 있다. WAR파일뿐만 아니라 JAR파일 형태로 웹 애플리케이션을 만들 수 있다. Spring Boot(Spring Starter Project) Spring Starter Project 생성 -> 프로젝트 명…

November 01, 2021
spring
springboot
🌱 [Spring] 스프링 MVC

Spring MVC MVC 패턴 Model2(Web MVC) 요청 흐름 스프링 MVC는 위와 같은 Model2 구조의 MVC Architecture와 Front Controller Pattern을 지원한다. Spring MVC 구성 요소 및 실행 순서 DispatcherServlet(Front Controller) 모든 클라이언트의 요청을 최초로 전달받는다. 요청을 수신하고 처리는 다른 컴포넌트에게 위임한다. 또한 다른 컴포넌트가 반환한 결과를 다시 응답으로 발신한다. Controller에게 클라이언트 요청을 전달하고, Controller가 반환한 값을 View에게 전달하여 요청에 따른 응답을 생성한다. Handl…

October 30, 2021
spring
🌱 [Spring] 스프링 개발 초기 설정

스프링 개발 초기 설정 1. facet 버전 맞추기 프로젝트 우 클릭 > Properties > Project Facets > Dynamic Web Module 버전 설정, Java 버전 설정 2. pom.xml 설정 Maven : 자바 자동화 build tool. Project Object Model : 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성 설정, 라이프 사이클 관리 등 즉, maven을 통해 빌드를 자동화하기 위해 필요한 라이브러리를 pom.xml이라는 설정 파일에 정의해두면, 네트워크를 통해 자동으로 라이브러리를 다운받아 프로젝트를 손쉽게 관리할 수 있다. 프로젝트 초기 생성 이후 개발 과정에서 …

October 29, 2021
spring
🎨 [Design Pattern] Visitor Pattern

Visitor Pattern(비지터 패턴) (데이터 구조)와 (알고리즘)을 분리하는 디자인 패턴 새로운 로직을 추가하더라도 객체의 구조는 변경하지 않은 채 새로운 동작을 추가할 수 있다. Visitor Pattern을 적용하기 위한 빌드 업 유리컵과 신선 식품을 파는 쇼핑몰 사장님이 됐다고 생각해보자. 눈치 챘겠지만 이 예제에서 객체는 상품(유리컵, 신선 식품)이 될 것이고, 로직은 상품 주문이 될 것이다. 상품 : 유리컵, 신선 식품 주문 : 포장, 배송, 포인트 적립(추가 기능) 이제 이 예제를 구현하는 과정에서 몇 가지 문제를 짚어보고, 이 문제들을 어떻게 Visitor 패턴으로 해결하는지 알아보자. 문제 1. …

October 24, 2021
design-pattern
🎨 [Design Pattern] Builder Pattern

Builder Pattern 복잡한 객체에 대해 함으로써 똑같은 생성 과정으로 서로 다른 객체 표현을 가능하게 하는 생성 디자인 패턴 Builder 패턴을 사용해야하는 이유 - 객체의 불변성을 유지할 수 있음 - 체이닝을 통한 명명된 매개변수 사용으로 가독성 증진 - 필수적인 변수와 선택적인 변수를 각각 생성 가능 - 새로운 멤버가 추가되더라도 기존의 객체 생성 코드를 수정할 필요 없음 - 객체 생성 과정에서 유효성 검사를 통해 논리적인 에러를 막을 수 있음 💡 불변적인 객체로 구현해야하는 이유 불변성()이란? 객체가 초기에 한번 생성된 이후에는 절대 상태를 바꾸지 않는 것을 말한다. 객체 생성시에 모든 …

October 11, 2021
design-pattern
☕️ [JAVA] 전달인자(Argument)와 매개변수(Parameter), 그리고 자바의 Call by Value

Argument vs Parameter 전달인자와 매개변수 전달인자(Argument) 부모 함수에서 자식 함수를 호출할 때 자식 함수에게 전달하고자 하는 값 매개변수(Parameter) 부모 함수에서 자식 함수를 호출할 때 전달되는 값을 받기 위해 선언된 변수 💡 전달인자와 매개변수의 가장 큰 차이점은 전달인자는 값(value) 을 의미하고, 매개변수는 변수(variable)를 의미한다는 것! 일부는 “인자”라는 표현이 잘못되었고 “인수”라는 표현이 더 알맞다고 하는데 사실 인자냐 인수냐가 중요한 것이 아니라 “전달인자”와 “매개변수”의 차이를 아는 것이 더 중요하다. 예제 출력 결과 부모 함수인 메서드에서 자식 함…

October 03, 2021
java
language
🧩 [Algorithm] 문자열 알고리즘과 KMP 알고리즘

문자열 알고리즘 - KMP 알고리즘 KMP(Knuth-Morris-Pratt) 알고리즘 불일치가 발생한 텍스트 문자열의 앞 부분은 다시 비교하지 않고 일치하는 부분 문자열부터 매칭을 수행함으로써 문자열 비교 횟수를 대폭 감소시킨 알고리즘 타겟 문자열을 대상으로 을 작성하여 타겟 문자열 내부에서 중복되는 문자열을 빠르게 찾음 타겟 문자열의 1번 인덱스 문자부터 마지막 인덱스 문자까지 확인하며 각 인덱스 문자를 추가한 부분문자열의 접두사와 접미사가 일치하는 최대 길이를 저장 부분 일치 테이블을 이용해 주어진 문자열과 타겟 문자열을 비교해 매칭이 실패했을 때 타겟 문자열 포인터가 돌아갈 인덱스를 찾을 수 있음 주어진 문자열…

September 23, 2021
algorithm
📡 [Network] HTTP Vs HTTPS

HTTP와 HTTPS HTTP(Hyper Text Transfer Protocol) WWW(World-Wide-Web)기반 서비스에서 웹 서버와 WWW 클라이언트(웹 브라우저) 간 통신을 위해 사용하는 네트워크 프로토콜 일반적으로 번 포트를 사용한다. 클라이언트가 번 포트를 이용해 데이터를 요청(Request)하면 웹 서버는 번 포트로 들어온 요청에 응답(Response)하는 방식으로 통신한다. HTTP 요청(Request) 메시지와 응답(Response) 메시지는 크게 Start line, Headers, Body 부분으로 구성되어 있다. Start line : Method 방식, 타겟 URL, HTTP 버전 등의 …

September 19, 2021
network
🧩 [Algorithm] 희소 배열(Sparse Table) 알고리즘

희소 배열(Sparse Table) 배열 원소의 개수가 무조건 배열의 length 값보다 작은 배열 데이터가 저장되지 않은 경우가 더 많은 희소 행렬과 같이, 희소 배열은 배열의 원소 위치가 연속적이지 않은 배열을 말함 이러한 희소배열의 특징을 이용해 그래프의 사이클을 탐색해나가는 문제를 풀 수 있다. 희소 배열 알고리즘 다음과 같이 사이클이 있는 그래프가 존재하고, 특정 정점(v)에서 시작해 n개의 간선을 이동해 도착할 수 있는 정점을 구한다고 생각해보자. 일반적으로는 간선 1개를 n번씩 이동하여 도착하는 정점을 찾는 방법을 떠올릴 것이다. 하지만 위의 문제를 반복적으로 풀어야 한다면? 모든 v정점에 대해 n개의 …

September 13, 2021
algorithm
🗃 [DataBase] JOIN

JOIN 여러 테이블을 하나의 테이블처럼 논리적으로 연결하여 사용하는 방법 일반적으로, 둘 이상 테이블에서 데이터가 필요한 경우 JOIN을 시도한다. Various Joins JOIN과 집합 연산자의 차이 집합 연산자 : 두 개 이상의 SELECT문의 결과 값을 세로로 연결한 것 JOIN : 두 개 이상의 테이블 데이터를 가로로 연결한 것 EQUI JOIN 두 테이블의 특정 열의 값들이 정확하게 일치할 때 이를 기준으로 데이터를 연결하는 방법 Default Join 방법 일반적으로 PK, FK 관계에 의해 JOIN을 시도하지만 일반 컬럼을 기준으로 JOIN을 시도하는 것도 가능 JOIN하려는 두개 이상 테이블이 동일한…

September 10, 2021
database
🗃 [DataBase] 관계형 데이터베이스(RDBMS)와 SQL 종류

관계형 데이터 베이스(RDBMS)와 SQL 종류 데이터 베이스(DataBase)란? 연관된 데이터들의 집합 데이터 베이스는 여러 응용프로그램에서 각자의 목적에 맞게 공유해서 사용해야하므로 실시간으로 접근이 가능해야하고, 동적으로 변화해야하며, 동시에 접근하여 공유할 수 있어야 한다. 또한 관계 표현을 위해 내용에 의한 참조가 가능해야 한다. 데이터 베이스 구성요소 개체(Entity) : 데이터 베이스에서 표현하고자 하는 유, 무형의 객체. 서로 구별되는 것들. 개체는 단독으로 존재할 수 있고 로서의 역할을 한다. ex) 고객, 학생, 과목, 학과, 사원, 부서 속성(Attribute) : 개체의 특성이나 상태. 개체가…

September 07, 2021
database
🧩 [Algorithm] 세그먼트 트리(Segment Tree)

구간 트리(Segment Tree) 일차원 배열의 특정 구간에 대한 질문을 빠르게 대답하는 데 활용되는 자료구조 대표적으로 구간 원소들의 합, 구간 원소들의 최솟값(RMQ, Range Minimum Query) 등에 대한 질의를 지원한다. 구간 트리 초기화 배열의 각 구간을 표현하는 이진 트리 형태 구간 트리의 루트는 배열의 전체 구간()을 표현 각 트리(i)의 왼쪽 자식(2i)과 오른쪽 자식(2i+1)은 해당 구간을 반으로 나눈 왼쪽 부분와 오른쪽 부분을 표현 리프 노드는 구간의 크기가 1인 경우 전체 구간 크기가 2의 제곱꼴이라면 노드가 개인 완전 이진 트리가 완성되겠지만, 2의 제곱꼴이 아니더라도 남는 노드는 …

September 05, 2021
algorithm
🧩 [Algorithm] 퀵 정렬(Quick Sort)과 듀얼 피봇 퀵 정렬(Dual Pivot Quick Sort)

퀵 정렬(Quick Sort)과 듀얼 피봇 퀵 정렬(Dual Pivot Quick Sort) 퀵 정렬의 개념 임의의 피봇(pivot)을 기준으로 해당 피봇 값보다 작은 데이터는 피봇의 왼쪽에, 큰 데이터는 피봇의 오른쪽에 배치한 뒤, 왼쪽 부분과 오른쪽 부분을 다시 퀵 정렬 방법으로 정렬하는 알고리즘 전체 데이터를 2개의 부분으로 분할한 뒤, 각각의 부분을 다시 퀵정렬하는 전형적인 원리 피봇을 기준으로 분할하기 퀵 정렬 구현의 핵심은 위 알고리즘의 부분인 전체 배열을 피봇을 기준으로 두 부분으로 분할하는 것이다. 분할의 원리는 다음과 같다. 배열의 임의의 원소를 , 가장 첫번째 원소를 , 가장 마지막 원소를 이라고…

September 03, 2021
algorithm
🌲 [Algorithm] 트라이(Trie)

트라이(Trie) 키와 값을 쌍으로 갖는 연관 배열 데이터를 저장하는 트리 자료 구조 주로 자연어 처리(NLP) 분야에서 문자열 탐색을 위해 사용한다. 문자열의 각각의 문자 단위로 색인을 구축한 형태이다. 트라이 원리 트라이를 이용한 문자열 저장 각 노드가 배열로 구성된 트리를 생성한다. 저장하려는 문자열의 모든 문자들을 확인하며 아래 과정을 시행한다. 루트 노드(문자 배열)에서 문자열의 첫번째 문자에 해당하는 인덱스로 이동한다. 해당 인덱스에 연결된 자식 노드가 존재하지 않는다면 새로운 노드(문자 배열)를 할당한다. 이후 새로운 노드에서 두번째 문자에 해당하는 인덱스로 이동한다. 해당 인덱스에 연결된 자식 노드가…

August 28, 2021
algorithm
🧩 [Algorithm] 모든 쌍 최단 경로 알고리즘과 플로이드 워셜(Floyd-Warshall) 알고리즘

모든 쌍 최단 경로 알고리즘 - 플로이드 워셜(Floyd-Warshall) 알고리즘 그래프의 모든 정점에서 다른 정점으로의 최단 경로를 구하는 문제 가중치(양의 가중치, 음의 가중치)가 포함되어 있으며, 방향이 있는 그래프에서 최단 경로 찾기 모든 정점에 대해 다익스트라 알고리즘을 적용하여 풀 수도 있지만, 플로이드 워샬 알고리즘은 DP를 이용하여 문제를 더욱 쉽고 효율적이게 해결한다. 플로이드 워셜(Floyd-Warshall) 알고리즘 에서 까지의 최단 경로는 i에서 j로의 직접 비용과, i와 j가 아닌 다른 정점을 거치는 간접 비용을 비교하여 비용이 더 적은 값이 된다. 이때, 모든 쌍 최단 경로를 구하기 위해서는…

August 25, 2021
algorithm
🧩 [Algorithm] 최단 경로 알고리즘과 다익스트라(Dijkstra) 알고리즘

최단 경로 알고리즘 - 다익스트라(Dijkstra) 알고리즘 최단 경로란? 간선의 가중치가 있는 그래프에서 두 정점 사이 경로들 중 간선의 가중치 합이 최소인 경로 하나의 시작 정점에서 끝 정점까지의 최단 경로를 구하는 알고리즘으로는 다익스트라(Dijkstra) 알고리즘과 벨만-포드(Bellman-Ford) 알고리즘이 있음 모든 정점들에 대한 최단 경로를 구하는 알고리즘으로는 플로이드-워샬(Floyd-Warshall) 알고리즘이 있음 가중치가 없는 그래프의 탐색으로는 DFS, BFS 방법이 존재한다. 그 중 두 정점 사이 경로 중 최단 경로를 구하기 위해서는 BFS를 이용할 수 있다. 가중치가 없는 그래프에서 …

August 24, 2021
algorithm
🧩 [Algorithm] 최소 신장 트리(MST)와 Kruskal 알고리즘, Prim 알고리즘

최소 신장 트리(MST)와 Kruskal 알고리즘, Prim 알고리즘 최소 신장 트리(Mimimum Spanning Tree) 신장 트리 : n개의 정점으로 이루어진 무향 그래프에서 n개의 정점과 n-1개의 간선으로 이루어진 트리 최소 신장 트리 : 무향 가중치 그래프에서 신장 트리를 구성하는 간선들의 가중치 합이 최소인 신장 트리 Kruskal 알고리즘 간선을 기준으로 가중치가 작은 간선을 우선적으로 선택하며 MST를 찾는 알고리즘 로직 👇 최초에 모든 간선을 가중치를 기준으로 오름차순 정렬한다. 가중치가 가장 낮은 간선부터 선택해가며 트리를 증가시킨다.(이때, 사이클이 존재하면 다음으로 가중치가 낮은 간선을 선택한…

August 22, 2021
algorithm
🧩 [Algorithm] 서로소 집합(Disjoint Set)과 Union-Find 알고리즘

서로소 집합(Disjoint Set)과 Union-Find 알고리즘 서로소 집합(Disjoint Set) 서로소 집합(상호배타 집합)은 서로 중복되어 포함된 원소가 없는 집합을 의미함. 다시 말해 교집합이 없는 집합! 따라서 집합에 속한 하나의 특정 원소를 통해 각 집합을 구별할 수 있고, 이 원소를 대표자(representative)라고 함. 서로소란? 수학에서의 서로소는 정수나 다항식 간 최대 공약수가 1인 관계를 말함 서로소 집합의 표현 연결 리스트 같은 집합 원소들을 연결 리스트로 관리 연결 리스트의 가장 앞에 위치한 원소를 대표자로 설정 각 원소는 집합의 대표 원소를 가리키는 링크를 가짐 트리 하나의 집합을 …

August 20, 2021
algorithm
🕸 [Algorithm] 그래프(Graph)

그래프(Graph) 자료구조와 탐색 그래프(Graph) 비선형 자료구조 원소들 간 의 관계를 가지는 자료구조 사물 혹은 사람, 추상적 개념 등의 관계성을 표현한 자료구조 정점(vertex)들의 집합과 이들을 연결하는 간선(Edge)들의 집합으로 구성된 자료구조 차수(Degree) : 정점에 연결된 간선의 수 그래프의 유형 무향 그래프(Undirected Graph) : 간선에 방향이 없어 정점 간 연결관계만 나타낸 그래프 유향 그래프(Directed Graph) : 간선에 방향이 있어 출발 정점과 도착 정점을 나타낸 그래프 가중치 그래프(Weighted Graph) : 간선에 가중치가 부여되어 특정 정점 간 거리, 이…

August 15, 2021
algorithm
🌳 [Algorithm] 트리(Tree)

트리(Tree) 자료구조와 탐색 트리(Tree) 비선형 자료구조 원소들 간 의 관계를 가지는 자료구조 원소들 간 계층 관계를 가지는 계층형 자료구조 상위 원소에서 하위 원소로 내려가며 확장되는 트리(나무) 모양의 구조 회사의 조직도, 파일 디렉토리 구조, 기계 학습에서의 결정 트리(decision tree) 등을 표현 트리의 구성 요소 및 용어 정리 구성 요소 노드(Node) : 트리의 원소 루트 노드(root node) : 트리의 시작 노드인 최상위 노드 리프 노드(leaf node) : 차수가 0인 노드, 자식 노드가 없는 노드 형제 노드(sibling node) : 같은 부모 노드를 갖는 자식 노드들 조상 노드…

August 14, 2021
algorithm
🧩 [Algorithm] Bit Masking(비트 마스킹) 순열, 부분집합 알고리즘

Bit Masking 비트 마스킹 비트 연산자와 비트열을 이용해 자리수, 방문 여부를 체크할 수 있다 순열과 부분집합 생성에 사용되는 비트 연산자 << 연산자 : 비트로 표현된 수인 N의 비트열을 왼쪽으로 R칸만큼 이동 & 연산자 : 비트로 표현된 수인 V1 과 V2의 비트열을 각각 비교하여 두 수에 표현된 비트가 모두 1이면 1, 아니면 0 | 연산자 : 비트로 표현된 수인 V1 과 V2의 비트열을 각각 비교하여 두 수에 표현된 비트가 모두 0이면 0, 아니면 1 << 연산자를 이용하여 원하는 자리로 원소의 자리를 이동시켜 자리수, 방문 여부 마킹처리하는 용도롤 사용 가능 & 연산자를 이용하여 현재 원소가 해당…

August 13, 2021
algorithm
🧩 [Algorithm] Next Permutation(다음 순열) 알고리즘

Next Permutation 다음 순열 현 순열에서 사전순으로 다음에 올 순열을 찾는 알고리즘 알고리즘 배열을 오름차순으로 정렬 배열의 맨 뒤 원소부터 탐색하여 최초로 값이 작아지는 순간의 인덱스 찾기( : 꼭대기, i 이후로 최초로 값이 작아지는 인덱스를 타겟으로 선정) 배열의 맨 뒤 원소부터 탐색하여 타겟 원소인 이후 원소들 중, 타겟 원소보다 크되 가장 작은 원소()를 찾기 인덱스 원소와 인덱스 원소를 교환 타겟 원소 이후 꼭대기인 인덱스부터 마지막 인덱스까지의 원소를 오름차순 정렬 Next Permutation을 이용한 순열 구현 응용 - Next Permutation을 이용한 조합 구현 Next P…

August 12, 2021
algorithm
☕️ [JAVA] Comparable과 Comparator 인터페이스

객체 크기를 비교해 정렬하기 - Comparable과 Comparator 인터페이스 Primitive Type(기본형 데이터 타입) : 더 이상 쪼개질 수 없는 원자성의 데이터이므로 그 자체로 크고 작음을 비교할 수 있음 Reference Type(참조형 데이터 타입) : 대상을 나타내는 복합체로 크고 작음을 비교하기 어려움 따라서 객체를 비교 가능한 타입으로 만들어줘야 함! Comparable 인터페이스 객체를 비교 가능한 타입으로 만들기 위해 인터페이스 타입으로 형변환 () Comparable 인터페이스의 메서드를 오버라이드하여 객체에 맞게 구현한 뒤 이 메서드를 호출하여 정렬 compareTo() compar…

August 11, 2021
java
language
🧩 [Algorithm] 순열, 조합, 부분집합

완전 탐색의 삼총사 - 순열, 조합, 부분집합 완전탐색 문제의 해법으로 생각할 수 있는 모든 경우의 수를 나열하고 확인 Brute-Force / Generate & Test 경우의 수가 작을 때 유용 수행 속도는 느리지만, 해답 찾기를 실패할 확률이 낮음 순열 서로 다른 것들 중 몇 개를 뽑아 순서가 있게 나열 TSP(Traveling Salesman Problem) 등 의 시간복잡도 순열의 재귀적 구현 중복 순열의 재귀적 구현 조합 서로 다른 것들 중 몇 개를 단순히 뽑기 의 시간복잡도 조합의 재귀적 구현 중복 조합의 재귀적 구현 부분 집합 집합에 포함된 원소들을 선택 집합 원소가 n개일 때 공집합을 포함한 부분집합…

August 06, 2021
algorithm
⛓ [git] Git 시작하기(2) - fork, clone, checkout, pull

Git으로 협업하기 공동 작업과 Contribute(fork) Git을 사용한다면 다른 이용자와 코드를 공유하고 개발도 함께해봐야 하지 않겠는가?! 여러명의 이용자와 저장소를 공유하기 위해서는 크게 두 가지 방법이 있다. Collaborator 혹은 Contributor로 활동할 수 있다. 공동 작업 - Collaborator Git 사용자가 프로젝트를 생성한 뒤 동료 개발자에게 Collaborator 권한을 준다면 이 동료는 저장소에 commit과 push를 자유롭게 할 수 있다. 작업에 참여하는 모든 이용자는 하나의 원격저장소에서 공동 작업을 할 수 있다. 하지만 권한에는 책임이 따르듯이, 다른 동료와 함께 사용하…

August 02, 2021
git
🅱️ [백준] 1790 - 수 이어 쓰기2

백준 1790 - 수 이어 쓰기2 문제 문제 설명 Baekjoon Online Judge - 1790번 수 이어 쓰기2 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다. 1234567891011121314151617181920212223… 이렇게 만들어진 새로운 수에서, 앞에서 k번째 자리 숫자가 어떤 숫자인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다. 출력 첫째 줄에 앞에서 k번째 자리 숫자를 출력한다. 수의 길이가 k보다 작아서 k번째…

July 30, 2021
ps
baekjoon
🅿️ [2018 KAKAO BLIND RECRUITMENT] 프렌즈4블록

2018 KAKAO BLIND RECRUITMENT 프렌즈4블록 문제 문제 설명 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 “프렌즈4블록”. 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임이다. 만약 판이 위와 같이 주어질 경우, 라이언이 2×2로 배치된 7개 블록과 콘이 2×2로 배치된 4개 블록이 지워진다. 같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러 개 있다면 한꺼번에 지워진다. 블록이 지워진 후에 위에 있는 블록이 아래로 떨어져 빈 공간을 채우게 된…

July 26, 2021
ps
programmers
☕️ [JAVA] 난수 생성하기

자바 난수 생성 1) Math.random() 방법 1 - Math 클래스의 클래스 메서드(static method)인 random() 이용하기 : 0.0 <= ? < 1.0 : 0.0 <= ? < N.0 : 0 <= ? <= N-1 : 1 <= ? <= N 2) Random 방법 2 - Random 클래스의 객체를 생성하여 Random 클래스의 인스턴스 메서드 이용하기 : 0 <= ? < N : 1 <= ? <= N 자바 난수 생성 1) Math.random() 2) Random

July 25, 2021
java
language
☕️ [JAVA] 동적 바인딩(Dynamic Binding)과 정적 바인딩(Static Binding)

상속과 다형성 - 동적 바인딩과 정적 바인딩 동적 바인딩과 정적 바인딩 정적 바인딩(Static Binding) 컴파일타임(Compile Time)에 선언된 객체의 타입에 따라 호출될 메서드를 인식 자바의 멤버 변수는 정적 바인딩이 적용되므로 다형성 특징을 이용하지 못함. 선언된 타입의 멤버 변수 접근 자바의 클래스 메서드(static method) 역시 정적 바인딩이 적용되므로 다형성 특징을 이용하지 못함. 오버라이딩된 자식의 메서드를 호출하는 것이 아니라 각각의 클래스에 별개의 메서드가 존재하는 것 동적 바인딩(Dynamic Binding) 런타임(Run Time)에 실제 생성된 객체 타입에 따라 호출될 메서드를 …

July 23, 2021
java
language
☕️ [JAVA] 다형성(Polymorphism)

다형성 정의 하나의 객체가 여러개의 형(타입)을 가질 수 있는 특징 상속을 전제로 함 상속 관계에 있을때 부모의 타입으로 자식 타입 객체를 참조(레퍼런스)할 수 있음 메서드 다중 정의(오버로딩), 메서드 재정의(오버라이딩)은 자바의 다형성 특징으로 가능함. 활용 다른 타입의 객체를 배열로 묶어 사용할 수 있음 다른 타입의 데이터를 하나의 배열로 관리 Object는 모든 클래스의 부모이므로 Object 배열은 어떤 타입의 객체도 다 저장할 수 있음 기본형 데이터 타입의 경우 객체가 아니므로 원칙적으로는 불가능하지만, Auto-Boxing을 이용해 Wrapper 클래스로 바꾸면 가능함 매개 변수의 다형성 메서드의 매개 변…

July 22, 2021
java
language
⛓ [git] Git 시작하기(1) - init, add, commit, push

Git 시작하기 Git이란? 형상 관리 소프트웨어 소스 관리, 버전 관리, 개발자 간 프로그램 공유를 용이하게 하는 분산 버전 관리 시스템 Git 저장소 Local Repository 사용자 PC의 작업 공간 명령어 입력 시 local PC에는 3개의 영역이 생성됨 Working : 파일, 폴더가 존재하는 작업영역. 새로 생성한 파일, 기존에 생성하여 관리받던 파일이 수정된 경우 working 영역에 존재. Staging : 변경사항을 담고있는 임시 영역. 휘발성 공간. Local Repository : 변경사항을 반영하고 기록한 저장 영역. 저장된 변경사항은 영구적으로 보관됨. Working 영역은 unstage…

July 20, 2021
git
☕️ [JAVA] Java Garbage Collection

Garbage Collection(GC) 더이상 참조되지 않는 객체를 정리해주는 JVM의 기능 JVM 메모리 구조와 Heap 영역에서의 GC JVM 메모리 구조 JVM이 실행되면 메모리 구조를 다음과 같이 사용함. Heap 영역에서 이루어지는 GC GC는 Heap의 객체 중 필요한 것, 사용하고 있는 것을 따로 모아두고 더이상 사용하지 않는 것을 한꺼번에 처리 새롭게 생성된 객체는 Eden 영역에 존재 Eden 영역의 객체 중 살아남은, 사용하는 객체는 Survivor1로 이동 Survivor1 영역의 객체 중 살아남은, 사용하는 객체는 Survivor2로 이동 Survivor1과 Survivor2 영역은 서로 번…

July 19, 2021
java
language
☕️ [JAVA] java.util 패키지

java.util 패키지와 utility 클래스 Date 클래스 형식이 있는 날짜와 시간을 출력하는 클래스 Date 객체를 이용한 프로그램의 실행 시간 체크 Calendar 클래스 Date 클래스와 같이 날짜와 시간에 관한 정보를 출력할 때 사용. 단, Calendar 클래스는 추상 클래스이므로 직접 객체 생성 불가 -> 메서드를 이용하여 객체 생성 가능 Calendar 클래스의 객체 생성 Formatter 클래스 형식 문자열을 제공하고, 이 문자열에서 지정한대로 데이터가 형식화되어 출력됨(C언어의 와 같은 기능 제공) Formatter 클래스의 format들 데이터 타입별 format format 설명 %B, %b…

July 19, 2021
java
language
💆🏻 [Blog] 제목은 고정된 헤더로 하겠습니다. 근데 이제 스크롤과 컨텐츠 가려짐을 곁들인

고정된 헤더와 컨텐츠 가려짐 해결 zoomkoding님이 배포해주신 개츠비 블로그 테마를 조금씩 커스텀해서 사용하고 있다. 깔끔한 원본 테마 덕분에 따로 손이 갈 일은 별로 없지만 그래도 업그레이드 되면 좋을 것 같은 부분이 보여 직접 리모델링을 한다. 블로그 커스텀의 많은 부분은 devhac 블로그를 참고하였다. hakyung님께 감사드립니다!! 이번에 수정한 부분은 헤더부분이다. 스크롤을 내려가면서 글을 읽다보면 빠르게 위로 올라가고 싶거나 네비게이션 메뉴바를 선택하고 싶을 때가 있어 원래는 Top 버튼을 만들려고 했다. 그런데 Top 버튼보다는 상단에 고정되어 언제든지 접근할 수 있는 헤더가 더 실용적일 것 같아…

July 17, 2021
blog
react
css
☕️ [JAVA] 예외 처리

자바의 예외 처리 다중 try-catch 블록과 finally 블록 throws 예약어를 이용한 예외 처리 사용자 정의 예외 처리 자바의 예외 처리 다중 try-catch 블록과 finally 블록 throws 예약어를 이용한 예외 처리 사용자 정의 예외 처리

July 08, 2021
java
language
☕️ [JAVA] 추상 클래스와 인터페이스

자바의 추상 클래스와 인터페이스 추상 클래스 추상 메서드 메서드의 구체적인 기능을 구현하지 않고 형태만 제공하는 메서드 자식 클래스에서 반드시 재정의하여 사용되기때문에 부모에서의 구현이 무의미한 메서드 구현부가 없다는 의미로 키워드를 사용하여 표현 메서드의 선언부(리턴타입, 매서드명, 매개변수)만 남기고 구현부({})는 세미콜론(;)으로 대체한 형태 추상 클래스 메서드의 시그니처(리턴타입, 매서드명, 매개변수)만을 정의하고 블럭({}) 내부의 기능은 구현하지 않은 메서드를 추상메서드라고 한다. 추상 메서드를 포함하고 있거나 설계상 의도적으로 추상 클래스로 만든 클래스 추상 메서드를 포함하고 있는 추상 클래스는 직접…

July 08, 2021
java
language
☕️ [JAVA] 자바 객체의 관계성과 Annotation

객체의 관계성과 주석(Annotation) 자바 클래스 및 객체 관계성 상속 관계 is a 관계 논리적으로 일반화가 가능할 경우 상속 가능 포함 관계 has a 관계 객체를 소유하는 개념 단일 상속의 한계를 극복 2개 이상의 클래스에서 특징을 가져오기 위해서는 하나의 클래스는 상속을 받고, 나머지 클래스는 멤버 변수로 사용(객체를 생성하여 활용)할 수 있음 사용 관계 use a 관계 일시적으로 의존해야하는 관계 사용해야할 객체를 인자로 받거나 지역변수로 생성함 주석(Annotation) 컴파일러, JVM, 프레임워크가 볼 수 있는 주석 메타 데이터가 삽입된 주석 @Deprecated 컴파일러에게 해당 메서드가 오래되어…

July 08, 2021
java
language
☕️ [JAVA] this와 super 예약어

this와 super this 예약어 non-static 영역에서만 사용 가능한 예약어로, 현재 실행중인 객체가 자기 자신을 가리킬 때 씀 this. 지역 변수(매개 변수 등)와 멤버 변수(인스턴스 변수)를 구분하여 객체 자신인 멤버 변수를 가리키는 목적 자기 자신의 객체를 메서드의 매개변수로 전달하거나 return 하기 위한 목적 멤버 변수가 현재 클래스에 존재하지 않는다면 부모 클래스에서 찾음 this() 생성자 내부에서 자신의 또 다른 생성자(오버로딩된 생성자)를 메서드처럼 호출하여 사용할 때 자신의 또 다른 생성자(오버로딩된 생성자)를 가리키는 목적 오버로딩된 생성자가 없다면 사용 불가 생성자 내에서 가장 상위…

July 07, 2021
java
language
☕️ [JAVA] 메서드 Overloading과 메서드 Overriding

메서드 Overloading과 메서드 Overriding 메서드 Overloading 하나의 클래스에 동일한 이름의 메서드가 여러개 중복 정의되는 것(단, 변수의 중복 정의는 불가능) 매개변수의 개수와 타입 혹은 순서만 다르다면 동일한 이름의 메서드라도 다른 기능을 수행할 수 있다는 개념 메서드 Overloading 조건 조건 가능 여부 매개변수의 개수와 타입이 다른 경우 O 리턴 타입이 다른 경우 X 매개변수의 이름이 다른 경우 X 매개변수의 개수와 타입이 같지만, 순서가 다른 경우 O 매개변수가 형변환된 다른 타입인 경우 O 생성자 Overloading 클래스로부터 객체를 생성할 때, 필요한 변수만 적절히 조합하여…

July 07, 2021
java
language
☕️ [JAVA] 상속(Inheritance)

자바의 상속 상속 기존 클래스로부터 새로운 내용을 덧붙이거나(확장), 내용의 일부를 바꾸어 사용(재정의, 오버라이딩)하는 것 장단점 코드 재사용, 유지 보수성 향상, 확장의 용이함, 개발 시간 및 비용 감축 효과 그러나 과도하게 결합될 수 있다는 단점 존재 조건과 특징 논리적으로 “자식 is a 부모” 관계가 성립할 때만 상속 가능 자바에서는 중복된 변수명 사용을 막는 등 개발의 편의성과 가독성을 위해 문법적으로 단일상속만을 허용함(이를 극복하기 위해 ‘인터페이스’와 ‘has a’관계 활용 가능) 별도로 선언 없는 클래스는 모두 가 생략됨. 즉, 모든 클래스는 Object 클래스를 상속받고 있음. 상속과 생성자 상속…

July 07, 2021
java
language
☕️ [JAVA] 자바 Modifier

Modifier 자바의 Modifier static 예약어 인스턴스 변수와 클래스 변수 인스턴스 변수 클래스로부터 객체가 생성될 때마다 각 객체의 변수들이 생성됨 한 객체의 값이 변경되어도 다른 객체의 값에 영향을 미치지 않음 객체별로 다른 변수값을 지정해야 할 때 사용 클래스 변수 클래스로 생성된 모든 객체가 하나의 클래스 변수를 공유함 객체가 생성될 때 메모리 영역을 할당하지 않고, 클래스가 로딩되는 최초에 메모리에 한 번만 할당됨 를 사용한 변수가 클래스 변수에 해당됨 객체를 생성하지 않고도 클래스 이름을 통해 클래스 변수에 접근 가능 클래스 메서드 static 예약어를 사용한 메서드 객체를 생성하지 않고도 호…

July 07, 2021
java
language
☕️ [JAVA] 클래스 작성

클래스의 작성 (1) 패키지 선언문 0개 또는 1개 존재(한 클래스는 여러 패키지에 속할 수 없음) 유일한 패키지명을 위해 보통 domain 이름의 역순으로 패키지를 설정 폴더, 네임스페이스 개념 (2) import 또는 0개 또는 다수개 존재 현 클래스에서 참조하는 클래스가 자신과 같은 패키지가 아닌 경우 명시(단, 패키지는 자동으로 import됨) 형태로 사용 의 경우 모든 클래스와 인터페이스를 import함 (3) class 정의 * ’ ‘의 경우 생략 가능함 1개 또는 다수개 존재 접근지정자 : , 만 올 수 있음 활용지정자 : final, static 등 클래스 이름 명명규칙 : 명사형 + 대문자형…

July 06, 2021
java
language
☕️ [JAVA] 클래스 구조와 생성자

클래스의 구조와 생성자 클래스 구조 객체의 속성와 행위를 추상화하여 클래스에 정의된 것이 변수와 메서드임 1. 멤버 변수 변수는 클래스 변수와 인스턴스 변수로 구분됨 클래스 변수 클래스의 상태 클래스가 로딩될 때 메모리의 에 단 한번 생성됨. 즉, 같은 클래스 객체는 같은 클래스 변수를 공유함. 또한 인스턴스 변수와 달리 객체 생성() 시 heap 영역에 생성되지 않음. 인스턴스 변수 non-static 객체의 상태 객체 생성() 시 메모리의 에 생성되는 인스턴스 변수. 즉, 객체별 다른 값을 가짐. 2. 멤버 메서드 클래스 메서드 클래스 관점에서의 행위 객체 생성 및 식별하지 않고도 실행할 수 있는 작업들 메서…

July 06, 2021
java
language
☕️ [JAVA] 객체지향 핵심 개념

객체지향 핵심 개념 객체지향의 개념 객체지향(OOP, Object Oriented Programming)의 등장 배경 1960년대 말, ‘소프트웨어 위기론’이 등장 시스템을 구성하는 각각의 기능들이 독립적인 모듈로 개발된 하드웨어와 달리 모듈화가 되지 않은 소프트웨어에 대한 불편함이 제기됨 -> 소프트웨어의 모듈화 요구(객체지향 패러다임) 절차지향 프로그래밍과 객체지향 프로그래밍 절차지향 프로그래밍 실행되는 순서가 위에서부터 아래로 순차적으로 진행되는 형태를 가진 언어 프로그램 재사용 시 기존에 만들어진 코드를 복사하여 붙여넣기 하는 방식을 사용 모듈화를 시도한 함수 기반 절차지향 프로그램의 경우 데이터와 함수 간 유…

July 06, 2021
java
language
☕️ [JAVA] 자바 연산자 및 배열

JAVA 연산자 및 배열 자바 연산자 논리 연산자 boolean 데이터 타입(논리형)에 적용되며, 결과값으로는 true 또는 false 값을 가짐 and(&), or(|), not(!) 연산자를 제공함 연산자 사용법 설명 & A & B A와 B 인 경우만 를 리턴 && A && B - A와 B 모두 true인 경우 true를 리턴 - 단, 인 경우 를 리턴 | A | B A나 B 중 라면 를 리턴 || A || B - A와 B 모두 true인 경우 true를 리턴 - 단, 인 경우 를 리턴 ! !A A가 , 변경 자바의 배열 같은 데이터타입의 집합 Non-Primitive Type Data(Reference T…

July 06, 2021
java
language
☕️ [JAVA] 자바 식별자와 예약어 및 데이터 타입

JAVA 식별자와 예약어 및 데이터 타입 식별자와 예약어 식별자 생성 규칙 첫 문자는 A-Z, a-z, _, $, 유니코드로 시작해야 함 특수문자 사용불가(!, @, #, %, &, * 등) 대소문자를 구별하고, 길이에 제한이 없음 예약어를 포함할 수 있으나, 예약어만을 사용할 수 없음 숫자를 사용할 수 있으나, 첫 문자에는 숫자 사용 불가 클래스 이름은 대문자, 메서드 이름은 소문자, 변수는 소문자, 상수는 대문자로 시작 예약어 시스템에서 일정 특성을 가진 언어로 등록된 것으로 데이터 타입이나 프로그램 정의를 위해 사용됨 자바의 모든 예약어는 소문자로 이루어짐 자바 데이터 타입 Primitive Type(기본형) 할…

July 06, 2021
java
language
☕️ [JAVA] 자바 언어 및 자바 프로그램 개요

JAVA 언어 개요 자바의 특징 단순함 Java Garbage Collector에 의한 자동 메모리 관리 객체지향적(Object-Oriented) 언어 코드와 객체의 재사용 클래스 라이브러리 API의 다양성 분산 처리에 용이함 분산 환경에서 TCP/IP 네트워크 프로토콜을 통해 통신 가능 원격 메서드 호출(RMI, Remote Method Invocation) 라이브러리 제공 컴파일 언어인 동시에 인터프리터 언어임 소스코드(.java 파일) -> 컴파일(javac) -> 바이트 코드의 중간코드(.class 파일) -> 기계어로 해석 -> 실행 플랫폼 독립적임 Write Once Run Anywhere 자바 컴파일러와 …

July 05, 2021
java
language
🅿️ [프로그래머스] 탐욕법(Greedy) - 큰 수 만들기

프로그래머스 탐욕법(Greedy) - 큰 수 만들기 문제 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 19, 12, 14, 92, 94, 24 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 사항 number는 1자리 이상, 1,000,000자리 …

July 01, 2021
ps
programmers
🅿️ [프로그래머스] 정렬 - 가장 큰 수

프로그래머스 정렬 - 가장 큰 수 문제 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 6, 10, 2라면 6102, 6210, 1062, 1026, 2610, 2106를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다…

June 30, 2021
ps
programmers
🎨 내가 보려고 정리하는 마크다운 문법

마크다운 문법 제 블로그에 맞게 CSS를 약간 커스텀했습니다! 헤더(Headers) html 태그 : < h1 > ~ < h6 > h1는 짱크게 h2는 밑줄과 함께 h3는 들여쓰기 h4는 쬐끔 크게 h5는 쬐끔 작게 h6는 ~흐리게~ 리스트 html 태그 : < ol >, < ul > 순서가 있는 리스트(Ordered List) 이렇게 워드에서처럼 번호를 매기면 리스트가 출력됩니다. 또한 중첩 리스트는 들여쓰기를 이용하면 소문자 로마문자로 표기됩니다. 쉽죠? 순서가 없는 리스트(Unordered List) 순서 없는 리스트도 워드에서처럼 대시를 입력하면됩니다. 별이나 플러스 문자도 되네요. 중첩 리스트는 역시 들여쓰…

June 28, 2021
blog