code-lab1의 등록된 링크

키자드에 등록된 총 302개의 포스트를 확인하실 수 있습니다.

Tistory

[Linux] 리눅스 cat 명령어 사용법, 리눅스 파일 내용 출력

cat 명령어 리눅스에서 cat 명령어는 파일 내용을 출력해 주는 명령어이다. $cat test.txt 위와 같이 사용하면 test.txt라는 파일의 내용을 출력해 준다. cat 명령어는 파일을 순서대로 읽고 해당 내용을 표준 출력(standard output)에 쓴다. 자주 사용하는 옵션 -n : 모든 라인 앞에 줄 번호 출력 -b : 비어 있지 않은 라인만 번호 출력 -E : 라인의 마지막에 $ 기호 출력 (공백을 파악하기 위해 사용가능) -T : 탭 문자를 ^I로 바꿔서 출력 -s : 두 번 이상 연속되는 빈 라인 출력 하지 않음 예시 cat 명령어 기본 cat 명령어 + 파일이름을 사용하면 위와 같이 파일 내용을 출력해 준다. 라인 번호 출력 -n 옵션을 이용하면 라인 번호를 앞에 붙여준다. 표준..

Tistory

[JAVA] POJO(Plain Old Java Object)란?

POJO는 말 그대로 오래된 방식의 간단한 자바 오브젝트라는 말로써 Java EE 등의 중량 프레임워크를 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용된 용어이다. -위키백과- POJO는 정말 말 그대로 오래된 방식의 간단한 자바 객체를 뜻한다. 쉽게 말해 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않는 순수한 자바 객체 그 자체를 뜻한다. 반면, 특정 기술과 환경에 종속되어 사용되는 기술을 EJB(Enterprise Java Beans)라고 한다. 이 EJB는 자바 개발을 할 때 로우 개발에 신경 쓰지 않고 개발을 쉽게 하도록 도와주지만, 특정 기술에 의존하여 확장서가 떨어지고 객체지향성을 잃어버리게 됐다. 따라서 옛날에 객체지향성이 큰 순수한 방식으로..

Tistory

[Linux] 리눅스 netstat 명령어 사용법, 리눅스 네트워크 상태 확인하기, 리눅스 netstat 설치

netstat 명령어 netstat은 network status의 줄임말로 말 그대로 네트워크 상태를 확인하는 명령어이다. $netstat [옵션] 자주 사용하는 옵션 -a : 모든 네트워크 상태 출력 -n : 도메인 주소를 숫자로 출력 -t : tcp 프로토콜만 출력 -u : udp 프로토콜만 출력 -l : 대기 중(listening)인 네트워크 출력 -p : PID(프로세스 ID)와 사용중인 프로그램명 출력 -c : 실시간 상태 출력(1초 간격) netstat 설치 만약 리눅스 터미널에서 netstat 명령어를 실행했는데 위와 같이 "Command 'netstat' not found... " 오류가 뜨는 이유는 net-tools가 설치되어 있지 않기 때문이다. 최신 시스템은 netstat 유틸리티가 ..

Tistory

[Linux] 리눅스 메모리 확인 하는 법, 리눅스 free 명령어 사용법

리눅스 free 명령어 free 명령어는 간단하게 메모리 사용량 및 여유량을 볼 수 있다. $free [옵션] 자주 사용하는 옵션 -h : 사람이 읽기 쉬운 단위로 출력 --kilo : 킬로바이트 단위로 출력 --mega : 메가바이트 단위로 출력 --giga : 기가바이트 단위로 출력 -w : 와이드 모드로 cache와 buffers를 따로 출력 -t : 합계가 계산된 total 컬럼을 추가로 출력 메모리 구성 free 명령어를 사용하면 위와 같이 총 메모리의 크기와 메모리 사용률 등을 보여준다. 각각은 다음을 나타낸다. total Mem : 설치된 총 메모리의 크기 Swap : 설정된 스왑 총 크기 used Mem : totoal에서 free, buff/cache를 뺀 사용 중인 메모리 Swap : ..

Tistory

[Linux] 리눅스 grep 명령어 사용법, 리눅스 파일 내 문자열 찾기

grep 명령어 grep 명령어는 Global Regular Expression Print의 줄임말로 특정 파일에서 특정 문자열을 찾을 때 사용한다. 이때 grep 명령어는 단순히 문자열의 일치 여부만을 검사해서 찾는 게 아닌, 정규 표현식(Regular Expression)에 의한 패턴 매칭 방식을 사용한다. 이러한 grep 명령어는 보통 다른 명령어들과 조합해서 사용하는 경우가 많다. grep [옵션] [패턴] [파일명] 자주 사용하는 옵션 -c : 일치하는 행의 수 출력 -i : 대소문자 구별하지 않음 -v : 일치하는 않는 행만 출력 -n : 해당 문자열이 포함된 행의 번호를 함께 출력 -l : 패턴이 포함된 파일의 이름 출력 -H : 패턴이 포함된 파일의 이름과 함께 내용 출력 -w : 단어와 ..

Tistory

[운영체제] 동기(Sync)와 비동기(Async), Blocking과 Non-blocking

동기와 비동기, 블로킹과 논-블로킹 너무 헷갈려 운영체제를 공부하다 보면 동기(Syncronous)와 비동기(Asynchronous), 블로킹(Blocking), 논-블로킹(Non-blocking)에 대해 들어볼 수 있다. 이 개념들은 언뜻 보면 매우 헷갈리기 때문에 한 번 정리가 필요하다고 생각했다. 검색해 보니 좋은 글들이 많아 이해가 쉬웠다. 이를 종합해서 설명해 보겠다. [그림 1]은 IBM DeveloperWorks Library에 게재된 Boost application performance using asynchronous I/O라는 글에서 사용된 도표이다. 해당 게시글은 2006년에 Linux의 Asynchronous I/O(AIO)에 대해 설명하는 글이다. AIO는 쉽게 말해 프로세스가 여..

Tistory

로지텍 C920 PRO 리뷰, 가성비 웹캠 추천

로지텍 C920 PRO 스펙 제품명 : Logitech C920 PRO HD Webcam 최대 해상도 : 1080p / 30fps-720p / 30fps 초점 유형 : 자동 초점 렌즈 기술 : 표준 내장 마이크 : 모노 시야각 : 78도 케이블 길이 : 0.95m 시스템 요구사항 Windows 10, Windows 8, Windows 7 macOS 10.10 이상 USB UVC(Vodep Device Class)모드에서 작동 로지텍 C920 PRO 두 달 사용 후기 평소 사용하던 웹캠의 마이크가 너무 좋지 않아 화상회의 할 때 너무 불편했다. 구글에서 열심히 가성비 웹캠 추천을 검색해 보니 로지텍의 C920 PRO가 괜찮아 보였다. 가격은 약 7만 원 정도로 벌크 제품을 구매했다. C920은 디자인이 참..

Tistory

[Linux] 리눅스 mkdir 명령어 사용법, 리눅스 디렉토리 만드는 법

mkdir 명령어 mkdir은 make directory의 줄임말로 디렉토리를 생성하는 명령어이다. mkdir [옵션] [생성할 디렉토리] ex) mkdir test_folder // test_folder라는 디렉토리 생성 ex) mkdir /app/bin/test_folder // /app/bin 아래 test_folder 라는 디렉토리 생성 ex) mkdir test_folder1 test_folder2 test_folder3 // test_folder1, test_folder2, test_folder3 3개의 디렉토리 생성 경로를 지정하지 않으면 현재 위치를 디폴트로 설정한다. 자주 사용하는 옵션 -m : 디렉토리의 권한을 설정한다 ( 디폴트 : 755 ) -p : 상위 경로도 함께 생성 -v : ..

Tistory

[Linux] 윈도우10 리눅스(우분투) 가상머신 설치 하는 법

윈도우10 리눅스 설치하기 Windows10 운영체제를 사용하는 사람이 어떠한 이유로 리눅스가 필요한 경우가 있다. 나의 경우 개발을 위해 리눅스 환경이 필요했다. 이때 PC에 직접 리눅스를 설치해 멀티 부팅을 하는 방식이나 WSL2를 이용할 수도 있지만, 나는 그보다 가상 머신을 이용하기로 했다. 가상 머신을 이용하면 마치 리눅스가 설치된 새로운 컴퓨터를 사용하는 것처럼 느껴지기 때문이다. VirtualBox, Vmware 등 다양한 가상 머신 지원 프로그램이 있지만, 나는 VirtualBox를 이용했다. 우분투(Ubuntu) iso 파일 다운로드 https://ubuntu.com/ Enterprise Open Source and Linux | Ubuntu Ubuntu is the modern, ope..

Tistory

[Linux] 버츄얼박스(VirtualBox) 우분투 터미널 안 열림 해결 방법

우분투 터미널 안 열림 현상 해결 방법은? 얼마 전 버츄얼박스에 우분투를 설치했는데 터미널(Terminal)이 열리지 않는 현상이 발생했다. 이러한 현상은 무인 설치(Unattended Install)를 진행하면 발생하는 현상으로 보인다. 이를 해결하는 법은 간단하다. 1. 우분투의 Settings에 들어간다. 2. Region & Language 탭을 누르고 Language를 English(United States)에서 'English(Canada)'로 바꿔준다. 3. 로그아웃 후 다시 로그인한다. 위와 같은 과정을 거치면 터미널을 사용할 수 있게 된다.

Tistory

[Linux] 리눅스 tail 명령어 사용업, 리눅스 실시간 로그 보는 법

tail 명령어 tail 명령어는 tail(꼬리)라는 뜻에 걸맞게 파일의 끝 부분을 보여주는 명령어이다. 기본적으로 파일의 마지막 10줄을 출력해 보여준다. 이러한 tail 명령어는 리눅스에서 주로 파일 로그를 실시간으로 확인할 때 매우 자주 사용된다. tail [옵션] [파일명] ex) tail test.log // test.log의 마지막 10줄을 출력 자주 사용하는 옵션 -f : tail 명령어를 종료하지 않고 실시간으로 파일의 내용을 계속 출력한다. -n (라인 수) : 파일의 마지막줄부터 지정한 라인 수 까지의 내용을 출력한다. -c (바이트 수) : 파일의 마지막부터 지정한 바이트만큼의 내용을 출력한다. -q : 파일의 헤더와 상단의 파일이름을 출력하지 않고 내용만 출력한다. -v : 풀력하기..

Tistory

[Linux] 리눅스 cp 명령어 사용법, 리눅스 파일 복사 하는 법

리눅스 cp 명령어 리눅스에서 cp 명령어는 copy의 줄임말로 말 그대로 무언가를 복사할 때 사용하는 명령어이다. cp [옵션][복사 할 디렉토리/파일명][복사 될 디렉토리/파일명] ex) cp original.txt copy.txt // 현재 디렉토리의 original.txt라는 파일을 copy.txt라는 파일로 복사 ex) cp /app/bin/original.txt /app/logs/copy.txt // /app/bin 디렉토리의 original.txt라는 파일을 /app/logs에 copy.txt라는 파일로 복사 cp 명령어는 위의 예시처럼 [복사할 디렉터리/파일명] [복사될 디렉터리/파일명] 인자를 필수로 갖는다. 경로를 지정하지 않으면 현재 위치를 기본값으로 설정한다. 자주 사용하는 옵션 -..

Tistory

[Linux] 리눅스 rm 명령어 사용법, 리눅스 파일 및 디렉토리 삭제하는 법

rm 명령어 rm 명령어는 remove의 줄임말로 말 그대로 파일이나 디렉토리를 삭제하는 명령어이다. rm [옵션] [삭제 할 디렉토리/파일] ex) rm original.txt // 현재 디렉토리의 original.txt 라는 파일 삭제 ex) rm /app/bin/logs/log.txt // /app/bin/logs 디렉토리의 log.txt 라는 파일 삭제 ex) rm -r folder // folder 라는 디렉토리 삭제 위와 같이 [삭제 할 디렉토리/파일]을 인자로 갖는다. 경로를 지정하지 않으면 현재 위치를 디폴트 값으로 설정한다. 비어있지 않은 디렉토리는 -r 옵션을 필수로 줘야지 삭제할 수 있다. 자주 사용하는 옵션 -r : 디렉토리 내부의 모든 내용을 삭제 -f : 강제로 파일이나 디렉토리..

Tistory

[Linux] 리눅스 mv 명령어 사용법, 리눅스 파일 이동 하는 법

mv 명령어 mv는 move의 줄임말로 파일이나 디렉토리를 이동시킬 때 사용하는 명령어이다. mv [옵션] [이동시킬 디렉토리/파일] [이동 될 위치] ex) mv log.txt folder // 현재 디렉토리의 log.txt 파일을 folder 디렉토리로 이동 ex) mv log.txt log2.txt // 현재 디렉토리의 log.txt 파일의 이름을 log2.txt로 변경 ex) mv /app/bin/logs/log.txt /app/dw // /app/bin/logs 디렉토리의 log.txt 파일을 /app/dw 디렉토리로 이동 mv 명령어는 [이동시킬 디렉토리/파일] [이동될 위치] 두 인자를 필수로 갖는다. 경로를 지정하지 않는다면 현 위치를 디폴트로 설정한다. 이동시킬 때 새로운 이름을 지정할 ..

Tistory

[알고리즘] KMP알고리즘이란? KMP 알고리즘 C++ 구현

KMP 알고리즘이란? KMP 알고리즘은 Knuth, Morris, Pratt 세 사람이 만든 알고리즘으로, 문자열 중에 특정 패턴을 찾아내는 문자열 검색 알고리즘 중 하나이다. 그렇다면 문자열 검색 알고리즘이란 뭘까? 위 사진은 웹 사이트에서 Ctrl+F 를 눌러 특정 문자열을 검색한 결과이다. 문자열 검색 알고리즘이란 말 그대로 문자열에서 특정 패턴을 찾아내는 알고리즘이다. KMP 알고리즘은 문자열에서 특정 패턴을 효율적으로 찾을 수 있다. 살펴볼 문자열의 길이가 N, 찾고 싶은 패턴의 길이가 M이라면 O(N+M)의 시간 복잡도를 가지는 매우 효율적인 알고리즘이다. KMP 알고리즘이 얼마나 효율적인지 알기 전에, 모든 문자열을 일일이 비교하는 경우를 살펴보자. 모든 문자열을 일일이 비교하는 경우(브루트..

Tistory

[Linux] 리눅스 cd 명령어 사용법, 리눅스 디렉토리 이동하는 법

cd 명령어 cd 명령어는 change directory의 줄임말로 현재 작업 중인 디렉토리의 위치를 이동하는 명령어이다. cd 명령어 뒤에 디렉토리 이동경로를 입력하면 해당 디렉토리로 이동한다. cd [이동할 경로] ex) cd / : root로 이동 ex) cd log : 현재 디렉토리 내 log 디렉토리로 이동 ex) cd /app/bin : /app/bin 디렉토리로 이동 위와 같이 cd 명령어를 이용해 디렉토리를 이동할 수 있다. cd 명령어는 절대 경로 뿐만 아니라 상대 경로를 통해 상위 폴더나 이전 폴더로 이동할 수 있다. 이러한 cd 명령어는 별도의 옵션이 존재하지 않는다. 절대 경로와 상대 경로 절대 경로는 모든 경로를 처음부터 끝까지 나타낸 것을 뜻한다. 예를 들어 "/home/app/..

Tistory

[Linux] 리눅스 ls 명령어 사용법, 리눅스 디렉토리 내용 출력

리눅스 ls 명령어 리눅스(Linux)에서 ls 명령어는 list의 줄임말로 현재 위치한 디렉토리의 내용(디렉토리, 파일 등)을 출력하는 명령어이다. 윈도우의 dir 명령어와 비슷하다. ls [디렉토리] ls : 현재 디렉토리의 파일 목록 출력 ls /app : /app 경로의 파일 목록 출력 ls [디렉토리] 와 같은 형식으로 디렉토리를 지정하여 파일 목록을 출력할 수 있다. 이때 디렉토리 명을 생략하면 현재 위치한 디렉토리의 파일 목록을 출력한다. 자주 사용하는 옵션 -l : 자세한 내용을 출력한다 -a : 숨김 파일을 포함한 모든 파일을 출력한다. -R : 하위 디렉토리의 파일까지 모두 출력한다. -h : 파일크기를 해석하기 쉽게 K, M, G 단위를 사용하여 출력한다. -r : 출력 결과를 내림차..

Tistory

사이드 프로젝트(3) - DB 설계하기(feat. ERD Cloud)

이전 글 사이드 프로젝트(1) - 사이드 프로젝트를 시작하는 법, 팀 구하기, 팀원 구하기, 팀 규칙 정하기 사이드 프로젝트(2) - 주제 선정, 노션 정리, 화면 별 기능 명세서 작성, 깃허브 협업 ERD Cloud로 ERD 그리기 이전에 화면 별 기능 명세서를 작성한 것을 기반으로, DB 설계를 하기로 했다. ERD를 그리기 위해 ERD Cloud라는 웹 사이트를 이용했다. https://www.erdcloud.com/ ERDCloud Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool. www.erdcloud.com ERD Cloud는 웹 사이트 ERD 툴 서비..

Tistory

[Web] 쿠키(Cookie)와 세션(Session)의 차이, 쿠키란? 세션이란?

쿠키(Cookie)란? 쿠키는 클라이언트(로컬)에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 이러한 쿠키는 클라이언트에 저장되어 필요시 정보를 참조하거나 재사용할 수 있다. 보통 웹 환경에서는 클라이언트와 서버가 HTTP 프로토콜을 이용해 통신한다. 하지만 HTTP 프로토콜은 아래와 같은 특징을 가지기 때문에 쿠키를 사용한다. 1. Connectionless(비연결성) -> HTTP는 TCP 연결을 맺고 요청(Request)을 보내면 서버는 응답(Response)을 보내고 연결이 끊어진다. 물론 HTTP 1.1 버전은 커넥션을 계속 유지하는 keep-alive 옵션이 디폴트이긴 하다. 하지만 HTTP 1.0 버전은 기본적으로 connectionless이다. 참고) [Web] HTTP 1.0 과 ..

Tistory

사이드 프로젝트(4) - 스웨거(Swagger)로 API 명세서 작성하기

스웨거(Swagger)란? 스웨거는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다 - 위키백과- 스웨거를 이용하면 간편하게 API 문서를 작성할 수 있다. 뿐만 아니라 간단하게 API 테스트도 해볼 수 있다. 스웨거외에도 유명한 API 문서 툴로는 Spring Rest Docs 등이 있다. Spring Rest Docs와 스웨거는 각각의 장단점이 존재한다. 우리는 스웨거가 적용하기 간단하고, 프런트엔드와 빠른 협업을 위해 당장 테스트를 하지 않아도 문서를 만들 수 있는 스웨거를 사용하기로 했다. Spring Rest Docs는 테스트코드를 통과하지 않으면 문서를 만들 수 없기 때문이다.(이것은 단점이자 장점..

Tistory

[Web] 웹소켓(WebSocket)이란? 웹소켓과 HTTP의 차이

웹소켓(WebSocket) 프로토콜이란? 웹소켓(WebSocket)은 클라이언트와 서버(브라우저와 서버)를 연결하고 실시간으로 통신이 가능하도록 하는 첨단 통신 프로토콜이다. 웹소켓은 하나의 TCP 접속에 전이중(duplex) 통신 채널을 제공한다. 쉽게 말해, 웹소켓은 Socket Connection을 유지한 채로 실시간으로 양방향 통신 혹은 데이터 전송이 가능한 프로토콜이다. 오늘날 채팅 어플리케이션, SNS, 구글 Docs, LOL 같은 멀티플레이 게임, 화상회의 등 많은 분야에서 사용되고 있다. HTTP와의 차이는? 기존 HTTP는 단방향 통신이였다. 클라이언트에서 서버로 Request를 보내면 서버는 클라이언트로 Response를 보내는 방식으로 동작했다. 또한, HTTP는 기본적으로 무상태(S..

Tistory

클린 코드(Clean Code) 리뷰

이 책을 읽게 된 이유 클린 코드는 컴퓨터공학과 학생, 개발자라면 누구나 한 번쯤은 들어봤을 책이다. 나 또한 언젠가 꼭 읽어봐야겠다 생각했던 책이었다. 취업준비생 시절 이 책을 가볍게 한 번 읽었는데, 취업을 하고 나서 다시 한번 읽어야겠다는 생각이 들어 두 번 읽게 되었다. 책 소개 애자일 소프트웨어의 혁명적인 패러다임을 제시하는 책이다. 저자 로버트 마틴은 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제하여『Clean Code 클린 코드』에 담았다. 아주 많은 코드를 읽고 그 코드의 무엇이 옳은지, 그른지 생각하며 전문가로서 자신이 지니는 가치를 돌아보기 위해 꾸준히 노력한다면, 이 책을 통해 여러분의 프로그래밍 실력은 한층 ..

Tistory

사이드 프로젝트(1) - 사이드 프로젝트를 시작하는 법, 팀 구하기, 팀원 구하기, 팀 규칙 정하기

사이드 프로젝트 시작 - 멤버 구하기 나는 개발 실력을 늘리고 추후 포트폴리오로도 사용할 수 있게 사이드 프로젝트를 진행하고 싶었다. 그래서 사이드 프로젝트를 진행하는 모임에 들어가려고 했다. 사이드 프로젝트를 모집하는 사이트는 아래와 같이 다양하게 있다. 1. 스프 https://soup.pw/projects 스프 흩어져 있는 스터디와 프로젝트가 모여있는 곳 soup.pw 인프런, OKKY, 캠퍼스픽 등등 다양한 플랫폼에 올라와있는 프로젝트 구인 공고를 모아서 볼 수 있는 사이트다. 2. HOLA https://holaworld.io/ Hola! 스터디, 사이드 프로젝트 팀원을 구하는 가장 쉬운 방법! holaworld.io 자체적으로 다양한 스터디와 사이드 프로젝트 구인 공고가 올라오는 플랫폼이다. ..

Tistory

사이드 프로젝트(2) - 주제 선정, 노션 정리, 화면 별 기능 명세서 작성, 깃허브 협업

이전 글 사이드 프로젝트(1) - 사이드 프로젝트를 시작하는 법, 팀 구하기, 팀원 구하기, 팀 규칙 정하기 주제 선정 팀원들을 모집하고 처음으로 진행한 사항은 사이드 프로젝트의 주제를 선정하는 일이었다. 팀원 분 중 기획자를 희망하는 분이 있어 기획자 분의 의견을 중점으로 주제를 선정하였다. 그 결과 우리는 리뷰 체험단 모집 웹 사이트를 만들기로 하였다. 다양한 기술 스택을 써보는 게 가장 큰 목적이기 때문에 구현 난이도가 높지 않고 기본적인 기술들을 사용할 수 있는 서비스를 만들기로 했다. 어떠한 서비스들을 구현할지 고민하였고, 그 결과 다음과 같은 기능들을 포함하기로 했다. 1. 리뷰 체험단 모집 기능 (사장님) 2. 리뷰 체험단 신청 기능 (고객) 3. 커뮤니티(본문, 댓글) 4. 로그인(JWT ..

Tistory

[JPA] 엔티티 매핑, 필드 컬럼 매핑, 기본키 매핑, @Entity, @Table, @Column, @Id

@Entity @Entity 어노테이션이 붙은 클래스는 JPA가 관리하는 엔티티이다 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션이 필수다 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X name 속성을 사용하면 JPA에서 사용할 엔티티 이름을 지정할 수 있다. 기본값은 클래스 이름을 그대로 사용한다 예시: @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; Member(){}// 생략하면 ..

Tistory

[네트워크] 스위치와 라우터의 차이

스위치란? 네트워크에서 스위치란 소규모 비즈니스 네트워크 안에서 컴퓨터, 프린터 등 모든 디바이스를 서로 연결해주어 자원을 쉽게 공유할 수 있도록 하는 장치이다. 스위치는 L2(데이터 링크 계층)에 속하는 장치이다. 즉, MAC 주소를 기반으로 디바이스 위치를 파악하고 통신한다. 스위치는 브로드캐스트 도메인을 구분할 수 없다. 스위치는 ARP 등을 통해 불명확한 목적지를 가진 데이터를 처리할 때 모든 포트로 데이터를 퍼뜨리는 브로드캐스트를 한다. 참고) [네트워크] MAC주소와 ARP(Address Resolution Protocol)란? | MAC 주소의 필요성 MAC 주소란? IP 주소는 네트워크 계층(Network Layer)에서 사용되는 주소다. 반면 MAC 주소는 데이터 링크 계층(Data Li..

Tistory

[JAVA] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)에 대하여

얕은 복사(Shallow Copy)란? public class Human { String name; int age; public Human(){ } public Human(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 위와 같은 Human 클래스가 있다고 하자. 이 클래스를 다음과 같이 복사한 뒤 멤버 값을 변경해 보자. p..

Tistory

[JAVA] 추상클래스와 인터페이스의 차이

추상클래스(Abstract Class)란? 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 이러한 특성 탓에 미완성 설계도라고 표현하기도 한다. 추상클래스는 상속을 위한 클래스이기 때문에 따로 인스턴스를 생성할 수 없다. abstract class 클래스{ ... public abstract void 메서드(); } class 앞에 "abstract" 예약어를 붙여 해당 클래스가 추상 클래스임을 나타낸다. 또한 메서드도 abstract 예약어를 붙여 추상 메서드를 선언할 수 있다. 추상 클래스는 추상 메서드를 가지지 않아도 괜찮다. 다만, 추상 메서드를 하나라도 가진다면 그 클래스는 추상 클래스가 된다. 추상 메서..

Tistory

[JPA] JPA란? Spring Data JPA란? Hibernate란?

JPA(Java Persistent API)란? JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. ORM 기술이란? ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑을 해준다. 더 자세한 내용은 다음을 참고) SQL Mapper 와 ORM 기술의 차이 Persistence Framework란? SQL Mapper와 ORM 기술에 대해 알아보기 전에 Persistence Framework에 대해 알아보자. 영속성(Persistence)은 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 뜻한다. [그림 1]에서..

Tistory

[Java] 직렬화(Serialization)와 역직렬화(Deserialization)란? transient 변수란?

직렬화(Serializaion)란? 역직렬화(Deserialization)란? 직렬화는 객체를 저장 가능한 상태(예를 들어 디스크에 파일 형태 등) 혹은 전송 가능한 상태(네트워크 상의 데이터 스트림 형태)로 변환하는 것을 뜻한다 - 위키백과 - 쉽게 말해 직렬화는 객체를 저장, 전송할 수 있는 특정 포맷 상태로 바꾸는 과정이라고 할 수 있다. 역직렬화는 말 그대로 직렬화의 반대이다. 즉, 특정 포맷 상태의 데이터를 다시 객체로 변환하는 것을 뜻한다. 데이터 직렬화 포맷 CSV, XML, JSON 형태의 직렬화 사람이 읽을 수 있다 저장 공간의 효율성이 상대적으로 떨어지고, 파싱 하는 시간이 오래 걸린다 주로 데이터의 양이 적을 때 사용한다 Binary 직렬화 사람이 읽을 수 없다 저장 공간의 효율성이 ..

Tistory

[JPA] 영속성 컨텍스트란?

영속성 컨텍스트란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다. 엔티티 생명주기 비영속(new/transient) 상태 : 영속성 컨텍스트와 관계가 없는 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속(managed) 상태 : 영속성 컨텍스트에 저장된 상태 //객체를 생성한 상태(비영속) Member member = n..

Tistory

CAP 정리란? 브루어의 정리란?

CAP 정리란? 브루어의 정리란? CAP 정리 또는 브루어(Brewer)의 정리는 다음과 같은 세 가지 조건을 모두 만족하는 분산 컴퓨터 시스템은 존재하지 않음을 증명한 정리이다. 일관성(Consistency) : 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다. 가용성(Availability) : 모든 요청이 성공 또는 실패 등의 결과를 반환활 수 있다. 파티션 허용(Partition tolerance) : 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있다. 위의 세 가지 조건의 첫 글자를 따서 CAP정리라고 부른다. 여기서 분산 시스템은 동시에 둘 이상의 노드(물리적 또는 가상머신)에 데이터를 저장하는 네트워크를 뜻한다. 세 가지 조건에 대해 더 자세히 알아보자면 다음..

Tistory

가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰

이 책을 읽게 된 이유 나는 프로젝트 경험이 부족하여 대규모 시스템을 직접 설계해 본 경험이 없다. 백엔드 개발자라면 대규모 시스템이 어떻게 이루어져 있는지, 어떻게 설계하는지 알아야 할 것 같아 이 책을 읽게 되었다. 책 소개 IT 경력자라도 느닷없이 대규모 시스템을 설계하려고 하면 막막하다고 느낄 수 있다. 특히나 면접을 보는 상황이라면 더욱 눈앞이 캄캄해질 것이다. 복잡한 시스템을 설계할 때는 어디서부터 어떻게 시작해야 할까? 이 책은 16가지 실제 시스템 설계 면접 문제와 상세한 답안을 제시한다. 시스템 동작 원리를 시각적으로 보여 주는 188개의 도해로 설명하면서 4단계 접근법으로 면접 문제를 풀 수 있도록 돕는다. 이 책을 통해 면접관이 평가하려는 항목과 그 이유를 내부자 관점에서 들을 수 있..

Tistory

프레임워크(Framework)와 라이브러리(Library)의 차이

프레임워크(Framework)란? 프레임워크는 복잡한 문제를 해결하거나 서술하는 데 사용되는 개본 개념 구조이다. -위키백과- 프레임워크는 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 커넥션 등의 기능들을 위해 뼈대(구조)를 제공한다. 개발자는 이러한 뼈대 위에서 코드를 작성해 원하는 애플리케이션을 개발할 수 있다. 프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 상호 협력하는 클래스와 인터페이스의 집합이라고 할 수 있다. 쉽게 말해 프레임워크는 개발자가 개발을 쉽게 할 수 있도록 뼈대를 제공해준다고 생각하면 된다. 예를 들어 Java 개발에서 사용되는 Spring 프레임워크나 Python 개발에 사용되는 Django, 안드로이드 앱개발에 사용되는 Androi..

Tistory

2022년 블로그 연말 결산, 티스토리 일일 방문자 1000명 수익 공개

꾸준한 성장 내가 기술 블로그를 처음 시작한 것은 2021년 7월부터다. 처음엔 하루 10명도 안 되는 방문자에 기뻐하곤 했는데 어느새 하루 평균 천 명이 넘는 방문자가 방문해주기 시작했다. 2022년에는 내 블로그에 317,901명이 방문해주었다. 꾸준히 방문자가 늘었으며 기타 유입도 크게 증가하였다. 기타 유입은 주로 현재 글에서 연관 있는 글들을 링크로 달아놓은 것들에서 발생했다. 블로그의 콘텐츠가 늘어감에 따라 방문자수도 유의미하게 증가한 해였다. 블로그 광고 수익 사실 구글에 "티스토리 일일 방문자 1000명 수익"을 검색해봐도 블로그마다 결과는 천차만별이다. 이는 CPC, CTR등이 다르기 때문이다. CPC는 Cost Per Click의 줄임말로, 광고 클릭에 대해 광고주가 지불하는 평균 금액..

Tistory

CES2023 요약, 5개 주요 테마로 살펴본 CES2023

CES 2023 행사 개요 CES는 독일 IFA, 스페인 MWC와 함께 세계 3대 IT 전시회이다. CES 2023은 코로나 이전 대비 70-80% 수준 규모를 회복하며 팬데믹 발생 이후 최대 규모로 진행되었다. CES 2023 행사의 간략한 개요는 다음과 같다. 일시 : 2023년 1월 5일~8일 장소 : 미국 라스베이거스 컨벤션 센터 참가국 : 174개국 (미국 이외 국가의 등록객 비중 35%) 참가 기업 : 약 3200 기업, Fortune Global 500대 기업 중 323개 기업 참여, Interbrand 100대 기업 중 85개 기업 참여 참관객 수 : 약 12만명 주요 테마 : 웹 3.0/메타버스, 모빌리티, 디지털 헬스, 지속가능성, 인간안보 주요 테마 요약 1. 웹 3.0과 메타버스 웹..

Tistory

[DB] Clustered Index 와 Non-Clustered Index 차이 | 테이블 스캔(Table Scan)이란? 인덱스 스캔(Index Scan)이란?

Index란? Index는 테이블에서 데이터의 위치를 가리키는 자료구조이다. Index가 없다면 원하는 데이터를 찾기 위해서 테이블 전체를 뒤져야 할 것이다. 이러한 Index는 크게 Clustered Index와 Non-Clustered Index 두 가지로 나눌 수 있다. 참고) [DB] 인덱스(index)란? 인덱스 자료구조 인덱스(index)란? 인덱스란 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조라고 할 수 있다. 책의 색인(index)을 보면 해당 내용이 어디에 있는지 알 수 있듯이 데이터의 인덱스를 참조 code-lab1.tistory.com Clustered Index란? clustered Index는 row의 물리적 정렬 순서를 설정하는 index 유형이다. clustered..

Tistory

[AWS] AWS Cloud Practitioner 자격증(CLF-C01) 취득 후기

AWS Cloud Practitioner 자격증이란? AWS는 다양한 자격증을 취득할 수 있다. 그중 AWS Cloud Practitioner는 가장 기본인 자격증이다. 이후엔 Architect, Operations, Developer 등 분야를 나누어 Associate 등급, Professional 등급 등을 취득할 수 있다. Cloud Practitioner 자격증은 AWS의 클라우드 기술의 개념과 보안, 운영 비용 등 AWS 클라우드 서비스를 사용하는 데 가장 기초적인 지식을 테스트하는 문제들이 출제된다. 응시 계기 현재 재직 중인 회사에서 온-프레미스에서 클라우드로의 전환을 계획하고 있다. 앞으로 많은 회사들이 클라우드 체계로 넘어갈 것이라고 생각했다. 평소에도 관심이 많던 클라우드 서비스에 대한..

Tistory

[Spring] JdbcTemplate이란? JdbcTemplate 사용법, RowMapper란?

JdbcTemplate이란? JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로 JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움이 된다. 개발자가 JDBC를 직접 사용할 때 발생하는 다음과 같은 반복 작업을 대신 처리해준다. 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프를 실행 커넥션 종료, statement 및 resultset 종료 트랜잭션을 다루기 위한 커넥션 동기화 예외 발생 시 스프링 예외 변환기 실행 쉽게 말해 JdbcTemplate은 개발자가 JDBC 기술을 쉽게 사용할 수 있도록 도와주는 클래스이다. 참고) [Spring] JDBC(Java Database Connectivity)란? JDBC 드라이버란? [Spring] JDBC(Java Da..

Tistory

[Spring] NamedParameterJdbcTemplate이란? , SimpleJdbcInsert란?

NamedParameterJdbcTemplate이란? JdbcTemplate은 파라미터를 순서대로 바인딩한다. String sql = "update item set item_name=?, price=?, quantity=? where id=?"; template.update(sql, itemName, price, quantity, itemId); 예를 들어 위와 같은 코드가 있다면, sql의 ?에 itemName, price, quantity, itemId 파라미터가 순서대로 바인딩된다. 이렇게 순서를 제대로 지킨다면 문제가 없는 코드이다. 하지만 모종의 이유로 위의 SQL 코드를 변경하게 된다고 생각해보자. 실무에서 수십 개의 파라미터를 사용한다고 했을 때 순서에 맞춰 파라미터를 바인딩 하기는 쉽지 않..

Tistory

[프로그래밍 언어론] 오버라이딩(Overriding)과 오버로딩(Overloading)의 차이

오버로딩(Overloading)이란? 오버로딩은 같은 클래스 내에 여러 개의 같은 이름의 메서드를 정의하는 것이다. 이때 메서드의 이름은 같지만 매개변수(parameter)의 개수나 타입이 달라야 한다. return 값만 다른 것은 오버로딩이라고 볼 수 없다. 예를 들어 아래와 같이 Food 클래스 내에 여러 가지의 eat 메서드를 정의할 수 있다. public class Food{ void eat(Noodle noodle){ System.out.println("후루룩"); } void eat(Pizza pizza){ System.out.prinln("냠냠"); } void eat(Noodle noodle, Ramen ramen){ System.out.prinln("호로록~"); } } 같은 메서드 명이..

Tistory

DataSource에 대한 이해

DataSource에 대한 이해 DataSource는 커넥션을 획득하는 방법을 추상화하는 인터페이스이다. 이 인터페이스의 핵심 기능은 커넥션 조회이다. 특히 자바에서는 javax.sql.DataSource라는 인터페이스를 제공해준다. 만약 사용자가 DriverManager를 통해 커넥션을 획득하다가 나중에 HikariCP 커넥션 풀을 이용하려고 하면 커넥션을 획득하는 애플리케이션 코드를 모두 변경해야 한다. 하지만 이 커넥션을 획득하는 방법을 추상화해놓은 DataSource 인터페이스를 이용한다면 해당 인터페이스의 구현체만 갈아 끼우면 된다. 따라서 애플리케이션 로직은 DataSource 인터페이스에만 의존하도록 하면, 사용자는 커넥션을 획득하는 방법을 바꾸더라도 애플리케이션 로직을 변경하지 않아도 된다..

Tistory

[Spring] 체크 예외(Checked Exception) vs 언체크 예외(Unchecked Exception)/런타임 예외(RuntimeException), 예외전환

에러(Error)와 예외(Exception) 체크 예외와 언체크 예외에 알아보기 전에 Error와 Exception에 대해 알아보자. 자바에서 오류(Error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(Exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 참고) [JAVA] 예외 처리(Exception Handling)에 대하여, try-catch문, 오류(error)와 예외(exception) 오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이..

Tistory

[알고리즘] 투 포인터 알고리즘(Two-Pointers Algorithm)이란? 백준 2003번 C++ 풀이

투 포인터 알고리즘(Two-Pointers Algorithm)이란? 투 포인터 알고리즘은 말 그대로 두 개의 포인터를 이용해 문제를 해결하는 알고리즘을 뜻한다. 보통 l(left), r(right)나 s(start), e(end) 같은 식으로 포인터의 이름을 붙인다. 투 포인터 알고리즘을 설명하기 위해 하나의 알고리즘 문제를 소개하겠다. https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 백준에서 풀어볼 수..

Tistory

해시 테이블의 크기를 소수로 정하는 이유, hashCode() 에서 31을 쓰는 이유

해시 테이블이란? 해시 테이블은 (Key, Value)식으로 데이터를 저장하는 자료구조 중 하나로 key를 통해 평균 O(1)에 value를 검색할 수 있는 자료구조이다. 참고) [자료구조] 해시 테이블(Hash Table) 이란? | 해시 알고리즘 | 해시 함수 해시 테이블(Hash Table)이란? 해시 테이블은 (Key, Value)식으로 데이터를 저장하는 자료구조 중 하나로 key를 통해 평균 O(1)에 value를 검색할 수 있는 자료구조이다. 해시 테이블은 Key 값을 해시함수(Ha code-lab1.tistory.com 해시 테이블의 크기를 소수로 정하는 이유 public int hashCode() { final int prime = 31; //... } Java에서 hashCode() 함수..

Tistory

[Spring] JDBC(Java Database Connectivity)란? JDBC 드라이버란?

JDBC의 등장 배경 애플리케이션 서버에서 DB를 연결하기 위해선 어떤 동작이 필요할까? 1. 커넥션 연결 : 주로 TCP/IP를 사용해 애플리케이션 서버와 DB서버가 연결된다. 2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 : DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 간단하게 표현하면 위와 같이 동작한다. 이때 DB서버를 교체한다면 어떻게 될까? MySQL과 Oracle은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법이 모두 다르다. 위와 같은 방식처럼 애플리케이션 서버와 DB서버를 직접 연결하는 방식은 데이터베이스를 다른 종류로 변경하면 애플리케이션 서버에서 개발한 데이터베이스 사용..

Tistory

SQL Mapper 와 ORM 기술의 차이

Persistence Framework란? SQL Mapper와 ORM 기술에 대해 알아보기 전에 Persistence Framework에 대해 알아보자. 영속성(Persistence)은 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 뜻한다. [그림 1]에서 보이는 Persistence 계층이 Domain Model 계층에 영속성을 부여하는 역할을 한다. 자바에서는 JDBC를 통해 영속성을 부여할 수 있다. 하지만 JDBC는 중복된 코드를 반복적으로 사용하거나 Connection과 같은 공유 자원 관리가 까다로운 등 여러 가지 단점이 있다. 이러한 JDBC 프로그래밍의 복잡함이나 번거로운 작업 없이 간단한 작업만으로 Persistence 계층을 구현할 수 있는 Persistence Framework..

Tistory

클라우드 서비스 IaaS, PaaS, SaaS란?

As-a-service IaaS(Infrastucture-as-a-service), PaaS(Platform-as-a-service), SaaS(Software-as-a-service)의 차이점은 뭘까? 우선 "As-a-service" 가 무슨 뜻인지 알아야 한다. "As-a-service"는 보통 제 3자로부터 제공받는 클라우드 컴퓨팅 서비스를 뜻한다. 클라우드 컴퓨팅 서비스를 이용하면 사용자는 더 적은 온-프레미스 인프라를 관리하게 된다. 온-프레미스 인프라는 사용자에게 많은 책임을 전가한다. 만약 모든 하드웨어와 소프트웨어가 온-프레미스라면, 사용자는 모든 것을 유지보수 및 관리해야 한다. 하지만 제 3자로부터 클라우드 컴퓨팅 서비스를 제공받는다면 많은 부분의 관리를 제 3자에게 맡기고 더 중요한 ..

Tistory

이상적인 스레드 풀의 적정 크기에 대하여, 스레드 풀 크기 공식, 리틀의 법칙

스레드 풀의 크기를 적절히 설정해야 하는 이유 스레드를 생성하는 것은 비용이 드는 작업이다. 플랫폼마다 오버헤드는 다르지만, 스레드가 생성될 때 요청이 처리되는 지연시간(latency)과 OS에 의한 추가적인 처리 과정에 드는 시간 등 자원이 소모된다. 이러한 스레드 생성 비용을 줄이기 위해 스레드 풀이 필요하다. 스레드 풀에서 미리 생성해둔 스레드를 재사용함으로써 자원 낭비를 막을 수 있기 때문이다. 그렇다면 스레드 풀에 무조건 많은 스레드를 생성해두면 좋을까? 아래에서 자세히 알아보겠지만, 스레드를 많이 생성해둔다고 그 스레드를 다 사용할 수 있는 것은 아니다. 쓸데없이 스레드를 많이 생성한다면 생성하는 데에 드는 자원과 비용이 낭비된다. 그렇다고 스레드를 부족하게 만들어둔다면 CPU 사용률이 낮아지..

Tistory

[DB] 제 4정규형과 제 5정규형, 4NF와 5NF

정규화란? 정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 이전 포스팅에서 1NF, 2NF, 3NF, BCNF까지 다뤄보았다. [DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF 정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계 code-lab1.tistory.com 이번엔 제 4정규형(4NF)과 제5 정규형(5NF)에 대해 알아..

Tistory

[Git] 깃 브랜치(Git Branch)란? git branch, git checkout - Git 기초(4)

깃 브랜치(Git Branch)란 무엇인가 개발을 하다 보면 코드를 여러 방향으로 개발할 일이 생긴다. 예를 들어 A라는 코드를 B로 바꿔보기도 하고, C로 바꿔보기도 하며 가장 효율적인 코드를 찾아나갈 수도 있다. 이렇게 독립적으로 개발하는 것이 브랜치의 기본 개념이다. 브랜치는 말 그대로 가지이다. 하나의 나무에서 여러 갈래로 가지가 뻗어나가는 것처럼, 하나의 코드에서 여러 개의 코드로 갈라지며 다양한 개발 흐름을 만들어 낼 수 있다. 혼자 개발할 때 뿐만 아니라, 여러 사람이 협업하여 개발할 때 브랜치는 더욱 빛을 발한다. 어떤 개발자는 A라는 코드에 B기능을 추가하고, 또 다른 개발자는 동시에 C라는 기능을 추가할 수 있다. 커밋과 브랜치 깃은 데이터를 변경사항으로 기록하지 않고 일련의 스냅샷(s..

Tistory

[알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)이란? 크루스칼 알고리즘 C++ 구현, 최소 신장 트리(Minimum Spanning Tree)란?

최소 신장 트리(Minimum Spanning Tree)란? 크루스칼 알고리즘에 대해 알아보기 위해선 우선 최소 신장 트리에 대해 알아야 한다. 우선, 신장 트리(Spanning Tree)란 무방향(Undirected) 그래프의 최소 연결 부분 그래프이다. 좀 더 쉽게 설명하자면 N개의 정점을 가지는 그래프 중 최소 간선의 수인 N-1개의 간선으로 연결된 그래프를 뜻한다. N개의 정점이 N-1개의 간선으로 연결되어 있으면 이것은 필연적으로 트리 형태를 이루게 되기 때문에 신장 트리라고 불린다. [그림 1]을 보면 5개의 정점을 가진 그래프를 4개의 간선만을 사용해 연결하면 신장 트리가 되는 것을 볼 수 있다. 신장 트리는 하나의 그래프에서 여러 개가 나올 수 있다. 최소 신장 트리는 이러한 신장 트리들 ..

Tistory

[알고리즘] 프림 알고리즘(Prim Algorithm)이란?

프림 알고리즘(Prim`s Algorithm)이란? 프림 알고리즘은 크루스칼 알고리즘과 더불어 최소 신장 트리를 찾는 대표적인 알고리즘 중 하나이다. 크루스칼 알고리즘과 최소 신장 트리에 대해 잘 모른다면 이전 게시물을 보고 오자. 참고) [알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)이란? 크루스칼 알고리즘 C++ 구현, 최소 신장 트리(Mi 최소 신장 트리(Minimum Spanning Tree)란? 크루스칼 알고리즘에 대해 알아보기 위해선 우선 최소 신장 트리에 대해 알아야 한다. 우선, 신장 트리(Spanning Tree)란 무방향(Undirected) 그래프의 최소 연결 부 code-lab1.tistory.com 프림 알고리즘 과정 프림 알고리즘의 과정은 아래와 같이 간단한 편이..

Tistory

[DB] OLTP란? OLAP란? DSS란? OLTP와 OLAP의 차이

OLTP(Online Transaction Processing)란? OLTP란 트랜잭션 지향 애플리케이션을 손쉽게 관리할 수 있도록 도와주는 정보 시스템의 한 계열로서, 일반적으로 데이터 기입 및 트랜잭션 처리를 위해 존재한다. -위키백과- OLTP는 동시에 발생하는 다수의 트랜잭션을 실행하는 데이터 처리 유형이다. OLTP는 쿼리를 실행하고, 데이터 무결성을 유지하는 것을 목표로 한다. 예를 들어 은행의 ATM 기계는 OLTP 과정을 거친다. ATM 기계로 돈을 통장에 입금한다고 하자. 가장 먼저 카드를 삽입하면 ATM이 카드 정보를 인식한다. 카드를 인식했으면 돈을 기계에 넣는다. ATM은 돈을 세면서 잘못된 돈은 없는지 확인한다. 확인이 끝나면 돈을 보관하고 통장에 돈을 입금한다. 이러한 과정 중 ..

Tistory

맥북(MacOS) 인텔리제이(IntelliJ) 설치 하기

1. 인텔리제이 공식 홈페이지 접속 https://www.jetbrains.com/idea/ IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains A Capable and Ergonomic Java IDE for Enterprise Java, Scala, Kotlin and much more... www.jetbrains.com 2. Download 버튼 누르기 3. 버전 선택하기 다운로드 페이지에 들어가면 운영체제를 선택할 수 있다. macOS를 선택하면 두 가지 버전을 선택할 수 있다. 또한, Intel 맥북을 사용한다면 Intel 버전을 선택해야 하고, m1~m2 맥북을 사용한다면 Apple Sillicon을 선택해야 한다. Community ..

Tistory

[네트워크] CDN(Contents Delivery Network)이란?

CDN(Contents Delivery Network)란? CDN(Contents Delivery Network)이란 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크이다. 사용자는 웹 사이트를 방문할 때 해당 웹 사이트 서버의 데이터가 인터넷을 통해 사용자의 컴퓨터에 도달하게 된다. 이때 사용자가 해당 서버에서 멀리 떨어져 있는 경우 동영상이나 이미지와 같은 대용량 파일을 로드할 때 많은 시간이 걸리게 된다. 반면 사용자와 가까운 거리에 있는 CDN 서버에 웹 사이트 콘텐츠를 저장해놓으면 사용자는 훨씬 빠른 속도로 콘텐츠를 로드할 수 있다. 즉, CDN은 콘텐츠 전송 시간을 줄여주는 네트워크이다. CDN의 동작 방식 CDN의 목적은 지연 시간을 줄이는 것이다...

Tistory

[DB] 데이터베이스 트리거(Trigger)란?

데이터베이스 트리거(Trigger)란? 데이터베이스 트리거는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다. 트리거는 INSERT, DELETE, UPDATE 같은 DML(데이터 조작 언어)의 데이터 상태 관리를 자동화하는데 사용된다. 트리거(Trigger)는 말 그대로 방아쇠이다. 방아쇠를 당기면 총에서 총알이 발사되듯, 트리거가 실행되면 일련의 작업을 수행하게 된다. 트리거 유형 트리거는 크게 행 트리거와 문장 트리거가 존재한다. 행 트리거 : 테이블 안의 영향을 받은 행 각각에 대해 실행된다. 변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있다. 문장 트리거 : INSERT, UPDATE, DELETE 문에 대해 한 번만 실행된다. 또한 트리거..

Tistory

[AWS] AWS란? 온프레미스(On-premise)와 클라우드(Cloud)

온-프레미스(On-premise)와 클라우드(Cloud) AWS에 대해 알기 위해선 온-프레미스와 클라우드에 대해 알아야 한다. 온-프레미스 저장소는 회사의 서버가 조직의 인프라 내에 호스트 되어 있으며, 많은 경우 사내에 물리적으로 존재한다. 따라서 온-프레미스 저장소는 서버를 회사의 사내 IT 팀 등이 직접 제어, 관리, 유지 및 조달한다. 또한 데이터와 기타 정보는 로컬 네트워크를 통해 공유된다. 쉽게 말해 회사가 직접 저장소를 관리한다고 보면 된다. 클라우드 저장소는 아마존(Amazon)과 같은 외부 서비스 공급자가 데이터를 호스트 한다. 즉, 클라우드 공급자가 모든 하드웨어, 소프트웨어 및 기타 지원 인프라를 조달하고 자사의 데이터 센터에 설치 및 관리한다. 또한 인터넷을 통해 PC, 웹 브라우..

Tistory

[Web] HTTP 헤더란? HTTP 헤더에 담긴 정보

HTTP 헤더 HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담고 있다. 메시지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트, 서버 정보 등등... 매우 많은 정보들이 들어있다. 표준 헤더의 내용은 너무나 많기 때문에 모든 내용에 대해 궁금하다면 다음을 참고하자. List of HTTP header fields - Wikipedia HTTP header fields are a list of strings sent and received by both the client program and server on every HTTP request and response. These headers are usually invisible to the end-user and are only proc..

Tistory

[Spring] Spring MVC Framework란? Spring MVC 구조, DispatcherServlet, 핸들러 매핑, 핸들러 어댑터

Spring MVC Framework란? MVC는 Model-View-Controller의 약자로 하나의 디자인 패턴을 뜻한다. Spring MVC에 대해 이해하려면 Model, View, Controller에 대한 이해가 필수이니 해당 내용에 대해 잘 모른다면 다음을 참고하자. [Web] MVC 패턴이란? MVC 패턴의 등장 배경 MVC 패턴의 등장 배경 하나의 서블릿 혹은 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리한다면, 너무 많은 역할을 하게 되어 유지보수가 어렵다. 또한, UI를 일부 수정하는 일과 비즈니스 code-lab1.tistory.com Spring MVC Framework는 웹 애플리케이션을 빌드하기 위한 프레임워크이다. 다른 MVC Framework 들도 웹 어플리케이션을 ..

Tistory

[Spring] @RequestMapping, @GetMapping, @PostMapping에 대하여

@RequestMapping 실무에서 사용되는 대부분의 컨트롤러는 @RequestMapping을 사용한다. 컨트롤러의 메서드에 @RequestMapping 어노테이션을 붙이면 해당 URL이 호출될 때 이 메서드가 호출된다. 어노테이션을 기반으로 동작하므로 메서드의 이름을 임의로 지을 수 있다. 예를 들어 @Controller public class BoardController{ @RequestMapping("/board/article") public ModelAndView getArticle(HttpServletRequest request, HttpServletResponse response){ ... } } .../board/article URL이 호출되면 getArticle 메서드가 호출된다. 또한 ..

Tistory

[JAVA] JRE 와 JDK의 차이? Java 8, 11, 17 에 대하여

JRE, JDK란? 처음 Java를 설치하려고 보니 JRE, JDK 등이 존재하는 것을 확인할 수 있다. 둘의 차이는 무엇일까? 참고) [JAVA] 자바(JAVA)란? 자바의 특징 자바(JAVA)란? 자바는 C언어에 객체 지향적 기능을 추가하여 만든 C++과 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다. 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여 운 code-lab1.tistory.com [JAVA] JVM(Java Virtual Machine)이란? JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의..

Tistory

[Git] git status, add, commit, rm - Git 기초(3)

파일의 상태 확인하기 git status 명령어를 사용하면 파일의 상태를 확인할 수 있다. 예를 들어 빈 프로젝트에서 이 명령을 실행하면 다음과 같은 메시지를 볼 수 있다. $ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean 위의 내용은 파일을 하나도 수정하지 않았다는 뜻이다. 특히 Tracked 파일, 즉 추적 중인 파일이 하나도 수정되지 않았다는 뜻이다. 현재 작업 중인 브랜치는 master 브랜치이며 해당 브랜치에서 진행된 작업이 없다는 것을 알 수 있다. 브랜치 개념은 후에 기술하도록 하겠다. 프로젝트에 새로운 파일을 하나 만들자. 예..

Tistory

[Web] HTTP 상태코드란? 404 Not Found란?

HTTP 상태 코드란? 웹 서비스를 이용하다 보면 종종 "404 Not Found"라는 오류 메시지를 볼 수 있다. 이러한 오류 메시지는 HTTP 상태 코드를 기반으로 한다. HTTP 상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다. HTTP 상태 코드는 3자리 숫자로 이루어져 있으며 첫 번째 자리가 1부터 5까지 존재하며, 크게 아래와 같이 분류된다. 1xx (Informational) : 요청이 수신되어 처리중 2xx (Successful) : 요청 정상 처리 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error) : ..

Tistory

맥북(macOS) m1 자바(JDK 17) 다운로드 하기

맥북 m1 자바(JDK 17) 다운로드 Intel 맥북의 경우는 상관 없지만, m1은 Oracle Java 11버전을 지원하지 않는다. 따라서 Oracle Java가 아닌 다른 Java를 설치하는 식으로 Java를 사용했다. 하지만 Java 17버전 부터는 드디어 m1을 지원하게 되었다. 참고로 JRE, JDK, Java 버전에 대해 잘 모른다면 다음을 참고하자. [JAVA] JRE 와 JDK의 차이? Java 8, 11, 17 에 대하여 [JAVA] JRE 와 JDK의 차이? Java 8, 11, 17 에 대하여 JRE, JDK란? 처음 Java를 설치하려고 보니 JRE, JDK 등이 존재하는 것을 확인할 수 있다. 둘의 차이는 무엇일까? 참고) [JAVA] 자바(JAVA)란? 자바의 특징 자바(JAV..

Tistory

맥북(mac OS) 깃(Git) 설치하기

맥북(macOS)에 깃(Git) 설치하기 MacOS에 깃을 설치하기 위해서는 먼저 homebrew를 설치해야 한다. 아래 사이트에 접속하면 homebrew를 설치할 수 있다. https://brew.sh/ Homebrew The Missing Package Manager for macOS (or Linux). brew.sh Install Homebrew의 명령어를 복사한 뒤 mac의 터미널 창에 붙여넣기해서 실행시켜주면 끝이다. 나는 sudo access를 하기 위해 비밀번호를 입력하라고 나와서 노트북 비밀번호를 입력해줬다. 이후 터미널에 brew --version 명령어를 이용해 homebrew가 잘 설치되었는지 확인해보자. 위와 같이 버전이 잘 뜨면 설치가 잘 된 것이다. brew install gi..

Tistory

[Git] Git 저장소 만들기 git init과 git clone - Git 기초(1)

Git 저장소 만들기 Git 저장소를 만드는 방법은 크게 두 가지가 존재한다. 1. 아직 버전관리를 하지 않는 로컬 디렉토리 하나를 선택해서 Git 저장소를 적용하는 방법 2. 다른 어딘가에서 Git 저장소를 clone 하는 방법 기존 디렉토리를 Git 저장소로 만들기 버전관리를 하지 않던 기존 프로젝트를 Git으로 관리하고 싶다면 프로젝트의 디렉토리로 이동한 후 다음과 같은 명령을 실행한다. Mac, Linux 의 경우 터미널로 다음과 같이 프로젝트 경로로 이동할 수 있다. $ cd /Users/user/my_project Windows의 경우 아래와 같이 git bash를 이용할 수 있다. 프로젝트의 디렉토리에서 Git Bash Here 기능을 이용하면 터미널 창이 뜨게 된다. 이후엔 동일하게 아래와..

Tistory

[Git] Staging Area란? commited, modified, staged 상태 - Git 기초(2)

Git은 파일을 Commited, Modified, Staged 이렇게 세 가지 상태로 관리한다. 각 상태의 의미는 다음과 같다. Commited : 데이터가 로컬 데이터베이스에 안전하게 저장됨 Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 상태 Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태 Git Directory는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳으로 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 Clone 할 때 이 Git 디렉터리가 만들어진다. Working Directory는 프로젝트의 특정 버전을 Checkout한 것이다. 쉽게 말하면 내가 작업하고 있는 프로젝트의 디렉터리를 뜻한다. Git Directory는 지..

Tistory

함수형 프로그래밍(Functional Programming)이란? 함수형 프로그래밍의 특징과 장점, 한계

프로그래밍 패러다임 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고, 결정하는 역할을 한다. 이러한 프로그래밍 패러다임은 다음과 같이 크게 두 가지로 나눌 수 있다. 명령형 프로그래밍 : 프로그래밍의 상태와 그것을 변경시키는 구문의 관점에서의 연산을 설명 절차적 프로그래밍 : 프로시저(Procedure)를 이용해 순차적인 처리를 중요시 여기는 패러다임 객체 지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현 선언형 프로그래밍 : 어떻게(How) 할 것인가 보다는 무엇(What)을 할 것인가를 표현 함수형 프로그래밍 : 순수 함수(Pure Function)를 조합하고 프로그램을 만드는 방식 함수형 프로그래밍은 초창기부터 소프트웨어 개발의..

Tistory

[프로그래밍 언어론] 객체 지향 프로그래밍(OOP) vs 함수형 프로그래밍(FP) 비교

객체 지향 프로그래밍, 함수형 프로그래밍이란? 프로그래밍 패러다임은 크게 두 가지 종류로 나눠볼 수 있다. 명령형(Imperative) 프로그래밍과 선언형(Declative) 프로그래밍. 객체 지향 프로그래밍(OOP)은 명령형 프로그래밍, 함수형 프로그래밍은 선언형 프로그래밍에 속한다. 객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 프로그래밍 패러다임 중 하나이다. 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 특히, 함수형 프로그래밍은 최근 들어 각광 받는 프로그래밍 패러다임이라고 할 수 있다. 개발 속도를 높여 생산성을 높이고, ..

Tistory

EAI(Enterprise Application Integration)란?

EAI란 무엇인가? EAI(Enterprise Application Integration)은 말 그대로 기업 애플리케이션 통합이다. EAI는 데이터를 교환하고 제공하는 서비스를 호출하여 기업 내 애플리케이션 사이의 통신을 제공하는 프로세스이다. EAI가 애플리케이션을 통합하고 서로 통신을 보장하면 비즈니스를 새롭고 혁신적인 방식으로 운영할 수 있다. 쉽게 말해, 기업 내의 다양한 애플리케이션들이 서로 상호 작용하기 쉽게 도와주는 솔루션이 EAI라고 생각하면 된다. EAI의 등장 배경 전통적인 비즈니스 환경에서 애플리케이션들은 별도의 비즈니스 단위 혹은 기능 내에서 서로 독립적으로 동작하고 사용하는 데이터를 잘 공유하지 않았다. 따라서 이러한 방식은 비즈니스 간의 상호연동이 쉽지 않고 많은 시간이 걸리며 ..

Tistory

[Git] 깃(Git), 깃허브(GitHub)란? 버전 관리 시스템(VCS)이란? LVCS, CVCS, DVCS란? - Git 기초(0)

버전 관리 시스템(Version Control System)이란? 버전 관리 시스템(이하 VCS)은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내 올 수 있는 시스템이다. 많은 개발자들이 소스 코드를 관리할 때 VCS를 사용하지만, 거의 모든 컴퓨터 파일의 버전을 관리할 수 있다. VCS를 사용하면 각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트를 통째로 이전 상태로 되돌리거나 시간에 따라 수정 내용을 비교해 볼 수도 있다. 누가 문제를 일으켰는지 추적할 수 있고 누가 언제 만들어낸 이슈 인지도 알 수 있다. 또한 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다. 따라서 VCS를 이용하면 위와 같은 장점을 누릴 수 있다. VCS는 다음과 같은 종류로 세분화 된다. ..

Tistory

[Git] 윈도우10(window 10) 깃(Git) 설치하기 - Git 기초(0.5)

윈도우 10(Window 10) 깃(Git) 설치하기 1. Git 설치 파일 다운로드 윈도우 10에서 깃은 공식 홈페이지에서 다운로드할 수 있다. https://git-scm.com/downloads Git - Downloads Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp git-scm.com -..

Tistory

[JAVA] 예외 처리(Exception Handling)에 대하여, try-catch문, 오류(error)와 예외(exception)

오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 따라서 자바 개발자는 예외 처리(Exception Handling)를 통해 예외를 원활하게 처리할 수 있어야 한다. 예외 처리(Exception Handling) 자바에서는 예외를 처리하기 위해 try / catch / finally 문을 사용할 수 있다. try{ // 예외를 처리하길 원하는 실행 코드; }ca..

Tistory

백엔드 개발자가 꼭 읽었으면 하는 추천 글 리스트

백엔드 개발자가 꼭 읽었으면 하는 글 리스트 인터넷 세상에는 좋은 정보들이 정말 많다. 특히 네이버, 카카오, 라인 등 아주 우수한 개발자 분들이 정성들여 작성한 기술 블로그의 글에서는 많은 정보와 경험, 노하우를 얻을 수 있다. 내가 겪어보지 못한 트러블 슈팅을 대리로 경험할 수도 있고, 나의 진로를 결정하는데에 있어 도움이 될 수도 있다. 시간이 날때마다 유명 IT 기업들의 기술 블로그를 읽고 있는데, 한 번 읽었더라도 완전히 이해하지 못하거나 한 번더 읽고 싶은 글들을 북마크에 따로 저장해두곤 했다. 하지만 이게 너무 많이 쌓이다보니 이것을 정리할 필요성을 느꼈다. 이왕 정리하는김에, 많은 사람들이 같이 볼 수 있다면 좋겠다는 생각이 들어 내 기술블로그에 정리해본다. 카테고리를 나누어 정리하였고, ..

Tistory

[프로그래밍 언어론] 명령형(Imperative)프로그래밍과 선언형(Declarative)프로그래밍

명령형(Imperative) 프로그래밍 명령형 프로그래밍이란 프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 쉽게 설명하자면, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이라고 볼 수 있다. 이러한 명령형 프로그래밍은 "how to solve it", 즉 어떻게 그것을 해결할 것인가에 관심이 있다. 거의 대부분의 컴퓨터 하드웨어는 명령형으로 구현된다. 거의 모든 컴퓨터 하드웨어들은 기계어를 실행하도록 설계되어 있는데, 보통 이것이 명령형으로 써져 있다. 포트란, ALGOL, C언어 등이 명령형 프로그래밍 언어의 일종이다. 선언형(Declarative) 프로그래밍 선언형 프로그래밍은 보통 두 가지 뜻으로 통용된다. 첫 번째는 프로그램이 무엇을 해야 할지..

Tistory

[JAVA] Map 컬렉션 클래스에 대하여

Map 컬렉션 클래스 JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다. Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다. Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다. Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자. HashMap HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 ..

Tistory

[프로그래밍 언어론] C/C++/JAVA/Python 비교, 프로그래밍 언어 순위, C++와 Java 차이

다양한 프로그래밍 언어 소스코드 품질평가 기업인 TIOBE index에서는 평점이나 선호도를 기반으로 프로그래밍 언어의 순위를 평가하고 발표한다. 티오베 인덱스에 따르면 2022년 6월 현재 1순위는 Python이 차지하고 있는 것을 확인할 수 있다. 그 뒤로 C언어, Java, C++ 등이 위치하고 있음을 확인할 수 있다. 이처럼 1위부터 4위까지를 차지하고 있는 C, C++, Java, Python에 대하여 비교, 분석해보자. ※ 본 포스팅을 읽기 전 참고하면 좋은 글들 : [프로그래밍 언어론] 객체 지향 프로그래밍(OOP : Object Oriented Programming)란? OOP의 장단점 객체 지향 프로그래밍(OOP)과 객체(Object) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목..

Tistory

[JAVA] 제네릭(Generic)이란?

제네릭(Generic)이란? 자바에서 ArrayList와 같이 꺽쇠 안에 클래스 타입이 명시되어있는 것을 확인할 수 있다. [그림 1]은 ArrayList의 내부이다. ArrayList처럼 'E'라고 표시된 것을 확인할 수 있다. ArrayList list = new ArrayList(); ArrayList list2 = new ArrayList(); 위와 같이 ArrayList에 저장할 타입을 Integer, String 등으로 지정할 수 있다. 이처럼 데이터의 타입을 일반화(Generalize)하는 것을 제네릭(Generic)이라고 할 수 있다. 이러한 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정할 수 있다. 따라서 컴파일 시에 미리 타입 검사(Type Check)를..

Tistory

도커(Docker)란 무엇인가? 컨테이너와 가상 머신의 차이점

서버 관리의 어려움 서버를 관리하는 일은 매우 복잡하고 어려운 작업이다. 만약 서버를 개발할 때 개발 환경이 바뀌게 된다면 컴퓨터 세팅이나 프로그램 등을 처음부터 다시 설정해야 한다. 시스템 환경, 방화벽, 네트워크 설정, Dependency, 각종 개발 프로그램 설정 등... 이러한 방식은 매우 번거롭다는 문제점이 발생한다. 특히 DevOps나 MSA가 유행하면서 Micro Service들이 잘게 나뉘면서 관리가 더욱 복잡해지게 되었다. 게다가 새로운 툴은 끊임없이 나오고, 클라우드의 발전으로 설치해야 할 서버가 매우 많아지는 상황에서 서버 관리 방식의 변화가 필요했다. 이러한 상황 속 어려움을 해결해줄 도커(Docker)가 등장하게 되었다. 도커(Docker)란 무엇인가? 도커는 컨테이너 기반의 오픈..

Tistory

[프로그래머스] 카카오_보행자 천국 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/1832 코딩테스트 연습 - 보행자 천국 3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6 3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2 programmers.co.kr 풀이 정말 어려웠지만 재밌는 문제였다. 풀이법이 잘 생각나지 않지만 생각만 잘한다면 코드 길이가 매우 짧고 명료하게 해결할 수 있다. 이 문제는 DP를 이용하면 해결할 수 있다. 나는 DP 배열을 다음과 같이 정의했다. DP[0][i][j] = (i,j) 좌표에 세로로 들어오는 경우의 수 DP[1][i][j] = (i, j) 좌표에 가로로 들어오는 ..

Tistory

[JAVA] Set 컬렉션 클래스에 대하여

Set 컬렉션 클래스 Set 컬렉션 클래스는 Set 인터페이스를 구현한 클래스이다. Set 컬렉션 클래스는 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복 저장을 허용하지 않는다. 따라서 중복을 제거해야 하거나 저장 순서가 중요하지 않을 때 자주 사용되는 컬렉션 클래스이다. 이러한 Set 컬렉션 클래스에 속하는 대표적인 클래스는 다음과 같다. 1. HashSet 2. TreeSet 간단하게 이 두 가지 클래스에 대해 알아보자. HashSet 클래스 HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스이다. HashSet 클래스는 hash 알고리즘을 사용하여 검색 속도가 매우 빠르다. 이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다. H..

Tistory

아스키코드(ASCII Code)와 유니코드(Unicode)에 대하여

아스키 코드란? 아스키 코드(ASCII)는 American Standard Code for Information Interchange를 줄인 말이다. 이름 그대로 미국에서 정의한 정보 교환용 부호체계이다. 아스키 코드는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 1바이트로 구성되어 있는 아스키 코드는 8비트(==1바이트) 중 7개의 비트만 사용한다. 나머지 1비트는 Parity Bit이라고 불리는 오류 체크를 위한 비트로 사용한다. 예를 들어 이진법으로 1000001이면서 십진법으로 65는 문자 'A'를 나타낸다. 이처럼 알파벳을 포함, 영문 키보드로 입력할 수 있는 모든 기호들이 아스키 코드로 할당되어 있다. 매우 단순하고 간단하여 많은 곳에서 사용되었다. 하지만, 아스키 코드는 7개의 비트만을..

Tistory

[네트워크] NAC(Network Access Control)이란? NAC vs 방화벽(Firewall)

NAC(Network Access Control)이란? NAC의 탄생 배경 NAC는 말 그대로 네트워크 접근 제어를 뜻하는 것으로 엔드포인트(PC, 스마트폰 등과 같은 네트워크에 접속하는 모든 유무선 기기)가 네트워크에 접근하기 전 보안 정책 준수 여부를 검사하여 네트워크 사용을 제어하는 것을 말한다. 또한, NAC 시스템은 네트워크에 연결된 엔드포인트들의 여러 정보를 수집하여 엔드포인들을 분류하고 분류한 그룹의 보안 위협 정도에 따른 제어를 수행하기도 한다. 이러한 NAC는 어떻게 탄생하게 되었을까? NAC는 세계적인 컨설팅 회사인 가트너(Gartner) 그룹에서 새로운 네트워크 보안 모델을 제시한 것을 계기로 급속도로 확산 되었다. 사내망에 바이러스 같은 것이 침투하면 순식간에 사내망 전체로 퍼지게 ..

Tistory

[Java] String, StringBuffer, StringBuilder에 대하여

String 클래스는 불변이다 자바에는 String, StringBuffer, StringBuilder 클래스가 존재한다. 자바에서 String 클래스는 보통 불변(immutable)하다. 즉, 한 번 초기화되면 변하지 않는다. 혹자는 String 클래스도 변한다고 말하지만, 사실 그것은 변하는 게 아니라 새로 생성한 것뿐이다. 예를 들어, String 클래스의 concat() 메서드나 "+" 연산자를 이용해 문자열의 변화를 주더라도, 그것은 문자열이 변경됐다기보다는, 새로 생성한 것이라고 봐야 한다. 자세한 내용은 아래 게시글을 참조하면 좋다. [JAVA] 자바 String Constant Pool 이란?, String "=="와 equals의 차이 String Constant Pool이란? 아래와 같..

Tistory

아틀라시안(Atlassian)에 대하여 | Jira, Confluence, Bamboo, Bitbucket 등

아틀라시안(Atlassian)이란? 아틀라시안은 오스트레일리아의 시드니에 기반을 두고 있으며 소프트웨어 개발자들을 타깃으로 하는 전사적 소프트웨어를 만드는 기업이다. 아틀라시안에서 제공하는 유명한 제품들로는 지라(Jira), 뱀부(Bamboo), 비트버킷(Bitbucket) 등이 존재한다. 카카오와 같은 국내 유명 대기업들에서도 아틀라시안이 제공하는 소프트웨어를 많이 사용하고 있다. 내가 입사한 회사에서도 아틀라시안의 지라, 뱀부, 비트버킷 등을 이용한다. 따라서 이에 대해 포스팅해보고자 한다. 우선 우리 회사에서 주로 사용하는 제품들만 소개해보도록 하겠다. 지라(Jira) 지라는 이슈 및 작업을 관리할 수 있는 협업 툴이라고 볼 수 있다. 큰 아이디어를 사용자 스토리, 이슈 및 작업으로 팀 전반에서 관..

Tistory

[JAVA] Java Collections Framework에 대하여

Java Collections Framework란 Java Collections Framework는 재사용이 가능한 Collection 자료 구조를 구현하는 클래스 및 인터페이스들의 집합이다. 간단히 말해 여러 가지 자료 구조들을 미리 만들어놓고 지원하는 라이브러리라고 생각할 수 있다. Java Collections Framework는 데이터를 저장하는 자료 구조에 따라 다음과 같은 주요 인터페이스를 정의한다. 1. List 인터페이스 2. Set 인터페이스 3. Map 인터페이스 여기서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속 받지만 Map 인터페이스는 구조상의 차이로 별도로 정의한다. 따라서 List 와 Set 인터페이스의 공통적인 부분은 Collection 인터페이스..

Tistory

[JAVA] List 컬렉션 클래스에 대하여

List 컬렉션 클래스 List 컬렉션 클래스는 List 인터페이스를 구현한 클래스이다. List 컬렉션 클래스는 객체를 순차적으로 저장한다. 객체를 인덱스로 관리하기 때문에 List 컬렉션에 객체를 추가하면 인덱스가 자동으로 부여된다. 이 인덱스를 이용해 객체를 검색하고 삽입, 삭제할 때 사용한다. 이러한 List 컬렉션은 요소의 저장 순서가 유지되고, 같은 요소의 중복 저장을 허용한다는 특징을 가진다. List 인터페이스에서 공통적으로 제공하는 주요 메서드는 다음과 같다. 메서드 설명 boolean add(E e) 해당 리스트(list)에 전달된 요소를 추가 void add(int index, E e) 해당 리스트의 특정 위치에 전달된 요소를 추가 void clear() 해당 리스트의 모든 요소를 제..

Tistory

2022 상반기 라인플러스 공채 1차 면접 후기

라인플러스 1차 면접 후기 2022 상반기 라인플러스 공채 필기테스트를 합격하고 1차 면접을 보게 되었다. 1차 면접 일정은 4월 18일(월) ~ 5월 2일(월) 기간 중 하루에 약 1시간가량 면접을 보게 된다. 나는 운이 안 좋게도(?) 4월 18일 첫째 날에 면접을 보게 되었다 ㅠㅠ 아무래도 가장 먼저 면접을 보기 때문에 다른 지원자들에 비해 준비할 시간이 매우 촉박했다. 면접 준비는 CS 기초 지식들 복습, 예상 질문 연습, 스프링 및 JPA 기술 복습 등을 했다. 실제 면접 날 ZOOM을 이용하여 면접을 진행했다. 면접관은 총 3분이 들어오시고, 3대 1 면접을 진행하게 된다. 나는 Media Service Server Engineer 직무를 선택했는데, 해당 부서의 실무진 분들이 들어오셨다. 면..

Tistory

2022 상반기 LG전자 VS연구소 채용연계형 인턴 전형 후기

서류전형 이번 2022 상반기 LG전자 VS연구소 공채는 서류 전형이 존재하지 않았다. 따라서 모든 사람이 지원하기만 하면 서류전형은 통과되었다. 코딩테스트 및 인적성 나는 LG전자 뿐만 아니라 LG유플러스, LG CNS도 지원했다. 특이한 점은 3곳 중 1곳만 인적성 테스트를 봐도 다른 기업들도 모두 같은 결과를 공유한다는 것이다. 총 3번의 인적성을 보지 않아도 되어 매우 편리했다. 코딩테스트는 총 3개의 문제를 풀게 된다. 난이도는 그렇게 어렵진 않았으나, 3번 문제가 조금 난이도가 있었다. 문제를 알려줄 순 없지만, 평소 코딩테스트를 열심히 준비했다면 무난하게 풀 수 있는 수준이였다. 인적성 테스트는 딱히 준비하지 않았다. 모든 문제에 솔직하게 대답하였다. 다행히 코딩테스트 및 인적성 전형은 통과..

Tistory

2022 상반기 LG CNS 신입 채용 후기

서류 전형 LG CNS의 서류는 작성하기 수월했다. 자기소개서의 문항이 2문항으로 많지 않고, 글자 수도 많지 않기 때문에 자기소개서 작성에 대한 부담을 많이 낮춰준 것 같다. 자기소개서 문항은 다음과 같았다. 1. My Competency 지원분야와 관련된 구체적인 지식이나 경험을 기술해주십시오. 2. LG CNS에 지원한 동기와 입사 이후 꿈꾸는 것은 무엇인가요? 다른 회사들에서도 많이 물어보는 내용이기 때문에 작성하는데 큰 어려움은 없었다. 코딩테스트 및 인적성 LG CNS의 코딩테스트는 총 3문제를 180분간 풀게 된다. 문제에 대해 서술할 순 없지만, 난이도는 그렇게 어렵진 않은 편이다. 주로 구현 위주의 문제가 나왔고, 평소 코딩테스트를 열심히 준비했다면 어렵지 않게 해결할 수 있다. 인적성 ..

Tistory

2022 상반기 현대IT&E(현대 아이티앤이) 신입사원 채용 합격 후기

서류 전형 & AI 면접 검사 현대 아이티앤이는 다음과 같은 4가지 항목에 대해 자기소개서를 작성해야 한다. 1. 현대백화점그룹이 지향하는 4가지 실천가치(열정/소통/창의/파트너십 중 택 1)와 부합하는 본인의 강점과 경험을 기술하여 주십시오 2. 본인이 지원하는 직무에 있어 다른 지원자와는 차별화된 역량 및 그와 관련된 경험 혹은 경력을 기술하여 주십시오. 3. 기존과 다른 새로운 변화를 시도했던 경험과 그를 통해 배운 점이 무엇인지 기술하여 주십시오. "새로운 기술 습득의 중요성" 4. 당사 지원동기와 입사 후 포부를 기술하여 주십시오. 1번이 조금 까다로웠지만, 나머지 문항은 일반적으로 자기소개서에 작성하는 항목이었기 때문에, 어렵지 않게 작성할 수 있었다. 서류 전형을 통과하면 AI 면접을 진행하..

Tistory

[Web] MVC 패턴이란? MVC 패턴의 등장 배경

MVC 패턴의 등장 배경 하나의 서블릿 혹은 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리한다면, 너무 많은 역할을 하게 되어 유지보수가 어렵다. 또한, UI를 일부 수정하는 일과 비즈니스 로직을 수정하는 일은 변경 시점이 다를 가능성이 매우 높다. 따라서 변경의 라이프 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기 좋지 않다. 특히, JSP 같은 뷰 템플릿은 화면을 렌더링 하는데 최적화 되어 있기 때문에 이 부분의 업무만 담당하는 것이 좋다. MVC 패턴을 사용하면 JSP나 서블릿으로 처리하던 것을 컨트롤러,모델,뷰라는 영역으로 서로 역할을 나눠 처리할 수 있다. 참고 : [Web] 서블릿(Servlet)이란? 서블릿 컨테이너란? [Web] 서블릿(Servlet)이란? 서블릿 컨..

Tistory

[백준] 16500번 문자열 판별 (자바 풀이)

문제 https://www.acmicpc.net/problem/16500 16500번: 문자열 판별 첫째 줄에 길이가 100이하인 문자열 S가 주어진다. 둘째 줄에는 A에 포함된 문자열의 개수 N(1 ≤ N ≤ 100)이 주어진다. 셋째 줄부터 N개의 줄에는 A에 포함된 단어가 한 줄에 하나씩 주어진다. A에 www.acmicpc.net 풀이 이 문제는 아래와 같이 DP를 사용하여 해결할 수 있다. 1. A에 있는 문자열을 HashSet 자료구조에 모두 저장한다. 2. S의 뒷자리부터 0까지 순서대로 문자열을 substring으로 잘라 A에 속해있는지 확인한다. ex) t, st, est, test, ntest, ontest, contest ..... 3. 만약 substring이 A에 속해있다면 해당 ..

Tistory

2022 상반기 라인플러스 공채 필기테스트 후기

라인 필기테스트 후기 2022 상반기 라인플러스 공채에서 코딩 테스트를 합격하고 필기테스트를 보게 되었다. 코딩 테스트에 이어 필기테스트까지 준비하느라 조금 힘들었지만 그래도 열심히 준비했다! 필기테스트에서 나온 문제에 대해서는 규약 때문에 말해줄 순 없지만 대충 자료구조, 알고리즘, 네트워크, DB, 운영체제, 컴퓨터 구조, 프로그래밍 언어 등 CS 기초 지식들에 대해서 물어보는 시험이였다. 필기테스트 준비는 학부 시절 공부했던 PPT 자료들과 전공 서적들, 그리고 내가 정리한 블로그 글들을 위주로 공부하였다. 필기테스트는 4월 2일(토) 오전 10시 ~ 오전 11시 30분까지 총 1시간 30분을 보았다. 인터넷 검색이나 자료를 참고할 수 없다. 화상 감독을 실시한 상태로 시험을 보게 된다. 난이도는 ..

Tistory

[백준] 1522번 문자열 교환 (자바 풀이)

문제 https://www.acmicpc.net/problem/1522 1522번: 문자열 교환 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 www.acmicpc.net 풀이 이 문제는 아이디어가 매우 중요하다. 알고리즘 분류에 슬라이딩 윈도우로 표시되어 있는 것을 보고 힌트를 얻었다. a가 연속적이여야 한다는 말은 a가 a의 개수 만큼 연속적으로 위치해야 한다는 뜻이다. 예를 들어, "ababa" 라는 문자열이 있다면, a가 3개이므로 "aaabb", "baaab", "bbaaa".... 등 a가 3개 연속적으로 위치해야한다. 따라서, 인덱스 0 부터 끝까지 ..

Tistory

[자료구조] B-트리(B-Tree)란? B트리 그림으로 쉽게 이해하기, B트리 탐색, 삽입, 삭제 과정

B- 트리란? 보통 B 트리라고 하면 B- 트리를 의미한다. B 트리는 트리 자료구조의 일종으로 이진트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다. 이러한 B 트리의 다음과 같은 특징을 그림과 함께 알아보자. 1. 노드에는 2개 이상의 데이터(key)가 들어갈 수 있으며, 항상 정렬된 상태로 저장된다. [그림 1]처럼 한 노드에 2개, 3개의 데이터가 들어가 있을 수 있으며, 항상 정렬된 상태로 저장된다. 2. 내부 노드는 M/2 ~ M개의 자식을 가질 수 있다. 최대 M개의 자식을 가질 수 있는 B 트리를 M차 B트리라고 한다. [그림 1]은 3차 B트리를 나타낸다. 즉, 3차 B트리의 리프 노드를 제외한 내부 노드는 1개~3개의 자식을 가질 수 있다. 3..

Tistory

[백준] 1941번 소문난 칠공주 (자바 풀이)

문제 https://www.acmicpc.net/problem/1941 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 풀이 이 문제는 단순히 BFS, DFS를 사용하면 해결하기 매우 힘들다. 모든 자리에서 4방향을 모두 조사하는 식으로 탐색하면 경우의 수가 너무 많아 시간 초과가 발생한다. 따라서 조합을 사용하여 해결하는 편이 좋다. 25개의 자리 중 7개를 선택하는 경우의 수는 25C7 = 480700 으로 작은 편이다. 1. 25개의 자리 중 7개를 뽑는다. 2. 해당 7개의 자리가 모두 상하좌우로 연결되어..

Tistory

[프로그래머스] 카카오_파괴되지 않은 건물 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/92344 코딩테스트 연습 - 파괴되지 않은 건물 [[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6 programmers.co.kr 풀이 이 문제는 정말 재밌는 문제였다. 문제에 나온대로 그냥 덧셈을 모두 하게 되면 시간초과가 발생할 수 밖에 없다. N*M배열에 K개의 명령이 있을 때 O(KNM)이라는 시간복잡도가 발생하기 때문이다...

Tistory

[백준] 2210번 숫자판 점프 (자바 풀이)

문제 https://www.acmicpc.net/problem/2210 2210번: 숫자판 점프 111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다. www.acmicpc.net 풀이 이 문제는 간단한 BFS 문제이다. 다만 일반적인 BFS와 달리 방문 여부를 체크하지 않는다. 대신 6개의 숫자를 택하면 더 이상 탐색을 진행하면 안 되는 식으로 구현하면 된다. 나는 다음과 같은 Node 클래스를 만들어서 큐의 원소로 사용했다. public static class Node{ int x; int y; String str; Nod..

1 2 3 4