본문 바로가기

전체 글

(54)
AWS VPC, Region과 Zone VPC 논리적으로 격리된 가상 네트워크 ‘네트워크’ 와 유사한 개념 Subnet VPC의 IP 주소 범위이다. 하나의 서브넷은 하나의 Availability Zone에만 있을 수 있다. VPC와 Subnet의 IP주소 할당 AWS에서는 VPC (Virtual Private Cloud)와 Subnet을 설정할 때 CIDR 표기법을 사용하여 IP 주소 범위를 지정한다. VPC를 생성할 때, 전체 CIDR 블록을 정의한다. 10.0.0.0/16 이라는 CIDR 블록을 VPC에 할당한다. 이 VPC는 65,536개(2^16)의 IP 주소를 가질 수 있다. VPC 내에서 Subnet을 생성할 때, 각 Subnet에 대한 CIDR 블록을 정의한다. 각 Subnet의 CIDR 블록은 VPC의 CIDR 블록 내에 있다..
Restful API 등장 배경 2000년에 Roy Fielding의 박사 학위 논문에서 처음 제안되었습니다. 그는 이 논문에서 웹을 운영하는 기본 원칙을 명시하고, 이를 REST (Representational State Transfer)라고 명명했습니다. 이 원칙들은 HTTP와 같은 기존 프로토콜을 사용하여 웹 서비스를 설계하는 방법을 제시하였습니다. 그 후 웹의 발전과 함께 RESTful API는 점점 더 인기를 얻기 시작했습니다. 이는 RESTful API가 웹의 자원을 효과적으로 사용하며, 간단하고 직관적인 인터페이스를 제공하기 때문입니다. 또한, RESTful API는 상태를 저장하지 않는 설계로 인해 확장성이 뛰어나, 대규모 시스템에서도 효과적으로 동작합니다. 따라서 RESTful API는 2000년대 초반부터 ..
GitHub Actions을 이용한 Docker 이미지 빌드 및 AWS EC2 배포 자동화 사전준비 AWS AWS EC2 인스턴스 생성 AWS EC2 SSH 보안 연결 허용 AWS EC2의 키페어 생성 AWS EC2에 도커 설치 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install ..
예외처리 예외처리 Java에서 모든 에러와 예외는 Throwable 클래스의 하위 클래스입니다. Throwable 클래스는 Java에서 발생할 수 있는 모든 유형의 문제를 나타내며, 이는 두 개의 주요 하위 클래스인 Error 클래스와 Exception 클래스를 가지고 있습니다. 이를 이해하면 Java에서의 예외 처리 체계를 더욱 잘 이해하고 활용할 수 있습니다. Error vs Exception Error 에러는 시스템 레벨에서 발생하는 심각한 문제를 나타냅니다. 대부분 JVM(Java Virtual Machine) 자체에서 발생하거나, 시스템 자원 부족 등과 같은 경우에 발생합니다. 에러의 예로는 OutOfMemoryError(메모리 부족), StackOverflowError(스택 오버플로우) 등이 있습니다...
SSH SSH Secure Shell 네트워크의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 하는 보안 프로토콜입니다. SSH는 암호화된 연결을 사용하여 데이터를 전송하므로 전송 중인 데이터가 액세스되거나 가로채지 않도록 보호합니다. SSH는 OSI 7계층 모델에서 애플리케이션 계층에 있습니다. SSH는 공개 키 암호화를 사용합니다 비공개 키로 암호화된 데이터는 공개 키로만 복호화할 수 있고, 반대로 공개 키로 암호화된 데이터는 비공개 키로만 복호화할 수 있습니다. SSH 연결 과정 클라이언트가 서버에 처음 연결을 요청할 때마다 발생합니다. 즉, 새로운 SSH 세션을 시작할 때마다 이런 인증 과정이 이루어집니다. 세션 생성: 클라이언트가 서버에 연결을 요청..
같은 클래스 내에서 메소드 호출 시 AOP 적용 문제 프록시 기반 AOP 프록시 기반 AOP는 AOP를 구현하는 방식 중 하나로, 런타임에 동적으로 프록시 객체를 생성하여 원본 객체에 대한 참조를 감싸고, 원본 객체의 메소드 호출 시 추가적인 로직을 적용하는 방식입니다. 이를 통해 @Transactional, @Async, @Cacheable 등의 어노테이션을 쉽게 사용할 수 있습니다. Spring 프레임워크는 AOP를 구현하는 데 주로 프록시 기반 AOP를 사용하지만, AspectJ와 같은 다른 AOP 구현도 지원합니다. AspectJ는 컴파일 타임에 AOP를 적용하는 방식으로, AspectJ 컴파일러를 사용하여 원본 코드에 직접 수정을 가하는 방식입니다. 같은 클래스 내에서 메소드 호출 시 AOP 적용 문제 같은 클래스 내에서 메소드를 호출할 때 AOP..
@Transactional 전파 전략 Spring 프레임워크에서는 @Transactional 어노테이션을 사용하여 데이터베이스 트랜잭션을 쉽게 처리할 수 있습니다. 이 글에서는 Spring에서 제공하는 @Transactional 어노테이션의 전파 전략에 대해 알아보고, 코드 예시를 통해 각 전략의 동작 방식을 살펴봅니다. 또한, @Async 어노테이션과 함께 사용되는 경우에 대해서도 설명합니다. Transactional 전파 전략 Propagation.REQUIRED (기본 전략): 현재 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 없으면 새로운 트랜잭션을 시작합니다. Propagation.REQUIRES_NEW: 항상 새로운 트랜잭션을 시작하고, 현재 진행 중인 트랜잭션 (있는 경우)은 일시 중단합니다. Propagation.S..
Immutable vs mutable, shallow copy vs deep copy Python에서 모든 것은 객체다. 변수는 객체에 대한 참조를 저장한다. 객체에 대한 참조는 해당 객체의 메모리 주소를 가리키는 포인터와 같은 역할을 한다. Python에서의 객체는 mutable과 immutable로 나눠진다. Immutable 객체와 Mutable 객체 immutable 객체 immutable (불변) 객체는 한 번 생성된 후에는 그 상태가 변경되지 않는다. 숫자: int, float 문자열: str 튜플: tuple interning python에서는 immutable 객체를 재사용하기 위해 interning이라는 최적화 기법을 사용한다. 이 최적화 기법을 통해 동일한 값을 가진 불변 객체가 여러 번 생성될 때, 하나의 객체를 생성하고 동일한 값을 참조하는 모든 변수가 이 객체를 공..