반응형

전체 글 27

[용어정리] SQL과 DDL, DCL, DML

SQL(Structured Query Language)이란? SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터 베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터 베이스 객체 접근 조정 관리를 위해 고안되었다. 데이터 정의어 (DDL : Data Definition Language) 데이터베이스를 정의하는 언어. 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체적인 골격을 결정하는 역할을 하는 언어. schema, domain, table, index를 정의하거나 변경 또는 삭제할 때 사용하는 언어이다. 주로 데이터베이스 관리자나 데이터베이스 설계자가 사용한다. 종류 역할 CREATE ..

ahnnyung ,/etc. 2020.12.27

[Spring Security] Access Token & Refresh Token

시작하기에 앞서 Access Token이란? 사적 리소스(private resource)에 접근하는 REST API에 대한 모든 요청에 토큰이 포함되어 있는지, 또 해당 토큰이 유효한지의 여부를 검증함으로써 인증 절차(로그인)를 수행할 때 사용하는 토큰을 Access Token이라 부릅니다. 이러한 Access Token은 수명이 있다. 수명이 끝나면 해당 토큰을 이용하여 API 서버에 데이터를 요청했을 때 API 서버는 더 이상 정보를 제공하지 않는다. 그럼 어찌해야하는가? Access Token을 재발급 받아야한다. 그러나 그때마다 사용자에게 다시 로그인을 하여 Access Token을 발급받아라~ 하기에는 무리가 있다. 주변을 보아도 아무리 오랜 시간 로그인을 유지하면서 지속적으로 사이트를 사용하여..

ahnnyung ,/Spring 2020.12.15

[Spring Rest API] @CrossOrigin을 줬는데도 CORS 에러가 발생할 때 (CORS preflight 오류)

Spring Security를 사용하여 로그인/인증을 구현했다. 로그인을 통해 JWT토큰을 발급해주고 Frontend에서 발급받은 JWT토큰을 헤더에 포함하여 Request를 보내야 JwtAuthenticationFilter를 통해 JWT토큰이 확인되어야 기존 API를 사용할 수 있도록 구현하였다. 구현을 완료한 뒤 포스트맨을 통해 테스트해봤을 때는 문제없이 잘 동작했다. 하여 서버로 배포한 뒤 얼마 지나지 않아 Front작업하는 팀원으로부터 CORS에러가 난다는 얘기를 들었다. 분명 이전포스팅때의 경험을 살려 다음과 같이 @CrossOrigin어노테이션에 받는 입장의 allowedHeaders로 해당 JWT토큰값을 가지고있는 "X-AUTH-TOKEN"헤더를 추가해줬음에도 에러가 발생하였다. 혹시 몰라서..

[Docker] 2. Docker 설치 (Windows 10)

지난 1부에서는 Docker 기술의 배경, 리눅스의 컨테이너의 특징을 VM과의 차이를 통해 알아보았다. 이번 시간에는 Docker를 직접 설치하는 과정을 서술하겠다. 2. Docker 설치하기 (Windows10 pro) 현재 사용중인 환경은 리눅스가 아닌 windows를 사용하고 있기때문에 Docker를 설치하기 위해서는 몇가지 확인이 필요하다. 1부에서 설명했듯 Docker자체가 리눅스의 컨테이너에 기반한 기술이기때문에 Windows환경에서는 Hyper-V가 지원되는 버전이어야지만 Docker를 설치할 수 있다. Windows 10 버전이 Pro, Enterprise, Education 인 경우 도커 설치 전 환경 설정 작업 관리자 창에서 가상화를 사용함으로 설정했는지 확인. (사용 안함의 경우 BI..

ahnnyung ,/Docker 2020.11.25

[Docker] 1. Docker? 컨테이너와 VM

도커의 정의 도커는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. 도커 웹 페이지의 기능을 인용하면 다음과 같다: 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. - 위키백과 도커를 google에 검색하면 가장 먼저 뜨는 도커의 정의이다. 처음 듣는 사람이 이 문장을 본다면 생소할 것이다. 리눅스는 OS.. 들어봤고, 컨테이너? Spring IoC? 선박에 싣는 거? 배치? batch파일? 아니면 排置(물건을 놓는 것)? 자동화? 알아서 해주는 건가... 하나씩 풀어 얘기해보아야 할 듯싶다. 우선 왜 리눅스가 나왔는지부터 알아보도록 하자. 1. 리눅스와 컨테이너 VM(Virtual..

ahnnyung ,/Docker 2020.11.25

[Log] Apache HTTP Server Log Format

Apache HTTP Server Log 구조 1) 원격호스트 IP주소(요청자) [%h] 2) 요청시간 [%t] 3) 'HTTP메소드', '호출 경로', '프로토콜명' [%m, %U, %H] 4) HTTP 상태코드 [%>s] 5) HTTP 헤더를 제외한 전송 바이트 수 [%b] 6) 요청을 처리하는 데 걸린 시간(ms) [%D] 7) 리퍼러(referrer) 형식 문자열 설명 %% 퍼센트기호 %a 원격IP-주소 %A (서버) IP-주소 %B HTTP 헤더를 제외한 전송 바이트 수. %b HTTP 헤더를 제외한 전송 바이트 수. CLF 형식과 같이 전송한 내용이 없는 경우 0 대신 '-'가 나온다. %{Foobar}C 서버가 수신한 요청에서 Foobar 쿠키의 내용. %D 요청을 처리하는 데 걸린 시간 (..

ahnnyung ,/etc. 2020.11.25

[Log] 로깅의 개념과 다양한 로그 라이브러리, 그리고 주의사항

로깅(Logging) 1) 로깅이란? 운영 중인 웹 애플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야 한다. 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동 프린트 줄 넣기(printlining)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야 한다. 일반적으로 로그 기록의 이점 - 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다..

ahnnyung ,/etc. 2020.11.25

[Spring Rest API] REST API 설계 규칙 - 2

[부록] Google Rest Api에서 쓰는 Error Code STANDARD SUECCSS 200 (“OK”) 일반적인 요청 성공을 나타내는 데 사용해야 한다. 200은 클라이언트가 요청한 어떤 액션이었뜬지 REST API가 성공적으로 수행했음을 나타내는 코드로, 클라이언트는 이 코드를 받길 원한다. 또한 더 이상의 할당된 ‘2xx’ 계열의 응답코드가 없다는 뜻이기도 하다. 204 상태 코드와는 달리 200코드는 응답 바디가 포함된다. 201(‘Created’) 성공적으로 리소스를 생성했을 때 사용한다. 새로운 리소스를 이용하여 컬렉션에 생성했거나 스토어에 추가했을 때 201 상태 코드로 응답한다. 컨트롤러의 행동으로 새로운 리소스가 생겨났을 경우에도 201 상태 코드로 응답한다. POST 시 거의..

[Spring Rest API] REST API 설계 규칙 - 1

규칙 Rule1: 도큐먼트 이름으로는 단수 명사를 사용하여야 한다 Rule2: 컬렉션 이름으로는 복수 명사를 사용하여야 한다. Rule3: 스토어 이름으로는 복수 명사를 사용하여야 한다. Rule4: 컨트롤러 이름으로는 동사나 동사구를 사용해야 한다. Rule5: 경로 부분 중 변하는 부분은 유일한 값으로 대체한다. Rule6: CRUD 기능을 나타내는 것은 URI에 사용하지 않는다. Rule7: URI 쿼리 부분으로 컬렉션이나 스토어를 필터링할 수 있다. Rule8: URI 쿼리는 컬렉션이나 스토어의 결과를 페이지로 구분하여 나타내는 데 사용해야 한다. 메소드 규칙 CRUD 기능을 나타내는 것은 URI에 사용하지 않는다 PUT 메서드는 리소스를 삽입하거나 저장된 리소스를 갱신하는 데 사용해야 한다. P..

[Spring] @Autowired(필드주입, 수정자주입, 생성자주입), 그리고 @AllArgsConstructor

Spring 어노테이션 중엔 @Autowired라는 어노테이션이있다. 이 어노테이션을 특정 필드에 부여하면 IoC컨테이너 안에 존재하는 특정 필드와 같은 타입의 Bean을 찾아 자동으로 주입해주게 된다. 만약 같은 타입의 Bean이 여럿 존재한다면??[보러가기👀] 이 @Autowired 어노테이션이 없었다면 아래와 같이 코드가 지저분해진다... // TestService.java @Service public class TestService { private TestRepository testRepository; public TestService(TestRepository testRepository){ this.testRepository = testRepository; } ... } // TestRepos..

ahnnyung ,/Spring 2020.11.24