본문 바로가기

전체 글50

자바 정리 (4) 이 글은 자바의 정석 3판을 정리한 내용입니다. 자바의 정석 3판 ✔ 스레드(Thread) 1. 프로세스와 스레드(Process & Thread) 프로세스 : 실행 중인 프로그램, 자원(resources)[메모리, cpu, ...]과 스레드로 구성 스레드 : 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 최소한 하나의 스레드를 가지고 있다 2. 멀티 스레드 장단점 장점 시스템 자원을 보다 효율적으로 사용할 수 있다 사용자에 대한 응답성이 향상 작업이 분리되어 코드가 간결 단점 동기화(synchronization)에 주의 교착상태(dead-lock)가 발생하지 않도록 주의 각 스레드가 효율적으로 고르게 실행될 수 있게 해야 한다 프로그래밍할 때 고려해야 할 사항들이 많다 3. 스레드의 구현과 실행 T.. 2024. 2. 28.
자바 정리 (3) 이 글은 자바의 정석 3판을 정리한 내용입니다.자바의 정석 3판 ✔ 예외처리(Exception Handling)1. 프로그램 오류컴파일 에러(Compile-Time Error) : 컴파일할 때 발생하는 에러런타임 에러(Runtime Error) : 실행할 때 발생하는 에러논리적 에러(Logical Error) : 작성 의도와 다르게 동작Java의 런타임 에러에러(error)는 어쩔 수 없지만, 예외(exception)는 처리하자.에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류예외 처리의 정의와 목적(Exception Handling)정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 .. 2024. 2. 19.
자바 정리 (2) 이 글은 자바의 정석 3판을 정리한 내용입니다. 자바의 정석 3판 ✔ 객체지향 프로그래밍 OOP(Object Oriented Programming) 객체 : 모든 인스턴스를 대표하는 일반적인 용어 인스턴스 : 특정 클래스로부터 생성된 객체(new 키워드) ex) 클래스(TV설계도), 객체(TV제품) ✔ 클래스의 정의 클래스 : 데이터와 함수의 결합 서로 관련 있는 속성(데이터)과 기능(메서드)을 묶어 놓은 것 1. 선언 위치에 따른 변수의 종류 class Variables { // → 클래스 영역 시작 int iv; // 인스턴스 변수 static int cv; // 클래스 변수(static 변수) void method() { // → 메서드 영역 시작 int lv = 0; // 로컬 변수(지역 변수) .. 2024. 2. 6.
자바 정리 (1) 이 글은 자바의 정석 3판을 정리한 내용입니다.자바의 정석 3판 ✔ 자바 언어의 특징자동 메모리 관리(GC, Garbage Collection)멀티 스레드 지원다수의 라이브러리 지원운영체제에 독립적(자바 가상 머신, JVM)✔ 변수(Variable)단 하나의 값을 저장할 수 있는 메모리상의 공간 1. 변수의 초기화변수를 사용하기 전에 반드시 초기화(Initialization) 해야 한다.메모리는 여러 프로그램이 공유하는 자원이기 때문에 전에 다른 프로그램에 의해 저장된 쓰레기 값(Gargabe value)이 남아있을 수 있다.로컬(지역) 변수(Local Variable)는 읽기 전에 꼭 초기화해야 한다.(안 하면 컴파일 에러) 2. 변수의 명명 규칙변수뿐 만 아니라 자바 프로그래머들에게 권장하는 규칙들이.. 2024. 1. 22.
Ubuntu Mac OS 테마 설정 우분투 기본 디자인도 나쁘지 않지만, 역시 디자인은 개인적으로 Mac이 가장 예쁜 것 같아요! 🍎 이 글은 Shane's planet님의 블로그를 보고 진행했습니다. ✔ Ubuntu 22.04.3 LTS 환경은 우분투에서 진행하고 WhiteSur GTK Theme를 사용했습니다. 저는 전체를 적용할 수 있는 방법을 뒤늦게 알아서 하나씩 적용을 했지만 아래의 주소에서 README의 내용대로 하면 전체 적용을 할 수 있습니다. https://github.com/vinceliuice/WhiteSur-gtk-theme 1. 테마 설치 WhiteSur GTK Theme 위의 링크에서 Download에서 원하는 테마를 다운로드합니다. 저는 dark 테마를 적용했습니다. 다운로드한 파일 압축을 풀고 .themes 폴.. 2023. 12. 29.
Java 버전 관리 도구 ✔ 여러 개발 언어의 버전 관리 도구 Node.js의 nvm, Python의 pyenv 등 다른 언어에서는 필요한 버전을 손쉽게 변경하면서 사용할 수 있는 툴이 있습니다. 명령어를 사용해서 버전 목록을 확인하고, 그 버전의 이름을 설치해서 설치한 버전을 사용하기만 하면 됩니다. 그동안 Java의 경우 Oracle의 사이트에서 jdk를 다운로드하거나, OpenJDK를 다운로드하여서 환경 변수에 등록해서 사용했었습니다. Java 8을 사용하다가 Java 17을 사용해야 하는 일이 생겼는데 다운로드해서 환경 변수 작업을 하는 게 귀찮아서 Node.js의 nvm을 떠올리고 Java 버전 관리 도구를 찾아보니 바로 나왔습니다. "SDKMAN"과 "JENV"가 있는 걸 확인했고, 이 중에 저는 "SDKMAN"을 사.. 2023. 11. 18.
Ubuntu MySQL 8.0 설치 ✔ 패키지 업데이트 & 업그레이드 $ sudo apt(or apt-get) update $ sudo apt(or apt-get) upgrade ✔ MySQL Server Install $ sudo apt(or apt-get) install -y mysql-server ✔ MySQL Secure $ sudo mysql_secure_installation VALIDATE PASSWORD COMPONENT을 사용해 암호의 강도 설정을 할 수 있다. 복잡한 비밀번호 설정은 "y" | "Y" 단순한 비밀번호 설정은 "아무 키" MySQL을 설치하면 자동으로 생성되는 익명의 유저가 있다. 익명의 유저 계정을 삭제는 "y" | "Y" 삭제하지 않으려면 "아무 키" 다른 게스트들이 원격 접속으로 root 계정에 접근하.. 2023. 8. 26.
[NestJS] 파일 업로드(File upload) Multer ✔ 필요한 종속성 설치 Nest는 Express용 multer 미들웨어 패키지를 기반으로 하는 내장 모듈을 제공한다. $ npm i -D @types/multer ✔ 단일 파일 업로드 단일 파일을 업로드하려면 FileInterceptor()를 @UseInterceptors에 연결하고 @UploadedFile() 데코레이터를 사용하여 요청에서 file를 추출하면 된다. @Post('upload') @UseInterceptors(FileInterceptor('file')) uploadFile(@UploadedFile() file: Express.Multer.File) { console.log(file); } FileInterceptor()는 2개의 인수를 가진다. fieldName : multipart/fo.. 2023. 7. 25.
[NestJS] Jest 단위 테스트 Mock ✔ 필요한 종속성 설치 $ npm i --save-dev @nestjs/testing ✔ Mock Repository Repository를 Mocking 하는 이유는 서비스 계층에서 비즈니스 로직을 검증해야 하는데 Repository를 의존하고 있다. 그래서 의존하는 것에 따라 테스트가 실패할 수도 있고 성공할 수도 있다. 그러므로 비즈니스 로직에 실패하거나 성공하는 게 아닌 다른 요소로 인해 실패할 수도 있기 때문에 의존하는 것들을 가짜로 Mock으로 만들어서 의존성을 배제하여 비즈니스 로직만 테스트하게 만든다. // users/users.service.ts import { Injectable } from '@nestjs/common'; import { Repository } from 'typeorm'.. 2023. 7. 22.
[NestJS] Passport JWT 토큰 인증 구현 & 에러 핸들링 JWT(JSON Web Token)에 대한 내용은 아래의 글을 참조 JWT(JSON Web Token) 이 글은 NestJS에서 JWT, Passport-jwt를 사용하여 토큰 인증을 구현하다가 겪은 내용을 정리한 글이다. ✔ 필요한 종속성 설치 NestJS에서 JWT 토큰과 Passport-Jwt를 사용하기 위해서 먼저 필요한 종속성을 설치해야 한다. $ npm install --save @nestjs/passport passport @nestjs/jwt passport-jwt $ npm install --save-dev @types/passport-jwt ✔ 동작 흐름 로그인에 발급받은 토큰 값을 HTTP 헤더에 "Authorization: Bearer 토큰 값" 추가하고 요청 AuthGuard JW.. 2023. 7. 6.
[Docker] Redis 설치 Docker 설치는 아래 글을 참조 Docker 설치 및 명령어 정리 해당 내용은 Ubuntu 22.04.2 LTS 버전에서 진행 ✔ Docker Redis Image 다운로드 # redis 최신 버전 다운(아래의 2개가 동일함) $ docker pull redis $ docker pull redis:latest # redis 지정 버전 다운 $ docker pull redis:7.0.11 Docker Image 정상적으로 다운로드되었는지 아래의 명령어로 확인할 수 있다. $ docker images docker 명령어를 사용할 때 관리자 권한인 sudo를 사용하지 않게 권한을 주려고 하면 맨 위의 Docker 설치 및 명령어 정리 글을 참조하면 된다. ✔ Docker Redis Container 생성 .. 2023. 6. 28.
DFS (Depth-First Search) BFS가 궁금하면 아래 글을 참조 BFS (Breadth-First Search) ✔ DFS(Depth-First Search) DFS는 깊이 우선 탐색이라고도 부르며, 그래프를 탐색하는 방법 중 하나이다. 하나의 정점으로부터 시작해 차례대로 모든 정점들을 한 번씩 방문하는 것으로 즉, 시작 노드에서 출발해 인접한 노드(가까운 노드)를 먼저 탐색하고 그 정점의 최대 깊이까지 탐색을 마친 후 돌아와 다른 분기로 다시 탐색하는 알고리즘이다. 넓게 탐색하기 전에 깊게 탐색 스택 or 재귀를 사용하여 구현 모든 노드를 방문할 때 사용 ※ 중요한 점은 방문한 정점은 다시 방문하지 않아야 한다. DFS는 스택으로도 구현할 수 있지만 재귀로 구현하는 편이 더 깔끔해서 재귀로 더 많이 구현하는 것 같다. DFS와 BF.. 2023. 6. 25.