Solutions
[Spring Security] 인증 실패 오류 다루기
[Spring Security] 인증 실패 오류 다루기
2024.06.20스프링 시큐리티에서는 인증 관련 예외가 발생한 경우 AbstractUserDetailsAuthenticationProvider 가 클래스 내부의 hideUserNotFountExceptions 변수를 확인하고 발생한 예외를 BadCredentialsException 예외로 변환해 어떤 예외가 종류의 예외가 발생했는지 감춘다. // AbstractUserDetailsAuthenticationProvider.class@Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { Assert.isInstanceOf(UsernamePasswordAuthenticationToken..
[SQL Server] 지원하지 않는 TLS 버전 설정
[SQL Server] 지원하지 않는 TLS 버전 설정
2024.06.05datasource: db1: jdbc-url: jdbc:sqlserver://192.168.10.224:1433;encrypt=true;integratedSecurity=true;trustServerCertificate=true; username: dbuser password: 1234 # driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver 스프링부트에서 SQL Server를 사용할 때 사용하는 설정이다. encrypt : 연결을 암호화할지를 결정한다. 서버(SQL Server)는 SSL ..
대용량 파일 업로드 처리 (30GB)
대용량 파일 업로드 처리 (30GB)
2023.12.03FastAPI에서 대용량 파일 업로드 기능을 구현해보자. 프론트엔드에서 백엔드로 요청을 보낼 때는 axios를 사용하고, FastAPI의 웹서버 구현체로는 uvicorn을 사용한다. 1. 타임아웃 설정 용량이 크다 보니 데이터를 주고받는데 시간이 많이 소요될 수 있다. uvicorn과 axios 부분을 조작해 타임아웃 기간을 늘리자. uvicorn app:app --timeout-keep-alive 1200 우선 uvicorn에서는 --timeout-keep-alive 속성값으로 uvicorn 서버가 클라이언트와의 비활성 HTTP 연결을 얼마나 오래 유지할 지 설정할 수 있다. 예시는 1200초동안 연결이 비활성화 상태로 유지되면 자동으로 닫히도록 설정한다. upload_axios_timeout: 120..
Shadow DOM 다루기
Shadow DOM 다루기
2023.11.22다른 사람이 만든 자바스크립트 라이브러리를 사용해 원하는 기능을 구현하고, CSS를 적용할 때 렌더링된 결과를 개발자 도구를 통해 살펴보면 #shadow-root 라는 부분이 나타날 때가 있다. #shadow-root는 웹 컴포넌트의 Shadow DOM을 나타내는 용어로, 스타일과 마크업을 실제 DOM에서 격리시켜 컴포넌트의 내부 구현을 캡슐화하는 도구로 사용된다. Shadow DOM 내부의 스타일은 해당 DOM에만 적용돼 격리된 UI 컴포넌트를 만들 때 사용할 때 사용된다. Vue에서는 DOM을 추상화한 Virtual DOM을 사용해 실제 DOM에 접근하고 조작하는 비용을 최소화하고, Shadow DOM은 웹 컴포넌트의 캡슐화와 스타일 격리를 위해 사용된다. 이전에 wav파일을 시각화하는 자바스크립트 ..
map 함수와 Vue3의 반응형 시스템
map 함수와 Vue3의 반응형 시스템
2023.11.16서버에서 데이터를 받아오고, 받아온 데이터를 v-for 반복문을 사용해서 렌더링한다고 생각해보자. {{ subject.subject_no }} 성별 여성 남성 각 subject에 대해 watch 등 비즈니스 로직을 추가하려면 서버로부터 subjects를 받아올 때 map, forEach 등 반복문을 사용해 각각의 subject에 로직을 추가하는 방식으로 작업하면 된다. 여기서 map을 사용할 때는 주의할 점이 하나 더 있다. Vue3 에서는 reactive 또는 ref로 감싼 객체만이 반응형으로 동작해 데이터의 변경을 감지하고 해당 Vue 컴포넌트를 동적으로 업데이트 할 수 있다. (ref는 단일 값을 반응형으로 만들 때 사용하고 reactive는 객체를 반응형으로 만들 때 사용한다. ref는 .valu..
Git 협업 시 충돌 해결
Git 협업 시 충돌 해결
2023.11.14A와 B 두 명이서 협업을 하고 있다고 하자. A는 101까지 작업을 진행하고 커밋 및 원격 저장소에 push 했고, B는 101까지 진행된 작업을 pull 받아서 이어서 작업을 진행했다. 이후 A와 B는 각각 이어서 작업을 진행해 102A - 103A / 102B - 103B 까지 작업했고, B는 103B 까지 작업한 내용을 커밋 후 원격 저장소에 push 했다. 이후 A가 103A까지 작업한 내용을 커밋 후 원격 저장소에 반영하려면 원격 저장소의 최신 변경사항 (103B) 을 로컬 저장소로 가져온 후 103A 관련 작업을 커밋해야 한다. git pull origin master 명령어를 통해 원격 저장소의 변경 사항을 가져올 수 있는데... A와 B가 동일한 파일의 같은 부분을 수정하고 각각 커밋했다..
디렉토리 구조 탐색과 이미지 메타데이터 저장
디렉토리 구조 탐색과 이미지 메타데이터 저장
2023.09.17서버에 위와 같은 구조로 파일과 디렉토리가 구성되어 있을 때, 이 구조를 데이터베이스에 적합한 형식으로 저장하고 화면에 위와 같은 구조로 출력하는 기능을 작성해보자. 서버에 저장되는 디렉토리와 파일 구조는 고정되지 않고, 이미지만을 저장한다고 가정한다. (디렉토리를 몇 번 거친 후에 이미지 파일이 등장하는지는 정해지지 않았다) 1. 서버에 저장되는 이미지의 수는 적어도 10만장을 넘어간다. -> 저장하는 로직은 스케쥴러를 통해 특정 시간마다 수행될 수 있도록 설정할 수 있어야 한다. 2. 새로 추가된 디렉토리 및 이미지를 감지할 수 있어야 하고, 디렉토리와 이미지가 수정된 경우도 감지할 수 있어야 한다. -> 마지막으로 수정된 날짜, 저장된 이미지 수를 사용한다. 3. 특정 디렉토리를 선택하고 하위 이미..