개발자 122

Feign Client를 활용한 API 호출 및 예외 처리

Feign Client는 Spring Cloud에서 제공하는 HTTP 클라이언트로, RestTemplate이나 WebClient보다 간결한 방식으로 API 호출을 수행할 수 있습니다. Feign Client를 활용한 API 호출 방식과 예외 처리 방법을 예제와 함께 설명하겠습니다. 1. Feign Client란?Feign은 Java에서 REST API를 쉽게 호출할 수 있도록 도와주는 HTTP 클라이언트입니다. 인터페이스 기반으로 RESTful API를 호출할 수 있어, 기존 RestTemplate을 사용할 때보다 코드량을 줄일 수 있습니다. 2. Feign Client 설정 및 구현인터페이스 정의@FeignClient(name = "apiClient", url = "http://example.com",..

JWT 토큰을 쿠키에 저장하여 인증 처리하기

Spring Boot를 사용하여 로그인 후 JWT 토큰을 발급하고, 발급된 토큰을 쿠키에 저장하는 방법에 대해 알아보겠습니다. JWT 토큰을 쿠키에 저장하면 사용자 인증 정보를 안전하게 관리할 수 있으며, 매번 헤더에 토큰을 추가하지 않고도 인증된 요청을 쉽게 처리할 수 있습니다.1. 로그인 요청 처리 및 JWT 토큰 생성Spring Boot에서 JWT 기반 인증을 구현하려면 사용자가 로그인할 때 아이디와 비밀번호로 인증을 받고, 인증이 완료되면 JWT 토큰을 발급하는 로직을 작성해야 합니다. 이 과정에서 AuthenticationManager와 JwtTokenUtil 클래스를 활용하여 인증 및 토큰 생성을 처리합니다.1-1. 로그인 요청 처리우선 로그인 API를 구현하여 아이디와 비밀번호를 전달받고, ..

Mock(Mocking)란 무엇인가?

소프트웨어 개발에서 테스트를 수행할 때, 실제 객체를 사용하면 여러 가지 문제가 발생할 수 있습니다. 예를 들어, 데이터베이스와 연동되거나 외부 API를 호출하는 코드가 포함된 경우, 테스트 실행 속도가 느려지고, 외부 서비스의 상태에 따라 테스트 결과가 달라질 수도 있습니다. 이러한 문제를 해결하기 위해 사용하는 기법이 Mocking(목킹) 입니다. Mock의 개념Mock은 실제 객체를 대신하는 가짜 객체(fake object)로, 특정한 동작을 미리 정의하여 테스트를 쉽게 수행할 수 있도록 도와줍니다. Mock 객체는 다음과 같은 상황에서 유용합니다.외부 API 호출을 테스트해야 할 때: 실제 API를 호출하면 네트워크 지연이 발생하거나 응답이 예측할 수 없기 때문에, API 호출을 Mock으로 대체..

CS 2025.03.12

백준 2212번: 센서

문제 풀이정렬: 먼저, 센서들의 좌표를 정렬합니다. 이렇게 해야 집중국을 배치할 때 자연스럽게 가장 가까운 센서끼리 묶을 수 있습니다.간격 계산: 센서들이 정렬되면, 각 센서 간의 간격을 구할 수 있습니다. 이를 통해 집중국이 필요 없는 구간을 최소화하려면, 간격이 큰 구간부터 나누는 것이 유리합니다. 예를 들어, 가장 큰 간격을 차지하는 구간을 나누면, 그 나머지 구간들은 집중국의 수신 범위 내에 포함될 가능성이 높아집니다.간격을 나누기: 간격을 K-1개로 나누면, K개의 집중국을 만들 수 있습니다. 간격을 나누는 방식은 큰 간격을 우선적으로 나누는 것입니다. 이때, 나누어진 간격을 빼면 수신 가능 영역의 길이의 합을 최소화할 수 있습니다. 코드 구현import java.util.*;public cla..

Algorithm 2025.03.07

백준 11000번: 강의실 배정

문제 풀이강의 일정을 시작 시간 기준으로 정렬우선순위 큐(Priority Queue)를 사용하여 강의실을 관리가장 먼저 끝나는 강의의 종료 시간을 기준으로 새로운 강의를 배정할 수 있는지 확인현재 진행 중인 강의 중 가장 빨리 끝나는 시간보다 새로운 강의의 시작 시간이 크거나 같으면 기존 강의실 사용 가능그렇지 않으면 새로운 강의실 추가 코드 구현import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[][] lectures = new int[N][2]; ..

Algorithm 2025.03.06

자바(JAVA)의 Default Interface란?

Java 8부터 인터페이스에 default 메서드를 정의할 수 있는 기능이 추가되었습니다. 기존에는 인터페이스가 오직 메서드의 시그니처만 정의하고, 실제 구현은 해당 인터페이스를 구현하는 클래스에서 제공해야 했습니다. 그러나 default 메서드를 사용하면 인터페이스에서도 기본적인 메서드를 구현할 수 있습니다.1. Default 메서드란?default 메서드는 인터페이스에서 메서드의 기본 구현을 제공하는 기능입니다. default 키워드를 사용하여 선언하며, 이를 구현하는 클래스는 해당 메서드를 별도로 재정의하지 않아도 사용할 수 있습니다.기본 문법interface MyInterface { default void sayHello() { System.out.println("Hello fr..

Back_End/Java 2025.02.28

자바(JAVA) DAO, DTO, VO 란?

1. DAO, DTO, VO란?1.1 DAO (Data Access Object)DAO는 데이터베이스와 직접적으로 상호작용하는 객체로, 데이터베이스의 CRUD(Create, Read, Update, Delete) 작업을 수행합니다. DAO는 주로 SQL 쿼리를 실행하고 결과를 반환하는 역할을 합니다.특징:데이터베이스와 직접적인 연결을 담당SQL을 실행하여 데이터를 조회하거나 저장서비스 레이어에서 호출되어 데이터를 주고받음일반적으로 인터페이스와 구현 클래스로 분리하여 사용DAO 예제 (Spring Boot + MyBatis)@Mapperpublic interface UserDAO { @Select("SELECT * FROM users WHERE id = #{id}") UserVO getUserB..

Back_End/Java 2025.02.26

트리 정렬(Tree Sort)

1. 트리 정렬이란?트리 정렬(Tree Sort)은 이진 탐색 트리(Binary Search Tree, BST)를 기반으로 한 정렬 알고리즘입니다. 데이터를 BST에 삽입한 후, 중위 순회(Inorder Traversal)를 수행하여 정렬된 데이터를 얻는 방식으로 동작합니다.이 정렬 방식은 평균적으로 O(n log n)의 시간 복잡도를 가지며, 안정적인 정렬을 보장합니다.2. 트리 정렬 동작 원리트리 정렬은 다음과 같은 방식으로 동작합니다:데이터를 하나씩 이진 탐색 트리에 삽입합니다.중위 순회(Inorder Traversal)를 수행하여 정렬된 데이터를 출력합니다.예제: 트리 정렬 과정 (오름차순 정렬)다음과 같은 배열이 있다고 가정하겠습니다.[5, 3, 8, 4, 2]트리 정렬이 진행되는 과정은 다음과..

Algorithm 2025.02.19

퀵 정렬(Quick Sort)

1. 퀵 정렬이란?퀵 정렬(Quick Sort)은 분할 정복(Divide and Conquer) 알고리즘을 기반으로 한 정렬 방식으로, 피벗(Pivot)을 선택하여 작은 값과 큰 값으로 배열을 나눈 뒤 정렬하는 방식입니다.퀵 정렬은 평균적으로 **O(n log n)**의 시간 복잡도를 가지며, 빠른 정렬 성능을 제공하는 대표적인 정렬 알고리즘 중 하나입니다.2. 퀵 정렬 동작 원리퀵 정렬은 다음과 같은 방식으로 동작합니다:배열에서 하나의 요소를 **피벗(Pivot)**으로 선택합니다.피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 배치합니다.분할된 두 개의 부분 배열에 대해 재귀적으로 퀵 정렬을 수행합니다.모든 요소가 정렬될 때까지 이 과정을 반복합니다.예제: 퀵 정렬 과정 (오름차순 정렬)다음과 ..

Algorithm 2025.02.19