서버 개발 (12) 썸네일형 리스트형 SameSite 설정으로 인한 팀즈 앱 실행 문제 문제발생팀즈에서는 사용자가 팀즈 내 앱을 편리하게 생성하여 다양하게 사용할 수 있다. 요즘 나는 고객사에서 요청한 팀즈 앱들을 생성하고 우리회사의 솔루션들의 기능을 사용할 수 있게 연동하는 작업을 하고 있다.내가 생성하고 있는 여러 앱 중 하나는, 우리 회사에서 제공하는 웹 페이지를 단지 팀즈 안에서 보여주는 기능을 하고 있다. 간단하게 말하면 바로가기 같은 앱인데, 별 기능이 없는 이 앱에서 문제가 생겼다. 사용자가 로그인 이후 다시 로그인 페이지로 무한히 호출되는 로그인 루프가 발생한 것이다.(해당 사이트는 로그인 상태 유무를 확인하여 사용자의 로그인 정보가 없으면 다시 로그인 페이지를 호출한다)이로 인해 팀즈 내에서는 지속적인 리다이렉션이 반복되었고, 결국 팀즈 자체에서 리다이렉션을 중지시키는 일이.. Express.js 4 -> 5로 마이그레이션 가이드 서론Express.js는 Node.js를 기반으로 한 서버 개발 프레임워크 중 하나이다.회사에서는 보통 Java진영의 Spring Boot를 주로 사용하지만, 간단한 개인 프로젝트를 진행할 때는 Express.js를 많이 선택하기도 하기 때문에 평소부터 관심이 많던 프레임워크이다.그런데 최근 Express.js 5버전이 나왔다는 것을 알게 되었다. 바로 5버전을 이용하여 프로젝트를 새로 진행할 수도 있겠지만, 기존에 4버전을 사용하는 서버를 5버전으로 마이그레이션하는 경우도 발생할 것이라 생각되었다.그래서 이번기회에 기존 4버전에서 5버전으로 마이그레이션하는 가이드를 번역 및 정리해보기로 하였다. https://expressjs.com/en/guide/migrating-5.html Express - N.. Spring Boot REST API 회원관리 - (3) @RestControllerAdvice를 사용하여 전역 예외처리하기 애플리케이션에서 예외 처리를 일관성 있게 관리하는 것은 중요하다. 이를 위해 @RestControllerAdvice를 사용할 수 있다. @RestControllerAdvice?모든 @RestController 에서 발생하는 예외를 한곳에서 처리할 수 있게 해주는 어노테이션이다. 이 어노테이션을 이용하면 개별 컨트롤러에서 예외처리를 중복하여 작성할 필요 없이 한곳에서 관리할 수 있다. 공통된 응답값을 주기 위한 클래스 작성예외 발생시 일관성 있는 응답값을 주기 위한 클래스를 작성하였다. 오류 발생 timestamp, 메세지, 세부 사항 정보를 넘겨줄 생각이다.@Data@AllArgsConstructor@NoArgsConstructorpublic class ExceptionResponse { priv.. Spring Boot REST API 회원관리 - (2) Swagger 적용 Swagger를 사용하면 보다 API 문서를 자동으로 생성하고, 이를 시각적으로 표현할 수 있는 인터페이스를 제공받기 때문에 API 문서화를 편하게 할 수 있다. 또한 Swagger UI를 이용하여 편리하게 API를 직접 테스트할 수 있어서 API의 동작을 빠르게 검증할 수 있다. 그래서 API 개발 및 변경사항을 쉽게 관리 및 추적할 수 있다.이러한 이유로 Swagger를 적용해보기로 하였다. 의존성 추가Spring Boot 2.x.x 버전과 3.x.x 는 추가하는 의존성이 다르다. 3.x.x 는 아래와 같은 의존성을 추가하면 된다.implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.4.0' SwaggerConfig 클래스 추가S.. Spring Boot REST API 회원관리 - (1) 환경구성 및 "Hello" 출력 최근 업무를 하면서 회원가입 부분 관련 작업을 하게 되었다. 구현되어있는 프로젝트들을 손대다가 막상 처음부터 구성하려고 하니 구현방법에 대해 고민도 많아지고 매끄럽게 진행되지도 않은 경험을 하였다.그래서 정리를 위한 프로젝트를 구성해보고 여건이 된다면 기능을 하나씩 추가해 보려고 한다. 환경 구성Spring Boot 3.3.2 + MariaDB + JPA + Gradle build.gradle우선 회원관리를 위해 필요할 것 같은 spring-security, jwt 등의 의존성을 추가하였다.https://mvnrepository.com/ 에서 Usages가 크고 Vulnerabilities가 없는 최신 버전을 사용하였다.dependencies { implementation 'org.springfra.. 레이스 컨디션 (Race Condition) -03. Lettuce, Redisson 일반적으로 분산 서버 환경에서 하나의 데이터베이스를 사용하더라도 여러 대의 서버가 해당 데이터베이스에 동시에 접근하고 데이터를 수정하려고 할 때는 여전히 동시성 문제가 발생할 수 있다.이러한 상황에서 낙관적 락(Optimistic Locking)과 비관적 락(Pessimistic Locking)이 물론 유용할 수 있지만,분산 락(Distributed Locking)이나 다른 분산 동시성 제어 메커니즘을 고려해야 하는 경우가 생길 수 있다.그 이유는 다음과 같다. 데이터베이스 트랜잭션 범위: 여러 서버에서 하나의 데이터베이스에 접근할 때, 트랜잭션의 범위가 여러 서버에 걸칠 수 있다. 이 경우, 낙관적 락과 비관적 락만으로는 트랜잭션 일관성을 보장하기 어려울 수 있다. 동시성 제어의 복잡성: 분산 환경에.. 레이스 컨디션 (Race Condition) -02. Pessimistic Lock, Optimistick Lock 레이스 컨디션을 방지하기 위해 어떤 방법을 사용해야 하는지 이어서 글을 쓰려고 한다.이전글에서 알아보았듯이 @Transactional 을 사용하는 방법이나 synchronized 를 사용하는 방법은 모든 동시성 문제를 해결할 수 없다. 따라서 이번글에서는 레이스 컨디션을 방지하기 위해 데이터베이스에서 사용하는전략인 페시미스틱 락(Pessimistic Lock) 과 옵티미스틱 락(Optimistic Lock)에 대해 정리해 보려고 한다. 1. 페시미스틱 락(Pessimistic Lock)페시미스틱 락은 실제 데이터에 Lock을 걸어서 정합성을 맞추는 방법이다. 즉 데이터를 읽고 업데이트 하는 동안 다른 트랜젝션이 해당 데이터에 접근하지 못하도록 락을 걸어 동시성 문제를 방지하는 방법이다. 작동방식은 다음과.. CURL로 외부 서버와 통신 테스트(+ 겪을 수 있는 에러로그) 서론 개발 서버에서 외부 서버와의 통신을 테스트하기 위해 나는 주로 CRUL 명령어와 DIG 명령어를 사용한다. 두 명령어는 각각 다음과 같은 장점을 갖고 있기 때문이다. 1. curl 명령어는 다음과 같은 장점을 가지고 있다. 다양한 옵션을 통해 HTTP/HTTPS 요청을 세밀하게 제어할 수 있다. 응답 코드, 헤더, 본문 등을 확인하여 통신 결과를 자세하게 분석할 수 있다. 2. dig 명령어는 다음과 같은 장점을 가지고 있다. DNS 레코드를 확인하여 외부 서버의 도메인 이름과 IP 주소 정보를 확인할 수 있다. DNS 서버 정보를 확인하여 네트워크 문제를 해결하는 데 도움이 될 수 있다. 따라서 두 명령어를 적절히 사용하면 통신 테스트에 좀더 효율적일 수 있다고 생각한다. 그래서 각 명령어에 대한.. 이전 1 2 다음