슬랙을 이용하면 많은 업무들을 자동화할 수 있습니다. 이번에는 슬랙이 제공하는 Workflow Builder(워크플로우 빌더)를 이용해 외부 요청을 접수하고, 지라 티켓을 발급하는 워크플로우를 생성해보도록 하겠습니다. 1. JIRA 티켓 생성 워크플로우(Workflow) 만들기 [ JIRA 티켓 생성 워크플로우(Workflow) 만들기 ] 1. 슬랙에서 Slash Command로 Workflow Builder를 열고 Create Workflow 버튼을 누른다. 간단한 업무 자동화의 경우에는 Workflow를 이용해 손쉽게 처리할 수 있다. 2. Start from scratch에서 From a link in Slack을 선택한다. workflow를 어떻게 시작시킬 것인지를 고르는 부분이다. From a ..
1. 코딩 중 겪는 혼란에 대한 이해 [ 세가지 종류의 혼란 ] 지식의 부족으로 인한 혼란 정보의 부족으로 인한 혼란 처리 능력의 부족으로 인한 혼란 지식의 부족으로 인한 혼란 아래는 APL으로 작성된 코드이다. 이 코드가 혼란스러운 이유는 T의 의미를 모르기 때문이다. 즉, T에 대한 지식이 없기 때문이다. 2 2 2 2 2 T n 정보의 부족으로 인한 혼란 아래는 Java로 작성된 코드이다. 여기서 혼란의 원인은 메서드에 대한 정보가 부족하다는 점이다. toBinaryString() 메서드의 동작 원리에 대한 정보를 얻으려면 메서드의 내부 코드를 따로 살펴봐야 한다. public class BinaryCalculator { public static void main(Integer n) { System..
1. 스프링 @Transactional의 동작 방식에 대해 완벽하게 이해하기 [ parallelStream에서 @Transactional을 사용하는 예제 코드 ] 다음과 같은 간단한 JPA 엔티티가 있다. @Entity @Getter @NoArgsConstructor public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; public MyEntity(String name) { this.name = name; } } 그리고 해당 엔티티를 저장하는 서비스 계층에서 조건에 따라 런타임 예외를 던진다고 하자. @Service @Transactional(rea..
1. @PathVariable 또는 @RequestParam 등의 값을 변환하여 받기 (암호화된 @PathVaraible 값 복호화) [ 컨트롤러에서 받는 값 변환의 필요성 ] 애플리케이션을 개발하다 보면 리소스에 대한 고유한 값인 식별자(identifier)을 받아 요청을 처리하는 경우가 있다. 리소스의 식별자는 시스템 내부 정보이므로, 해당 값이 1씩 단순 증가하는 값이라면 암/복호화를 해서 사용해야 한다. 예를 들어 다음과 같이 특정 멤버의 포인트를 증가시키는 API가 있다고 하자. 이때 PathVariable로 받는 memberId 값은 암호화되어 있기 때문에 컨트롤러 혹은 이를 사용하는 하위 계층에 복호화 로직을 넣어주어야 한다. @RestController @RequiredArgsConstru..
1. 분산락의 필요성과 레디스의 분산락(RedLock) [ 분산락의 필요성 ] 분산 환경에서는 서로 다른 클라이언트가 공유 리소스를 사용하는 경우가 많이 있다. 기본적으로 레디스(Redis)는 싱글 스레드로 동작하기 때문에, 단일 레디스 노드를 구축해 사용해도 동시성 문제가 발생하지 않는다. 따라서 리소스에 대해 값을 설정하여, 값이 설정된 경우에는 다른 리소스의 접근을 차단할 수 있다. 이를 잠금이라고 표현할 것이며, 이를 위해 다음과 같은 명령을 사용할 수 있다. // key, value를 저장하는데 NotExists일 경우에만 저장하고, 30초(30000ms) 동안 유지해줘 SET key value NX PX 30000 리소스에 대한 잠금을 해제하는 것은 다음의 명령으로 가능하다. DEL key 하..