Backend 18

CORS란? (Cross-Origin Resource Sharing)

CORS란?CORS(Cross-Origin Resource Sharing)는서로 다른 Origin 간의 리소스 공유를 허용하는 표준 보안 우회 기술이다.기본적으로 웹 브라우저는 보안상의 이유로 다른 출처(origin)의 리소스 요청을 차단한다.CORS는 이러한 제약을 우회하여 다른 출처의 리소스에 접근할 수 있게 해준다.Same-Origin Policy(SOP)란?브라우저가 기본적으로 따르는 보안 정책이다.→ 동일한 출처(origin)에서만 리소스를 공유할 수 있도록 제한한다.Origin이란?Origin은 다음 세 가지의 조합으로 구성된다:프로토콜: http, https호스트: localhost, naver.com 등포트 번호: 80, 8080, 3000 등이 중 하나라도 다르면 다른 Origin으로 판..

JWT와 OAuth의 차이점 정리

1. JWT (JSON Web Token)JWT는 토큰의 한 종류로, 인증 및 권한 부여 정보를 담는 데 사용된다.토큰 자체에 명확한 정보(사용자 ID, 권한, 만료 시간 등)가 들어 있다.별도의 저장소에 토큰의 상태를 저장하지 않고 토큰만으로 정보를 검증한다.구성: Header.Payload.Signature 형식으로 구성되며 Base64Url로 인코딩된 정보를 담는다.특징자체 완결성(Self-contained): 토큰만으로도 사용자의 인증 및 권한 정보를 확인할 수 있다.상태 비저장(Stateless): 서버가 상태 정보를 저장할 필요가 없어 확장성이 뛰어나다.2. OAuth (Open Authorization)OAuth는 토큰이 아니라, 토큰을 얻기 위한인증 및 권한 부여 절차를 정의한 프레임워크이..

JWT(Json Web Token)란?

JWT는 Json Web Token의 약자로, 웹 또는 모바일 환경에서 사용자 인증(Authentication)을 위해 사용되는 토큰 기반 인증 방식이다.로그인 후 서버가 발급한 토큰을 클라이언트가 저장하고, 이후 요청마다 해당 토큰을 함께 전송함으로써 사용자를 식별하고 권한을 확인한다.JWT의 구조JWT는 총 3개의 구성 요소로 이루어져 있으며, 각각 Base64Url 방식으로 인코딩되어'.(dot)'으로 연결된다:Header토큰의 타입(JWT)과 해싱 알고리즘(예: HS256) 정보가 담긴다.Payload실제 토큰에 담고 싶은 사용자 정보가 포함된다.이 안의 정보를 Claim(클레임)이라 부른다.SignatureHeader와 Payload를 조합한 후, 서버의 비밀 키(SECRET_KEY)를 사용해 ..

DI와 객체지향 관점

DI(Dependency Injection)와 객체지향 관점1. DI란 무엇인가?DI(Dependency Injection, 의존성 주입)는 객체가 자신의 의존 객체를 직접 생성하지 않고, 외부에서 주입받는 설계 패턴이다.즉, 객체와 객체 사이의 "의존 관계"를 개발자가 직접 코드로 연결하지 않고, 주입(Injection) 방식으로 외부에서 전달받게 함으로써, 객체 간 결합도를 낮추는 방법이다.DI의 목적:객체 간의 강한 결합을 피함.코드를 더 유연하고, 재사용하기 쉽고, 테스트도 편하게 만든다.2. 객체지향 프로그래밍에서 DI가 중요한 이유객체지향 프로그래밍(OOP)은 유지보수성, 재사용성, 확장성을 강조한다.이런 특징을 살리려면, 객체 간의 결합도가 낮아야 하고, 서로 독립적으로 동작하는 "모듈화"가..

객체 지향

객체 지향 프로그래밍(OOP)이란?객체 지향 프로그래밍(Object-Oriented Programming)은 현실 세계의 사물을 프로그램에 반영하는 방식으로, 프로그램을 객체 단위로 나누어 각 객체의 역할과 책임, 상호작용을 중심으로 구현하는 프로그래밍 패러다임이다. 즉, 프로그램에서 필요한 요소들을 객체로 파악하고, 이 객체들 간의 협력을 통해 전체 기능을 완성하는 방식이다.객체 지향 프로그래밍의 특징객체 지향 프로그래밍은 다음의 4가지 주요 특징을 가지고 있다:추상화 (Abstraction)공통된 속성과 동작을 추출하여 객체의 본질을 표현하는 것불필요한 세부 사항은 감추고 핵심적인 요소에 집중할 수 있음캡슐화 (Encapsulation)데이터와 기능(메서드)을 하나로 묶고, 외부에는 꼭 필요한 정보만..

AOP를 활용했던 경험

AOP 적용프로젝트를 진행하던 중, 일부 API 메서드들이 유저의 필수 정보를 반드시 요구하는 상황이 있었다. 하지만 일부 사용자는 해당 정보를 입력하지 않은 채로 API를 호출해, 매번 중복적인 예외 처리 코드를 작성해야 하는 비효율적인 문제가 발생했고, 이 문제를 해결하기 위해 AOP(Aspect Oriented Programming)를 도입했다. Pointcut: 필수 정보를 사용하는 특정 서비스 메서드들을 대상으로 지정JoinPoint: 해당 메서드가 실행되기 직전(before) 시점으로 설정Advice: 실행 전에 유저의 필수 정보가 모두 입력되어 있는지 확인하고, 누락 시 공통 예외를 발생시켜 클라이언트에 적절한 에러 메시지를 전달하도록 구현함 이 방식으로, 중복된 예외 처리 코드를 제거하고,..

Maven과 Gradle의 차이점

Maven과 Gradle의 차이점 Maven이란?Apache에서 만든 프로젝트 관리 및 빌드 도구기존 Ant의 단점을 보완하기 위해 개발된 오픈소스 소프트웨어POM(Project Object Model) 기반으로 작동하며, pom.xml 파일을 통해 프로젝트 정보를 정의라이브러리 의존성 관리에 강력한 기능을 제공하며, 관련 라이브러리도 함께 자동으로 관리주요 특징pom.xml 파일에 프로젝트 정보, 빌드 환경, 의존성, 플러그인 등을 명시라이브러리 중앙 저장소에서 자동으로 필요한 라이브러리와 연관된 의존성까지 가져옴Gradle이란?빌드 자동화 도구로, Maven보다 더 빠른 빌드 속도와 높은 유연성을 제공Groovy 기반의 DSL(Domain Specific Language)을 사용하여 스크립트처럼 작성..