- 개요 - 스프링 프로젝트에서 서킷브레이커를 적용하기 위해서는 아래의 2가지 프레임워크를 이용합니다 hystrix circuit breaker resilience4j circuit breaker 현재는 hystrix circuit breaker는 2021년 11월 1일부로 공식적인 지원이 중단되어 사용을 추천하지 않습니다. 😭 따라서 이번 글에서는 resilience4j 의 circuit breaker을 설명하도록 하겠습니다. 우선 의존성은 아래와 같습니다. dependencies { implementation 'io.github.resilience4j:resilience4j-spring-boot2:{version}' } 스프링 부트 버전과 호환되는 각각의 resilience4j 은 아래와 같으니 현재..
기본개념 배치 계층 구조에서 가장 상위에 있는 개념(하나의 배치작업 자체이다) 적어도 하나 이상의 step을 포함하고 있는 컨테이너 기본 구현체 SimpleJob 순차적으로 Step을 실행시키는 Job 모든 Job에서 유용하게 사용할 수 있는 표준 기능을 갖고 있음 FlowJob 특정한 조건과 흐름에 따라 Step을 구성하여 실행시키는 Job Flow 객체를 실행시켜서 작업을 진행함 Job 은 어떻게 만들어지고 어떻게 실행되는 걸까?? 대부분 JobBuilderFactory 을 이용하여 Job 생성하게 된다. jobBuilderFactory.get("simpleJob") // job 의 이름을 정한다. .start(simpleStep1()) // 실행할 step 을 지정한다. .next(simpleSte..
해당 질문에 대해서는 서비스가 어떻게 구축되었는가에 따라 정답이 다르겠지만 적어도 yml에서 관리되고 있는 property 가 동일한 값을 여러 프로젝트에서 사용하고 있다면 매우 필요하다고 느끼고 있다. 왜 필요한가? 예를 들어 여러 프로젝트에서 Slack 알림을 발송하고 있다고 가정해보자. Slack 알람을 발송하기 위해선 webHook 이 필요할 것이다. 또한 채널명도 알고 있어야 된다. 간단하게 아래와 같은 그림이 될 것 같다. 만약 현재 상태에서 슬랙 채널의 이름이 변경된다고 가정해보자. 그러면 모든 프로젝트의 yml 파일에 가서 정보를 변경해야 한다 여기까지는 충분히 할 수 있다. (만약 프로젝트가 많다면 해당 슬랙 채널로 발송하고 있는 프로젝트를 다 찾아야 한다.) 하지만 코드를 변경했지만 S..
총평: 힘들었다.. 졸업 후 취업까지 걸린 기간은 총 3개월 정도 걸린 것 같다. 누군가에게는 적당한 시간일 수도 또는 짧은 시간일 수도 있다고 생각한다. 하지만 취준의 피 말리는 프로세스는 앞으로 몇 년간은 경험하고 싶지 않다.(탈모 올 뻔) 이번 글에서는 취업하면서 느꼈던 점과 저 자신을 다시 한번 돌아보는 글을 써보고자 합니다. 나는 "비전공자" 다. 저는 비 전공자입니다.(너무 뜬금없나요??😀) 군대를 다녀온 후 2019년 에 처음으로 JAVA를 접했는데요 물론 개발자를 하기 위해서 JAVA를 공부했던 것은 아니었습니다 (학교 과제 때문에 처음으로 접하게 되었습니다.) 그때 당시 진행했던 과제가 간단하게 JSP + Servlet으로 웹 환경을 구축하고 저만의 서비스를 만드는 수업이었습니다. 자료구..
서론 Table 내 어떠한 칼럼에 index를 설정하여 Like 문을 통해 검색하는 경우 INDEX 설정을 하였어도 % 위치에 따라 INDEX 가 정상적으로 작동하는 경우가 있지만 반대로 잘못 사용한 경우 Full Scan 이 발생할 수 있다. 이번글에서는 LIKE 검색에서 % 위치에 따른 INDEX 사용 여부를 하나씩 살펴볼 것이다. Table 구조 간단한 Member Table이며 더미 데이터수는 1만 개로 설정하였다. CREATE TABLE `Member` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `address` varchar(255) NOT NULL, `age` int(11) NOT NULL, PR..
JPA(ORM) 기술은 왜 사용하는가? 1. SQL 중심적인 개발을 벗어나게 해 준다. 기존 SQL 중심의 프로젝트는 객체 중심의 코딩이 불가능했다. 예제 코드 public static void main(String[] args) throws Exception { Class.forName("jdbc"); Connection con = DriverManager.getConnection ("DBURL","username", "password"); Statement stmt = con.createStatement(); String query ="query" // name,age,address ResultSet rs = stmt.executeQuery(query); List persons = new ArrayL..
해당 주제에 대한 답변으로 어떤 게 떠올르시나요? 자바가 첫 언어이기 때문에 언어는 중요하지 않고 개발에 먼저 익숙해지고 패러다임을 익히기 위해 혼자 공부하는 데에 있어 참고자료가 풍부하기 때문에 회사가 Java를 사용하기 때문에 막상 대답하려고 하면 막막합니다. 사실 위에 있는 답변이 저는 틀렸다고 생각하지 않습니다. 사람마다 선택하는 기술을 선택하는 기준이 다르다고 생각하고 그 기준이 나쁘다고 생각하지도 않습니다. 하지만 개발을 하다 보면 코드의 구조나 품질에 대해서는 많은 논의를 하고 배우고자 하지만 단 한 번도 왜 자바를 쓰고 있는 건가?라는 의문을 품은 적은 없었습니다. 즉 진행하고 있는 프로젝트가 꼭 자바로 구현하고자 하는 이유가 있는가? (다른 언어로는 구현하지 못하는가?) 해당 질문을 들었..
서론 이번 글에서는 findById(), getById() 메서드의 차이점과 제가 생각하는 느낀 점에 대해 말해보고자 합니다. 따라서 개인적인 생각이 담긴 글이니 어느정도 비판적인 시각으로 봐주시면 감사하겠습니다. 사전 설명 다음과 같은 Entity 연관관계를 가지고 있을 때 저희는 일반적으로 게시판에 해당하는 댓글을 추가하기 위해서클라이언트 요청으로부터 게시판의 Id, 댓글내용, 작성자 등 필요한 정보를 받게됩니다. 그러면 저희는 Serivce Layer에서 해당하는 게시판이 있는지 확인 후 Reply 객체를 생성해서 연관관계를 맺은 후 저장하게 됩니다. 간단히 이러한 로직이 만들어지게 됩니다. public void save(RequestReply requestReply) { // 해당하는 게시판이 존..