1. OAuth란? OAuth(Open Authorization)는 인증을 위한 개방형 표준 프로토콜이다. 즉, 이 프로토콜을 사용하면 대부분의 로그인, 개인정보 등과 관련된 관리 책임을 서드파티 애플리케이션에게 위임할 수 있다. 예를 들어서, 자신의 서비스에 카카오톡 간편 로그인 기능을 넣고 싶다고 하자. 이때 OAuth를 이용한다면 안전한 방식으로 카카오톡으로부터 유저의 정보에 접근하기 위한 권한을 위임 받을 수 있다. 2. 주요 용어 1) Authentication 2) Authorization 3) Access Token 4) Refresh Token 3. OAuth 2.0의 구성 요소 1) Resource Owner 2) Client 3) Resource Server 4) Authorizatio..
1. Spring Security란? Spring Security는 스프링 기반 애플리케이션의 보안(인증, 인가 등)을 담당하는 스프링의 하위 프레임워크이다. 만약 이 프레임워크가 존재하지 않았다면 자체적으로 작성해야 할 로직이 많지만, Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해준다는 장점이 있다. * 인증과 인가 인증(Authenticate) : 보호된 리소스에 접근한 대상의 신원 정보를 확인하는 과정(ex. 로그인 과정) 인가(Authorize) : 인증된 사용자가 어떤 리소스에 접근할 수 있고, 어떤 동작을 수행할 수 있는지 검증하는 과정 2. Spring Security의 특징 Servlet API 통합 인증, 인가에 대해 포괄적이고 확장 가능한 지원 필터 기반으..
1. RDBMS(Relational Database Management System)란? RDBMS는 관계형 데이터베이스를 만들고 업데이트하고 관리하는데 사용하는 프로그램이다. RDBMS의 테이블은 서로 연관되어 있으며 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다. 또한, 정규화를 통해서 데이터의 중복성을 최소화하며 transaction을 수행하는 것이 더 쉽다. 또한, 데이터의 원자성, 일관성, 격리 및 내구성을 유지하며 데이터 무결성을 높인다. 2. 테이블들의 연관 관계 2.1 Unique Key Unique Key는 테이블의 열에서 중복될 수 없는 값을 지정한다. Primary Key와 유사하게 두 key 모두 테이블 열의 고유성을 보장한다. 다만, 차이점은 Unique K..
1. ORM(Object Relational Mapping)이란? ORM은 객체와 관계형 데이터베이스를 매핑해주는 기술이다. 이는 객체 간의 관계를 바탕으로 SQL 자동 생성하여 객체 지향과 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결해준다. ORM의 장단점은 아래와 같다. 장점 객체지향적인 코드 SQL Query가 아닌 메소드로 데이터 조작 가능하기 때문에 생산성 증가 객체에 대한 코드를 별도로 작성하여 코드 가독성 증가 재사용 및 유지보수 편리성 증가 DBMS에 대한 종속성 저하 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격 좁힐 수 있음 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간이 줄어듦 단점 복잡한 쿼리문의 경우 SQL문으로의 사용이 더 직관적일 수 있음 프로젝트 규..
Spring에서 의존성 주입(DI: Dependency Injection)을 하는 방법은 크게 3가지가 있다. 여기서 의존성 주입은 필요한 객체를 직접 생성하는 것이 아니라 외부에서 객체를 생성해서 넣어주는 방식이다. 1. Field Injection Field injection은 의존성을 클래스 멤버 필드로 직접 주입하는 방식으로 @Autowired, @Inject 같은 주입 어노테이션을 사용한다. 비교적 코드가 간결하다는 장점을 가지고 있지만 외부에서 접근이 불가능하다는 등의 여러 문제점을 가지고 있어서 Spring 공식 문서에서도 Field injection 말고 Constructor injection 방식을 이용할 것을 권장하고 있다. 이에 대한 자세한 이유는 뒤에서 살펴보자. @Controlle..
1. API란? API는 Application Programming Interface의 약자로 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 간단하게 말해서 요청과 응답을 사용하여서 두 애플리케이션을 서로 연결하여 통신하는 방법을 정의하는 것이 API이다. API의 역할은 아래와 같이 크게 3가지로 나누어 볼 수 있다. 1) 서버와 데이터베이스에 대한 출입구 역할 데이터베이스에는 중요한 정보들이 저장되기 때문에 접속을 통제해야 한다. API는 이를 방지하기 위해서 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다. 2) 프로그램끼리의 통신 가능 API는 스마트폰 어플이나 프로그램 등의 통신 매개체 역할을 수행한다..