이끌든지 따르든지 비키든지

분류 전체보기 63

[Spring] @Transactinal 파헤치기

들어가기 앞서 - 트랜잭션(Transaction)이란? 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 하나의 작업 단위를 의미합니다. 하나의 트랜잭션에 여러 작업(연산)이 포함될 수 있으며, 이 작업들은 모두 성공적으로 완료되거나, 하나라도 실패할 경우 전체가 취소(롤백)되어야 합니다(All or Nothing이라고도 합니다. 한국어로는 모 아니면 도?). 이러한 특성 때문에 트랜잭션은 데이터의 일관성과 무결성을 유지하는 데 핵심적인 역할을 합니다. '@Transactinal' 어노테이션 // try-catch를 통해 트랜잭션을 수동으로 관리하는 코드 public class Example { public static void main(String[] args) { Connection ..

Framework/Spring 2024.02.04

[Spring] Dispatcher-Servlet 알아보기

들어가기 앞서 - 서블릿(Servlet)이란? 동적 웹 페이지(Dynamic Web Page) 생성에 사용되는 서버 사이드 프로그램입니다. HTTP 프로토콜을 사용하며, 클라이언트의 요청에 대한 처리와 그 결과를 클라이언트에게 반하는 역할을 합니다. 서블릿은 일반적으로 HTML, JSON, XML 등의 형태로 데이터를 클라이언트에 전송하며, 이를 통해 동적인 웹 페이지나 웹 애플리케이션을 구현할 수 있습니다. 디스패처 서블릿(Dispatcher-Servlet)이란? 디스패처 서블릿은 웹 애플리케이션에서 들어오는 모든 요청을 가장 먼저 받아 각 요청을 알맞은 컨트롤러로 전달하는 역할을 하는데, 이는 프론트 컨트롤러 패턴을 구현한 것입니다. 💡프론트 컨트롤러 패턴? 프론트 컨트롤러 패턴은 웹 애플리케이션 아..

Framework/Spring 2024.02.02

[프로그래머스] 신규 아이디 추천 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 개인정보 수집 유효기간 / JAVA 풀이 정리 풀이 문제를 보고, 정규 표현식이 바로 떠올랐는데, 필요할 때마다 구글링 해서 사용했어서 규칙이 정확히 기억이 안 났다... 정규표현식으로 풀이하면, 깔끔하게 작성할 수 있을 것 같아 규칙을 보면서 작성해 봤습니다. public String solution(String new_id) { // 1단계 : 모든 대문자를 소문자로 치환 String id = new_id.toLowerCase(); // 2단계 : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거 id = id.replaceAll("[^a-z0-9-_.]", ""); // 3단계 : 마침표(.)가 2번 이상 연속된 부분을 하..

[프로그래머스] 개인정보 수집 유효기간 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 개인정보 수집 유효기간 / JAVA 풀이 정리 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 고객의 약관 동의 일자와, 약관 종류에 따라 오늘 날짜로 파기해야 할 개인정보 번호들을 구하는 문제입니다. 처음에는 날짜 입력값의 "."을 "-"로 변경하고, LocalDate 타입으로 파싱 해서 LocalDate 클래스의 날짜 연산 메서드를 활용해서 풀어보려고 시도했지만, " 모든 달은 28일까지 있다고 가정합니다." 규칙으로 인해 의도한 대로 결과가 나오지 않아, 오늘 날짜와 보관 가능한 날짜를 일(day)로 변환한..

[Spring] 혼자서 해보는 가상화폐 시세 알림 API - 확장

새로운 요구사항에 대응하는 기능 확장 시나리오 추가된 요구 사항 : 슬랙의 슬래시 커맨드 기능 통합 슬래시 커맨드 기능을 통해 애플리케이션의 기능에 접근할 수 있어야 한다. 1. 슬래시 커맨드 요청 처리를 위한 컨트롤러 구현 @RestController @RequiredArgsConstructor @RequestMapping("/slack") public class SlackController { private final SlackCommandDispatcher commandDispatcher; @PostMapping("/slash-command") public ResponseEntity handleSlashCommand( final @RequestParam("channel_id") String chan..

Framework/Spring 2024.01.17

[Spring] 혼자서 해보는 가상화폐 시세 알림 API - 구현

저번 포스트에서 이어집니다. 구현 ▶ 구현 순서 시세 정보 수집 기능 알림 조건 검사 기능 실시간 알림 발송 기능 이력 관리 기능 1. 시세 정보 수집 기능 1-1. Feign Client 구성 시세 정보 수집을 위해 가상화폐 거래소 API를 조사한 결과, 대부분의 거래소가 자산 조회와 주문 등의 거래 관련 서비스에만 인증 수단을 요구하며, 시세 조회는 별도의 인증 없이 가능함을 확인했습니다. 따라서, Configuration 클래스에 RequestInterceptor를 별도로 구성하지 않았습니다. 시세 조회 서비스의 종류가 많았지만, 우선 거래 가능한 마켓 목록 조회 / 분(Minute) 단위 캔들 시세 조회 두 가지를 활용해 보기로 하고, 이에 대한 요청 메서드를 작성했습니다. @FeignClient..

Framework/Spring 2024.01.14

[Spring] 혼자서 해보는 가상화폐 시세 알림 API - 설계

목표 - Spring Boot와 외부 API를 활용하여 가상화폐 시세 정보를 수집·처리하고, 알림을 제공하는 API 기술 스택 ▶ 선택한 이유 OpenFeign vs RestTemplate Spring Data JPA와 유사하게, 간결하고 선언적인 방식으로 HTTP 요청을 구성할 수 있는 인터페이스를 제공하므로, HTTP 클라이언트 구현에 신경 쓰지 않아도 되고, 외부 서비스를 로컬 메서드처럼 쉽게 호출할 수 있습니다. 여러 외부 서비스를 내 애플리케이션의 비즈니스 로직과 효과적으로 통합할 수 있고, 기능 확장에도 유연하게 대응할 수 있을 것이라 판단해 OpenFeign을 선택했습니다. [Spring] OpenFeign 알아보기 OpenFeign은 Spring Cloud 기반의 선언적 HTTP 클라이언트..

Framework/Spring 2024.01.11

[Spring] OpenFeign 알아보기

OpenFeign은 Spring Cloud 기반의 선언적 HTTP 클라이언트 도구로, 간편하게 외부 API를 호출 할 수 있는 도구이다. 어노테이션과 인터페이스 기반의 간소화된 코드 작성으로, 외부 API를 마치 로컬 메서드처럼 호출해서 사용할 수 있다. (Spring Data JPA에서 인터페이스를 통해 DB 처리 메서드를 작성하는 것과 유사하다.) OpenFeign의 장점 인터페이스와 어노테이션 기반이므로, 이전 방식(RestTemplate 등)에 비해 작성할 코드를 줄일 수 있음 Spring MVC Annotation(@GetMapping, @RequestBody…)를 활용해 구성 가능 Spring Cloud의 다른 기술들( Eureka, Ribbon, Hystrix 등 )과 통합이 용이 시작하기 ..

Framework/Spring 2024.01.09

[JPA] 패러다임 불일치

패러다임 불일치는 객체 지향 프로그래밍(OOP)과 관계형 데이터베이스(RDB) 간의 근본적인 차이점에서 발생하는 문제를 말한다. 객체 지향 프로그래밍은 데이터와 행동을 함께 갖는 객체를 중심으로 하는 반면, 관계형 데이터베이스는 데이터를 테이블 형태로 구조화한다. 이 두 시스템 사이의 차이로 인해 여러 문제가 발생할 수 있는데, 이 글에서는 JPA가 패러다임 불일치 문제를 해결하기 위해 어떠한 방법을 사용하는지 알아본다. 패러다임 불일치 문제와 JPA의 해결책 상속과 다형성 (문제) 객체 지향 언어에서는 상속을 통해 재사용과 확장이 가능하지만, 관계형 데이터베이스는 이러한 계층적 구조를 직접적으로 지원하지 않는다. (해결) JPA는 클래스 계층을 DB 테이블과 매핑하는 여러 전략을 제공한다. @Entit..

Framework/JPA 2024.01.04

[JPA] JPA(Java Persistence API)란?

JPA(Java Persistence API)는 Java EE 환경에서 객체 관계 매핑(ORM)을 위한 공식적인 표준이다. 자바 객체와 DB 테이블 간의 매핑을 관리하고, 데이터를 보다 객체 지향적으로 다룰 수 있게 해주는 프레임워크이다. JPA 이전의 데이터베이스 접근 방식 초기에 자바에서 DB와의 연동은 주로 JDBC(Java Database Connectivity)를 통해 이루어졌다. public void addMember(int id, String name, String email) { String sql = "INSERT INTO member (id, name, email) VALUES (?, ?, ?)"; try (Connection conn = DriverManager.getConnectio..

Framework/JPA 2024.01.02