profile
백엔드 개발자를 준비하고 있는 Louie입니다.

@TransactionalEventListener를 사용한 이유

저번 포스팅에는 스프링의 트랜잭션 전파 기능을 활용하여 트랜잭션을 분리했습니다.이번에는 @TransactionalEventListener가 무엇인지 간단히 설명하고 프로젝트에서 발생한 문제를 해결한 과정을 정리해보겠습니다.스프링은 게시글 등록 트랜잭션처럼 이벤트를 발행

2023년 3월 29일
·
0개의 댓글
·

트랜잭션 분리를 통한 서로 다른 서비스 간의 의존성 줄이기

저번 포스팅에는 @EventListener를 통해 서로 다른 서비스 간의 의존성을 줄였습니다.이번에는 트랜잭션을 분리하게 된 문제 상황과 방법을 정리해보겠습니다.위 코드에서 BoardRegisterEvent가 발행되어 키워드 알림 생성 로직이 실행되는 도중 Runtim

2023년 3월 28일
·
0개의 댓글
·

스프링 이벤트를 활용하여 서로 다른 서비스 간의 의존성 줄이기

이벤트를 통해 프로젝트 코드를 리팩터링한 과정을 설명하겠습니다.현재 제 프로젝트에는 위 사진과 같이 게시글이 등록되면 해당 게시글에 대한 키워드 알림과 마감 알림을 생성합니다.해당 기능을 아래와 같은 코드로 구현했습니다.게시글 등록 메서드에 키워드 알림과 마감 알림을

2023년 3월 1일
·
0개의 댓글
·

@Transactional readOnly 옵션

해당 트랜잭션이 읽기 전용인 경우 사용합니다.조회 작업만 수행한다는 것을 명시적으로 나타낼 수 있습니다.런타임에 트랜잭션과 관련한 최적화 기능을 제공합니다.제공하는 최적화 기능은 JDBC 드라이버마다 다르며 아무 일도 일어나지 않을 수 있습니다. 따라서 힌트 기능만 제

2023년 2월 24일
·
0개의 댓글
·

MySQL Transaction Read Only

오늘은 MySQL의 읽기 전용 트랜잭션 기능에 대해 정리해 보겠습니다.아래와 같이 insert 쿼리를 실행하면 에러가 발생합니다. Untitled 트랜잭션 id는 데이터 변경(insert, update, delete)하거나 Lock을 사용하는 트랜잭션에만 필요하므로

2023년 2월 24일
·
0개의 댓글
·

@Transactional

스프링에서 트랜잭션을 관리해주는 기능입니다.@Transactional을 사용하여 트랜잭션을 처리하는 방식을 선언적 트랜잭션 처리라고 부르며 반대로 프로그래밍을 통해 트랜잭션을 처리하는 프로그래밍적 트랜잭션 처리가 있습니다.프로그래밍적 트랜잭션 처리는 스프링 컨테이너와

2023년 2월 23일
·
0개의 댓글
·

인터프리터, JIT 컴파일러

인터프리터와 JIT 컴파일러는 모두 JVM의 실행 엔진에 포함되는 요소입니다.두 요소가 어떻게 다른지 간단히 정리해봤습니다.인터프리터는 바이트 코드를 한 줄씩 기계어로 해석하여 실행합니다.코드를 실행할 때마다 기계어로 해석해야 하기 때문에 같은 코드를 여러 번 실행한다

2023년 1월 10일
·
0개의 댓글
·

동시 요청 처리, 멀티 스레드, 스레드 풀

멀티 스레드를 사용하여 동시 요청 처리를 지원할 수 있다.간단하게 요청마다 스레드를 생성하면 동시에 여러 요청을 처리할 수 있다.하지만 스레드의 생성 비용은 매우 비싸고 요청이 많이 들어온다면 서버 자원이 부족해서 스레드를 계속 생성하다가 서버가 죽을 수 있다.이러한

2023년 1월 1일
·
0개의 댓글
·

CORS란?

쉐어플레이트 프로젝트를 진행하면서 발생했던 CORS 에러를 해결하기 위해 학습했던 내용을 정리했다.CORS를 알아보기 전에 먼저 SOP에 대해 설명하겠다.같은 출처를 가진 요청에 대한 응답을 허용하는 정책이다.여기서 출처(Origin)는 Protocol, Host, P

2022년 12월 3일
·
0개의 댓글
·

디버거를 곁들인 @ModelAttribute 삽질기

프로젝트를 진행하면서 @ModelAttribute를 통해 요청값을 입력받는 DTO를 만들었다.이후에 요청값 검증을 위해서 아래와 같이 type, price 필드는 클라이언트가 입력하지 않으면 null 값이 할당되어 @NotNull 어노테이션을 통해 Bean Valida

2022년 10월 22일
·
0개의 댓글
·

ARP(Address Resolution Protocol)

이더넷이나 무선 LAN으로 통신을 하려면 프레임의 헤더에 송/수신지의 MAC 어드레스를 넣어줘야 하는데 어떻게 MAC 어드레스를 알 수 있을까?ARP를 사용하면 IP 어드레스를 가지고 MAC 어드레스를 알아낼 수 있다.요청 패킷에 수신 측의 IP 주소를 담고 네트워크

2022년 9월 4일
·
0개의 댓글
·

NAT(Network Address Translation)란?

한정적인 IP 주소를 절약하기 위해 생긴 시스템이다.NAT는 라우팅 테이블을 참고하여 하나의 공인 IP를 여러 개의 사설 IP로 변환시킬 수 있다.라우팅 테이블에 설정한 대상에 포함된 패킷들은 Gateway에 설정된 IP로 변환되어 전송됩니다.예를 들어 아래와 같이 라

2022년 8월 7일
·
4개의 댓글
·

코드스쿼드 수료 회고

인사말 오랜만에 글을 써서 그런지 글을 어떻게 써야 좋을지 잘 모르겠네요 ㅎㅎ 제가 코드스쿼드를 다니게 된 이유부터 진행했던 코드스쿼드 각 과정에 대한 설명, 느낀 점을 천천히 얘기해 보겠습니다! 코드스쿼드를 시작하기 전의 이야기 대학 VS 취업 코드스쿼드를 지원하기 2달 전쯤에 저는 대학교 입학과 고등학교 졸업 후 바로 취업, 이렇게 두 가지 선택을 두...

2022년 7월 24일
·
15개의 댓글
·

Spring Boot와 S3를 연동한 파일 업로드

Spring과 AWS의 S3를 사용해서 파일 업로드 기능을 구현해 보겠습니다. Spring Cloud AWS를 사용하면 손쉽게 S3를 통한 파일 업로드 기능을 구현할 수 있습니다.IAM의 사용자 탭으로 이동한 다음 오른쪽에 빨간색으로 표시되어있는 사용자 추가 버튼을 클

2022년 6월 26일
·
6개의 댓글
·

[일일 회고] 3월 3일

카페의 요구사항은 진작에 구현했지만 form에서 받아오는 인자값을 검증하는 로직을 자세히 다뤄보고 싶어서 어제부터 영한님의 강의를 들으며 스프링의 Validation 기능을 통한 검증 방법을 학습했다.빠르게 검증과 관련된 첫번째 챕터(검증1 - Validation)만

2022년 3월 3일
·
0개의 댓글
·

[일일 회고] 3월 2일

이번 주는 계속 스프링 부트를 사용해서 카페를 만들고 있다.오랜만에 스프링을 사용해서 너무 재밌었지만 기본적인 내용을 너무 많이 까먹었던 게 아쉬웠다.리뷰 시간에 내가 했던 설명이 아쉬웠다. 맨날 리뷰 30분 전에 발표 준비를 하기로 다짐했지만 시간이 아까워서 구현을

2022년 3월 2일
·
2개의 댓글
·

[운영체제 2주차] 컴퓨터 시스템의 구조

공개 소프트웨어 : Linux, Android비공개 소프트웨어 : Windows대부분 무료로 다운받을 수 있고 수정할 수 있어서 개발 비용이 적게 든다.클라이언트가 문제점과 해결책을 자유롭게 공유해줄 수 있어서 문제점이 생겨도 상대적으로 빠르게 해결할 수 있다.클라이언

2022년 2월 16일
·
4개의 댓글
·

2월 9~10일 회고

이번 주 수요일에는 알고리즘 대신 페어 프로그래밍을 하고 코드스쿼드 수료생분들의 조언을 듣게 되었다.Hanse와 페어 프로그래밍을 하게 되었는데 아주 사소한 부분도 설명하면서 평소보다 더 집중하고 시간도 빨리 지나갔다.서로 존중하면서 재미있게 개발을 해서 다음에도 페어

2022년 2월 10일
·
2개의 댓글
·

[1주차] 운영체제 개요

컴퓨터 하드웨어 바로 위에 설치되어 있는 하드웨어와 사용자 또는 다른 소프트웨어를 연결하는 소프트웨어 계층이다.좁은 의미의 운영체제(커널) : 운영체제의 핵심 부분, 메모리에 상주한다.넓은 의미의 운영체제 : 커널 뿐만 아니라 각종 주변 시스템 유틸리티를 포함한다.컴퓨

2022년 2월 9일
·
2개의 댓글
·

2월 8일 회고

어제부터 도커를 설치하고 도커 안에 mysql을 깔아서 DB를 사용할 수 있는 환경을 구축했다.JPA에 mysql을 연동하는 과정에서 리눅스 명령어를 통해 얻은 IPAddress를 입력했는데 연결이 되지 않았다.localhost로 변경하고 나서야 연결됐는데 이유는 잘

2022년 2월 8일
·
0개의 댓글
·