분류 전체보기 555

윈도우에서 Docker 사용하기

이번 포스팅에선 윈도우에서 도커를 사용하는 방법에 대해서 포스팅해보도록 하겠습니다. 흔히 알려지기로는 도커는 리눅스 환경에서만 동작하기 때문에 신입 기준 러닝커브가 있는 편이라고 하죠. 어? 그럼 윈도우에선 어떻게 동작하지? 바로 WSL 이라는 기술을 이용하면 됩니다. WSL은 Windows Subsystem for Linux 2 의 약자로 쉽게 말해서 윈도우에서 리눅스를 사용할 수 있게 해주는 기술입니다. 이제 WSL을 이용해서 윈도우에서 도커를 사용해봅시다. 윈도우에서 도커 설치 우선 WSL2를 다운받아야합니다. 그러기 위해선 윈도우 터미널인 power shell이라는 것을 다운받아야 하는데요. 파워 쉘은 다운받기 정말 간단합니다. 마이크로소프트 스토어에서 다운받으면 됩니다. 파워 쉘 다운 저는 이미..

DevOps/Docker 2023.06.30

프록시패턴, 데코레이터 패턴

이번 포스팅에는 프록시 패턴과 데코레이터 패턴에 대해서 알아보겠습니다. 뜬금없이 왜 프록시 패턴과 데코레이터 패턴을 공부했냐면 제가 AOP를 공부했기 때문입니다. 스프링 AOP에서 사용하는 GOF 디자인 패턴 중 데코레이터 패턴이 사용되었기 때문에 공부차 한번 구현해봤습니다. 한번 시작해보죠! 프록시 이 두 패턴을 알아보기 전에 프록시에 대해서 알아봐야 합니다. 보통 프록시는 '대리자' 라고 번역이 되고 내가 수행해야 할 일을 대신 수행해주는 존재 라고 생각하시면 됩니다. 이렇게 대신 내 일을 대신 수행해주면 무슨 이점이 있을까요? 프록시를 이용하면 얻을 수 있는 것은 두 가지 입니다. 접근 제어 (캐싱) 부가 기능 (로깅, 트랜잭션) 접근 제어 예를 들어 클라이언트가 서버에 A라는 데이터를 조회했다고 ..

Spring/Spring 2023.06.27

트랜잭션 전파 (feat. 논리 트랜잭션, 물리 트랜잭션)

이번 포스팅에선 트랜잭션 전파에 대해서 알아보도록 하겠습니다. 사실 트랜잭션 전파에 대해서는 어느정도 알고 있는 부분이 있었는데 제가 아는 수준은 "트랜잭션 전파를 이용하면 데이터 정합성을 유지할 수 있고 그 단계에는 일곱가지 (REQUIRED 외 6개) 가 있다." 그리고 각각의 전파 단계에 대해서 학습을 했는데요. 그러다 오랜만에 인프런에 들어갔는데 사놓고 안들은 강의가 있었습니다. 김영한님의 DB 접근기술 2탄이었습니다. 이걸 왜 안봤지? 싶어서 봤는데 정말 흥미로운 내용이 있었습니다. 왜 트랜잭션을 전파할 수 밖에 없었는지, 전파 도중 롤백이 일어나면 어떻게 처리하게 되는지에 대한 내용을 상세하게 알려주셨습니다. (역시 영한님!) 이번 포스팅에선 그 내용에 대해서 제 언어로 정리하기 위해 적는 포..

JPA/JPA 2023.06.25

JPA 엔티티 생명주기

이번 포스팅에선 JPA에서 엔티티의 생명주기에 대해서 알아보도록 하겠습니다. 스프링의 빈 생명주기를 공부해 보신 분들이라면 JPA의 엔티티 생명주기라는 말을 들으실 때 대충 감이 잡히실겁니다. 엔티티의 생명주기란 엔티티를 사용할 수 있는 다양한 상태라는 것을 말이죠. 스프링 빈 생명주기에 객체 생성, 의존 설정, 초기화, 사용, 소멸의 생명 주기를 가지고 있다면 JPA의 엔티티는 Trasient (비영속), Managed (영속), Detached (준영속), Removed (삭제) 상태가 있습니다. 한번 자세히 알아보죠. JPA 엔티티 생명주기 New / Transient (비영속) 엔티티 객체가 생성된 상태를 말합니다. 이 상태를 New 혹은 Transient 상태라고 합니다. 이 상태는 객체가 아직..

JPA/JPA 2023.06.21

JPA 복합 기본 키 (Composite Primary Key)

이번 포스팅에선 JPA의 복합 기본 키에 대해서 알아보겠습니다. 사실 이 내용을 공부하면서 이게 대체 왜 필요하지..? 싶은 내용이었습니다. 도저히 실제 애플리케이션에서 사용할 것 같지 않은 개념이라 조금 당황했지만 이것도 엄연히 JPA의 스펙 중 하나이기 때문에 놓치고 싶지 않았습니다. 한번 어떤 내용인지 알아보죠! JPA 복합 기본 키 우선 복합 기본 키라는게 어떤 것인지부터 알아야겠습니다. 복합 기본 키 혹은 복합 키로 잘 알려진 영어로 Composite Primary Key는 컬럼들이 한 행이 보장되는 유니크함을 결합될 때 테이블 안에서 각각의 행들이 유니크하게 식별되는 두개 이상의 키입니다. 이건 왜 사용할까요? 우리가 JPA를 사용할 때를 생각해볼 필요가 있습니다. 만약 이름이 홍길동인 사람을..

JPA/JPA 2023.06.21

JPA 2차 캐시 (feat. 1차 캐시)

이번 포스팅에서는 JPA의 2차 캐시에 대해서 알아보도록 하겠습니다. JPA에서 우리가 익숙한 것은 1차 캐시입니다. 보통 영속성 컨텍스트로 많이 알려진 1차 캐시는 JPA가 동작하면서 필요한 데이터들을 모아두는 공간입니다. 보통 1차 캐시는 트랜잭션별로 저장하기 때문에 휘발성이 강한 캐시 저장소입니다. 반면 2차 캐시는 1차 캐시와 다르게 글로벌하게 적용되는 캐시입니다. 애플리케이션마다 적용되는 캐시로서 애플리케이션이 종료될 때까지 유지되는 캐시입니다. 그럼 이제 본격적으로 2차 캐시에 대해서 알아볼까요? 2차 캐시 2차 캐시란 무엇인가? 2차 캐시는 앞서 설명했듯이 애플리케이션 단위의 캐시로 애플리케이션이 종료될 때까지 유지됩니다. 이 말은 멀티 스레드 환경에서도 글로벌하게 사용되는 캐시라고 이해할 ..

JPA/JPA 2023.06.20

JPA의 동시성 컨트롤 (낙관적 락, 비관적 락)

이번 포스팅에선 JPA가 어떻게 동시성 문제를 컨트롤하는지에 대해서 포스팅해보겠습니다. 개인적으로 동시성 문제는 애플리케이션에서 일어날 수 있는 가장 최악의 버그라고 생각합니다. 그 이유로는 RuntimeException이 발생하지 않는다. 컴파일러도 모른다. 심각한 장애를 야기한다. (재고가 1개 있는데 3명이 1개씩 주문하면 재고가 0이 되면서 결제 로그가 세개 찍힘) 때문에 이러한 동시성 문제에 대해 개발자가 반응하고 테스트 케이스를 통해 동시성 문제를 잡아내야한다고 생각합니다. 물론 쉽지는 않지만요. JPA에선 이러한 동시성 문제를 해결하기 위해 두 가지 Locking 매커니즘을 제공합니다. 이제 본격적으로 시작해보죠! Locking 매커니즘 JPA는 Locking 매커니즘으로 두 가지를 제공하는..

JPA/JPA 2023.06.19

JPA가 트랜잭션을 관리하는 방법

JPA는 자바 진영에서 사용하는 대표적인 ORM 중 하나입니다. JPA로 인해 자바 개발자들이 데이터베이스 중심에서 객체 중심으로 설계 방식을 전환할 수 있었다고 개인적으로 생각하고 있는데요. 저는 여태껏 JPA를 사용하는데에만 집중을 했습니다. 그래서 JPA가 가진 특징들에 대해서는 등한시 한 느낌이 있습니다. 하지만 제 공부 방식은 항상 써보고 익숙해지면 개념을 공부하는 느낌이었어서 지금이라도 주요 개념들에 대해서 공부해보고자 오랜만에 JPA 카테고리에 글을 썼습니다. 이번 포스팅에선 JPA가 트랜잭션을 관리하는 방법과 JPA에서 제공하는 다양한 기능들에 대해서 소개해드리고자합니다. JPA가 트랜잭션을 관리하는 방법 JPA는 트랜잭션을 프록시를 이용해서 관리합니다. 여기까지는 보통 알고 있는 내용일겁..

JPA/JPA 2023.06.18

도커를 이용해 MySQL 레플리케이션 구조 구현해보기

이번 포스팅에선 도커를 활용해 MySQL 서버를 레플리케이션 (복제) 하여 DB 부하를 줄여보겠습니다. 제 프로젝트 컨셉상 레플리케이션이 필요한 구조이긴 합니다만... 조금 의구심이 들긴 합니다. 데이터베이스 서버를 여러대 두는게 아니고 한 인스턴스에서 MySQL 서버 여러개 둔다고 DB 부하가 줄어들지는 모르겠습니다. 그래도 그냥 새로운거 도전한다고 생각하고 한번 해보도록 하겠습니다. 레플리케이션 레플리케이션이 뭔지 먼저 짚고 넘어가도록 하죠. 데이터베이스 레플리케이션이란, 데이터베이스 클러스터링에서 발전된 형태로서 DB 스토리지와 DB 서버가 하나의 쌍을 이뤄 원래라면 하나의 DB 서버가 부담해야할 부하를 여러대로 나눠 부하를 줄여줌으로써 데이터베이스의 성능이 떨어지지 않게 유지하는 방법입니다. 클러..

AWS EC2 용량 부족할 때 대처법

프로젝트를 진행하다가 EC2 용량이 꽉차서 조금 당황했습니다. 어라.. 미디움이면 충분하다고 했는데... 네 생각보다 많은 이미지와 꽤 큰 프로젝트 용량 덕분에 용량이 다 차버려서 진행이 안됐습니다. 때문에 구글링한 결과를 공유하려고 합니다. EC2 용량 부족시 해결법 먼저 용량이 얼마나 남았는지를 봅니다. 7.6기가가 꽉 찼네요. EC2 인스턴스에 들어가서 인스턴스 클릭 후 스토리지를 클릭합니다. 볼륨 ID를 클릭해주고 볼륨을 우클릭 후 수정 후 원하는 사이즈로 적습니다. lsblk 명령어를 치면 xva 스토리지는 12기가로 늘어났지만 우리가 사용하는 xvda1 섹션이 아직 7.9기가입니다. 이걸 늘려줘야합니다. 위의 명령어를 치시구요. 이렇게 치면? 짠 Size가 12기가로 늘어났습니다. 여기까지 E..

DevOps/AWS 2023.06.16