공지사항
블로그 공지
블로그 공지
공지
2024.12.31 22:03
추천 글
[AWS] VPC(Virtual Private Cloud)
[AWS] VPC(Virtual Private Cloud)
AWS
2025.04.30 21:20
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.VPC의 개념VPC를 쓰는데 여러가지 이유가 있지만, 핵심적인 이유는 딱 한가지 보안 때문이다.VPC란 가상의 네트워크 공간을 의미한다. VPC를 활용하면 외부에서 직접 접근할 수 없는 독립적인 네트워크 환경을 구성할 수 있어서, 보안적으로 안전하게 리소스(EC2, RDS 등)를 사용할 수 있다. 예를 들어, EC2 인스턴스 2대가 있다고 가정하자. 그런데 1대의 인스턴스는 인터넷에 자유롭게 접근하면서 사용하고 싶고, 나머지 1대는 좀 더 안전하고 비공개로 사용하고 싶을 수 있다. 이럴 때 VPC를 활용하면 된다. VPC는 가상의 네트워크 공간이다.따라서 네트워크 공간의 크기를 정해야한다.AWS에서 EC2, RDS..
[Spring] 스프링 컨테이너(IoC, DI 컨테이너)
[Spring] 스프링 컨테이너(IoC, DI 컨테이너)
Spring
2025.04.02 17:44
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.SRP (Single Responsibility Principle) :하나의 클래스는 오직 하나의 책임만 가져야 한다.OCP (Open/Closed Principle) :소프트웨어 요소는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.LSP (Liskov Substitution Principle) :자식 클래스는 부모 클래스의 기능을 대체할 수 있어야 한다.ISP (Interface Segregation Principle) :특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.DIP (Dependency Inversion Principle) :구체화가 아닌 추상화에 의존해야 한다. OCP..
[DB 성능 최적화] 인덱스(Index)
[DB 성능 최적화] 인덱스(Index)
MySQL
2024.08.21 00:51
이 글은 인프런의 MySQL 성능 최적화 입문/실전 (SQL 튜닝편) (박재성) 강의를 듣고 개인적으로 정리하는 글임을 알립니다.MySQL 아키텍쳐MySQL의 아키텍처를 간단하게 표현하자면 위와 같다.클라이언트가 DB에 SQL 요청을 보낸다. MySQL 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운다.어떤 순서로 테이블에 접근할 지, 인덱스를 사용할 지, 어떤 인덱스를 사용할 지 등을 결정한다.(옵티마이저가 세운 계획은 완벽하지 않다. 따라서 SQL 튜닝이 필요하다.)옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다. (DB 성능에 문제가 생기는 대부분의 원인은 스토리지 엔진으로부터 데이터를 가져올 때 발생한다. 데이터를 찾기가 어려..
[JPA] 병합(Merge)과 변경 감지(Dirty Checking)
[JPA] 병합(Merge)과 변경 감지(Dirty Checking)
JPA
2024.08.05 19:29
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.JPA(Java Persistence API)에서 변경 감지(Dirty Checking)와 병합(Merge)은 엔티티 상태 관리를 위한 중요한 개념이다. 이 두 가지는 데이터베이스와 애플리케이션 간의 동기화를 효율적으로 관리하는 데 사용된다. 결론부터 말하면 두 방법중에 변경 감지를 사용하는 것이 더 좋다. 병합병합(Merge)은 JPA에서 준영속 상태의 엔티티를 영속성 컨텍스트에 포함시키고, 해당 엔티티의 상태를 데이터베이스에 반영하는 작업이다.이 과정은 데이터베이스에 이미 저장된 데이터를 수정할 때 사용된다.@PostMapping(value = "/items/{itemId}/edit")public String..
[JAVA] 상속 - 타입 변환과 다형성(매우 중요)
[JAVA] 상속 - 타입 변환과 다형성(매우 중요)
Java
2023.01.08 00:17
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.기본 타입(기본 자료형)의 타입 변환(형 변환)에는 자동 타입 변환이 있고, 강제 타입 변환이 있다.클래스에도 이러한 타입 변환이 있다.메소드 재정의(오버라이딩)와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다.다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라질 수 있다.어떤 타이어는 고속주행에 유리한 타이어이고, 또 다른 타이어는 눈길에서 미끄러지지 않고 주행할 수 있는 타이어가 있듯이 말..
[Docker] Docker Compose
[Docker] Docker Compose
Docker
2025.05.16 12:50
이 글은 인프런의 지식 공유자 박재성님과 데브위키님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.Docker ComposeDocker Copmose는여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 도구이다.도커 컴포즈는 도커 데스크탑 설치 시 기본으로 설치된다.한 번의 명령어로 여러 개의 컨테이너를 한번에 실행하거나 종료할 수 있다.로컬 개발 환경에서 활용하기 편리합니다. Docker Compose를 사용하는 이유여러 개의 컨테이너를 관리하는 데 용이여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 한 번에 관리할 수 있게 해준다. 여러 컨테이너를 하나의 환경에서 실행하고 관리하는 데 도움이 된다. 복잡한 명령어로 실행시키던 걸 간소화..
[Database] 트랜잭션 ACID, DB 연결구조와 세션
[Database] 트랜잭션 ACID, DB 연결구조와 세션
데이터베이스 이론
2024.02.27 00:59
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 트랜잭션의 기본적인 내용은 아래의 글을 참고 2023.08.20 - [Java Category/Java] - [Java] DB 트랜잭션 처리 [Java] DB 트랜잭션 처리 이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 트랜잭션 트랜잭션(transaction)은 기능 처리의 최소 단위를 말한다. 하 rebugs.tistory.com 트랜잭션 ACID ACID 속성 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전부 완료되거나 전부 실행되지 않아야 한다는 원칙이다. 즉, 트랜잭션의 연산 중 하나라도 실패하면, 이미 실행된 모든 연..
[Linux] 프로세스와 시그널
[Linux] 프로세스와 시그널
Linux
2024.11.08 20:37
프로세스 계층구조리눅스의 프로세스 계층구조는 부모-자식 관계를 기반으로 형성되며, 트리 구조로 표현된다.  부모 자식 관계새로운 프로세스는 기존 프로세스가 fork()를 호출하여 생성한다.프로세스가 생성되면 부모 프로세스의 자식 프로세스로 연결된다.모든 사용자의 최상위(최초의) 프로세스는 init 또는 systemd이다. 프로세스 계층 구조 Process 0 (Idle Process)리눅스 시스템 부팅 시 커널이 가장 먼저 생성하는 프로세스로, 메모리 관리 및 시스템 초기화 같은 커널 수준의 작업을 담당한다.시스템 부팅 중 커널의 초기화를 수행.이후 사용자 영역의 첫 프로세스인 프로세스 1(init)을 생성.모든 초기화가 완료되면, Idle Process로 전환되어 CPU의 유휴 상태를 관리.PID 0이..
[Ubuntu] ssh 원격접속 보안 강화
[Ubuntu] ssh 원격접속 보안 강화
서버 구축기
2024.11.29 10:53
최근에 개인 서버를 마련했다. 이 서버에 내 개인 프로젝트를 구동시킬 예정인데, 보안이 신경쓰여 내가할 수 있는 방법을 최대한 써서 보안을 강화하려고 한다. 아래의 내용을 따라하면 다음과 같은 보안적인 이점이 있다.SSH 포트번호 변경root 계정 SSH 접속 비허용RSA를 이용한 공개키 기반 인증허용된 포트만 열어둠(UFW)비정상적인 접근 차단 및 로깅(fail2ban)SSH 2단계 인증(2FA) 서버 환경은 Ubuntu 24.04 LTS 버전에서 이뤄졌다는점 참고 바랍니다. SSH 포트번호 변경ssh 설정파일을 변경해서 포트번호를 바꾸어햔다.sudo nano /etc/ssh/sshd_configPort 부분에 주석이되어있을 텐데 주석을 해제하고 원하는 포트번호로 바꾼다. sudo nano /lib/s..
인기 글
[Linux / Ubuntu] VMware Tools 수동 설치
[Linux / Ubuntu] VMware Tools 수동 설치
Linux
2024.03.28 18:37
나의 가상머신 환경에서는 아래와 같이 reinstall VMware Tools 버튼이 비활성화되어있다.(처음 설치부터 이랬음) 참고로 VMware Fusion 13.5 버전 사용중 (또한 우분투 GUI) 폭풍 구글링 결과 https://www.liquidweb.com/kb/how-to-install-vmware-tools-ubuntu/ 이 사이트를 참고하여 해결하였다. 방법 #1: Open VM Tools 패키지를 사용하여 VMware Tools 설치 1. 패키지 정보 업데이트 sudo apt-get update 2. GUI 기반 Ubuntu에 VMware Tools 설치 sudo apt-get install open-vm-tools-desktop 3. 머신 재부팅 sudo reboot 4. 설치된 VM..
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
Git & GitHub
2023.12.27 00:11
본 게시글은 모두의 git,github(저자 : 강민철)의 내용을 개인적으로 정리하는 글입니다. 브랜치란? 브랜치는 마치 줄기에서 뻗어 나오는 나뭇가지와 같이 버전을 여러 흐름으로 나누어 관리하는 방법이다. 브랜치는 버전의 분기이다. 작업을 분기하고 싶을 때 브랜치를 나누면 된다. 버전을 나누어 관리하는 것은 아래의 3단계로 버전을 관리하는 것을 의미한다. 브랜치를 나눈다. 각자 브랜치에서 작업한다. (필요할 경우) 나눈 브랜치를 합친다. 브랜치 나누고, 합치기 깃이 제공하는 가장 기본적인, 최초의 브랜치를 master 브랜치라고 한다. 가령 로컬 저장소를 만들고, 커밋 세 개를 만들었다고 가정하자 이 커밋 모두는 master 브랜치에 속한다. master 브랜치에 만들어진 세 커밋을 master 1번 ..
Visual Studio(비주얼 스튜디오) 2022 설치부터 기본 설정까지
Visual Studio(비주얼 스튜디오) 2022 설치부터 기본 설정까지
C, C++
2022.12.20 06:12
Visual Studio2022를 설치하는 방법과 기본 설정에 대해 자세히 알아보겠습니다! 차근차근 아래의 내용을 순서대로 따라오시면 무사히 설치를 완료하실 수 있습니다. 비주얼 스튜디오 다운로드 먼저 아래 사이트를 접속합니다. https://visualstudio.microsoft.com/ko/vs/whatsnew/ Visual Studio 2022의 새로운 기능 | 무료 다운로드 - Visual Studio Visual Studio 2022는 Live Share, AI 지원 코드 완성 등 다양한 기능을 통해 실시간 공동 작업을 제공하는 최신 기능이 있습니다. 무료로 다운로드하세요. visualstudio.microsoft.com 빨간색으로 표시된 곳이 보이시나요? Community 2022를 클릭해주..
[JSP] IntelliJ 에서 JSP 개발환경 만들기
[JSP] IntelliJ 에서 JSP 개발환경 만들기
JSP
2024.01.08 00:26
개발 환경 windows 11 pro jdk : 17.0.9 Apache Tomcat : 10.1.17 intelliJ : 2023.3.2 IntelliJ에서 JSP 개발환경 초기 설정 인텔리제이를 실행하고 프로젝트를 만든다. 우측 상단에 돋보기 버튼을 누른다. add framework support 를 검색하고 클릭한다. Java EE - web applition을 체크하고 Create web.xml 도 체크하고 ok를 누른다. 이후 우측 상단의 current file 의 드랍다운 박스를 눌러서 Edit configurations...를 누른다. 아래와 같은 화면이 나오면 왼쪽 상단의 + 버튼을 누른다. 이후 Tomcat Server - Local을 누른다. Application server에서 Con..
IntelliJ에서 Database(MySQL, Oracle) 연결하기
IntelliJ에서 Database(MySQL, Oracle) 연결하기
기타
2024.01.09 00:01
개발 환경 windows 11 pro jdk : 17.0.9 mysql : 8.0.35 oracle : 19.3.0 intelliJ : 2023.3.2 데이터베이스 연결하기 우측 상단의 톱니바퀴 모양을 클릭하고 Project Structure 클릭 Libraries - +버튼 - Java 클릭 JDBC가 있는 폴더에서 jar 파일 클릭 mySQL, Oracle 각각 JAR이 다르니 검색해서 버전에 맞는거 다운로드 하세요 프로젝트 선택후 ok 버튼 클릭 정상적으로 추가된 것을 확인했으면, ok 버튼이나 apply 버튼 클릭 이제 데이터베이스와 연결할 준비가 끝났다. 또 다른 방법 우측 끝에서 Database 아이콘 클릭 + 버튼 클릭 Data Source - 원하는 데이터 베이스 클릭 MySQL - MyS..
최신 글
[Redis] 스프링에 레디스 추가
Redis2025.06.08 00:31[Redis] 스프링에 레디스 추가

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.스프링에 레디스를 도입해서 간단한 게시판 서비스의 조회 성능을 개선하는 코드 기본적인 애플리케이션 설정application.yml# local 환경spring: profiles: default: local datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true data: redis: host:..

[Spring] CQRS 패턴
Spring2025.06.07 00:05[Spring] CQRS 패턴

CQRS는 CUD(Command)와 R(Query)를 분리하는 것이다.기존의 CRUD 서비스 구조는 보통 하나의 클래스나 API에서 create, read, update, delete 전부 처리한다.CQRS는 이를 명확히 나눠서,Command (명령): create, update, deleteQuery (조회): read이 두 가지를 서로 다른 책임으로 나누는 패턴이다. CQRS 패턴을 도입하는 이유역할이 다르기 때문Command는 상태를 바꾸는 작업.Query는 상태를 읽기만 함. 성능 최적화 가능예를 들어 Command는 트랜잭션 안전성과 정합성 위주로, Query는 빠르게 결과만 제공하도록 설계할 수 있다. 코드 유지보수 편리로직이 복잡해질수록 읽기와 쓰기를 분리하는 게 유리하다. CQRS는 단순히..

[Github Actions] 기본 문법과 배포 자동화 방법
CI & CD2025.06.06 00:03[Github Actions] 기본 문법과 배포 자동화 방법

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.기본 문법GitHub Actions에서 가장 중요한 파일은 deploy.yml인데, 이 파일의 위치는 git으로 관리되는 최상위 루트의 .github/workflows/ 폴더에 저장되어 있어야 한다.-> 최상위루트/.github/workflows/deploy.yml(deploy.yml 의 이름은 변경해도 상관없다.)# Workflow의 이름# Workflow : 하나의 yml 파일을 하나의 Workflow라고 부른다. name: Github Actions 실행시켜보기# Event : 실행되는 시점을 설정# main이라는 브랜치에 push 될 때 아래 Workflow를 실행on: push: branches: ..

[부하 테스트] 트래픽 증가에 따른 시스템 설계 및 확장
부하 테스트2025.06.05 00:05[부하 테스트] 트래픽 증가에 따른 시스템 설계 및 확장

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.부하 테스트를 하면서 목표로 설정해놓은 Throughput, Latency를 달성하기 위해 성능 개선을 해야 한다.병목 지점이 어디서 발생하느냐에 따라 성능 개선의 방법이 달라진다. 병목 지점에 따른 성능 개선EC2(WAS)가 병목 지점일 경우애플리케이션 로직에서 비효율적인 부분 개선정적 파일 서버(S3, Cloudfront) 분리로드밸런서(ELB)를 활용해 수평적 확장수직적 확장 RDS(데이터베이스 서버)가 병목 지점일 경우비효율적인 쿼리 개선 (인덱스 활용, SQL문 튜닝, 역정규화 등)수직적 확장읽기 전용 데이터베이스(Read Replica) 도입캐시 서버 도입주의위 순서가 절대적인것은 아니다. 일반적으로 ..

[부하 테스트] 병목지점 판단
부하 테스트2025.06.04 00:42[부하 테스트] 병목지점 판단

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.모니터링과 병목지점부하 테스트 과정 중에 성능을 개선하려면 병목 지점을 먼저 파악해야 한다.병목 지점을 파악하기 위해서는 각 컴퓨터의 CPU 사용률과 메모리 사용률과 같은 값들을 지속적으로 확인할 수 있어야 한다.여기서 얘기하는 컴퓨터는 로드 밸런서(ELB), 백엔드 서버(EC2), DB(RDS), 캐시(ElastiCache) 등을 얘기한다. 무언가 요청을 받아서 처리하는 형태의 서비스는 전부 컴퓨터에서 처리하기 때문이다.컴퓨터가 무언가를 처리하려면 CPU와 메모리 같은 자원이 필요하다. 만약 컴퓨터가 처리할 수 있는 최대한의 요청을 처리하고 있다면, CPU 사용률 또는 메모리 사용률과 같은 값이 100%에 가까운..

[부하 테스트] k6 설치 및 사용 방법
부하 테스트2025.06.03 00:53[부하 테스트] k6 설치 및 사용 방법

k6는 사용자인척 요청을 보내는 도구이다.원래라면 사용자가 직접 서비스에 요청을 보내야 하는데, k6는 여러 명의 사용자를 대신해서 요청을 보내는 도구이다. k6 설치(맥 기준)맥에서 k6를 설치하는 방법은 매우 간단하다.brew install k6 설치가 완료되고 k6를 입력하고 아래와 같은 화면이 나타났다면 정상적으로 설치된 것이다. read: connection reset by peer윈도우나 맥에서 k6를 사용하다보면 read: connection reset by peer 문제를 마주할 수 있다.이는 MacOS에서 소켓에 제한을 걸어서 발생되는 문제이다.이는 3가지 방법으로 파훼할 수 있다.1. ulimit -n 명령어 사용ulimit -n 65535​소켓의 수를 임시적으로 65535개로 늘리는 ..

[부하 테스트] 처리량(Throughput), 지연 시간(Latency), 병목 지점(Bottleneck Point)
부하 테스트2025.06.02 16:31[부하 테스트] 처리량(Throughput), 지연 시간(Latency), 병목 지점(Bottleneck Point)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다. 처리량(Throughput)부하 테스트에서 서비스가 1초당 처리할 수 있는 트래픽 양을 보고 Throughput이라고 부른다.단위는 TPS(Transaction Per Seconds, 1초당 처리한 트랜잭션의 수)를 많이 활용한다.만약 서비스가 1초에 최대 100개의 API 요청을 처리할 수 있다면, 이 서비스의 Throughput은 100 TPS라고 말한다.TPS VS RPS(Request Per Second)RPS는 요청(Request) 기준이다.단순히 서버가 1초에 받은 HTTP 요청 수를 의미한다.예: /login, /products, /users/1 같은 API 호출 1건당 1 RPS로 측정된다.TPS는..

[ElasticSearch] 검색어 추천 기능(search_as_you_type)
ElasticSearch2025.06.02 08:43[ElasticSearch] 검색어 추천 기능(search_as_you_type)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.쿠팡 서비스에 들어가서 검색 창에 글자를 입력하면 글자에 해당하는 검색어를 추천해준다.자동 완성 기능을 구현하는 방법에는 정말 다양한 방법이 존재한다.그 중에서 가성비가 좋은 방법인 search_as_you_type을 활용하는 내용을 다룬다. search_as_you_typeElasticsearch에서 자동 완성 기능을 쉽게 구현할 수 있게 설계된 데이터 타입이다.text 타입처럼 애널라이저(Analyzer)를 거쳐 토큰으로 분리된다.이 타입을 활용해 필드를 만들면 내부적으로 _2gram, _3gram이라는 멀티 필드(Multi Field)도 같이 만든다. _2gram, _3gramPUT /products{ "m..

[ElasticSearch] 멀티 필드(Multi Field)
ElasticSearch2025.06.02 00:09[ElasticSearch] 멀티 필드(Multi Field)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.Multi Field하나의 필드에 text와 keyword 타입을 동시에 사용하고 싶을 때 사용데이터 타입에서 text는 유연한 검색이 필요할 때 사용하고, keyword는 정확한 검색이 필요할 때 사용한다.그런데 유연한 검색과 정확한 검색 둘 다 하고 싶은 경우가 있을 수 있다.예를 들어, 상품 카테고리와 이름 필드에 저장된 필드 값에 대해 검색할 때는 유연하게 검색되게 하고 싶고, 정확한 비교를 통해 특정 카테고리를 기준으로 필터링을 하고 싶을 수 있다.즉, text 타입과 keyword 타입을 동시에 사용하고 싶은 경우이다. 인덱스 생성PUT /products{ "mappings": { "propert..

[ElasticSearch] 오타 허용 검색, 하이라이팅, 페이지네이션 및 정렬
ElasticSearch2025.06.01 15:21[ElasticSearch] 오타 허용 검색, 하이라이팅, 페이지네이션 및 정렬

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.fuzziness(오타 허용 검색)오타를 어느 정도 허용해서 검색하고 싶을 때 fuzziness를 활용하면 된다. 인덱스 생성 및 데이터 삽입// 인덱스 생성PUT /boards{ "mappings": { "properties": { "title": { "type": "text" } } }}// 데이터 삽입POST /boards/_doc{ "title": "elasticsearch 사용법" } 오타 허용 검색GET /boards/_search{ "query": { "match": { "title": { "query": "elastiksearc..

image