분류 전체보기82 Blue-Green 배포 방식 Blue-Green 배포 방식이란?Blue-Green 배포는 무중단 배포(Zero Downtime Deployment)를 위한 전략 중 하나로, 현재 서비스 중인 환경(Blue)과 새로운 버전이 배포될 환경(Green)을 나누어 운영하는 방식이다 Blue-Green 배포 흐름초기 상태 (Blue 환경)현재 운영 중인 서비스는 Blue 환경에서 실행된다.사용자는 Blue 환경을 통해 서비스에 접속한다.새로운 버전 배포 (Green 환경)새로운 애플리케이션 버전이 Green 환경에 배포된다.Green 환경에서 정상적으로 실행되는지 테스트한다.트래픽 전환Nginx 등 로드 밸런서를 이용하여 트래픽을 기존 Blue 환경에서 새로운 Green 환경으로 전환한다.사용자는 Green 환경을 통해 서비스에 접속하게 .. INFRA/AWS 2025. 3. 13. 무중단 배포를 위한 Nginx와 Docker 활용 무중단 배포를 위한 Nginx와 Docker 활용 정리!무중단 배포란 서비스의 중단 없이 새로운 버전의 애플리케이션을 배포하는 방법이다. 이 과정에서 중요한 것은 애플리케이션 서버의 트래픽을 원활하게 관리하고, 배포 중에도 사용자가 영향을 받지 않게 하는 것이다. 이를 위해 Nginx와 Docker를 활용하는 방법을 알아보겠다. 1. 무중단 배포란?무중단 배포는 서비스가 중단되지 않게 새로운 버전의 애플리케이션을 배포하는 방법이다. 전통적인 배포 방식에서는 서버가 다운되는 시간이 발생하는데, 무중단 배포는 이를 피하고, 서비스가 항상 원활하게 동작하도록 만든다. 이를 위해 필요한 기술이 바로 로드 밸런싱과 프록시 서버이다. Nginx는 프록시 서버 역할을 하며, 애플리케이션 서버 간에 트래픽을 분배.. INFRA/AWS 2025. 2. 25. OAuth2 인증 및 JWT 관련 트러블슈팅 정리 🔥 1. OAuth2 인증 시 네이버와 구글의 DefaultOidcUser 차이로 인한 문제 🛑 문제 상황네이버와 구글에서 받아오는 OAuth2 유저 객체가 다름.구글은 OIDC 기반이라 DefaultOidcUser를 반환하지만, 네이버는 OIDC 지원이 없어 DefaultOAuth2User를 반환함.CustomOAuth2UserService에서 DefaultOidcUser로 캐스팅 시 예외 발생. 💡 해결 방법OAuth2User 인터페이스를 기준으로 핸들링하는 팩토리 패턴을 적용.OAuth2UserFactory를 만들어 제공자별 OAuth2Attribute 변환. ✅ OAuth2UserFactory 구현@Component@RequiredArgsConstructor@Slf4jpublic class.. JAVA/Spring Security 2025. 2. 20. Django vs Spring 검증 기능 비교 - 무엇이 더 편할까? 백엔드 개발을 하다 보면 입력값을 검증하는 기능이 필수적이다. Django와 Spring은 각각 강력한 검증 기능을 제공하지만, 사용 방식에는 차이가 있다. 특히 Django는 검증 메시지를 자동으로 생성해 주는 반면, Spring은 대부분 커스텀해야 한다. 이번 글에서는 두 프레임워크의 검증 기능을 비교해 보겠다. 1. Django의 검증 기능Django에서는 serializer.is_valid()를 호출하면 자동으로 필드별 검증이 수행된다. 필드 타입과 제약 조건에 따라 적절한 오류 메시지가 생성되므로, 개발자가 직접 메시지를 작성할 필요가 없다.예제 코드from rest_framework import serializersclass UserSerializer(serializers.Serializ.. JAVA 2025. 2. 17. Spring에서 이미지, JSON 데이터 한번에 controller에서 클라이언트에 넘기기 Spring에서 Multipart File Upload와 JSON 처리: @RequestPart를 사용한 해결 방법 오늘 Spring Boot를 사용하여 파일 업로드를 처리하는 과정에서 여러 가지 문제를 겪었다. 특히, @RequestParam, @RequestBody, @RequestPart를 사용하여 파일 업로드를 시도했으나 예상치 못한 오류들이 발생했고, 이를 해결하기 위해 @RequestPart를 사용하여 문제를 해결하게 되었다. 이번 블로그에서는 이 문제를 해결하는 과정과 핵심적인 설정 및 코드 구현을 상세하게 설명하겠다. Multipart File Upload와 JSON 데이터를 처리하는 방법을 배워보자. Spring에서 파일 업로드와 JSON 데이터를 동시에 처리해야 하는 경우가 있.. 트러블 슈팅 2025. 2. 7. 깃 브랜치 네이밍 규칙 트러블슈팅: "슬래시 문제와 해결 방안" 깃 브랜치 네이밍 규칙 트러블슈팅: "슬래시 문제와 해결 방안" 최근에 깃 브랜치 네이밍 전략을 운영하면서 한 가지 문제가 발생했다. 바로 슬래시(/)를 사용한 브랜치 네이밍 규칙이 의도치 않게 오류를 발생시키는 상황이었다.이 문제를 해결하기 위한 고민과 해결 방안을 공유해보고자 한다. 문제 발생우리 팀에서는 깃 브랜치 네이밍 규칙으로, 각 개발자가 작업한 기능을 구분하기 위해 브랜치 이름에 슬래시(/)를 사용하여 계층 구조를 만들고 있다. 예를 들어 feature/member/social-login처럼, 각 기능의 이름을 feature/, member/, social-login으로 나누어 표기하고 있었다. 그런데, 이처럼 슬래시를 사용한 이름을 가진 브랜치가 이미 존재하면, 하위 브랜치를 만들 수 .. 트러블 슈팅 2025. 1. 28. Querydsl로 효율적으로 JPA 조건 쿼리 작성하기 Querydsl로 효율적으로 JPA 조건 쿼리 작성하기 JPA를 사용할 때, Criteria API가 기본적으로 제공되지만 실무에서는 복잡하고 가독성이 떨어지는 문제로 인해사용이 어렵다. 이를 해결하기 위해 많은 개발자들이 **Querydsl**을 선택한다. Querydsl은 타입 세이프하며,가독성이 뛰어난 쿼리 작성 방식을 제공한다. Querydsl이란? Querydsl은 Java 기반 ORM 프레임워크에서복잡한 동적 쿼리를 간결하고 가독성 있게 작성할 수 있도록 돕는 라이브러리다. JPQL 기반의 쿼리를 Java 코드로 작성하며, 컴파일 시점에 오류를 검출할 수 있어 안정성을 높인다. Querydsl을 사용하는 이유 1. 가독성Criteria API는 메서드 체이닝 방식으로 .. JAVA/Spring 2025. 1. 21. PersistenceContext와 PersistenceUnit의 차이 / @Transactional(readOnly = true)의 효과 PersistenceContext와 PersistenceUnit의 차이PersistenceContext란?PersistenceContext는 JPA에서 EntityManager를 관리하는 범위를 의미한다. 쉽게 말해, 데이터베이스와의 작업을 관리하는 영속성 컨텍스트를 나타낸다.특징영속성 컨텍스트는 엔티티의 생명 주기를 관리한다.1차 캐시를 사용하여 성능을 최적화하며, 동일한 트랜잭션 내에서 동일한 엔티티를 조회하면 데이터베이스를 재조회하지 않는다.@PersistenceContext 어노테이션을 통해 주입받을 수 있다.import jakarta.persistence.EntityManager;import jakarta.persistence.PersistenceContext;public class UserSe.. JAVA/Spring 2025. 1. 17. @RequiredArgsConstructor와 @AllArgsConstructor 비교 [spring 의존성 주입] Spring Dependency Injection: @RequiredArgsConstructor와 @AllArgsConstructor 비교 스프링 프레임워크에서 의존성 주입(Dependency Injection)은 객체 간 결합을 줄이고 코드의 유연성과 테스트 용이성을 높이는 중요한 패턴이다. 스프링에서 의존성 주입 방법은 다양하며, 특히 최근에는 생성자 주입 방식이 트렌드로 자리 잡았다. 이 글에서는 @RequiredArgsConstructor, @AllArgsConstructor, 그리고 @Autowired를 사용한 주입 방식을 비교하고, Spring Data JPA와 관련된 주요 내용을 다룬다. 1. 의존성 주입 방법의 종류1-1. 필드 주입(Field Injection)@Autowiredpriv.. JAVA/Spring 2025. 1. 17. 관계별 "연관관계 편의 메서드" 적용 가능성 1.1. ManyToOne 관계ManyToOne 관계에서는 주로 자식 엔티티에서 부모 엔티티를 참조한다.이 경우, 자식 엔티티가 연관관계의 주인이므로 편의 메서드를 작성할 수 있다.@Entitypublic class Order { @ManyToOne @JoinColumn(name = "member_id") private Member member; public void setMember(Member member) { this.member = member; member.getOrders().add(this); // 양방향 관계 설정 }} 1.2. OneToMany 관계OneToMany는 기본적으로 양방향 관계일 때 주인이 아닌 엔티티가 되므로, 주로 읽기.. JAVA/메서드 정리 2025. 1. 15. JPA 연관관계 편의 메서드, 사용하면 어떤 이점이 있을까? JPA 연관관계 편의 메서드, 꼭 필요한가?JPA를 사용하다 보면 엔티티 간의 관계를 설정하는 과정에서 연관관계 편의 메서드라는 개념이 자주 등장한다. 연관관계 편의 메서드는 양방향 연관관계를 보다 효과적으로 관리하기 위해 사용된다. 이 글에서는 연관관계 편의 메서드의 개념, 필요성, 장점, 구현 방식, 그리고 예제를 통해 이를 이해해보고, 추가로 알아두면 좋은 내용까지 함께 다뤄본다. 1. 연관관계 편의 메서드란?연관관계 편의 메서드는 JPA에서 양방향 연관관계의 일관성을 유지하기 위해 제공되는 메서드를 말한다. 양방향 관계에서는 두 엔티티 간의 관계를 모두 설정해주어야 하는데, 편의 메서드를 사용하면 한 곳에서 관계를 관리할 수 있어 편리하다.예를 들어, Order와 Member 간의 관계를 .. JAVA/메서드 정리 2025. 1. 15. DFS와 BFS 알고리즘 완벽 가이드!! [탐색 알고리즘의 기본부터 예제 코드까지] 포스팅 하나로 탐색 알고리즘은 그래프를 순회하거나 특정 조건을 만족하는 경로를 찾는 데 자주 사용된다. 특히 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)은 가장 기초적이면서도 중요한 탐색 기법으로, 많은 문제 해결의 기반이 된다. 이번 포스팅 에서는 DFS와 BFS의 개념, 작동 방식, 예제 코드, 그리고 두 알고리즘의 차이점으로 작성해보려 한다. DFS (Depth-First Search: 깊이 우선 탐색)DFS란?깊이 우선 탐색은 시작 노드에서 한 방향으로 깊게 들어가며 탐색을 진행하는 방식이다. 한 경로를 끝까지 탐색한 후, 더 이상 갈 곳이 없을 때 다른 경로로 이동한다.주요 특징:스택 자료구조(혹은 재귀 호출)를 사용한다.그래프의 경로가 깊은 곳까지 먼저 탐색된다.순환 구조나 무한 루프를 방지하.. Algorithm/Java 2025. 1. 4. 이전 1 2 3 4 ··· 7 다음