목록분류 전체보기 (462)
hyeonga_code
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yTb1O/btsIww9LSgM/2pQkLG0Xs84QK4zE0uaHK1/img.png)
시작.이전의 카테고리 업데이트에 CompletableFuture 를 적용하여 비동기적으로 코드를 작성했다. 이 때 작성한 코드는 CompleatbleFuture.supplyAsync() 메소드를 사용할 때 따로 스레드를 설정하지 않았었다. 비동기 처리 작업을 테스트하는 코드를 작성할 때에는 Executor를 설정해 작업했었으나 제대로 짚고 넘어가지 않았던 것 같다. Async Pool_비동기 풀주로 CompletableFuture와 같은 비동기 작업을 관리하기 위해 사용되는 스레드풀이다.비동기 작업을 관리하는 경우 내부적으로 ForkJoinPool.commonPool()을 사용한다. ForkJoin Pool큰 작업을 작은 작업으로 나누어 병렬로 처리하는데 최적화된 스레드 풀이다.주로 작업을 분할하고 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dxEJGx/btsIcDbfDWp/4Nilail2RlIL4oYsPDk861/img.png)
혹시 이상한 부분이 있다면 꼭 문제를 제기해줬으면 한다...... 제발..부탁.. 시작.sync/async 와 blocking/non-bloking에 대해 알아보기로 했다.가지고 있는 Java 관련 기초 개념서에는 자세하게 나와있지 않아 구글링으로 시작했다.대부분의 블로그에서 볼 수 있는 내용이다.Sync /Async호출된 함수의 종료를 호출한 함수가 처리하는지 호출된 함수가 처리하는지에 대한 기준으로 나뉜다.더보기Sync : 동기 처리A 가 B 를 호출할 때 B 의 결과를 A가 처리한다.요청 순서대로 반환된다.A, B 모두 결과와 순서를 중요하게 생각한다.작업을 순차적으로 처리하는 방식으로 하나의 작업이 완료되어야 다음 작업을 실행한다.순차적이고 직렬적으로 작업이 처리되므로 처리속도가 느릴 수 있다.단..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJLGSj/btsIbkVFlFK/yWK17NIVnY241uq15t4lT0/img.png)
Url을 저장하는 다이어리가 주제인 프로젝트를 작업 중이다. CompletableFuture를 사용하여 비동기 작업을 처리하는 것은 주로 서비스 계층에서 데이터베이스 접근 및 캐시 작업과 관련된 부분에서 사용할 수 있다. 데이터베이스의 저장, 조회, 업데이트, 삭제 작업을 비동기로 처리하여 응답 시간을 단축하여 서비스의 성능을 향상시키고 대기 시간을 줄일 수 있다. 현재 프로젝트에서 캐시를 사용하여 카테고리 관련 기능을 구현했는데 카테고리 수정 시 캐시를 업데이트하고 데이터베이스에 수정 사항을 저장하는 작업을 비동기로 처리할 수 있다. CategoryService> 이전 코드더보기 @CachePut(value = "category", key = "#userId") public Category..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buT5ny/btsH84zuB22/LHIWOmTH2YiFU59AoKOqzK/img.png)
CompletableFuture (Java SE 22 & JDK 22)JavaScript is disabled on your browser. Nested Class Summary Nested Classes Nested classes/interfaces declared in interface java.util.concurrent.Future Future.State Constructor Summary Constructors Method Summary All MethodsStatic MethodsInstance MethodsCdocs.oracle.com CompletableFuture의 기본 개념+ 별도의 스레드에서 비동기적으로 작업을 수행할 수 있다.+ 작업이 완료된 후 실행할 콜백 함수를 등록할 수 있다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwtxYO/btsH5QgsqaK/7pnKoUgMwuKL4KE7kYMVEk/img.png)
Cache한 번 처리한 데이터를 임시로 저장소에 저장한다.임시 데이터를 동일하거나 유사한 요청이 오는 경우 저장소에서 바로 읽어와 성능/응답 속도를 향상하기 위한 기술이다. 고려 사항.별도의 연산 수행 없이 동일한 응답 값을 전달할 수 있어야 한다.Cache를 적용할 기준을 결정해야 한다.유지 기간을 결정해야 한다.저장 공간을 설계해야 한다. 카테고리의 경우 변경이 많지 않은 부분이라 적용해보려고 한다. 캐싱 전략 : 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 기술메모리를 사용하므로 데이터베이스보다 빠르게 응답을 할 수 있다.RAM의 용량은 16-32GB정도로 용량 부족에 대한 고민이 필요하다. Cache Hit : 캐시스토어에 데이터가 있는 경우 바로 가져와 빠르다.Cache Miss: 캐..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cGSv8K/btsH1EtMs1g/sspjzDEqPbBZNYqZt6XwXk/img.png)
시작. 현재 작업한 카테고리 로직은 흔하게 사용되는 상위 카테고리 id를 가지고 있어 최상위 카테고리까지 불러오는 방식으로 작성했다. 멘토님이 하위 카테고리나 상위 카테고리 정보를 가지고 있어야 하는 이유를 물으셨을 때, 카테고리 조회 시에 데이터베이스의 접근을 최소한으로 하기 위해 하위 카테고리 정보를 한 번에 가지고 오려했다고 말씀드렸고, 이에 이어진 접근은 사용자별로 카테고리를 하나의 데이터로 묶어 처리하는 방법은 어떨지에 대해 생각해보라고 하셨다. 기존 코드.Category더보기package com.hyeongarl.entity;import com.fasterxml.jackson.annotation.JsonBackReference;import com.fasterxml.jackson.annot..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/q0SRx/btsH1hxNXFo/PdVSkkkTWLtxJ8BKM62jB1/img.png)
Project_10_SpringSecurity, JWT 없이 사용자 인증 구현하기(토큰)피드백.멘토님께 코드 피드백을 받았다. SpringSecurity와 JWT를 왜 사용했는지 물어보셨다.멘토님께서는 지금까지 실무에서 작업하시면서 Spring Security를 사용한 적이 없다고 하셨다.또한 현재 작업hyeonga493.tistory.com 로그인 > headers에 authorization 추가 > url 등록 시 @AuthenticationPrincipal 을 사용하여 userId를 추출하는 방법을 적용하려고 하였" data-og-host="hyeonga493.tistory.com" data-og-source-url="https://hyeonga493.tistory.com/477" data-og-..
Spring Security.공식 문서 참조사용자 지정이 가능한 인증 및 엑세스 제어 프레임워크Spring 기반 응용 프로그램을 보호하기 위한 사실상의 표준 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크로 사용자 지정 요구 사항을 충족하도록 얼마나 쉽게 확장할수 있는지가 중점이다. 기능.- Authentication_인증 과 Authorization_권한부여 에 대한 포괄적이고 확장 가능한 지원- 세션 고정, 클릭 재킹과 같은 공격에서 보호- Servlet API 통합- Spring Web MVC와 선택적 통합 필수.Java 8 이상의 런타임 환경 필요자체 포함 방식으로 작동하는 것이 목표이므로 JRE에 별도 구성 파일을 배치할 필요가 없음 build.gradle 추가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JU7Wq/btsHTEVAmXq/QLE4yTyELZQrje77N2AUWk/img.png)
Docker.공부를 할 때 블로그를 참고하는 것보다 공식 문서를 한 번 쭉 훑어보는게 좋다고 하셔서 공식 문서를 보다가 Dokcer 공식 문서를 풀어서 설명하신 블로그를 보고 이해하는 데 도움이 많이 되었다. [Docker] Docker 이해하기 -1 : 기초 이론(아키텍처, 흐름, 주요 용어)해당 글에서는 Docker를 사용하기 위해 기본적인 아키텍처에 대한 이해와 흐름, 주요 용어들에 대해 이해를 돕기 위해 작성한 글입니다. 1) Docker 💡 Docker - ‘컨테이너화’를 사용하여 응용 프로adjh54.tistory.com DockerFile.> 빌드 단계#syntax=docker/dockerfile:1# openjdk:17-jdk 이미지를 사용하여 빌드 환경을 설정FROM openjdk:1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Iafhc/btsHSzSEZ8D/TiFDGkymPZIoOOhkdHI4gk/img.png)
피드백.멘토님께 코드 피드백을 받았다. SpringSecurity와 JWT를 왜 사용했는지 물어보셨다.멘토님께서는 지금까지 실무에서 작업하시면서 Spring Security를 사용한 적이 없다고 하셨다.또한 현재 작업해둔 코드에서는 refreshToken을 구현하지 않고 데이터베이스에 토큰 정보를 저장하는 로직이 아닌 userId를 Authentication에 저장하여 토큰에 값이 들어가있다. 토큰을 인증 기반으로 하는 서비스는 token에 어떠한 의미도 없는 일회성 토큰을 주로 사용한다고 하셨다.작업했던 예시를 들어주시며 말씀해주신 바를 토대로 토큰에 의미가 들어간다면 인증되지 않은 사용자의 서버 사용 히스토리를 가지는 토큰을 데이터베이스에 저장해두고 url에 넘겨 url을 호출시 이전에 접근했던 기록..