일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- java
- 11054
- 1110
- 백준
- 카카오클라우드스쿨
- SpringTokenizer
- 카카오 클라우드 스쿨
- 11053
- 7568
- sequelize
- 2447
- 9020
- Java #코딩테스트
- 15552
- node
- Spring #Spring Boot #Java
- Java #오븐시계 #백준
- kakaocloudschool
- python
- 코딩테스트
- 알고리즘
- 24479
- Spring #Java #Spring Boot #싱글톤
- Spring #Java #Spring Boot
- boj
- Java #백준 #코딩테스트
- kakaocloud
- 파이썬
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- Spring
- Today
- Total
목록BE/Spring (28)
YoungSoo

이전 글에서는 Spring Cloud Gateway를 사용하여 API Gateway를 구축하고, Restful API를 통해 인증 과정을 완료했습니다. 이번 글에서는 Member Server를 분리하여 로그인, 회원가입, 토큰 발급 등의 기능을 제공하고, 토큰 인증은 API Gateway를 통해 처리하는 방식을 설명하겠습니다. 아래의 그림으로 설명하면 다음과 같습니다: Client는 Member Server로 API 호출을 하지만, API Gateway가 인증 과정 없이 로그인 화면을 출력합니다. 이는 API Gateway가 클라이언트의 요청을 가로채고 인증 관련 작업을 처리하기 위함입니다. 클라이언트가 로그인 또는 회원가입 요청을 보내면, Member Server에서 해당 요청을 처리합니다. Membe..

일단 먼저 API Gateway 애플리케이션을 위해 프로젝트를 만들어줍니다. Spring Cloud Gateway와 Spring Security로 API Gateway 구현 API Gateway 애플리케이션을 만들기 위한 의존성 설정(필요한 의존성 들은 후에 주입할 예정) Spring Cloud Gateway는 Spring WebFlux를 기반으로 동작하는 서비스입니다. 따라서 Spring Cloud Gateway와 Spring Security를 함께 사용하기 위해서는 Spring WebFlux도 함께 사용해야 합니다. Spring WebFlux는 비동기 및 반응형 웹 애플리케이션을 개발하기 위한 기능을 제공하는 모듈입니다. 이 모듈은 Reactive Streams를 기반으로 하며, 넌블로킹 I/O 모델..

현재 진행 중인 모놀리식 기반의 애플리케이션에서 추가적으로 채팅 서비스를 도입하려고 합니다. 하지만 새로운 서비스를 완성된 서비스에 사용할 때 변경해야할 점이 있어 기존의 모놀리식에서 벗어나 MSA로의 전환을 하려고 합니다. 각 마이크로 서비스 사이의 라우팅을 위해 API Gateway가 필요했습니다. 이를 위해 클라이언트로부터 들어오는 요청을 라우팅 해주고 기존의 모놀리식 애플리케이션에서 JWT 토큰을 검증하는 기능을 구현했지만, 토큰을 검증하는 Gateway 애플리케이션을 새로 만들어 아래와 같은 형태로 애플리케이션을 개발하려고 합니다. JWT 토큰의 인증을 위해 Restful API와 메시지 큐 시스템을 사용하는 방법을 고려했습니다. 단순한 요청-응답 방식의 통신이 필요하기에 Restful API ..

Furry_Friend_v1과 v2의 차이 많은 코드를 변경하고 있습니다. 그중에서 v1에서는 EntityManager을 사용해 데이터 베이스에 CRUD 작업을 수행해 주었는데 v2에서는 Spring Data JPA를 통해 CRUD를 작성해 주었습니다. 왜 EntityManager를 사용했었는데? JPA의 EntityManager를 통해 작성한 이유는 처음 JPQL과 EntityManager를 사용해 JPA의 핵심 개념과 동작 방식을 직접 이해하기 위해서 사용했습니다. 이후에 Data JPA의 기본 CRUD 메서드를 학습했고, v2에서는 Data JPA를 통해 Repository를 구현해 주었습니다. 영속성 컨텍스트 먼저 이 둘의 차이를 이해하려면 영속성 컨텍스트에 대해 이해해야 했습니다. 영속성 컨텍스..
saveAll()에 대해 알게된 이유는 수백 개의 데이터를 save()로 저장해주었는데 saveAll()를 사용하면 대량의 데이터를 한 번에 처리할 수 있습니다. 이 과정에서 몇 가지의 장점이 있습니다. 데이터베이스에 접근하는 횟수를 줄일 수 있습니다. 데이터베이스 처리 속도가 향상됩니다. 메모리 사용량을 줄일 수 있습니다. saveAll()이란? Spring Data JPA의 saveAll() 메서드는 여러 개의 엔티티를 한 번에 데이터베이스에 저장하는 메서드입니다. 이 메서드를 사용하면 데이터베이스에 새로운 엔티티를 저장하거나 이미 존재하는 엔티티를 업데이트할 수 있습니다. saveAll() 메서드는 Iterable 또는 Collection 인터페이스를 구현한 객체를 파라미터로 받으며, 이 객체에 포..

Spring Batch를 사용하게 된 이유 처음에 테스트를 먼저 작성하며 Spring Data JPA의 Save 메서드를 사용해 데이터를 모두 저장해주었습니다. 하지만 데이터를 저장하는 속도가 느리고, 많은 트랜잭션 비용과 데이터베이스 자원의 낭비를 초래할 수 있다는 것을 알게되었습니다. 그래서 SaveAll 메서드를 사용해 한 번의 호출로 일괄 저장할 수 있도록 변경해주었습니다. 이후에 API를 만들고 서비스에서 메서드를 작성해 운영하는 과정에서 SaveAll 메서드를 사용했을 때 오류가 발생했고, 메서드가 처음부터 다시 시작하는 것을 발견했습니다. 이러한 문제를 해결해주기 위해 Spring Batch를 도입해주었습니다. Spring Batch를 적용한 과정 필요한 OpenAPI 데이터는 일정 시간마다..
스프링 배치(Spring Batch)는 대량의 데이터 처리를 위한 오픈 소스 배치 처리 프레임워크입니다. 스프링 프레임워크의 일부로 개발되어, 스프링의 모든 장점을 갖고 있습니다. 스프링 배치는 대용량 데이터 처리를 위해 설계되어 있으며, 일괄 처리, 마이그레이션, ETL(Extract, Transform, Load) 등 다양한 비즈니스 처리 작업을 수행할 수 있습니다. 스프링 배치는 Job, Step, Tasklet, Chunk 등의 요소로 이루어져 있습니다. Job은 배치 처리를 수행하는 최상위 개념이며, 하나 이상의 Step으로 이루어져 있습니다. Step은 배치 처리 과정에서 실행될 단위 작업을 말하며, Tasklet 또는 Chunk로 구성됩니다. Tasklet은 단일 작업으로 구성된 Step을 ..
DAO(Data Access Object)란? DB에 데이터를 조회하거나 조작하는 기능들을 전담합니다. Mybatis를 이용할 때는, mapper.xml에 쿼리문을 작성하고 이를 mapper 클래스에서 받아와 DAO에게 넘겨주는 식으로 구현합니다. MyBatis란? 객체, 데이터베이스, Mapper 자체를 독립적으로 작성하고, DTO에 해당하는 부분과 SQL 실행결과를 매핑해서 사용할 수 있도록 지원합니다. 기존에는 DAO에 모두 SQL문이 자바 소스상에 위치했으나, MyBatis를 통해 SQL은 XML 설정 파일로 관리합니다. 설정파일로 분리하면, 수정할 때 설정파일만 건드리면 되므로 유지보수에 매우 좋습니다. 또한 매개변수나 리턴 타입으로 매핑되는 모든 DTO에 관련된 부분도 모두 설정파일에서 작업할..