본문 바로가기

ETC33

[Bash] &&를 쓰는 이유 먼저 bash에서 &&는 일반적인 고수준 프로그래밍 언어에서 지원하는 AND 연산자와 동일한 역할을 한다. Bash Reference Manual - 3.2.4 Lists of Commands https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Lists AND 이기 때문에 - 앞서 실행된 커맨드의 결과가 성공(zero exit status)인 경우, 뒤의 커맨드를 실행시켜야지 AND 연산 결과를 알 수 있기 때문에 뒤의 커맨드를 실행한다. - 앞서 실행된 커맨드의 결과가 실패(non-zero exit status)인 경우, AND 연산 결과가 failure이기 때문에 뒤의 커맨드를 실행시키지 않고 연산이 종료된다. 즉, &&를 쓰면 앞의 .. 2022. 11. 28.
[Refactoring] 여러 역할을 갖는 엔티티 리팩터링하기 레거시 시스템을 살펴보다보면 하나의 엔티티(테이블)에 서로 다른 역할의 데이터 필드(컬럼)가 모여있도록 모델링 된 경우가 있다. 초기에는 하나의 역할의 데이터만 있었지만, 서비스가 확장되면서 기존 시스템을 재활용하다보니 기존의 엔티티(테이블)에 다른 역할의 데이터 필드(컬럼)를 추가한 경우이다. 이번 포스팅에서는 여러 역할을 갖으면서 SRP를 위반하는 엔티티와 그 문제점을 알아보고 이를 어떻게 리팩터링하면 좋을지에 대한 방법을 설명하도록 하겠다. (예제 코드는 여기에서 살펴볼 수 있다) SRP를 위반하는 엔티티와 그 문제점 예를 들어 처음에는 물리적인 굿즈를 팔기 위한 상품을 담기 위한 상품 엔티티를 만들었다고 하자, class Product( id: ProductId, name: String, pric.. 2022. 11. 16.
Types of Time-sequential ID generator 일단 시작에 앞서 auto increment ID를 피하는 이유로는 How to Do UUID as Primary Keys the Right Way의 Why You Should Avoid Auto-Incremented Integers를 참고하길 바란다. 그렇지만 DB의 auto increment ID를 사용하는건 이미 널리 쓰이고 있고 그다지 나쁜 선택이 아니다. 하지만 여러 측면을 고려하였을 때, DB의 auto increment ID를 사용하는 것은 아무래도 좋지않다는 판단을 한 경우라면 이제 ID를 어떻게 ID를 만들지가 중요해진다. UUID v4와 같이 random한 ID의 경우 ID 충돌에 있어 큰 문제는 없지만, random한 값이기에 DB의 Primary Key로 사용하기엔 무리가 있을 수 .. 2022. 10. 17.
[채팅 시스템] 특정 키워드에 대해 시스템 메세지 보내기 채팅 서비스가 처음에는 단순히 유저 간에 메세지를 주고받기 위함이었어도, 서비스가 고도화 되다보면 꼭 채팅 도메인과는 관련되지 않아도 서비스와 관련하여 유저의 주의를 끌기 위해 몇가지 기능이 추가될 수 있다. 그 중 하나로는 채팅방에 특정 키워드가 발생했을 때 해당 채팅방에 시스템 메세지를 보내는 기능이 있다. 실제 사례를 예로 들자면 당근마켓의 채팅 시스템 메세지 기능이 있을 것이다. 이처럼 채팅 도메인과는 약간 동떨어졌지만 채팅 시스템과 통합되어야하는 기능에 대해 어떤 식으로 시스템을 설계할지에 대해 정리해본다. 먼저 채팅을 위한 웹소켓 서버의 경우 Scaling을 위해 Message Queue나 Redis Pub/Sub 등을 사용하여 다른 웹소켓 서버와 연결된 유저에게 메세지를 보낼 것이다. 위.. 2022. 9. 13.
입개발) 슬랙 알림 기능 개발 가끔 새로 개발한 기능을 유저가 사용하는지 궁금할 때가 있다. 또는 배치를 돌릴 때 배치 결과를 보고싶을 때도 있다. 하지만 업무 중에 주기적으로 어드민 사이트나 DB 데이터를 매번 볼 수 없으니 운영 편의상 특정 이벤트(유저가 특정 액션을 했다던가, 특정 설정을 변경했다던가) 후에 슬랙 채널로 알림을 보내곤 한다. 슬랙 알림 기능을 개발할 때 참고할 수 있는 몇 가지를 정리해본다. Incoming WebHooks Incoming WebHooks는 특정 채널에 슬랙 메세지를 보내기 가장 쉬운 방법이다. 쓰기도 쉽고 설정도 매우 단순하다. Apps에서 Incoming WebHooks를 검색하여 추가를 할 때 간단한 설정만 해주면 된다. 그리고 만들어진 WebHooks의 URL로 HTTP 요청을 보내면 된다.. 2022. 8. 20.
다양한 Application Service 설계 방식들 한 서브 도메인의 기능을 담당하는 하나의 Service 클래스 가장 일반적인 방법으로 서브 도메인 관련 기능을 하나의 Service 클래스에서 처리하는 것이다. @Service class PostingService( private val postingRepository: PostingRepository, ) { @Transactional fun postPosting(command: PostPostingCommand): Posting { val posting: Posting = command.toEntity() return this.postingRepository.save(entity = posting) } @Transactional fun modifyPosting(command: ModifyPosting.. 2022. 8. 14.