Laravel에서 미들웨어(Middleware)는 애플리케이션의 HTTP 요청 처리 과정에서 핵심적인 역할을 담당한다. 미들웨어는 요청(Request)과 응답(Response) 사이에서 동작하며 다양한 기능을 수행할 수 있다.1. 미들웨어의 기본 구조미들웨어는 handle 메서드를 구현하며, $request와 $next 매개변수를 받음.public function handle($request, Closure $next){ // 요청 전 처리 $response = $next($request); // 응답 후 처리 return $response;}요청 전 처리: $next($request) 호출 이전에 실행되며, 요청이 애플리케이션의 다른 부분에 도달하기 전에 동작.응답 후 처리: $n..
IT
1. API Gateway 소개API Gateway의 정의와 역할API Gateway는 클라이언트와 백엔드 서비스 사이의 중개자 역할을 하는 서버입니다. 이는 마이크로서비스 아키텍처에서 특히 중요한 컴포넌트로, 다음과 같은 주요 역할을 수행합니다:요청 라우팅: 클라이언트 요청을 적절한 백엔드 서비스로 전달.프로토콜 변환: 예를 들어, HTTP에서 gRPC로의 변환을 수행.인증 및 인가: 요청에 대한 인증을 처리하고 접근 권한을 확인.로드 밸런싱: 여러 서버 인스턴스에 트래픽을 분산.캐싱: 응답을 캐시하여 백엔드 부하를 줄이고 응답 시간을 개선.모니터링 및 로깅: API 사용량과 성능 메트릭을 수집.API Gateway가 해결하는 문제들복잡성 관리: 마이크로서비스 아키텍처의 복잡성을 클라이언트로부터 숨김...
PHP의 ?: vs ?? 연산자: 차이점과 사용법PHP에서 ?: (엘비스 연산자)와 ?? (Null 병합 연산자)는 비슷해 보이지만 중요한 차이가 있다. 두 연산자의 특징, 차이점, 그리고 적절한 사용 상황에 대해 알아보자.1. ?? (Null 병합 연산자)PHP 7.0에서 도입구문: $result = $a ?? $b동작: $a가 NULL이 아니면 $a를 반환$a가 NULL이면 $b를 반환특징: 오직 NULL 값에 대해서만 대체 값을 제공예시:$username = $_GET['user'] ?? 'Guest';이 코드는 $_GET['user']가 설정되지 않았거나 NULL일 때만 'Guest'를 사용.2. ?: (엘비스 연산자)PHP 5.3에서 도입구문: $result = $a ?: $b동작:$a가 tru..
Laravel 로 개발을 하다 보면 Facade, Singleton, Alias 라는 용어를 접할수 있게 되는데 Facade 를 공부하다보면 Alias 는 뭐지 궁금하기도하고 Singleton 을 공부하고나면 Facade 와 무슨 차이인지 궁금해질수도 있다. (Facade 도 하나의 request 생명주기 동안 static 하게 전역적으로 값을 관리할수 있기 때문) 오늘은 각 개념의 의미, 차이점, 그리고 언제 어떻게 사용하는 것이 좋은지 알아보려고 한다. Facade란?Facade는 복잡한 라이브러리의 기능을 간단한 인터페이스로 사용할 수 있게 해주는 디자인 패턴입니다. Laravel에서 Facade는 서비스 컨테이너에 바인딩된 객체에 대한 "정적" 인터페이스를 제공 Facade의 특징서비스 컨테이너..
트랜잭션의 기본 개념트랜잭션은 데이터베이스의 상태를 변경시키는 하나의 논리적 작업 단위. 트랜잭션은 다음과 같은 특징이 있다. (ACID)원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함.일관성(Consistency): 트랜잭션 전후로 데이터베이스는 일관된 상태를 유지해야 함.격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 함.지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 함. Nested TransactionsNested transactions 은 트랜잭션 내에서 또 다른 트랜잭션을 시작하는 개념. 이는 복잡한 작업을 더 작은 단위로 나누어 관리할 수 있게 해준다. 그러나 MySQL..
자바 14에서 Preview 형태로 나와 자바 16부터 정식 지원하는 record 타입 클래스가 있다. 불변 객체를 위한 클래스라고도 한다. 왜냐하면 모든 필드가 final 로 정의되기 때문이다. 사용법 public record Person( String name, int age, String gender ) { } Person person = new Person("이준호", 99, "M"); System.out.prinln(person.name()); // 이준호 소괄호 안에 필드를 정의한다. 클래스내 구현 내용이 있든 없든 중괄호가 무조건 있어야 한다. 클래스 필드에 접근 할 경우 get{필드명} 이 아닌 {필드명} 만을 사용한다. ex) person.name() 특징 모든 필드는 final 로 선..
올해 1월 OpenAI 에서 GPT 스토어(GPTs)를 출시하였는데 ChatGPT 와 외부 리소스를 연동하여 ChatGPT 의 활용폭을 좀더 넓힐수 있다. 난 크롤링한 해외 뉴스 데이터를 번역하여 내용을 요약, 큐레이션을 해보고 싶었고 금전적인 이유로 OpenAI API 를 쓸지 Gpts 를 활용할지 고민이 있었다. (사실 비용이 좀 들어도 상관없다면 OpenAI API 를 활용하는게 가장 깔끔하다.) 결국 Gpts 도 경험해볼겸 api 서버와 Gpts 를 연동해보았다. (GPT Plus 이용자만 GPTs 사용이 가능하다.) 1. GPTs 생성 화면으로 이동 2. GPTs 설정 instruction 에 작업내용에 대한 지시를 할 수 있다. GPTs 는 웹 브라우징이 가능하고 DALL·E 를 활용한 이미..
사용자 메뉴얼을 위키 형태로 만들어야 할 일이 있었는데 어떻게 구축할지 고민이 있었고 요구사항은 다음과 같았다. - 버전관리가 되면 좋겠다. - 간편하게 구현, 관리 포인트를 줄이고 싶다. (static 웹 페이지) - 관리자가 에디터로 편집 (optional) - 기존 서비스 사용자 기반 접근 권한 관리 (optional) 버전 관리는 git 으로 하면될거 같다. 그리고 optional 은 되면 좋고 안되도 괜찮은 사항이라 간편하게 구현 할수있는 것을 중점으로 알아보았다. wiki.js mkdocs sphinx 알아본 바 오픈소스로 위키를 구현할수 있는 프로젝트는 위 3가지 정도가 메이저하게 쓰이는 것 같고 특징은 다음과 같다. wiki.js - 상대적으로 복잡한 구현 DB 와 호스팅이 필요하기때문에 ..