전체 글 203

카프카 기본 개념

KafkaApache Kafka 공식 페이지에서 "높은 성능의 데이터 파이프라인, 분석 스트리밍, 테이터 통합을 위해 사용하는 분산 이벤트 스트리밍 플랫폼이"라고 소개한다.분산 이벤트 스트리밍 플랫폼분산(Distributed)여러 서버에 걸쳐 분산된 아키텍처로 구성된 시스템을 의미한다.이벤트(Event)애플리케이션에서 발생하는 어떤 사건이나 상태 변화를 의미한다. 게시물 조회, 등록, 수정 같은 것들이 될 수 있다.스트리밍(Streaming)데이터가 지속적으로 생성되고, 이를 실시간으로 처리하고 소비할 수 있도록 설계된 방식이다.이벤트 스트리밍이벤트 스트리밍은 이벤트(또는 데이터)를 지속적으로 처리, 저장, 전달하는 기술이다.Kafka를 구성하는 요소(들)Kafka Cluster카프카 클러스터는 주키퍼,..

Study/kafka 2024.06.23

elasticsearch join type field

엘라스틱서치 조인 가이드 문서 링크 https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html#parent-join 엘라스틱서치는 Parent-join이라는 것을 제공함. The join data type is a special field that creates parent/child relation within documents of the same index. The relations section defines a set of possible relations within the documents, each relation being a parent name and a child name. `join` 타입은 동일..

Study/elasticsearch 2023.08.05

Elasticsearch: 애널라이저, 토크나이저, 노멀라이저

애널라이저는 9개 이상의 캐릭터 필터, 1개의 토크나이저, 0개 이상의 토큰 필터로 구성된다. 동작 역시 캐릭터 필터 -> 토크나이저 -> 토큰 필터 순서로 수행된다. 애널라이저는 입력한 텍스트에 캐릭터 필터를 적용하여 문자열을 변형시킨 뒤 토크나이저를 적용하여 여러 토큰으로 쪼갠다. 쪼개진 토큰의 스트림에 토큰 필터를 적용해서 토큰에 특정한 변형을 가한 결과가 최종적으로 분석 완료된 텀이다. 엘라스틱서치는 애널라이저의 동작을 테스트할 수 있는 API를 제공한다. example GET _analyze { "analyzer": "standard", "text": ["Hello, HELLO, World!"] } //result { "tokens": [ { "token": "hello", "start_offs..

Study/elasticsearch 2023.08.05

Elasticsearch object와 nested 타입 비교

object와 nested 모두 필드 하위에 다른 필드가 들어가는 계층 구조의 데이터를 담는 타입이다. 이 둘은 유사하지만 배열을 처리할 때 동작하는 방식이 다르다. object vs. nested object 용도: 일반적인 계층 구조에 사용 성능: 상대적으로 가벼움 검색: 일반적인 쿼리를 사용한다. nested 용도: 배열 내 각 객체를 독립적으로 취급해야 하는 특수한 상황에서 사용 성능: 상대적으로 무거움. 내부적으로 숨겨진 문서를 생성 검색: 전용 nested 쿼리로 감싸서 사용해야 한다. object type JSON 문서는 필드의 하위에 다른 필드를 여럿 포함하는 객체 데이터를 담는다. object가 객체 데이터의 기본 타입이다. object와 nested의 차이는 객체 배열에 대해 쿼리할 때..

Study/elasticsearch 2023.08.05

카프카 프로듀서, 컨슈머 기본 동작

프로듀서 기본 동작 프로듀서는 카프카의 토픽으로 메시지를 전송하는 역할을 담당한다. 프로듀서의 디자인은 아래 다이어그램과 같다. ProducerRecord는 카프카로 전송하기 위한 실제 데이터 topic, partition, key, value로 구성 카프카는 특정 토픽으로 값(메시지)을 전달하기 때문에 topic/value는 필수값. 특정 파티션을 지정하기 위한 레코드의 파티션과 정렬을 위한 키는 선택사항 레코드는 프로듀서의 send() 메서드를 통해 serializer -> partitioner를 거친다. 프로듀서 레코드가 파티셔너를 지정했다면 파티셔너는 아무 동작도 하지 않고 지정된 파티셔너로 레코드를 전달함. 파티션을 지정하지 않은 경우 키를 가지고 파티션을 선택해 레코드를 전달한다. 이때 기본적..

Study/kafka 2023.02.20

카프카 용어

kafka 카프카 또는 카프카 클러스터. 아파치 프로젝트 애플리케이션 이름. 여러 대의 브로커를 구성한 클러스터를 의미한다. broker 카프카 애플리케이션이 설치된 서버 또는 노드 producer 카프카로 메시지를 보내는 역할을 하는 클라이언트를 총칭한다. consumer 카프카 애플리케이션이 설치된 서버 또는 노드 message 프로듀서가 브로커로 전송하거나 컨슈머가 읽어가는데이터 조각 topic 카프카는 메시지 피드를 토픽으로 구분하고, 각 토픽의 이름은 카프카 내에서 고유하다. partition 하나의 토픽이 한 번에 처리할 수 있는 한계를 높이기 위해 토픽 하나를 여러 개로 나눠 병렬 처리가 가능하게 만든 것 토픽은 논리적 개념이고 물리적으로 저장되는 곳은 파티션임. 토픽은 최소 하나의 파티션을..

Study/kafka 2023.02.19

카프카 기본

기본 분산 시스템 분산 시스템은 네트워크상에서 연결된 컴퓨터들의 그룹. 단일 시스템이 갖지 못한 높은 성능이 목표 성능 뿐 아니라 하나의 서버 또는 노드 등에 장애가 발생할 때 다른 서버/노드가 대신 처리하므로 장애 대응 면에서도 탁월 부하가 높은 경우 확장도 용이하다. 카프카 역시 마찬가지. 최초 구성한 클러스터 리소스가 한계치에 도달했을 때, 브로커를 추가하는 방식으로 확장 가능하다. (이미 메시지가 들어오는 상태에서 줄이는 것도 쉽게 가능한가?) 페이지 캐시 다른 메시징 시스템은 메시지를 전송하고 나면 메시지를 삭제함. 아직도 그런지 모르겠음. 2018에 나온 카프카, 데이터 플랫폼의 최강자는 그렇게 설명했음. 카프카는 디스크에 세그먼트 형식으로 메시지를 저장함. 디스크에 저장하기 때문에 어떤 이유..

Study/kafka 2023.02.19

ports and adapter 패턴 또는 헥사고날 아키텍처

이 글은 제 주관이 많이 들어있고 팩트와 다를 수 있습니다. 지적해주시면 고치겠습니다. 회사에서 신규 프로젝트에 포트 앤 어댑터 패턴을 도입하기로 했다. 헥사고날 아키텍처보다 포트 앤 어댑터 패턴이라는 말이 더 명료하게 이 패턴을 설명하는 것 같다. 어쨌든 공부할 시간이 많지는 않았고 짧게 공부한 기록을 남겨본다. 포트 앤 어댑터 패턴에 대해 이야기하기 전에 전통적(?)인 레이어드 아키텍처를 먼저 짚고 넘어가야 할 것 같다. 레이어드 아키텍처는 프레젠테이션, 도메인, 영속 세 개의 계층으로 이루어진 아키텍처다. 프레젠테이션 계층은 HTTP 요청을 처리한다. 도메인 계층은 비즈니스 로직을 담당하는 가장 핵심 레이어다. 마지막으로 영속 계층은 데이터 영속화를 담당한다. 레이어드 아키텍처의 규칙은 간단하다. ..

Study 2023.01.25

연습용 주문 서버 만들기 03 메뉴 목록 조회 API

연습용 주문 서버 만들기 git repository 01 Kotlin/Spring 멀티모듈 프로젝트 구성 02 멤버십 발급 API 작성하기 03 메뉴 목록 조회 API 등록 API는 따로 만들지 않고, 메뉴가 고정되어 있다고 가정하겠습니다. 메뉴 조회는 누구나 가능하다. 프로젝트 실행 시 기본 메뉴 생성 역시 매우 간단한 기능이므로 딱히 부연 설명할 게 없습니다. 메뉴 조회 API Controller @RestController @RequestMapping(V1_API_PREFIX) class MenuViewApiController( private val menuService: MenuService ) { @GetMapping("/menu") fun getAllMenu(): ResponseEntity {..

Spring 2023.01.17

연습용 주문 서버 만들기 02 멤버십 발급 API 작성하기

연습용 주문 서버 만들기 git repository 01 Kotlin/Spring 멀티모듈 프로젝트 구성 02 멤버십 발급 API 작성하기 03 메뉴 목록 조회 API 가장 간단한 아이디 발급 API부터 만들겠습니다. 지난 번 글에도 말했듯이 편의상 회원가입없이 아이디 발급 요청하면 임의의 UUID를 발급하겠습니다. 이 아이디를 membership이라고 하겠습니다. 사용자는 나중에 발급받은 membership를 가지고 포인트를 충전하거나 결제할 수 있습니다. 구현할 요구사항은 아래와 같습니다. 사용자는 누구나 membership 발급 API를 통해 멤버십 번호를 발급받을 수 있다. 따로 무엇을 검증하지 않을 것이므로 매우 간단한 구현이 되겠습니다. 아이디 발급은 실패하는 케이스가 없다고 가정하겠습니다. ..

Spring 2023.01.15

연습용 주문 서버 만들기 01 Kotlin/Spring 멀티모듈 프로젝트 구성

연습용 주문 서버 만들기 git repository 01 Kotlin/Spring 멀티모듈 프로젝트 구성 02 멤버십 발급 API 작성하기 03 메뉴 목록 조회 API Kotlin + Springboot로 주문 서버를 만드는 연습을 해보겠습니다. 최대한 간략하게 구성하기 위해 아래 네 개의 API만 만들겠습니다. 아이디 발급 API 편의상 회원가입 없이 아이디 발급 요청하면 임의의 아이디 발급 메뉴 조회 API 포인트 충전 API 결제 API 이번주 인기 메뉴 API 요구 사항 누구나 고유한 아이디를 발급 받을 수 있습니다. 누구나 메뉴를 조회할 수 있다. (메뉴 등록은 안 만들겠습니다.) 고유한 아이디에 포인트를 충전할 수 있다. 한 아이디를 여러 명이서 쓸 수도 있기 때문에 동시성을 고려해보겠습니다...

Spring 2022.12.22

가상 요소 셀렉터로 신규 등록 게시물 NEW 표시하기

가상요소 셀렉터 가상 요소란? 가상 요소란 HTML에 정의도지ㅣ 않은 요소를 CSS로 새롭게 만들어낸 요소다. 가상 요소 사용법 CSS에서 태그, 클래스, ID 셀렉터 뒤에 ::before , ::after 를 붙여 content 속성과 조합한 후 가상 요소를 만든다. content 속성에는 해당 위치에 넣고 싶은 텍스트나 이미지 등 콘텐츠를 적는다. content 속성으로 표시한 텍스트는 선택 및 복사 붙여넣기를 할 수 없다. 즉, 스크롤이 안 된다. 스크롤을 지원해야 한다면 가상요소 콘텐트 대신 HTML 텍스트를 사용해야 한다. before와 after ::before 는 요소 앞에, ::after는 요소 뒤에 가상 요소를 삽입한다. 가상 요소 셀렉터로 신규 등록 게시물 NEW 표시하기 HTML 가상..

Study/HTML,CSS 2022.12.19

[오브젝트06] 메시지와 인터페이스

클라이언트-서버 모델 협력은 어떤 객체가 다른 객체에게 무언가 요청할 때 시작된다. 메시지는 객체 사이의 협력을 가능하게 하는 매개체다. 객체가 다른 객체에 접근할 수 있는 유일한 방법은 메시지를 전송하는 것뿐. 객체는 희망하는 일을 메시지라는 형태로 전송하고, 수신 객체는 요청을 적절히 처리한 뒤에 응답한다. 이 메시지를 매개로하는 요청과 응답의 조합이 두 객체 사이의 협력을 구성한다. 두 객체 사이의 협력 관계를 설명하기 위해 사용하는 전통적인 메타포는 클라이언트-서버 모델이다. 협력 안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다. 협력은 클라이언트가 서버의 서비스를 요청하는 단방향 상호작용이다. 영화 예매 시스템이 있다면 이런 협력 관계를 가질 수 있다. Sc..

Study/오브젝트 2022.11.30

[요약] 한 개의 메소드만 갖는 계층형 컨트롤러/서비스 패키지 스타일 - 기계인간 John Grib

방대한 서비스 클래스를 어떻게 잘 나눌 수 있을까? 고민한 적 많았는데 우연히 이 글을 읽었다. 기회가 되면 실제 프로젝트에 적용해보고 싶다. (기록) 한 개의 메소드만 갖는 계층형 컨트롤러/서비스 패키지 스타일 - 기계인간 John Grib 요약 한 개의 메소드만 갖는 계층형 패키지 스타일 Java/Spring을 사용해 애플리케이션을 만들다보면 Controller-Service-Repository 패키지 안에서 영원히 헤매고 다니게 됨. 프로젝트에 익숙해지기 전에는 뭐가 어디에 있는지 알 수 없음. 그래서 한 가지 실험을 했음 * 집합의 포함관계를 강력히 의식한 계층형 구조로 패키지를 구성 * 한 가지 용도를 암시하는 클래스 이름으로 행위와 책임을 제한(SRP) * 서비스/컨트롤러를 만들 때 publi..

카테고리 없음 2022.11.30

Spring Scheduler 테스트 하기

Spring Scheduler Test Spring Scheduler 사용법은 매우 간단하다. SpringBoot는 스타터에 스케줄러를 내장하고 있기 때문에 별도의 의존성을 추가하지 않고도 사용할 수 있다. 초간단 Spring Scheduler 적용에서 스케줄러를 동작시키는 방법을 정리했는데, cron expression 말고도 fixedDelay 속성을 이용하면 지정한 주기로 스케줄러를 실행시킬 수 있다. @Scheduled(cron = "0 0,30 3 * * *") // 매일 3시, 0시 30분 fun publishReward() { log.info("START === PUBLISH::REWARD::EVENT::DAILY::SCHEDULER ${UUID.randomUUID()}") rewardSer..

Spring 2022.11.28

call by value

우연히 https://www.facebook.com/tobyilee/posts/10222585502760852 이 글을 읽고 지금까지 Call by reference와 Call by reference에 대해 잘못 알고 있었다는 사실을 알았다. 지금까지는 Java에서 call by value는 기본 타입 호출, call by reference는 그 외 모든 레퍼런스 타입을 호출할 때 사용한다고 알고 있었지만, 사실은 Java는 모두 call by value로 동작한다. call by reference에서 말하는 by reference와 Java에서 말하는 reference value는 다르다. Call by value가 뭔가? 함수가 호출되면 메모리에서 함수를 위한 임시 공간을 할당한다. Call by v..

Java 2022.09.14

Springboot 통합 테스트로 불안한 리팩토링에서 벗어나기

통합테스트를 작성한 경험을 기록했습니다. 아래와 같은 순서로 말해보겠습니다. 통합테스트 작성 계기 웹 레이어 테스트와 통합테스트 웹 레이어 테스트 작성 통합 테스트 작성 군말 통합 테스트 작성 계기 제가 참여하는 프로젝트는 구조를 크게 3계층으로 나눌 수 있습니다. 아주 흔한 구조입니다. Web Service Repository 저는 이중에서 서비스 레이어에 대한 단위 테스트만 집중해서 작성했습니다. (모든 레이어를 꼼꼼하게 테스트해야 한다고 생각하지만 내부적인 협의점이 그것이었습니다.) 라이브러리에 의존하는 단위 테스트를 하면서 가장 불편했던 점은 프로덕션 코드를 변경하면 테스트 코드를 함께 변경해야 한다는 것이었습니다. 간단한 예시를 들어보겠습니다. 불필요한 부분은 생략하겠습니다. //제품 코드 fu..

Spring 2022.08.24

Spy와 Mock의 차이. 그리고 Spy 사용

Mock과 Spy는 테스트 더블(대역)이다. Test Double은 테스트를 목적으로 프로덕션 오브젝트를 대체하는 오브젝트를 뜻한다. ‘Test Double’이라는 말 때문에 처음에는 잘 이해가 되지 않았는데 영어권에서는 스턴트 맨을 스턴트 더블이라고 한단다. 그러니까 테스트 더블은 말하자면 테스트를 목적으로 진짜 오브젝트를 대신하는 테스트 계 스턴트맨이라고 볼 수 있다. Mock Mock은 가짜 오브젝트다. ‘가짜 오브젝트’란 뭘까? 간단한 Post 클래스를 작성해서 예시를 들어본다. class Post( val id: Long? = null, val title: String, val content: String, ) { fun create(title: String, content: String) { ..

카테고리 없음 2022.07.31

외부 시스템에 덜 의존하게 만들기

이전 글 예외처리에 대한 잡설에 이어서 지난 몇 달 간 아파트 입주민이 사용하는 방문예약 시스템을 개발했다. 입주민이 방문 차량을 예약하면 우리 시스템은 아파트 차단기를 관리하는 외부 시스템에 요청을 보내서, 예약된 차량이 간편하게 입차할 수 있게 하는 서비스다. 이 시스템의 아이덴티티는 예약하면 차단기가 열린다는 것이다. 그런데 우리는 차단기 회사가 아니고 차단기로 예약을 요청을 대신 보내주는 대리자 역할이다. 따라서 외부 시스템에 크게 의존적일 수밖에 없는 서비스다. 플로우는 복잡하지 않는데 간략하게 설명하면 세 단계로 볼 수 있다. 사용자가 앱에서 방문 차량을 예약한다. 메인 서버에서 방문 예약 서버로 요청을 위임한다. 방문 예약 서버는 외부 시스템인 차단기 관제 서버에 예약 내역을 전송한다. 사용..

ERROR!!!!!!! 2022.07.13

Learning SQL 스터디 7,8,9장 정리

Learning SQL 7,8,9장 요약 문자열 데이터 처리 문자열 데이터를 처리할 때는 다음 자료형 중 하나를 사용함. char 고정 길이 문자열. 지정한 크기보다 문자열이 작으면 나머지 공간을 공백으로 채운다. MySQL char는 최대 255자까지 허용한다. varchar 가변 길이 문자열. 최대 65,535자를 허용한다. text 가변 길이 문자열. 최대 4GB 크기 문서를 저장할 수 있다. MySQL에는 tinytext, textm mediumtext, longtext 등이 있다. 문자열 생성 문자열 길이가 최대 크기를 초과할 때 MySQL6.0 이후부터는 strict 모드로 동작하기 때문에 에러가 발생한다. 6.0 이전 버전은 경고만 발생하고 초과되는 문자열은 잘랐다. 다시 이 모드를 사용하려..

카테고리 없음 2022.06.12

TOSS SLASH22 지속 성장 가능한 코드를 만들어가는 방법 요약

TOSS SLASH22 지속 성장 가능한 코드를 만들어가는 방법 요약 패키지 구조, 레이어 구조 얘기도 재밌지만 마지막에 나오는 모듈 구조 이야기가 재밌네요. 멀티 모듈 플젝으로 구성해서 비즈니스 레이어 -> 프레젠테이션 레이어로 역류 참조할 수 없도록 구조적으로 만들고 스프링도 모듈로 격리시켜서 비즈니스 레이어가 있는 모듈에서는 오직 순수한 비즈니스 로직만 있게 만드는 구조는 엄청 나네요 토스페이먼츠가 만드는 소프트웨어에 대한 발표. 토스페이먼츠 팀은 코드 품질에 관심을 지속해서 관심을 가지고 확장 가능한 방식으로 코드를 관리하고 있음. 처음부터 최고의 설계, 최고의 품질을 유지하는 게 아닌, 최소 규칙을 지켜 동작하는 소프트웨어를 빠르게 만든다. 코드 한 줄 한 줄에 왜?라는 질문을 하는 것을 중요하..

카테고리 없음 2022.06.11

LearingSQL #4,5,6

4. 필터링 SQL 문에는 SQL 문으로 수행되는 행 수를 제한하기 위해 하나 이상의 필터조건을 포함하는 `where` 절이 선택적으로 포함된다. 또한 `select` 문에는 그룹화된 데이터의 필터 조건을 포함하는 `having` 절이 포함된다.(103p)조건 평가 where 절은 and 또는 or 연산자로 구분된 하나 이상의 조건을 포함한다. not 연산자는 로 바꿔 사용할 수도 있다. 를 사용하는 것이 이해하는 게 더 쉽다고 설명하는데, 개인적으로는 not 이 더 이해하기 쉽다. 조건 작성 조건은 하나 이상의 연산자와 하나 이상의 표현식으로 구성된다. 표현식은 다음 중 하나일 수 있다. - 숫자 - 테이블 또는 뷰의 열 - Maple Street 과 같은 문자열 - concat 과 같은 내장 함수 -..

Study 2022.06.02

type check는 왜 필요한가?

geeknews 보다가 재밌는 글 발견해서 요약 원글 링크 『프로그래밍 언어 속 타입』 책 소개 | GeekNews 불편하고 딱딱하기만 한 타입 검사는 왜 필요할까? 버그란 프로그램이 의도와 다르게 동작하는 경우를 뜻한다. 그렇다면 버그가 없는 프로그램을 만들어야 할 텐데 그건 불가능하다. 버그를 고치는 것도 어렵지만 찾는 게 더 어려울 때도 있다. 도대체 어디서 이 버그가 발생하는 거지? 찾지 못해서 고치지 못하는 버그도 많다. 그럼 어떻게 하면 버그를 잘 찾을 수 있나? 버그를 이해할 필요가 있다. 버그의 가장 흔한 원인 중 하나는 type error다. 타입 오류가 뭔가? 그걸 알려면 타입이 뭔지 먼저 답해야 한다. 타입은 프로그램에 존재하는 값을 그 종류에 따라 분류한 것이다. 값은 변수에 저장되..

Study 2022.05.18

ConstraintValidator 그리고 유효성 검사에 대한 고민..

스프링에서는 JSR303 기반 애노테이션 기반으로, 일관성 있는 유효성 검증을 진행할 수 있다. @NotNull , @NotEmpty , @Email 등은 검증 가능하지만, 비즈니스 요구사항이 따르는 유효성 검증은 별도로 해야 한다. 예시 차랑 예약 시스템이고 예약 기간에 대한 유효성 검증이 필요하다. 검증 조건은 간략하게 두 가지 정도로 한다. 존재하는 주차장이어야 한다. 퇴차일시가 입차일시보다 앞이면 안 된다. 예약일수가 내부적으로 정해진 최대 예약 일수를 초과해서는 안 된다. 데이터는 아래와 같은 형태로 들어온다. data class 차량예약DTO( var zoneId: Int = 0, //예약할 주차장ID var carNo: String = "", var startDateTime: LocalDat..

Spring 2022.05.16

Spring ArgumentResolver

클라이언트와 통신하다보면 전처리가 필요할 때가 있다. 간단한 예로 session에서 userId를 가져와야 한다고 가정해보겠다. HttpSession에서 UserID를 받아온다. UserID를 UserAuth로 변환해서 서비스 레이어로 넘긴다. @PostMapping("/api/sign-up") public ResponseEntity signUp(@RequestBody SignUpReq signUpReq, HttpSession session) { Long userId = (Long) session.getAttributre("userId"); loginService.signUp(signUpReq, AuthUser.of(userId)); return ResponseEntity.ok().build(); } C..

Spring 2022.05.12

AWS VPC

Amazon Virtual Private Cloud를 이용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점 있고, 기존 네트워크와 매우 유사하다. VPC 특징 계정 생성 시 default로 VPC를 만들어 줌. EC2, RDS, S3 등 서비스 활용 가능 서브넷 구성 보안 설정 VPC Peering(VPC 간 연결) IP 대역 지정 가능 VPC는 하나의 Region에만 속할 수 있다. 다른 리전으로 확장 불가능하다. VPC 구성 요소 Availability Zone Subnet(CIDR) Internet Gateway Network Acess Control List/security group Route Table NA..

카테고리 없음 2022.05.11

docker-compose로 mysql 올렸는데 unknown database 에러 발생

docker-compose 파일로 데이터베이스 스키마를 만든 다음, 스프링 애플리케이션을 실행하려고 하니 unknown database라는 메시지가 떴다. 워크벤치로 확인할 때는 정상적으로 접근할 수 있었다. 3306 포트를 조회했을 때 몇 가지 프로세스들이 보여서 3306 포트를 사용하는 것들을 다 kill 해버렸다. 다른 건 다 죽었는데 mysqld는 죽여도 죽여도 다시 살아났다. 그렇게 그냥 토요일 공부를 접었고 일요일이 되었다. 여기서도 마찬가지로 로컬 mysql이 실행 중인지 확인하고 죽인 뒤에 다시 시도하라는 이야기가 나왔다. $mysqladmin shutdown # 3306 포트로 실행 중인 mysql이 죽기는 하지만 바로 다시 살아남 $mysql.server stop # 3306 포트로 실..

ERROR!!!!!!! 2022.05.08

예외처리에 대한 잡설

예외처리에 대해 별 생각 없었다. 문제 생기면 throw 날리고, Advice에서 적절히 변환해서 클라이언트에 전달하면 되는 거 아닌가? 이런 생각은 서비스에 대한 몰이해에서 오는 것 같다. 예외처리는 그렇게 간단하지 않다. 오히려 몹시 까다로운 영역이다. 내가 담당하는 방문차량 예약 서비스에서 자주 발생하는 예외는 이렇다. 사용자가 예약을 신청함. 시스템은 예약이 들어오면 단지의 차단기 서버로 예약 내역을 전송함. 이때 차단기 서버가 죽어있음. 차단기 서버는 우리가 관리할 수 있는 영역이 아니다. 또 우리는 정확히 어떤 이유로 요청이 전송이 안 되는 것인지 알 수도 없다. Connection time out이 발생하면 단지 저쪽 서버에 문제가 생겼다고 추측할 수 있을 뿐이다. 그러면 차단기 서버 관제사..

메모 2022.05.05

SQL(1)

SQL(Structured Query Language)은 관계대수에 기초하여 RDBMS의 데이터 관리를 위해 설계된 언어 1986년 ANSI, 1987년 ISO에서 표준으로 제정 상용 DBMS 특성에 맞게 국제 표준을 확장한 독자적 버전이 존재 특징 비절차적(선언형) 언어, 필요한 데이터만 기술 인간 언어와 유사하고 간단, 명료함. SQL 구성 데이터 정의 언어 DDL: Data Definition Language 데이터베이스 내의 객체 생성 및 삭제하고 구조를 조작하는 명령어 집합 데이터가 준수해야 하는 제약조건 기술 CREATE, ALTER, DROP 등 데이터 조작 언어 DML: Data Manipulation Language DDL에 의해 정의된 테이블에서 데이터를 조작하는 명령어 집합 데이터에 ..

Study/강의 메모 2022.03.22