본문 바로가기

전체 글95

(스프링) 필터 / 인터셉터 회사 코드를 보다가 공통적으로 여러 API에 모두 들어가야 하는 기능은 Spring AOP, 필터를 사용하고 있는 것을 알게 되었다.스프링 필터, 인터셉터, AOP에 대해서 공부/정리 필요성을 느끼게 되었고 먼저 스프링 필터와 인터셉터에 대해서 정리하고자 한다. 애플리케이션 여러 로직에서 공통적으로 관심이 있는 것을 공통 관심사(cross-cutting-concern)라고 한다.예를 들어 등록, 수정, 변경하는 API가 있다고 할때 로그인하는 사용자만 해당 기능을 사용하도록 해야 한다면 모든 API의 앞부분에 로그인 한 사용자만 필터링 하는 로직을 넣어주어야 한다.또는 모든 API에 로그를 찍는 기능을 넣어야 한다면 모든 API의 앞부분에 로그 찍는 코드를 넣어주어야 한다.이처럼 로그인하는 사용자를 필터.. 2024. 10. 6.
Git amend, reset, revert, cherrypick, rebase 회사에서 깃을 사용하다보니까 이력을 변경해야 하는 명령어들을 사용해야 하는 경우가 많이 발생했다.그래서 해당 명령어들을 한번 정리하고자 한다.참고로, 밑의 명령어들은 이력을 변경하는 경우가 많으므로 혼자 사용하는 브랜치에서 하는 것이 좋다. [참고]HEAD : 내가 지금 작업하는 브랜치를 가리키는 포인터Force Push : 우리가 이미 원격 저장소에 올린 커밋을 수정할때 사용함 -> 혼자 사용하는 브랜치에서 해야함 . 같이 사용하는 dev, master에서는 되도록 피해야함. Git amend 기능커밋을 한 후, 나중에 이전에 한 커밋에 더하고 싶은 내용이 있는 경우 사용한다.깃 크라켄에서는 아래의 체크박스를 이용하며 된다. Git reset 기능브랜치에 여러 커밋이 있을때 특정 커밋 시점으로 커밋을 .. 2024. 7. 21.
리액티브 프로그래밍(Reactive Programming) 회사에서 Spring Webflux 기반의 프로젝트를 하게 되면서 리액티브 프로그래밍에 대해서 관심이 생겼다.이에 대해서 정리하는 글을 쓰고자 한다. 개요는 크게 리액티브 시스템, 리액티브 프로그래밍, 리액티브 스트림즈로 하고자 한다. 리액티브 시스템Reactive System은 말 그대로 즉각적으로 반응하는 시스템이라는 뜻이다.개발적으로 좀더 설명해보면 클라이언트의 요청에 즉각적으로 반응해주는 시스템이라는 뜻이다. 리액티브 원칙에는 4가지가 있다.1. Responsive(반응형)    사용자에게 빠르고 일관된 응답시간을 제공함으로써 서비스 품질을 높이는데 기여한다. 2. Resilient(회복성)     시스템 장애가 발생하더라도 계속 응답한다. 3. Elastic(탄력성)     다양한 워크로드(작업.. 2024. 5. 11.
Intellij 세팅 가이드 가끔 Intellij를 사용해서 새 프로젝트를 열면 빨간줄이 뜨면서 빌드가 잘 안될때가 있다. 이럴때를 대비해서 각종 삽질을 한 것을 기억하고자 Intellij 세팅에 대한 글을 포스팅하고자 한다. 세팅에는 인텔리제이 세팅과 프로젝트 관련한 세팅이 있다. 프로젝트 폴더를 열고 오른쪽 버튼을 클릭해서 Open Module Setting을 클릭하면 이것이 프로젝트 관련한 세팅이다. 아니면 맥북 위의 탭의 Intellij에서 Setting을 누르면 이것은 인텔리제이 관련 세팅이다. Intellij의 gradle은 gradle.properties를 따라감. 2024. 3. 10.
[네트워크] connection/read timeout, keep-alive, idle time 회사에서 라이브 배포를 하고서 모니터링을 하다가 평소에 발생하지 않는 Exception이 발생하고 있다는 것을 알았다. 알고보니 이것이 connection timeout, idle time 설정과 관련이 있다는 것을 알고서 이에 대해서 정리하고자 한다. Connection timeout, read timeout란? 일반적으로 네트워크에서 클라이언트와 서버가 데이터를 송수신하기 위해서 TCP(Transmission Control Protocol - 전송 제어 프로토콜)를 사용한다. 이 프로토콜을 사용하면 데이터를 송수신 전에 클라이언트와 서버가 연결을 하는 과정을 거친다. 3-way handshake라는 과정을 거쳐서 연결 과정을 가지는데 연결 과정은 아래 그림과 같다. 먼저 Connection timeo.. 2024. 1. 28.
객체지향의 사실과 오해 - 3장, 4장 3장. 타입과 추상화 "일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (휼륭한)컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다." 추상화의 목적 : 모든 경우에 복잡성을 이해하기 쉬운 수준으로 단순화하는 것 분류는 객체지향의 가장 중요한 개념 타입 : 공통점을 기반으로 객체들을 묶기 위한 틀, 객체를 분류하기 위해서 사용하는 개념 객체가 어떤 행동을 하느냐에 따라서 객체의 타입이 결정됨(메서드를 호출을 통해서 어떤 객체가 실행되는지를 결정) -> 다형성 : 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력 객체가 동일한 타입으로 분류되기 위해서는 공통의 행동을 가져야 함(인터.. 2023. 8. 20.
객체지향의 사실과 오해 - 1장, 2장 1장. 협력하는 객체들의 공동체 "시너지를 생각하라. 전체는 부분의 합보다 크다." 객체지향의 목표는 실세계를 모방하는 것이 아니라 오히려 새로운 세계를 창조하는 것이다. "실세계의 모방이라는 객체지향의 개념은 휼륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하지만 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하기에는 매우 효과적이다" 객체지향에서 중요한 세가지 개념 - 역할, 책임, 협력(요청과 응답을 통해) (ex) 커피공화국 - 손님, 캐시어, 바리스타 객체(: 손님) 메세지(: 손님의 요청) 메서드(: 손님의 요청을 처리하는 방법) 객체는 메세지를 통해서 협력적이다(객체가 다른 객체를 호출하는거 이런거 말하는거 같음) 객체는 상태와 행동을 가진다(필드와 메서드를 가진다는 의미인.. 2023. 8. 19.
객체지향 사실과 오해 책 리뷰 아키텍처에 대해서 제대로 학습해보기로 하면서 객체지향의 사실과 오해, 오브젝트, 클린 아키텍처라는 책을 읽기로 하였다. 그중에서 객체지향의 사실과 오해라는 책을 먼저 읽었는데 간략하게 책 리뷰와 그리고 각 장 별로 요약한 것을 정리하고자 한다. 먼저 이 책은 다른 객체지향의 책들이나 자바 개념서에서 객체지향에 대해서 설명할때 나오는 객체지향의 5대 원칙인 SOLID에 대해서 소개하지도 않고, 객체지향의 4대 특징인 추상화, 캡슐화, 상속, 다형성에 대해서 코드로 어떻게 자바 문법을 구성해야 하는지 그런것도 설명하지 않는다. 보통 자바 개념서나 다른 객체지향에 책에서는 객체지향에 대해서 "객체지향은 실세계를 모방한 것"이라고 말하면서 객체와 클래스를 붕어빵과 붕어빵 틀로 설명하는 것에 대해서 약간의 관점을.. 2023. 8. 18.
데이터베이스 인덱스 1 - 인덱스 개념, 종류 등 데이터베이스 인덱스란? 데이터베이스에서 데이터의 조회 속도를 높일 수 있는 자료구조이고, 주로 where 절에서 사용된다. 인덱스의 사전적인 의미로는 색인이다. 색인은 쉽게 찾아볼 수 있도록 일정한 순서에 따라서 놓은 목록을 말한다. 책으로 비유하자면 목차에 비유할 수 있다. 우리가 책에서 원하는 내용을 찾는다고 가정하면, 책의 모든 페이지를 찾아보는 것은 시간이 많이 걸린다. 이를 위해서 책의 뒷편에는 핵심 키워드 기준으로 그 키워드가 어느 페이지에 있는지 알려주는 페이지가 있다, 즉, 데이터베이스에서도 데이터를 조회하기 위해서 모든 테이블을 다 탐색하면 시간이 오래 걸리므로 데이터와 데이터의 위치를 저장해두는 자료구조를 따로 생성해서 이를 통해서 빠르게 데이터 조회가 가능하도록 한다. 이것이 바로 데.. 2023. 5. 31.