Backend 20

[RabbitMQ] AMQP에 대해

서론입사 후 처음 맡게된 업무는 회사에서 제공하는 OpenAPI 관련 업무였다.관련해서 MQ를 처음 사용해보게 됐는데, 회사에선 RabbitMQ를 사용하고 있었다.아직 업무 투입 전이기 때문에, 빠르게 학습해보도록 하려고 한다.RabbitMQ를 공부하다보니 자연스럽게 AMQP라는 용어도 나왔는데, 이게 뭔지 궁금해서 한 번 알아봤다.참고https://preamtree.tistory.com/172 Spring AMQP 맛보기 - 1. AMQP 개념부제: RabbitMQ Spring 연동, RabbitMQ 연동 이번 시리즈에서는 간단한 Spring AMQP 예제를 소개한다. 예제를 시작하기 전에 이번 포스팅에서는 AMQP라는 것에 대해 소개할 것이다. 1. AMQP 정의 Advanced Message Qup..

Backend/RabbitMQ 2024.08.14

[DB] 조회 시 트랜잭션을 걸어야 하는 이유? (Feat. 트랜잭션 격리수준)

서론면접에서 아래와 같은 이야기를 주고 받았다. (요즘 면접을 많이 다니기도 하고, 면접을 하면서 고민해볼 거리가 많이 나오는 것 같다.)(프로젝트 이야기와 조회 로직에 트랜잭션을 붙이지 않았다는 이야기를 했음)면접관 : 몇 가지 데이터 구조에 따라 다르긴 하겠지만, 조회 로직에 트랜잭션을 걸지 않았을 때 문제가 발생할 수 있을 것 같은데, 어떤 문제가 발생할 수 있을지 생각해보시겠어요?트랜잭션은 업데이트에만 적용해놨었는데, 관련된 질문이 들어왔었다. 트랜잭션은 보통 동시성 이슈와 밀접한 연관이 있기 때문인데, 해당 질문엔 계좌 잔액 조회를 예시로 들어서 설명했다.그러나 면접관이 원하는 대답은 아니었던 것 같았다. 조회엔 걸지 않는게 일반적인 걸로 알고있었는데.. 잘못된 거였구나. 라는 것을 깨닫고, 관..

Backend/DB 2024.06.26

[Oracle] 오라클 시퀀스가 동시성 이슈를 보장해주는 이유

서론이전 회사에서 오라클 시퀀스를 활용해 선착순 이벤트 처리를 한 경험에 대해 복기하던 도중, 오라클 시퀀스가 어떻게 그걸 보장해주는지가 궁금해졌다.오라클을 사용하지 않는다면 Redis를 사용해서 동시성 이슈를 제어하거나, 자바 단에서 thread, callback 등을 통해서 제어하는 방식이 있을텐데, 오라클에서 제공하는 기능을 활용해 훨씬 간단하게 업무를 처리한 기억이 있다.아마 이런식으로 업무처리하신 분이 나 말고도 있을 것 같은데, 그게 어떻게 가능한건지 알아보도록 하자. 간단한 포스팅이니 이해가 쉬울듯.시퀀스가 뭔지, 이런것들에 대한 내용은 다른 블로그를 참고하도록 하자.참고https://velog.io/@norighthere/Oracle-%EC%98%A4%EB%9D%BC%ED%81%B4-%EC..

Backend/DB 2024.06.11

[Software Design] 헥사고날 아키텍처(Hexagonal Architecture) 톺아보기

서론모 회사에서 기술면접을 진행하는 도중, 헥사고날 아키텍처에 대해 알고있냐는 질문을 받았다.대충 어떤 모양새인지 흐릿하게는 알고 있었는데, 괜히 대답했다가 이도저도 아닌 대답을 내놓을 것 같아서 모른다고 했음(...)사실 헥사고날 아키텍처나 TDD는 실무에 적용하기 어렵다는 이야기를 많이 들었어서, 그런 내용에 집중하기보다 기본기를 쌓는게 더 중요하다고 생각하는데, 그래도 기본적인 이론과 장단점에 대해서는 파악을 하는 것이 좋을 것 같다.이론적인 부분은 훨씬 좋은 아티클과 글이 차고 넘치니, 이론에 대해 의미없이 포스팅 하는 것보단 스스로 생각해본 포스팅이라고 이해하시면 편하시겠다.참고https://tech.osci.kr/hexagonal-architecture/ 헥사고날 아키텍처(Hexagonal A..

[Mock] Mock, 도대체 뭐야? (Feat. 테스트코드)

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 서론 프로젝트를 진행하며 본격적으로 테스트코드를 작성하기 시작했다. 강의를 보면서 대부분의 강의에서 모킹(Mocking)을 활용한 테스트코드 작성을 하던데, 아무리 봐도 DB 커넥션이 없는것이다. 내가 생각한 테스트코드는 DB에 직접 CRUD 작업을 거쳐서 하는것으로 알고있었는데... 그게 아니었다. 본 포스팅에선 테스트코드의 목적과, 가상 맵핑을 도와주는 Mock 프레임워크에 대해 알아보도록 하자. 참고 https://happy-coding-day.tistory.com/entry/Mock-%EA%B0%9D%EC%B2%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-%EC%99%9C-%EC%8D%A8%EC%9..

Backend/Test 2023.11.01

[MySQL, JPA] Schema-validation: missing column [컬럼명] in table [테이블명]

목차 문제 사항 JPA + MySQL 환경에서 작업을 진행하는 도중, 다음과 같은 에러가 발생했다. Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested except..

Backend/DB 2023.10.26

[CS스터디-헤드퍼스트 디자인 패턴] 3. 반복자 패턴

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 서론 이번 포스팅에선 반복자 패턴에 대해 다뤄보도록 하겠습니다. 반복자 패턴은 접근기능과 자료구조를 분리시켜서 객체화 하여, 서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 위해 인퍼페이스를 통일시키고 싶을 때 사용됩니다. 참고 https://www.coupang.com/vp/products/6403382250?itemId=13700178772&vendorItemId=80951605437&src=1042503&spec=10304982&addtag=400&ctag=6403382250&lptag=10304982I13700178772&itime=20221210115503&pageType=PRODUCT&pageValue=6403382250..

[CS스터디-헤드퍼스트 디자인 패턴] 2. 커맨드 패턴

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 서론 저번 시간에 이어서 이번 시간엔 커맨드 패턴에 대해서 공부해보도록 하겠습니다. 참고 https://www.coupang.com/vp/products/6403382250?itemId=13700178772&vendorItemId=80951605437&src=1042503&spec=10304982&addtag=400&ctag=6403382250&lptag=10304982I13700178772&itime=20221210115503&pageType=PRODUCT&pageValue=6403382250&wPcid=15730553344490846187221&wRef=&wTime=20221210115503&redirect=landing&gclid=Cj0..

[CS스터디-헤드퍼스트 디자인 패턴] 1. 전략패턴

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 서론 스터디원들과 책 하나를 정해서, 각자 파트를 공부하고 주 1회 미팅마다 발표하는 시간을 갖기로 했습니다. 그렇게 해서 결정된 책은 [헤드퍼스트 디자인 패턴] 이라는 책입니다. 안그래도 디자인 패턴에 대한 무조건적인 두려움이 있었는데, 이번 기회에 조금씩 알아가보는 시간이 되었으면 좋겠습니다. 그림으로 이루어져 있어서 책은 두껍지만 생각보다 술술 읽혔기에, 정말 재밌게 공부했네요. 참고 https://www.coupang.com/vp/products/6403382250?itemId=13700178772&vendorItemId=80951605437&src=1042503&spec=10304982&addtag=400&ctag=6403382250..

[ORACLE] TRUNC 함수 사용법

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 목차 개요 TRUNC 함수에 대해 알아보자. 시간이나 숫자를 절사할 때 쓰는 함수로, 시간의 경우 TO_DATE 함수를 쓰면 귀찮아지니.. 사용가능하다면 이걸 잘 활용해주도록 하자. 참고 www.w3resource.com/oracle/datetime-functions/oracle-trunc(date)-function.php Oracle TRUNC (date) function - w3resource Oracle TRUNC (date) function: The TRUNC (date) function returns the date with the time portion of the day truncated to a specific unit of meas..

Backend/DB 2021.01.21