본문 바로가기

분류 전체보기

(125)
구간 합 구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘입니다. 코딩 테스트에서 사용빈도가 높습니다. 기존의 배열에서 합배열을 하나 더 만들어 사용한다.S[i] = A[0] + A[1] + ... +  A[ i -1 ] + A[i] 백준 11659번 : 구간 합 구하기 4import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] input = br..
S3 spring boot와 연결해 이미지 관리하기 이미지를 올리는 방법은 크게 2가지가 있다. 1. MultipartFile을 사용한 기존 S3 파일 업로드Spring Boot에서 S3 파일 업로드를 구현할 때 가장 많이 사용하는 방법이 MultipartFile을 사용하는 방법이다.MultipartFile은 스프링에서 제공하는 인터페이스로, 파일 업로드를 손쉽게 다룰 수 있도록 기능을 제공한다.클라이언트에서 파일을 업로드했을 때 WAS가 임시 디렉토리에 파일을 저장한다.파일은 컨테이너가 실행되고 있는 서버 디스크에 저장되고, 요청 처리가 끝나면 임시 저장된 파일은 삭제된다.MultipartFile 방식은 다수의 사용자로부터 동시에 요청이 들어올 경우, 서버의 스레드가 빠르게 소진될 수 있다는 문제가 있다. 2. Presigned URL을 사용한 S3 파..
스프링 시큐리티 스프링 부트는 톰캣 서블릿컨테이너  위에 있는데 컨테이너가 요청을 받아서 필터를 거쳐 spring boot 에 요청이 들어가게된다 config파일이 필터를 만들어 클라이언트의 요청을 가로챈다. 해당 클라이언트가 어떤 권한이 있는지 분석을 하게된다.  실습을 위해 Spring WebLombokMustacheSpring SecuritySpring Data JPAMySQL Driver를 의존성으로 추가하여 프로젝트를 만들었다.package com.example.testsecurity.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controlle..
데이터 베이스 공부 트랜잭션이 실행되었지만 어떠한 이유로 실패하면 데이터베이스에 행한 모든 변경은 되돌려져야 한다. 이것을 원자성이라고 한다.데이터베이스 시스템은 동시에 수행되는 다른 데이터베이스 명령어의 영향을 받지 않고 트랜잭션이 올바르게 수행할 수 있도록 특별한 조치를 해야 한다. 이러한 속성을 고립성(isolation)이라 한다.트랜잭션의 실행 결과는 시스템 장애가 발생하더라도 영구적으로 반영되어야 한다. 이러한 속성을 지속성(durability)이라 한다.여기에 일관성을 유지해야 한다.일관성(Consistency): 고립 상태(즉 동시에 수행되는 트랜잭션이 없는 상태)에서 트랜잭션 수행이 데이터베이스의 일관성을 보존해야 한다.read와 write는 메인 메모리 버퍼에 있는 변수 값을 데이터베이스에서 가져오고 저장하..
DAY 24 오늘은 트랜잭션에 대해 공부하고 swagger사용법에 대해 알아보았다. 인터넷에있는 설정방법을 찾아 swagger를 설정하고 실행하니 auth filter에 걸려 안걸리게 수정했다. 그리고 jwt를 사용하는데 jwt를 사용하는 부분에 대한것이 없어서 component를 만들어 그곳에 bear token을 같이 넣을수있게하는 config파일을 작성하니 api가 정상적으로 작동했다.
DAY 23 현재 구현된 시스템:카카오 OAuth 인증:사용자를 카카오 로그인 페이지로 리다이렉트합니다.인증 코드를 받아 카카오 액세스 토큰을 발급받습니다.액세스 토큰으로 카카오 사용자 api를 호출해 카카오 ID를 조회하고, 이메일 주소를 만듭니다.사용자 관리:해당하는 이메일을 가진 사용자 정보가 없으면 새로 생성합니다. (가입)액세스 토큰을 별도의 Token으로 저장합니다.주문 처리:주문 요청 시 액세스 토큰으로 사용자를 인증합니다.상품 옵션의 재고를 확인하고 차감합니다.주문 정보를 저장하고, 위시리스트에서 해당 상품을 제거합니다.카카오톡으로 주문 내역 메시지를 전송합니다.이 방식의 한계:카카오 액세스 토큰을 직접 사용하므로 보안상 취약할 수 있습니다. (해킹 위험)토큰 관리가 제한적입니다 (만료 시간, 리프레시..
DAY 23 오늘은 step2를 마무리 하는날이였다 어제까지 해서 내 카카오톡으로 메세지가 오는것을 확인했다 그렇다는말은 외부 api 호출 쪽 로직에는 문제가 없다는 말이된다. 그리고 wish 를 삭제하는 로직이 필요했는데 그부분이 빠져서 급하게 채워 넣었다. 복잡한 관계속에서 시스템을 직접 생각하고 그것이 맞는지를 오늘 멘토링을 통해 멘토님에게 검증받을 생각이다.
DAY 22 외부 api를 호출하는 서비스를 따로 만들어서 사용하던중 멘토님의 리뷰에 커넥션 타임과 리드 타임이 명시적으로 설정되어있지 않다는 리뷰를 받았다. Connection Timeout은 종단 간 연결하는데 소요되는 최대 시간을 의미 합니다. 이 시간을 넘기게 되면 연결 할 수 없는 것으로 판단하고 에러가 발생 합니다. Connection 이라는 단어가 의미하는 것처럼 종단 간 연결에 사용되는 타임아웃 입니다.Read Timeout은 연결된 종단 간에 데이터를 주고 받을 때 소요되는 최대 시간을 의미 합니다. 이 시간을 넘기게 되면 데이터를 받을 수 없는 것으로 판단하고 에러가 발생 합니다. 최초에 연결을 맺는 경우에는 종단간 rtt값을 알수없기때문에 이정도 기다려 보자 하는 시간이 필요하다. 그런데 프로세싱..