분류 전체보기 33

[React.js] React 상태 끌어올리기 (Lifting State Up)

React 상태 끌어올리기 (Lifting State Up)란 무엇인가?React에서 컴포넌트 간 상태를 관리하는 것은 애플리케이션 설계의 핵심 요소입니다. 컴포넌트가 서로 독립적으로 동작하면서도 데이터가 필요할 때 어떻게 효율적으로 교환할 수 있을까요? 이를 해결하기 위해 "상태 끌어올리기 (Lifting State Up)"라는 패턴이 자주 사용됩니다.🚀 상태 끌어올리기의 개념상태 끌어올리기란 React에서 두 개 이상의 컴포넌트가 동일한 데이터를 필요로 할 때, 그 데이터를 최상위 공통 조상 (Common Ancestor) 컴포넌트로 이동시키는 것을 의미합니다. 이로 인해 하위 컴포넌트는 props를 통해 데이터를 공유하고, 최상위 컴포넌트는 상태를 관리하는 역할을 맡습니다.🚀 왜 상태를 끌어올려..

Framework/React.js 2024.12.25

[SQL] Oracle 계층형 질의 (START WITH, CONNECT BY, ORDER SIBLINGS BY, SYS_CONNECT_BY_PATH)

🚀 계층형 질의 (START WITH, CONNECT BY)계층형 질의를 이용해 EMP 테이블에서 사원간의 서열을 출력한다.START WITH와 CONNECT BY 절을 이용하면 LEVEL을 출력할 수 있다.START WITH 절은 루트노드를 지정 CONNECT BY 절은 부모노드와 자식노드 간의 관계를 지정우선 EMP 테이블의 전체 데이터를 보면 아래와 같다.위와 같은 데이터가 있을때 EMPNO와 MGR를 보면 상하관계를 확인할 수 있다. MGR가 상위이다. 상하관계를 간단히 나타내면 아래 그림과 같다.하나 예를 들자면 KING은 루트이고 BLAKE, CLARK, JONES의 경우 KING의 하위 관계다. JONES를 보면 SCOTT과 FORD가 하위 관계이며 FORD를 보면 SMITH가 하위 관계인..

[Spring Boot] Spring AOP를 활용한 Logging

기본적으로 함수 시작 전, 종료 후, 에러 발생 후 시점을 기준으로 자동으로 로그를 생성하도록 Aspect를 만들어서 설정할 수 있습니다. execution() 안에서 로그를 자동으로 남길 범위를 정할 수 있습니다. 로깅이 필요하지 않은 함수들은 @NoLogging 어노테이션을 만들어서 처리할 수 있습니다. (민감 정보를 가지고 있거나 로깅이 필요하지 않는 함수 등) Advice 실행 시점 설명 @Before 함수 시작 전 함수가 속한 클래스 이름, 함수 이름, 함수로 들어온 파라미터(args) 등을 로그로 남깁니다. @AfterReturning 함수 시작 후 함수가 속한 클래스 이름, 함수 이름, 함수가 반환한 값(result) 등을 로그로 남깁니다. @AfterThrowing 에러 발생 후 함수가 속..

[Spring Boot] 자주 쓰이는 Spring Boot Annotation (Controller, Service, Model)

🚀 Controller Annotation Annotation 영역 Description @RestController Class Spring의 컴포넌트 스캔 대상이 되도록 하고 HTTP 요청과 응답을 자동으로 매핑되도록 하는 등 Spring에서 Controller로 동작할 수 있도록 기본적인 동작을 담고있는 어노테이션입니다. @Controller와 @RequestBody가 합쳐진 어노테이션으로 RESTful 웹 서비스에서 주로 사용됩니다. @RequiredArgsConstructor Class Spring 4.3부터는 @Autowired를 통한 의존성 주입보다 생성자를 통한 의존성 주입을 권장하고 있습니다. @RequiredArgsConstructor를 사용하면 생성자 코드를 따로 적지 않아도 됩니다. ..

[Spring Boot] @ExceptionHandler, @ControllerAdvice (Exception 공통 처리)

🚀 Exception 공통 처리 보통 예외는 3가지 방법으로 처리할 수 있다. 예외 복구 : 예외가 발생하면 예외 상황에 알맞게 처리하여 복구한다. (try, catch) 예외 회피 : 예외를 직접 처리하지 않고 예외를 상위 메소드에 위임한다. (throw) 예외 전환 : 예외를 위임하되 발생한 예외를 그대로 위임하는 것이 아닌 적절한 예외로 전환하여 위임한다. (restTemplate.doExecute) 이때 예외 복구에 대한 범위는 아래와 같다. 메소드 영역 : 메소드 영역은 종속된 복구 기능으로 단순히 try, catch 사용하면 된다. 클래스 영역 : 클래스 내 공통 예외 복구는 @ExceptionHandler를 사용하면 된다. 전역 영역 : 여러 클래스의 공통 예외 복구는 @ControllerA..

[Spring Boot] Filter, Interceptor, AOP 차이 및 정리

Spring Boot를 사용하면 애플리케이션의 공통 기능을 개발하고 관리하는데 매우 효과적인 다양한 기능을 제공한다. 예를들어 로그인 관련 (세션 체크) 처리, 권한 체크, XSS(Cross Site Script) 방어, PC와 모바일웹의 분기처리, 로그, 페이지 인코딩 변황 등이 있다. 이러한 기능 중에는 Filter, Interceptor, Aspect-Oriented Programming (AOP) 등이 있다. 각각의 기능은 애플리케이션의 요청 처리 과정에서 앞, 중간, 뒤에 추가하여 특정한 작업을 수행하도록 해주며, 코드의 재사용성과 모듈성을 높여준다. (모든 페이지마다 공통 업무에 관련된 코드를 작성하면 중복된 코드가 많아지고 서버에 부하를 줄 수도 있으며 소스 관리도 어렵다.) Intercep..

[Linux] SSH pem key 생성 (EC2에 SSH 연결하기)

AWS EC2에 파일을 업로드해야하는 경우가 생겼다. EC2 키페어를 사용하여 클라이언트에서 접근할 수도 있지만 EC2 인스턴스 키페어는 관리자가 따로 있고 권한이 없어 생성이 어렵다. 이런 경우 클라언트에서 생성한 Public key를 이용하여 EC2에 SSH 접근이 가능하다. 방법은 아래와 같다. 1. Client에서 SSH 로그인을 위한 RSA(공개키-개인키)를 생성한다. 2. Server에 authorized_keys 파일을 생성한다. 3. Client에서 Public key를 복사한다. 4. Server의 authorized_keys에 붙여 넣는다. 5. Client의 Private Key를 .pem 확장자로 변경한다. 6. Client에서 key 테스트를 진행하여 연결을 확인한다. 구체적인 방..

[Spring Boot] 정적 파일 로드 시 URL에 Jsessionid 붙는 경우 해결

프로젝트에서 배포된 QA 환경의 로그인 화면이 최초 로딩 시에 화면 깨짐 현상이 발생했다. 새로고침이나 재접속할 경우에는 정상적으로 로딩이 되는 이상한 현상이 지속됐다. 1. 원인 파악 😵 처음에는 css의 경로가 문제라 판단되어 절대경로로도 바꾸고 '/'을 붙여도 보며 시도해보았으나 현상은 동일했다. 한 시간동안 삽질한 끝에 원인을 파악했는데, 개발자 도구 (F12)로 HTML의 Element를 보니 URL 뒤에 jsessionid가 붙어있었다!! 이는 Tomcat 서버에서 Spring Framework에서 태그를 사용할 경우 최초 호출시 URL에 Jsessionid가 붙여지는 현상 때문이였다. 이는 버그가 아닌 의도적으로 설계된 것이다. (Tymeleaf 템플릿 엔진을 사용중이였다) 그럼 왜 이렇게 ..

[Trouble Shooting] HTTP 리다이렉션 시 POST, PUT, DELETE (CUD)가 GET으로 바뀌는 문제점

HTTP의 POST, PUT, DELETE의 경우 HTTPS로 리다이렉션 시 GET으로 바뀐다. 이는 HTTP의 특성인데, 이를 알게된 계기와 해결 방법을 아래에 기술한다. 1. 문제 발생 🤬 쿠버네티스 각 Pod의 서비스 간 API 통신을 테스트 하기 위해 Postman으로 CRUD API 테스트를 진행했다. (Local에 WAS를 띄우고 Pod에 배포된 다른 서비스를 Postman으로 콜하는 방식 ) 그러나 Postman에서 HTTP로 POST, PUT, DELETE 요청할 경우 405로 Response 받고, GET의 경우 정상적(200)으로 Response를 받았다. Ingress Controller의 로그를 확인하니 HTTP의 POST, PUT, DELETE의 요청들이 HTTPS의 GET로 변경..

Trouble Shooting 2023.10.23

[Spring Batch] Spring Batch 5.0 migration Guide - initial Database schema updates

Spring Batch 5.0 migration Guide - initial Database schema updates Spring Batch가 5.0으로 버전 업하면서 여러 사항들이 변경 됐다. 자세한 내용은 아래 첨부한 링크에서 확인! 그 중 Spring Batch의 메타 데이터 저장 테이블의 Schema가 변경되어 Migration하거나, 초기 시작일 경우 생성하는 방법에 대해 기술하고자 한다. Spring Batch가 제공하는 배치 메타 데이터 저장 테이블에 대한 정보는 아래 첨부한 링크에서 확인! 1. Schema Create 🚀 Spring Batch 작업을 처음 할 경우 Database에서 Schema에 대한 Create 쿼리는 아래와 같다. (Oracle 기준임. 다른 DBMS의 경우 아래..

반응형