-
Custom Annotation을 만들고 AOP로 활용하는 법
이전 글을 읽고 보면 이해가 더 쉬울 것 같습니다. Spring Security 인가(Authorization)를 공부하다 보면 아래와 같은 코드를 마주치게 된다.@Componentpublic class BankService { @PreAuthorize("hasRole('ADMIN')") public Account readAccount(Long id) { // ... is only invoked if the `Authentication` has the `ROLE_ADMIN` authority }}"ADMIN" 권한이 있는 유저만 해당 메서드 또는 api에 접근할 수 있도록 통제하는 것 이다. 근데 AOP를 공부하다 보니 나만의 @PreAuthorize를 만들 수 있을 것 같았고이번 글은 나만..
-
스프링의 DB 관련 예외 추상화
이번엔 DB의 예외를 다루면서 기술에 종속된다는 한계점을 겪고 좀 더 나은 방법에 대해 고민해보던 도중예외 추상화라는 키워드를 찾아 해당 내용에 대해 작성해보려 한다. 먼저 어떤 과정에서 해당 내용을 찾게 되었는지 간략하게 작성해보자면 아래와 같다. 업무를 하던 도중 정상적인 요청에 대해서도 Unique key 제약조건이 순간적으로 깨질 수 있는 상황이 발생했다. 예를들어 유저의 이름이 Unique할 때 여러 명의 유저 이름을 동시에 변경하려고 하면 문제가 생겼었다. 그래서 아래와 같은 방식으로 해결하면서 일시적으로 해결했다.// 1. 더미 데이터로 이름 변경private void setDummy(List updateDummeyUsers) { for (User user : updateDummeyUs..
-
SpringBoot에서 여러 요청을 동시에 처리하는 방법
Thread Pool에 대해 찾아보던 도중 좋은 강의가 있어 강의 내용에 대해 내가 이해한 방식대로 작성해 보고자 한다.참고한 강의는 우아한테크코스의 강의로 아래 링크에서 확인할 수 있다.https://www.youtube.com/watch?v=um4rYmQIeRESpring Boot 애플리케이션은 기본적으로 내장 서블릿 컨테이너(Tomcat, Jetty ..)를 사용하며,이 서버들은 내부적으로 Thread Pool을 활용하여 요청을 처리한다.따라서 Thread Pool 관련 설정값을 잘 조정해야 어플리케이션을 원할하게 운영할 수 있다. 이번 글에서는 아래 내용에 대해 작성해보고자 한다.1. Program, Process, Thread?2, Thread Pool?3. Java의 Thread Pool4. ..
-
Spring Batch와 Scheduler
Spring Batch와 Scheduler의 차이점이 궁금해져서 관련 내용에 대해 작성해보겠다. 결론부터 말하자면 Spring Batch는 실제 데이터 처리 로직과 비즈니스 처리를, Scheduler는 작업들을 정해진 시점에 실행하도록 관리한다.Spring Batch는 스케줄러를 대체하기보다는 스케줄러와 함께 작동하도록 설계돼있다. (Spring Batch is intended to work in conjunction with a scheduler rather than replace a scheduler.) 아래와 같은 순서로 작성할 예정이다.1. Spring Batch 1-1. Spring Batch의 핵심 구성 요소 1-2. 배치 처리 전략 1-3. 배치 시스템의 처리 전략2. Sched..
인기글 + 내용
-
Springboot에서 ChatGpt연동하기Spring(boot) 2025.02.09 22:49
Springboot에서 외부 Api(ChatGpt)를 연동한 프로젝트를 만드는 방법에 대해 작성해보고자 한다. 1. 프로젝트 초기 환경 세팅2. OpenAI Docs를 보고 FeignClient를 활용해 Api 호출을 하여 사용하는 방법3. SpringAI를 사용해 연동하는 방법순서로 작성하겠다.0. OpenAi Api key 발급Chat GPT API 호출은 유료이다.먼저 외부 Api를 연동하기 위해서는 Api key 발급이 필요하다.https://platform.openai.com/api-keys 위 url에 들어가서 로그인(회원가입)을 한 뒤에 Create Api Key 버튼을 클릭한다.발급된 Api key는 다시 볼 수 없는 것 같아서 어딘가에 저장해 놓는 것을 추천한다. 1. 프로젝트 초기 환경..
-
[코드트리 챌린지] 세 수의 최대 곱(S3)코드트리_Java 2023.09.07 22:59
Q. 세 수의 최대 곱 코드트리의 난이도와 백준의 난이도는 기준이 다르지만, 실버 3 난이도의 문제이다. 정수 n과 n개의 수가 주어졌을 때, 3개의 숫자를 적절하게 골라 나올 수 있는 곱 중 최대값을 구하는 프로그램을 작성하는 문제이고, n의 범위와 주어지는 수의 범위는 아래와 같다. 3 ≤ n ≤ 100,000 -1,000 ≤ 주어지는 수 ≤ 1,000 첫 번째 줄에 3개의 숫자를 적절하게 골라 나올 수 있는 곱 중 최대값을 출력하면 된다. 풀이는 아래와 같다. 1. 음수와 양수를 다른 리스트에 저장한다. 2. 이 음수와 양수들을 각각 정렬한다 (이때 양수는 오름차순으로 정렬되므로 -를 붙이면 내림차순으로 정렬하는 효과가 있다) 3. 최대값이 나올 수 있는 각각의 케이스를 골라 계산한다 3 - 1. ..
-
SSAFY 1학기 회고기타 2023.12.11 14:35
23년 5월부터 싸피를 준비해서 7월에 입과가 확정되고 이후에 모바일반 분반 시험, A형 시험, 여러 관통 프로젝트 및 최종 프로젝트까지 올해는 꽤나 바쁘게 살았다고 생각한다. 회고를 처음 작성해보는데, 회고 방식을 찾아보니 KPT(Keep-Problem-Try) 방식의 회고가 괜찮아 보여서 이 방식과 후기 이벤트에 필요한 요소들인 1. SSAFY에서 가장 기억에 남는 기억 2. SSAFY 교육 이후 성장한 점 2가지 3. SSAFY를 추천하는 이유 2가지 를 추가해서 작성해보려고 한다. Keep(지속할 것) 개인적으로 살면서 가장 열심히 살았다고 자부할 수 있는 경험이었다. 물론 아직 1학기밖에 하지 않았지만 모바일반은 이미 어느정도 베이스가 있다고 가정하고 진도를 나가다보니 진도를 따라가고 최대한 이..
-
Q. 7562 자바 : 나이트의 이동백준_Java 2023.04.10 09:02
Q. 7562 자바 : 나이트의 이동 문제 : boj.kr/7562 실버 1 난이도의 문제이다. 나이트의 위치가 주어지고, 잡아야 할 말의 위치가 주어진다. 이 때 나이트가 몇 번 움직여서 말을 잡을수 있는지 출력하는 문제이다. 격자형 그래프 탐색문제에서 상 하 좌 우 순회하는 방식을 응용해 탐색하는 범위만 바꾸면 쉽게 풀리는 문제이다. 체스판의 한 변의 길이로 주어지는 I의 최대값이 300이므로 시간복잡도는 1. BFS 순회 - O(I ^ 2) 한번으로 최대 90000번 계산을 하면 문제를 해결할 수 있다. 따라서 시간초과는 걱정하지 않아도 된다. 또한 자료형 역시 int 범위 내에서 모두 해결할 수 있다. 풀이는 아래와 같다. import java.io.*; import java.util.*; pub..