본문 바로가기

분류 전체보기196

[Caddy] The site can’t be reached 리버스 프록시, 캐디 동작 이슈 내부 개발 서버에서 리버스 프록시를 위해 Caddy를 사용하고 있는데 서버 재시작 후 Caddy가 동작 하지 않았다. 프런트로부터 도메인으로 접근할 시 "대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다. "라는 메시지를 받았다고 전달 받았다. 영어로는 "The site can't be reached"로 에러가 나오는 것 같았다. ChatGPT로는 이슈 파악이 어려웠고 Caddy 커뮤니티로 부터 원인과 해결 방법을 찾을 수 있었다. https://caddy.community/t/caddy-is-not-starting-up/24565위 사이트에 올라온 문제가 내 상황과 완전 동일했고 Caddy 저장소가 꼬인듯 해서 저장소를 삭제하는 방식으로 이슈를 해결 할 수 있었다.   Caddy 저장소 확인sud.. 2024. 12. 5.
[Spring Boot] 간단한 gRPC 구현하기 목표스프링 부트, java를 사용해서 간단한 gRPC를 구현해 봅니다. 클라이언트와 서버 측을 만들어 보고 localhost에서 실행해 봅니다개발 환경 Spring Boot version 3.4.0 java version Java 17 build tool Gradle 8.11 database h2 os macOS Sonoma 14.4.1 IDE IntelliJ IDEA CE 2023.3.3  🦄 SERVER build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.3.6' id 'io.spring.dependency-management' version '1.1.6' id 'com.google.protobuf' version '0... 2024. 11. 26.
[gRPC]에 대해 알아보기 RPC란 Remote Procedure Call네트워크 상의 다른 서버나 시스템에 있는 기능을 마치 로컬 기능처럼 호출할 수 있게 해주는 프로토콜클라이언트가 로컬 함수 호출 -> 요청이 직렬화 되어 네트워크로 전송 -> 원격 서버가 이를 받아 처리 후 응답 -> 응답이 직렬화 되어 클라이언트에게 반환 :: 사용자는 원격 서버와 직접 상호작용하지 않고 로컬 함수 호출 방식으로 작업을 수행할 수 있음 gRPC 특징Google에서 개발한 오픈 소스 RPC 프레임워크프로토콜 버퍼를 사용한 데이터 직렬화다양한 언어 지원 및 언어 독립성서로 다른 언어를 사용하는 서버와 클라이언트에서도 클라이언트는 서버의 기능을 사용할 수 있음HTTP/2 기반여러 메세지를 한번에 동시에 보낼 수도 있음바이너리 형태의 메세지를 빠르게.. 2024. 11. 24.
[Spring Boot] AOP를 활용한 커스텀 애노테이션 만들기 2024.11.17 - [BE/🍃 Spring] - [Spring Boot] AOP 개념 정리2024.11.18 - [BE/🍃 Spring] - [Spring Boot] AOP 사용 방법과 예시코드 현재 진행하고 있는 프로젝트의 일부 API에서 요청/응답 데이터를 End-to-End 암호화 해서 통신하고 있습니다. 그러다 보니 Controller 혹은 암복호화와 관련 없는 로직에 암호화 관련 코드가 들어가야 하는 경우가 있었습니다. 암복호화를 수행하는 static object를 만들어 사용을 해왔었는데, AOP를 이용해서 이를 개선해 보면 어떨까 싶었습니다. 요청 객체 자체를 가로채 복호화 해서 평문값을 바로 Controller에서 사용할 수 있게 하고, 응답을 클라이언트에 전달하기 전에 응답 값을 .. 2024. 11. 19.
[Spring Boot] AOP 사용 방법과 예시코드 의존성 추가dependencies { implementation 'org.springframework.boot:spring-boot-starter-aop'}  사용 방식Aspect 정의 : @Aspect 애너테이션을 사용해서 Aspect 클래스를 정의한다Advice 적용 : @Before, @After, @Around 등 다양한 Advice를 메서드에 적용한다. 특정 시점에 어떤 실행 로직을 실행할지 정의한다.Pointcut 설정 : execution 표현식 등을 통해 특정 메서드, 패키지 등에만 Aspect가 적용되도록 설정한다AOP 활성화 : @EnableAspectJAuotProxy 애너테이션을 Spring Boot 애플리케이션 클래스에 추가해 AOP를 활성화 한다 @EnableAspectJA.. 2024. 11. 18.
[Spring Boot] AOP 개념 정리 예시 코드와 자세한 사용법은 다음 포스팅에서 다룹니다. AOP란Aspect-Orineted Programing, 관점 지향 프로그래밍애플리케이션의 코드에서 핵심 비즈니스 로직과 특정 관심사(기능)을 분리화 하여 캡슐화모듈화 향상cross-cutting concerns (횡단 관심사) 처리에 유용로깅, 트랜잭션 관리, 인증/권한 부여, 성능 모니터링 구현과 같은 특정 관심사 분리에 사용될 수 있음 AOP는 왜 필요할까?반복적으로 사용되는 특정 기능인 횡단 관심사를 비즈니스 로직과 분리하여 코드의 재사용이 가능하도록 해줌횡단 관심사핵심 비즈니스 로직과 직접적인 관련이 없는 관심사횡단 관심사를 메서드 마다 추가하게 되면 반복되는 코드로 인해 코드가 지저분해지고, 변경시 여러 곳을 변경해야 하기 때문에 유지보수.. 2024. 11. 17.
[MQTT] Spring Boot 에서 MQTT(mosquitto) 사용하기 프론트에서 특정 api를 호출하면 비즈니스 로직을 수행하고 mqtt를 사용해서 윈도우 PC나 키오스크에 데이터를 전달해야 했다. 작은 양의 데이터 였고, 이전에 비슷한 프로젝트에서 mosquitto를 사용해서 구현한 레퍼런스가 있어 MQTT로 이를 구현했다.그렇기 때문에 여기서 Spring Boot 웹 서버는 publisher라고 할 수 있고, 윈도우 PC는 subscriber, mosquitto는 broker 역할을 한다 MQTT 특징경량 프로토콜 최소화 된 헤더2바이트 정도의 적은 용량 메세지 -> 제한된 대역폭 환경에서도 사용 가능 Publish/Subscribe 모델Publisher (발행 주체) Broker (중간서버) Subscriber (구독 주체)Publisher는 특정 topic에 메.. 2024. 11. 13.
[Spring Boot] Custom Validation annotation Intro사용자 혹은 프론트엔드에서 요청한 데이터를 검증하는 것은 중요Spring Boot와 같은 프레임워크에서는 @Valid, @Validated, validation 관련 애너테이션을 사용해서 유효성 검증이 가능함복잡한 비즈니스 로직이나 특정 요구사항에서는 기본적으로 제공하는 검증 애너테이션을 사용하기 어려울 수 있음Spring Boot에서는 사용자 정의의 validation을 생성할 수 있음예제코드@Getter@ToString@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)public class RegistUserRequest { @Pattern(regexp = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-].. 2024. 11. 10.
[Spring Boot] RestControllerAdvice로 Validation Exception 핸들링하기 request 데이터 검증을 위해 Valid, Validation, Spring Boot에서 제공하는 기능을 사용한 경우 Exception이 발생한다. 클라이언트가 데이터를 요청했으나 아무런 안내 없이 에러가 발생한다면 에러의 원인을 알 수 없다. Response에 에러의 원인을 정해진 규격에 맞게 제공하여 클라이언트 작업을 돕고, 데이터를 검증하여 사용할 수 있다.  RestControllerAdviceSpring MVC에서 전역적으로 예외 처리를 하는 애너테이션@ControllerAdvice와 다른 점은 @ResponseBody를 포함하고 있기 때문에 JSON 형식의 response를 반환함글로벌 예외처리, 사용자 정의 형식의 JSON 구조 반환하는데 사용basePackages, basePackage.. 2024. 11. 9.
[Spring Boot] Validation시 발생할 수 있는 에러 알아보기 이전글 : 2024.11.07 - [BE/🍃 Spring] - [Validation] spring boot validation 사용법과 종류 :: Spring Boot :: v3.3.5   @Valid와 @ValidatedValid와 Validated 검증 실패시 exception 발생 @Valid @Valid는 jakarta.validation.Valid에 속해 있고 RequestBody로 전달된 요청 객체를 검증하는데 사용됨 @Validated @Validated는 org.springframework.validation.annotation.Validated에 속해 있고, AOP 기반으로 동작@RequestParam, @PathVariable에서 전달되는 데이터의 유효성을 검증Controller가 아.. 2024. 11. 8.
[Validation] spring boot validation 사용법과 종류 ValidationSpring Boot에서는 Validation을 통해 클라이언트에서 요청시 전송한 데이터의 유효성을 검증하기 위한 기능들을 제공한다. 왜 Validation을 사용할까주로 Controller에서 클라이언트로 부터 전송된 데이터의 유효성을 검증함유효성 검증 코드를 직접 구현할 수 있으나, request시 들어오는 모든 데이터에 대한 검증 코드로 인해 코드의 양이 많아 질 수 있으며 서비스 로직에 방해될 수 있음요청 항목이 많아질 수록 검증 과정이 길어짐여러명의 개발자가 검증 로직을 개발하는 경우 일관성이 없어질 수 있음Validation을 사용하면 검증 로직을 일관성 있게 구현할 수 잇음Validation을 사용해서 검증 로직을 단순화 시킬 수 있음 라이브러리 의존성 추가implement.. 2024. 11. 7.
[Spring Boot] jakarta.servlet.ServletException: No adapter for handler [Controller@] The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler [Spring Boot] jakarta.servlet.ServletException: No adapter for handler [Controller@] The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler ServletException은 Spring MVC에서 호출한 Controller 요청을 처리할 적절한 HandlerAdapter를 찾을 수 없을 때 발생주로 컨트롤러 설정에 실수가 있을 때 자주 발생문제 해결하기Controller 에서 필요로 하는 annotation을 빼먹지 않았는지 확인@RestController, @Controller, @RequestMapping, @GetMa.. 2024. 10. 29.