반응형

전체 96

[MSA] SAGA 패턴 이해하기 : 개념, 정의

SAGA 패턴이란? : 분산 어플리케이션(Ex. MSA)의 일관성을 유지하고 여러 마이크로 서비스 간의 트랜잭션을 조정하여 데이터 일관성을 유지하는 데 도움이 되는 장애 관리 패턴이다. 더보기 기존의 모놀리식(Monolithic) 환경에서는 DBMS가 기본적으로 제공해주는 트랜잭션 기능을 통해서 데이터 Commit / Rollback을 통해서 일관성있게 관리되었다. 하지만, 점차 DB나 어플리케이션이 분산되면서 해당 트랜잭션 처리를 단일 DBMS에서 제공하는 기능으로는 해결할 수 없어졌다. 이에 따라, 데이터 일관성을 유지하는 데 도움을 주는 여러 패턴이 나왔다. SAGA 패턴을 알기 전에 - Two-Phase Commit Two-Phase Commit은 여러 서비스 간에 트랜잭션 처리 중 데이터 일관성..

[IT]/MSA 2022.04.05

[MSA] CQRS 패턴 이해하기 (명령과 조회의 책임 분리) : 정의, 사용목적, 적용예제

CQRS (Command and Query Responsibility Segregation)_명령과 조회의 책임 분리 : 명령 (시스템 데이터 변경-CREATE, UPDATE, DELETE)역할을 수행하는 구성요소와 쿼리(시스템 데이터 조회-READ) 역할을 수행하는 구성요소를 나누는 것. 즉, 시스템 데이터를 변경하는 코드와 시스템 데이터를 조회하는 코드를 따로 만드를 것이다. 구현방식이나 시스템 규모에 따라서 DB를 나누거나, 프로세스를 나누기도 한다. 명령과 조회는 왜 분리할까? 일반적으로 어플리케이션은 데이터를 한 Model로써 관리하며 한 모델에서 생성(CREATE), 조회(READ), 수정(UPDATE), 삭제(DELETE)한다. 이럴 경우, 속성(컬럼) 하나 혹은 여러개가 추가되면 어떨까? ..

[IT]/MSA 2022.04.04

[코드로 배우는 스프링 웹 프로젝트] 16강. REST 방식으로 전환 (REST/ @RestController/Restlet Client 프로그램)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다. Ex) '/boards/123'은 게시물 중에서 123번이라는 고유한 의미를 가지고, 이에 대한 처리는 GET/POST 방식 등 추가적인 정보를 통해서 결정 REST와 관련하여 알아두어야 할 어노테이션 16.1 @RestController REST 방식에서 기억해야하는 점은 서버에서 전송하는 것이 순수한 데이터 라는 것이다. 기존의 Controller에서 Model에 데이터를 담아 JSP 등과 같은 뷰로 전달하는 방식이 아니다. 16..

[코드로 배우는 스프링 웹 프로젝트] 15강. 검색 처리 (동적 SQL(prefix/suffix/prefixOverrides/suffixOverrides), <sql>, UriComponentsBuilder )

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 게시물 관리의 마지막은 "검색 처리"이다. select 태그를 이용해서 검색 기능과 화면을 처리해보자. 15.1 검색 기능과 SQL 게시물의 검색 기능은 아래와 같이 분류가 가능하다. 1) 제목 / 내용 / 작성자와 같이 단일 항목 검색 2) 제목 or 내용 / 제목 or 작성자 / 내용 or 작성자 / 전체 와 같은 다중 항목 검색 15.2 MyBatis의 동적 SQL : MyBatis는 동적(Dynamic) 태그 기능을 통해서 SQL을 파라미터들의 조건에 맞게 조정할 수 있는 기능을 제공한다. 15.2.1 MyBatis의 동적 태그들 - if : 특정한 조건이 True가 되었을 때 포함된 SQL을 사용하고자 할 때 작성..

[코드로 배우는 스프링 웹 프로젝트] 14강. 페이징 화면 처리 (페이지네이션, 페이징처리, JQuery)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. URL의 파라미터를 이용해서 정상적으로 원하는 페이지로 이동하는 것을 확인했다면, 화면 밑에 페이지를 표시하고 클릭할 수 있도록 진행해본다. 아래와 같은 과정으로 진행한다. 브라우저 주소창에서 페이지 번호를 전달해서 결과를 확인하는 단계 JSP 에서 페이지 번호를 출력하는 단계 각 페이지 번호에 클릭 이벤트 처리 전체 데이터 개수를 반영해서 페이지 번호 조절 14.1 페이징 처리 할 때 필요한 정보들 - 현재 페이지 번호 (page) - 이전과 다음으로 이동 가능한 링크의 표시 여부 (prev, next) - 화면에서 보여지는 페이지의 시작 번호와 끝 번호 (startPage, endPage) 14.1.1 끝 페이지 번호와..

[코드로 배우는 스프링 웹 프로젝트] 13강. MyBatis와 스프링에서 페이징 처리

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. MyBatis는 SQL을 그대로 사용할 수 있기 때문에, 앞 게시글에서 공부한 인라인뷰를 이용하는 SQL을 통해 페이징 처리를 진행해 볼 것이다. 여기서, 중효한 점은! 페이징 처리를 위한 SQL을 실행할 때 몇 가지 파라미터가 필요하다. 1) 페이지 번호(pageNum), 2) 한 페이지당 몇 개의 데이터(amount)를 보여줄 것인지가 결정되어야 한다. 이를 하나의 객체로 묶어서 전달하는 방식으로 진행해본다. org.zerock.domaim 패키지 내 Criteria Class 생성하기 Criteria.java package org.zerock.domain; import lombok.Getter; import lombo..

[코드로 배우는 스프링 웹 프로젝트] 12강. 오라클 데이터베이스 페이징 처리 (Oracle/SQL/페이징처리)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 12.1 실행 계획 (execution plan) 오라클의 페이징 처리를 위해서는 실행 계획(execution plan)을 알아야 한다. 실행 계획이란, SQL을 데이터베이스에서 어떻게 처리 할 것인가를 의미한다. SQL이 데이터베이스에 전달되면 데이터 베이스는 아래와 같은 과정을 거쳐 처리된다. 1) SQL 파싱 단계 : SQL 구문에 오류가 있는지 SQL을 실핼해야 하는 대상 객체(테이블, 제약 조건, 권한 등)가 존대하는지를 검사함. 2) SQL 최적화 단계 : SQL이 싱행되는데 필요한 비용(cost)을 계산하여 이 값으로 어떤 방식으로 실행하는 것이 가장 좋을지 판단하는 '실행 계획'을 세움 3) SQL 실행 단계..

[부평 맛집] 부평구청역 고기맛집 넙딱집 단골 솔직 후기(제주 생고기/특수부위/삼겹살/항정살 맛집)

평소에도 자주 찾는 고깃집! 이미 단골이 되어서야 작성하는 넙딱집 솔직후기이다. 위치는 부평구청역 7번 출구 도보 5분거리에 있고, 골목에 숨어져 있어서 잘 찾아보고 가야한다. 주소 : 인천광역시 부평구 길주로508번길 7 영업시간 : 16:00 ~ 22:00 (월~토) 휴무일 : 매주 일요일 골목 중 제일 안쪽에 위치해있다. 금요일 저녁/토요일 저녁시간 대에 주로 갔는데 갈 때마다 거의 모든 자리가 채워져있을 정도로 인기가 많다. (웨이팅을 한 적은 없다!) 늘 먹는 제일 좋아하는 조합 삼겹살/하얀살(항정살)을 시켰다. 고기 가격 - 모든 고기 종류가 13000원(150g 기준) - 스페샬 세트(종류 별로 골고루 섞여있음) 소 38000원(450g 기준) : 3인분을 시키는 것보다 1000원 저렴하다!..

일상/[맛집] 2022.01.23

[삼성역 맛집] 노티드 도넛 솔직 후기(줄 서는 맛집/도넛 맛집/디저트 맛집)

최근 시작한 맛집 탐방 예능 "줄 서는 식당" 1화에 나오는 노티드 도넛 솔직후기! 처음 노티드 도넛이 오픈했을 때 부터 지금까지 인기가 여전한 도넛 노티드! 최근 맛집예능 줄 서는 식당 1화에도 나와서 너무 맛있게 먹는 모습에 더욱 가고 싶어졌다ㅎㅎ 평소에도 가보고 싶었지만, 주말엔 줄이 길고... 마침 평일에 시간이 비어서 다녀왔다! 주소 : 서울특별시 강남구 테헤란로103길 9 1F 번호 : 070-4143-9377 영업시간 : 10:00 - 21:00 삼성역 8번출구에서 도보 3~5분 거리에 위치해 있다. 외관은 무척이나 깔끔했고, 평일 2시쯤 가니 웨이팅이 하나도 없고 널널했다! 들어가자마자 문 앞에 있는 노티드 캐릭터 풍선! 판매중이었다. 이 외에도, 볼펜/그립톡/인형 등등 다양한 굿즈를 판매..

일상/[맛집] 2022.01.20

[코드로 배우는 스프링 웹 프로젝트] 11강. 화면 처리2 (조회 페이지/게시물 수정/게시물 삭제 처리)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 11.4 조회 페이지와 이동 11.4.1 조회 페이지 작성 : 조회 페이지는 입력 페이지와 거의 유사하지만 게시물 번호(bno)가 출력된다는 점과 모든 데이터가 읽기 전용으로 처리된다는 점이 가장 큰 차이이다. 게시물의 조회는 BoardController에서 get() 메소드로 구성한다. BoardController.java 일부 //글 조회 메소드 @GetMapping("/get") public void get(@RequestParam("bno") Long bno, Model model) { log.info("/get.."); model.addAttribute("board", service.get(bno)); } get...