분류 전체보기 210

23.08.13 Access token과 Refresh token

Access token과 Refresh token은 주로 OAuth 2.0과 같은 인증 프로토콜에서 사용되며, 사용자의 세션 상태를 유지하면서 보안성을 높이기 위한 목적으로 사용됩니다. 로컬 인증 사용자는 자신의 자격 증명(예: ID와 비밀번호)으로 인증을 요청합니다. 인증 서버는 사용자의 자격 증명을 검증하고, 검증이 성공하면 Access Token과 Refresh Token을 발급합니다. 이 두 토큰은 클라이언트에 반환되며, 클라이언트는 적절하게 저장하여 사용합니다. 외부 인증 사용자가 어플리케이션에 로그인을 시도합니다. 어플리케이션은 사용자를 OAuth2 제공자(ex. Google, Facebook)로 리다이렉트합니다. 사용자가 로그인 후, 해당 제공자로부터 어플리케이션에 접근할 권한을 부여받습니다..

23.08.12 객체 지향 프로그래밍 (OOP)

객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다. 특징 추상화 : 객체에서 공통된 속성과 행위를 추출 하는 것 캡슐화 :데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것 (변수와 함수를 하나로 묶는 것을 뜻함) 상속 : 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것 다형성 : 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 ..

23.08.11 DI와 IoC

DI : Dependency Injection, 의존성 주입. 소프트웨어 개발에서 컴포넌트들 간의 의존성을 느슨하게 만들어주는 설계 원칙을 나타낸다. DI는 클래스나 모듈 등이 외부에서 필요한 의존성을 직접 생성하는 것이 아니라, 외부에서 주입받도록 하는 패턴을 말한다. 이를 통해 유연한 코드를 작성하고 테스트 용이성을 높일 수 있다. IoC : Inversion of Control, 제어 역전. 이는 소프트웨어의 제어 흐름을 개발자가 아닌 프레임워크나 컨테이너에 의해 결정되는 것을 나타낸다. IoC는 DI와 관련이 있으며, DI 패턴을 사용하여 IoC를 구현할 수 있다. IoC는 코드의 결합도를 낮추고 유연한 애플리케이션을 개발하는 데 도움을 줄 수 있다. 이렇게 설명은 나오는데 솔직히 잘 모르겠다. ..

23.08.10 Error Handling

코드를 작성하다 보면 발생할 가능성인 높은 혹은 예상하지 못한 에러에 대해서 처리를 하는데 처음엔 모든 경우에 수에 if문을 달아서 처리를 했었다. 하지만 이렇게 하면 에러처리 하는 코드가 매우 길어지고 보기도 불편했다. // signup.controllers.js const { signupSchema } = require('../middlewares/validationMiddleware'); ... const { error } = signupSchema.validate(req.body); // ../middlewares/validationMiddleware const Joi = require('joi'); const signupSchema = Joi.object().keys({ loginId: Joi...

23.08.09 HTTP와 HTTPS

HTTP Hyper Text Transfer Protocol, 인터넷에서 데이터를 주고받을 수 있는 프로토콜 클라이언트 - 서버 구조 클라이언트의 요청이 있을 때만 서버에서 요청에 따른 응답을 반환한다. 클라이언트에서 서버에 요청을 하는 단방향 통신으로, 서버가 먼저 요청을 할 수 없고 무조건 요청을 받아야 한다. 무상태 프로토콜(Stateless) 지향 서버가 클라이언트의 연결/상태 정보를 보존하지 않는다. 즉, 클라이언트가 이전 요청과 같은 데이터를 원한다고 하더라도 다시 서버에 동일한 요청을 해야 한다. 클라이언트가 이전에 자신이 요청한 정보를 저장해 놓고 해당 정보를 다시 보내주므로, 클라이언트의 요청에 어떤 서버가 응답해도 상관이 없어서 서버 확장성이 높은 장점이 있는 반면, 클라이언트가 많은 ..

23.08.08 passport-kakao

한 번 로컬로 만들었으니 카카오는 큰 문제없을 줄 알았으나 전혀 아니었다. Error: Login sessions require session support 패스포트가 세션을 기본적으로 사용하는 것을 기본값으로 해서 세션을 설치했다. TokenError: authorization code not found 카카오 로그인 요청 시 인가 코드를 받는데 이게 틀리면 에러가 생긴다. Error: secret option required for sessions 첫 번째 에러와 마찬가지로 세션에 대한 보안 설정이 필요했다. KOE006 Redirect URI이 등록되지 않은 경우 카카오 개발자 사이트에서 Redirect URI을 잘못 등록해서 이런 문제가 생겼다. KOE320 동일한 인가 코드 다시 사용됨 → 포스..

23.08.07 passport-local

카카오 로그인은 프론트에서 같이 작업이 필요하다고 생각을 해서 하기 전에 패스포트를 처음 사용해봐서 먼저 어떻게 작동되는지를 이해할 수 있게 로컬 로그인부터 패스포트로 다시 만들었다. 이거는 참고할 자료가 많았고 중간에 콘솔로 다 확인을 할 수 있기에 비교적 쉽게 접근할 수 있었다. usernameField: 'loginId', // req.body.loginId passwordField: 'password' // req.body.password 처음에 정보를 body의 정보를 어떻게 가져오지 했는데 위에 코드가 그 역할을 해준다. // localStrategy.js ... async (loginId, password, done) => { ... // done에서 결과를 처리한다. // done(erro..

23.08.06 쿠키 전달의 문제

로그인을 통해 생성된 쿠키 안에 있는 토큰이 다른 API요청에선 사용하지 못하는 문제가 발생했다. 이를 해결하기 위해서 처음엔 https와 http의 문제라고 생각하고 시도 해봤지만 이건 아니었고, 다음으로 JSON으로 토큰을 전달해 주고 받는 방법을 생각했는데 이는 보안상 좋지 않았기에 이것도 해결할 수는 없었다. 그렇게 고민하던 중 팀원 분 중에 한 분이 해결책을 주셨다. 그래서 이를 통해서 코드를 수정하고 한편으로는 각 옵션들이 무슨 기능을 하는지 알아봤다. res.cookie("MM", `Bearer ${accessToken}`, { secure: true, // https만 허용 httpOnly: true, // true로 설정되면, 쿠키는 JavaScript를 통해 접근할 수 없습니다. sam..

23.08.05 끝 없는 기획

예비 혹은 신입 디자이너님까지 함께하면서 시간이 프로젝트를 시작하고 시간도 기존 미니 프로젝트보다 시간이 조금 더 넉넉하게 주어진 다른 프로젝트를 시작하고 처음에 주제를 선정하고 이런 저런 필요한 것들에 대해서 이야기를 하는데 사람들의 생각이 다 다르다는 것을 크게 느꼈다. 오랜 시간 회의를 하고 마쳐서 다시 기획을 구체화 시키기 위해서 문서화를 하다보면 다시 각자 이해하고 있는 생각들이 달랐고 이게 매번 반복되었다. 생각을 일치화하기가 매우 어려웠다. 모두가 같은 결과물을 생각하고 작업하는 게 굉장히 어려웠고 각자 다시 생각을 정리하고 만나서 이야기 하면 이야기가 길어지면서 기획이 길어지는데 왜 기획팀이 따로 있는지 이해가 되기도 했다. 그렇게 이번 프로젝트는 아직 진행 중이지만 나에게 여러 사람들과 ..

23.08.04 브라우저는 어떻게 주소를 찾을까?

사용자의 요구를 충족시키기 위해서 개발자는 브라우저가 어떻게 작동하는지 알아야 한다. 브라우저는 대부분 싱글 쓰레드로 작동하는 것을 이해하고, 네트워크를 통해 컴퓨터로 데이터를 전송하는 지연시간을 줄이는 웹최적화가 필요하다. 탐색은 웹체이지 로딩의 첫 단계이며, 어디로 요청을 보내야할지 찾는 작업이다. URL로 주소를 입력하지만 실질적으로 IP주소를 통해 서버에 접근해야하고 IP주소를 알기위해서 DNS조회가 필요하다. DNS 조회를 통해서 IP주소를 찾아 서버에 요청을 하는데 글꼴, 이미지, 스크립트, 광고 그리고 다른 자원들이 서로 다른 호스트 이름을 가지고 있다면 각각 조회를 해야해서 시간이 오래 걸리게 된다. 그리고 IP는 일정시간동안 캐시되어 DNS 조회를 하지 않게 도와준다. 이렇게 IP주소를 ..