본문 바로가기

분류 전체보기

[사이드 프로젝트] 홈페이지 및 어드민 개발 인원 : 3명(디자이너, 프론트 엔드, 백엔드) 기간 : 7월 ~ 11월 상용 배포 날짜 : 11월 20일 현재 진행 상황 : 7~8월 : 홈페이지 디자인 작업 완료 8월 후반 및 9월 초 : 피드백 반영으로 인한 수정 진행 중 진행 일정 : 8월 28일 ~ 9월 7일: 어드민 기획, 플로우 차트, 와이어 프레임, 디자인(임시) 완료 * 디자인은 작업 진행하면서 추가적으로 보완 예정 9월 1일 ~ 9월 27일 : 홈페이지 서버 1차 개발 완료 및 어드민 1차 개발 완료 10월 1일 ~ 10월 31일 : 홈페이지 2차 개발 완료 및 어드민 개발 완료 11월 1일 ~ 11월 19일 : QA 시작 11월 20일 배포(예정)
[생활밀착] mysql 시스템 변수 변경 2022/05/13 상황 : mysql 에서 제공하는방식을 사용하여 데이터를 암호화 및 복호화하여 검증하는 쿼리를 작성 했다. mysql에서 기본적으로 제공하는 암호화 모드를 사용하려 했으나 서비스 로직에서 사용하는 암호화 방식이 달라 수정 후 사용 하려던 중, 기본 값을 세팅하는 방법으로 @는 사용자 정의 변수, @@는 시스템 변수 설정하는 것을 알게 되었다. 그래서 서비스 변수를 변경하는 것이니 @@(암호화 모드) = "" 를 사용하여 암호화 후 서비스에서 사용하는 encrypter로 복호화 하니 원본 데이터와 값이 일치했다. 그러나 장소를 바꿔서 디비 연결 후 다시 암호화 후 복호화 하여 값을 비교하니 일치하지 않는 문제가 발생했다. 원인 : @@(변수)가 시스템 변수를 설정하는 것은 맞았다. 그러..
날짜와 시간의 형식화 getInstance() - 기본적으로 시스템의 날짜와 시간에 대한 벙보가 담겨 있음, 인스턴스를 반환 받을 수 있다 -static 인스턴스이다. static이 아니라면 객체 생성 후 호출해야하는 데 Calendar는 추살클래스이기 때문에 객체 생성이 불가능하기 때문이다 태국의 경우 , BuddhistCalendar , 그외에는 GregorianCalendar의 인스턴스를 반환 Calendar → Date Calendar cal = Calendar.getInstance(); Date d = new Date(cal.getTimeInMillis()); // Date(Long date) Date → Calender Date d = new Date(); Calender cal = Calender.getInsta..
RestTemplate vs WebClient(+동기/비동기) RestTemplate WebClient spring 3.0 spring 5.0 blocking / 동기 non-blocking / 비동기 각각의 쓰레드가 응답을 받을 때까지 쓰레드가 동작하지 않는 동기화 모델 이벤트 루프 방식을 구현한 reactive stream API를 사용 요청 증가 → 해당 요청 쓰레드 생성 → 쓰레드풀 소모 → 메모리 소비 증가 → 빈번한 컨텍스트 스위칭으로 성능 저하 / 요청 수에 연관 되어 성능 저하가 발생한다. task생성 → 큐에 저장 후 응답이 있는 경우에 처리 : 요청에 관계 없이 일정한 성능을 제공한다. getForObjct() getForEntity() : responseEntity postForObject() postForEntity() patchForObjec..
[W.I.L]CommandLineRunner, ApplictionRunner 작업을 호출하지 않고 모든 로직을 수행하는 어플리케이션을 만들기 위해서 공부하다가 알게 되었다. application실행 시에 동작을 할 수 있는 것이 ApplictionRunner와 CommandLineRunner 두가지가 있다. 차이점은 ApplicationRunner는 단순 인자의 스트링 배열을 포함한 추상화한 ApplicationArguments 타입의 객체가 Run()메소드의 인자로 넘어오고 CommandLineRunner는 기본적인 Array 형태로 argument가 Run()메소드의 인자로 넘어온다. CommandLineRunner란? 특정 Bean을 Application 실행 후 실행하도록 하는 인터페이스이다. 이는 ApplicationRunner도 같다. 클래스로 구현해서 사용해야 한다...
[W.I.L]ThreadPoolExecutor ThreadPool 이란? 생성 가능한 최대 스레드의 갯수를 정해 놓고 작업 큐에 저장 되는 작업들을 하나씩 쓰레드 풀에 존재하는 쓰레드가 처리하도록 하는 방법이다 . 직접 쓰레드를 관리하고 싶다면 ThreadPoolExecutor 클래스의 인스턴스를 생성자로 생성하여 사용하면 된다. ThreadPoolExecutor는 생성자를 사용하여 corePoolExecutor, maximumPoolSize, keepAliveTime, workQueue등을 설정할 수 있다. 생성된 쓰레드들은 main 쓰레드가 종료 되더라도 작업을 마칠 때 까지 Runnable 상태에 남아 있게 된다. 따라서 프로세스를 종료 시키려면 쓰레드 풀의 쓰레드 들이 모두 Terminated 상태가 되도록 유도 해야 한다. ThreadPoo..
BufferedReader와 BufferedWriter BufferReadder의 사용법 메소드 : readLine(), close() readLine() : 입력값을 String으로 바꾸는 메소드 / 반드시 한 줄씩만 읽는다 close() : BufferdReader를 다 사용한 후 입력 스트림을 닫기 배열의 사이즈 구하는 방법 : readline()으로 읽고 결과 값을 Integer.parseInt()로 int타입으로 변경 줄에 있는 요소 하나하나 가져오는 방법 : readLine()으로 읽고, StringTokenizer나 Split()을 통해 요소를 하나씩 읽고 배열에 값을 넣기 public static void main(String[] args) throws IOException { // BufferedReader를 사용하기 위해서는 throws ..
csrf 에러 - csrf란 무엇인가? Forbidden (403) CSRF 검증에 실패했습니다. 요청을 중단하였습니다. 이 메세지가 보이는 이유는 폼을 전송할 때 CSRF 쿠키를 필요로 하기 때문입니다. 이 쿠키는 보안상의 이유로 필요하며, 제3자에 의해 당신의 브라우저가 해킹당하고 있지 않다는 것을 보장합니다. 만약 브라우저 설정에서 쿠키를 비활성화 시켰을 경우, 적어도 이 사이트나 '동일-출처' 요청에 대해서는 활성화 시키십시오. api를 호출 했을때 csrf 에러가 났다. 그래서 csrf란 무엇인가? 어떤 설정을 해줘야 에러가 안나는 것인가 하는 궁금증이 생겨 찾아보았다. 나중에 혹시나 잊어버릴 수 있는 경우를 위하여 이해한 부분은 간단하게 정리해보려고 한다. CSRF란? "사이트간 요청 위조는 특정 웹사이트가 사용자의 웹 브라우저를 ..