일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 알파회계
- 자바편
- 데비안
- 티스토리 쿠키 삭제
- 자료구조와 함께 배우는 알고리즘 입문
- 깃
- 구멍가게코딩단
- network configuration
- 서버설정
- 자료구조와함께배우는알고리즘입문
- 네트워크 설정
- 스프링 시큐리티
- resttemplate
- 병합
- 처음 만나는 AI 수학 with Python
- 스프링부트핵심가이드
- 선형대수
- 목록처리
- 코드로배우는스프링웹프로젝트
- 처음 만나는 AI수학 with Python
- Kernighan의 C언어 프로그래밍
- iterator
- 리눅스
- 이터레이터
- 친절한SQL튜닝
- merge
- GIT
- 코드로배우는스프링부트웹프로젝트
- 페이징
- /etc/network/interfaces
- Today
- Total
목록Projects (60)
bright jazz music
지난 포스팅에서는 AuthResolver에서 getParameter로 넘어오는 값을 분석해서 인증작업을 해줬다. getParameter로 가져오면 다른 정보와 충돌이 생길 가능성이 있다. 따라서 인증정보는 헤더를 통해서 가져오는 것으로 변경한다. 1. ArgumentResolver 변경 //AuthResolver.java package com.endofma.blog.config; import com.endofma.blog.config.data.UserSession; import com.endofma.blog.exception.Unauthorized; import org.springframework.core.MethodParameter; import org.springframework.web.bind.su..
AurgumentResolver: preHandle에서 http 요청의 헤더를 검사한다. request parameter에 key값이 "accessToken"인 값이 있으면 해당 값을 요청에 setAttribute 해준다. 이 때 key 값은 임의로 정해주어도 된다. 여기서는 "userName"을 key로, accessToken을 value로 넣어줬다. 여기서는 string 값을 넣어줬지만 object를 넘길 수도 있다. request.setAttribute("userName", accessToken);
blog 26 포스팅에서 사용했던 get parameter, 또는 헤더 인증의 경우, 간단하게 값을 확인해서 if문으로 비교하여 api를 허용/거부처리 해줄 수 있었다. 0. 문제 그러나 이 방법의 경우 메소드가 추가될 때마다 동일한 작업을 반복하여 작성해야 한다는 단점이 있다. 매번 값을 꺼내고 확인하고, 인증값이 변경될 경우 모든 컨트롤러 메서드마다 변경해줘야 한다. 한 군데에서 한 번의 작업으로 전역적이고 반복적인 작업을 처리할 수 있는 방법이 필요하다. 1. 테스트 할 controller 생성하기 인터셉터는 요청이 컨트롤러 레이어에 진입하기 전에 공통된 작업을 해 준다. 인터셉터를 생성하기 전에 인터셉터를 테스트 할 핸들러를 생성하자. //postController.java @GetMapping(..
서버 입장에서는 들어온 요청의 인증 여부만 확인하여 인증이 된 요청이라면 API를 사용하도록 해주면 된다. - 새로운 기능을 추가할 때 과거에 작성한 코드가 맘에 들지 않을 수 있다. 그럴 때는 현재 내가 작성하려는 기능을 거기에 덧붙이지 말고, 과거의 코드를 리팩토링 한 뒤에 추가하는 버릇을 들이자. 그렇지 않는다면 레거시 코드로 남는 것이다. 리팩토링은 시간을 내서 하는 것이 아니다. 인증을 하는 방법 //PostControllerTest.java @Test @DisplayName("글 작성 요청시 DB에 값이 저장된다.") void test3() throws Exception { //given PostCreate request = PostCreate.builder() .title("제목입니다.") ..
애플리케이션 서버가 종료되면 접속이 되지 않는다. nohup을 사용한다. nohup은 기본적으로 애플리케이션으로 들어오는 중단 명령어를 무시하게 해준다. 터미널을 꺼도 종료되지 않는다. 그러나 ctrl + c를 누르면 종료된다. (그냥 nohup만 사용했을 경우) nohup을 쓰게 되면 터미널을 끄더라도 하더라도 계속해서 돌아간다. tail -f nohup.out : 파일이 내용이 쓰여질 때마다 갱신하면서 보여짐 종료하기 ==> 프로세스를 죽인다. ps aux (현재 시스템에 띄워져 있는 프로세스 리스트를 보여준다. nohup을 붙여서 애플리케이션을 실행하더라도 뭔가 할 수 있는 것은 아니다. 다른 일을 하기 위해서는 프로세스를 백그라운드로 넘겨야 한다. 이 때는 맨 끝에 &(ampersand)만 붙이면..
1. 터미널 열어서 프로젝트 경로에 접근하여 빌드 ./gradlew build 찾아보니 gradle-wrapper.jar 파일이 없어서 생기는 문제였음 ./gradlew build 애플리케이션 빌드 후 jar 파일 생성. 이 파일을 원격서버로 보내서 원격서버가 실행하면 이것이 애플리케이션 서버가 되는 것이다. 이렇게 생성된 jar 파일은 프로젝트 폴더의 build/lib 디렉토리에 위치하게 된다. libs 디렉토리 내부에는 두 개의 jar파일이 존재한다. - bootjar파일 (애플리케이션으로 띄울 수 있는 jar 파일이다. 빌드에 필요한 라이브러리가 포함돼 있다.) - plain.jar (관련 라이브러리가 포함되어 있지 않은 순수 자바 애플리케이션이) : 사용하지 않는다 이 plain.jar 파일이 생..
1. 개선 후 화면 소개 변경된 파일 확인 2. 개선 전 작업 DB에 값 넣어놓기 필요한 라이브러리 설치 - base.css 삭제. 방해됨 - scss 설치. (노드 서버 실행중에 설치했다면 재시작 해야 적용될 수 있음) - normalize.css 설치 npm install normalize.css package.json 확인 3. 파일 생성 및 구조 기본, 라우터 및 설정 파일 // index.ts import { createRouter, createWebHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; import WriteView from "../views/WriteView.vue" import ReadView f..
1. 수정화면을 표현할 뷰 컴포넌트 파일 만들기(EditView.vue) 2. 라우터에 등록 // index.ts import { createRouter, createWebHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; import WriteView from "../views/WriteView.vue" import ReadView from "../views/ReadView.vue"; import EditView from "../views/EditView.vue"; //경로를 적어줌으로써 import 필요 const router = createRouter({ history: createWebHistory(import.me..
1. 글 내용 표시할 화면 파일 만들기 (ReadView.vue) 제목 내용 2. 라우터에 해당 컴포넌트 등록 (index.ts) // index.ts import { createRouter, createWebHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; import WriteView from "../views/WriteView.vue" import ReadView from "../views/ReadView.vue"; //경로를 적어줌으로써 import 필요 const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes:..