Home
pjh5365
Cancel
Java Concurrency

자바 동시성 문제 해결하기 -2 (ReentrantLock)

이전 게시글과 이어집니다. 이번에는 저번 게시글에서 소개한 synchronized 의 한계를 보완한 ReentrantLock 을 사용하여 동시성 문제를 해결해 보겠습니다. ReentrantLock 우선 ReentrantLock 에 대해 알아보겠습니다. ReentrantLock 은 자바 1.5 버전부터 추가된 클래스이며, synchronized 보...

TroubleShooting

(Troubleshooting) 자바 리플렉션 사용 시 주의 사항

오늘은 실무에서 자바 리플렉션(Reflection)에 대한 이해 부족으로 발생했던 버그와 해결 과정을 공유하고, 이를 통해 리플렉션 사용 시 주의해야 할 점에 대해 이야기해보려 합니다. 리플렉션 리플렉션(Reflection)은 자바에서 클래스의 타입을 컴파일 시점이 아닌 런타임 시점에 동적으로 분석하고 조작할 수 있도록 해주는 기능입니다. 글로만 ...

Java Concurrency

자바 동시성 문제 해결하기 -1 (synchronized)

자바의 멀티 스레드 환경에서 자주 발생하는 동시성 문제를 어떻게 해결하는지 단계별로 알아보겠습니다. 사전 지식 프로그램과 프로세스 우선 프로그램(Program)과 프로세스(Process)에 대해 알아보겠습니다. 프로그램이란 컴퓨터에서 실행할 수 있는 파일을 의미합니다. 그리고 이 프로그램을 실행시켜 컴퓨터에서 작업 중인 프로그램 상태를 프로세스라...

Nginx

Nginx와 Certbot을 활용한 SSL 적용

저번 게시글에서 Nginx를 활용하여 도메인을 적용하는 방법에 대해 알아보았다. 이번에는 Certbot을 사용하여 이전에 설정하였던 도메인의 프로토콜을 HTTP 에서 HTTPS 로 변경하는 방법에 대해 알아보겠다. Nginx 설정 우선 이전 게시글에서 설정한 Nginx 설정 파일에 Certbot이 SSL 인증서 발급을 위해 접근할 수 있도록 하는 설정...

OAuth2

OAuth2 알아보기

OAuth2? OAuth2는 권한 부여 프레임워크라고 부르며, 타사 웹 사이트나 웹이 리소스에 접근할 수 있게 허용해주는게 목적인 프레임워크이다. 종종 OAuth2를 위임 프로토콜이라고 부르기도 한다. 기본적으로 사용하는 HTTP Basic 인증을 이용한다면 모든 요청에 대해 반복적으로 자격 증명을 보내야 한다. 즉, 이 인증은 네트워크를 통해 자...

DevOps

DNS와 도메인 알아보기

웹 사이트에 접속할 때 www.naver.com 과 같이 도메인을 입력하면, 이 도메인을 실제 IP 주소로 변환하여 실제 서버로 접속시켜주는 DNS에 대해 간단히 알아보겠다. DNS? DNS(Domain Name System)은 도메인을 컴퓨터가 인식할 수 있는 IP 주소로 변환해주는 시스템으로, 인터넷의 전화번호부 역할을 한다. 즉, 사용자가 웹 브...

Nginx

Nginx를 활용하여 도메인 설정하기

도메인은 IP 주소보다 기억하기 쉽고, 변경이 필요할 때 서버 IP를 바꾸더라도 DNS만 수정하면 되므로 유지보수가 간편하다. 이 때문에 대부분의 웹사이트는 www.naver.com과 같은 도메인 기반 접근 방식을 사용한다. 이번 글에서는 Nginx를 활용한 도메인 설정 방법을 알아보겠다. 예제에서는 Spring을 사용하지만, Vue나 React와 같...

DevOps

VPC와 Subnet

VPC? VPC(Virtual Private Cloud)는 여러 클라우드 플랫폼에서 제공하는 논리적으로 격리된 네트워크 공간이다. 이를 통해 사용자만의 사설망을 만들 수 있고, 외부 네트워크와의 연결도 사용자가 직접 제어할 수 있다. Subnet? Subnet은 VPC 내부의 네트워크를 더 세분화한 것이다. 하나의 VPC안에서 여러 개의 Subn...

CI/CD

CI/CD?

CI? CI(Continuous Integration: 지속적인 통합)는 개발자가 코드를 자주 병합하고, 이 과정에서 자동화된 빌드 및 테스트를 실행하여 코드 품질과 안정성을 검증하는 과정이다. 주요 목적은 코드 변경으로 발생할 수 있는 문제를 빠르게 발견하고 해결하는 것이다. CI의 핵심 짧은 주기의 코드 커밋: 긴 주기의 커밋은 변경 사...

Docker

Docker의 진화와 내부 구조 (containerd, runc, containerd-shim의 역할)

Docker의 역사 Docker는 처음 나왔을 때, 하나의 데몬 프로세스(Docker Daemon == dockerd)가 컨테이너의 생성, 관리, 실행 등 모든 작업을 처리했다. 그러나 Docker가 인기를 얻고, 컨테이너 기술이 확장되면서 dockerd에서 모든 기능을 처리하는 것이 점점 더 복잡해졌다. 이를 해결하기 위해, Docker는 컨테이...