목록Backend (39)
도도한 개발자
인프런 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의 중 스프링 트랜잭션 전파 섹션을 기반으로 작성한 글입니다. 이전 글에서 트랜잭션 전파의 기본 옵션인 REQUIRED 옵션으로 내부 트랜잭션이 외부 트랜잭션에 참여하는 과정을 여러 경우로 나눠 정리해봤습니다. [DB] 트랜잭션 전파 - 외부 트랜잭션과 내부 트랜잭션은 서로 어떻게 영향을 미칠까? 인프런 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의 중 스프링 트랜잭션 전파 섹션을 기반으로 작성한 글입니다. 트랜잭션 전파를 정리하기 전에 트랜잭션의 동작 과정을 빠르게 짚 kiarakim.tistory.com 위 글의 마지막으로 떠오른 궁금증을 이어 마저 정리해보겠습니다. 💭 내부에서 롤백되어도 외부에서 커밋되면 외부 커밋만이라..
인프런 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의 중 스프링 트랜잭션 전파 섹션을 기반으로 작성한 글입니다. 트랜잭션 전파를 정리하기 전에 트랜잭션의 동작 과정을 빠르게 짚어보겠습니다. 🐈⬛ 트랜잭션이란? 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻합니다. 로그를 찍으며 확인해봅시다. "트랜잭션 시작" 아래 Creating new transaction으로 트랜잭션을 시작했고, Hikari connection pool에서 커넥션을 획득합니다. 트랜잭션을 커밋하면 커넥션이 반환되어 트랜잭션이 종료됩니다. 롤백도 마찬가지로 트랜잭션 시작 - 롤백 - 트랜잭션 종료 - 커넥션 반환이 되죠. 🐈⬛ 만약 트랜잭션이 두 개라면? 파란색 박스는 트랜잭션의 시작과 종료에 따라 ..
프로덕션 코드와 테스트 코드의 프로퍼티를 분리해야 하는 이유를 알고계신가요? 저는 저만의 방식으로 납득했는데 지금부터 그 과정을 적어보려 합니다. 스프링 프로젝트 개발 중 프로퍼티를 암호화하기 위한 방법으로 Jasypt를 도입했습니다. 이를 위해 @Configuration 어노테이션이 붙은 클래스에 암복호화 기능을 구현했는데, Jasypt를 적용하는 방법은 따로 정리해서 올릴 예정입니다. Jasypt의 암호화 및 복호화엔 이를 위한 키(key)가 있습니다. 아주 중요하면서도 노출이 되지 않도록 조심해야 하는 친구죠. 우리의 프로젝트는 public repository에 있고, 만약 이걸 프로덕션 코드에 노출시킨다면 전 세계 모든 사람들이 확인하여 복호화 하는 위험이 생기겠죠? 🐾 키를 보호하자 그래서 그러..
🐈⬛ swagger Swagger 는 REST API를 설계, 빌드, 문서화 및 사용하는 데 도움이되는 OpenAPI 사양을 중심으로 구축 된 오픈 소스 도구 세트이다. 애플리케이션의 API 문서를 자동으로 구성하는 특수 도구, 애플리케이션의 모든 엔드포인트를 살펴볼 수 있을 뿐만 아니라 요청을 보내고 응답을 수신하여 작동 중인 엔드포인트를 즉시 테스트할 수 있다. 🐈⬛ swagger 사용이유 🐾 사용이유는 곧 장점 테스트 할 수 있는 UI를 제공한다. 프로덕션 코드인 Controller가 곧 문서가 된다는 점에서 README.md 파일과 같이 별도로 관리할 문서가 없다. 🐈⬛ swagger 사용 배경 장바구니 협업 미션을 본격적으로 시작하기 위해 프론트엔드의 솔로스타, 네이브와 함께 API 설계를..
이 글은 세시간 동안 작성하다 ec2 인스턴스의 퍼블릭 IP를 확인하기 위해 페이지 이동하다 전부 날린 후 다시 작성하는 글입니다. 정말 많이 속상하고 화가 났지만 '앞으론 습관적으로 임시저장 버튼을 누르자'라는 교훈과 함께 마음을 다 잡고 다시 쓰렵니다...🫠🐈⬛ 주제 선정 이유장바구니 미션에서 Basic Authentication 사용 방법에 대해 충분히 이해하지 못하고 넘어간 것이 마음에 걸려 다시 학습했습니다. 우아한테크코스에서 소개한 인증 방법은 Basic, Session, Token 이렇게 세 가지였으나 장바구니 미션에 Basic 인증을 적용하였으므로 이번 글에선 Basic 인증이 무엇이지, 어떻게 사용하는지에 대해 다루고자 합니다.🐈⬛ Basic 인증Basic Authentication(..
* 본 게시물은 우아한테크코스를 수료하는 과정에서 작성한 글입니다. step1에서 git checkout -b step2 로 브랜치를 생성해 거기서 step2를 시작했을 것이다. 구현한 목록도 체크하고, enum도 만들고, 테스트 코드도 작성했다. (맨 위가 최신 커밋) 열심히 작업하다가 들려온 반가운 소식! “step1 이만 merge할게요. 다음 단계를 진행해주세요” ‘어 잠만, 그럼 step2 만들어놓은 건 어쩌지?‘ 천천히 순서대로 해보자. 1. 일단 merge가 됐으면 main 브랜치로 가자 git checkout main 2. 여기서 우아한테크코스 미션 레포지토리에 연결 통로를 만들자 git remote add upstream {우아한테크코스 미션 레포지토리} * upstream은 별칭이다 3..
쓰레드란 무엇일까? 자바 프로그램을 사용하여 뒤에 클래스 이름을 붙이면 적어도 하나의 JVM이 시작된다. 보통 이렇게 JVM.이 시작되면 자바 프로세스(Process) 가 시작하는데, 이 안에 여러 개의 쓰레드라는 것이 수행된다. java 명령어를 사용하여 클래스를 실행시키는 순간, 자바 프로세스가 시작되고, main() 메소드가 수행되면서 하나의 쓰레드가 시작되는 것이다. 왜 쓰레드를 만들었을까? JVM은 기본적으로 아무런 옵션 없이 실행하면 적어도 32MB ~ 64MB의 물리 메모리를 점유하는 반면, 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유한다. 대부분의 작업을 단일 쓰레드로 실행하는 것보단 다중 쓰레드로 실행하는 것이 더 빠른 시간에 결과를 제공해준다. 따라서 쓰레드를 사용하면 보다 빠른..
Map 이란? 자바에서의 Map은 키(Key)와 값(Value)으로 이루어져 있다. Map에서 다른 데이터와 구분하기 위한 값의 이름을 키라고 하는 이유를 생객해보면 이해하기 쉬울 것이다. Map의 특징은 다음과 같다. 모든 데이터는 키와 값이 존재한다. 키가 없이 값만 저장될 수는 없다. 값 없이 키만 저장할 수도 없다. 키는 해당 Map에서 고유해야만 한다. 값은 Map에서 중복되어도 전혀 상관 없다. Map은 java.util 패키지의 Map이라는 이름의 인터페이스로 선언되어 있고, 구현해 놓은 클래스들도 많이 있다. 이 Map 인터페이스에 선언되어 있는 메소드들의 주요 기능을 보자. 리턴 타입 메소드 이름 및 매개 변수 설명 V put(K key, V value) 첫 번째 매개 변수인 키를 갖는,..