분류 전체보기 121

단방향 암호화와 양방향 암호화 방식

IT 개발자로서 개발을 하다보면 이용자의 개인정보 보호를 위해 어떤 암호화 방식을 적용할 것인가를 마주하게 된다. 다양한 암호화 방식중에 단방향 암호화와 양방향 암호화에 차이를 알아보고 어떤 암호화 알고리즘이 있는지 살펴보자. ✅ 단방향 암호화 단방향 암호화는 원래대로 돌아갈 수 없는 암호화이다. 즉, 복호화가 불가능한 암호화를 말한다. 대표적으로 hash가 있으며 암호화된 값으로부터 다시 돌아갈 수 없기 때문에 단방향이라고 부른다. Hash 함수는 같은 입력 값에 대해 같은 출력값이 나오는게 보장이 되지만, 출력값으로 입력 값을 유추할 수 없다. 입력값 출력값 haki fa6f14f5791509d1d7b991788a1c88a9 haki fa6f14f5791509d1d7b991788a1c88a9 위와 같..

Computer Science 2024.01.20

페이지네이션 Offset기반과 Cursor기반 Pagination 차이점

📌 페이지네이션 많은 양의 데이터가 있을 때 서버에서 모든 데이터를 한번에 가져오는 것은 서버입장에서도 클라이언트 입장에서도 좋은 방식이 아니다. 따라서 "특정한 정렬 기준"과 "지정된 갯수"의 데이터를 가져오는 것이 필요하다. 이를 페이지네이션(Pagination)이라고 하는데 찾아보니 페이지네이션 구현 방법은 크게 두가지 방식으로 처리 가능하다. 1. 오프셋 기반 페이지네이션 (Offset-based Pagination) 2. 커서 기반 페이지네이션 (Cursor-based Paginantion) 1번의 방법이 구현하는데 있어서 쉬운 방법이지만 여러가지 문제점이 존재한다. 그렇기 때문에 웬만해선 2번의 방법으로 페이지네이션을 구현하는게 좋다고 한다. 1번의 어떤 문제가 존재하는지 살펴보고 2번에 대해..

Python 2024.01.01

FastAPI에서 MySQL 연결

FastAPI에선 SQLAlchemy ORM 라이브러리로 DB를 조작할 수 있다. 먼저 MySQL과 연결하기 위해 sqlalchemy를 설치한다. pip install sqlalchemy ✅ 설정 파일 추가하기 FastAPI에 ORM을 적용하려면 데이터베이스 설정이 필요하다. database.py 파일을 생성하고 아래와 같이 코드를 작성한다. # app/database/conn.py from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from common.config import Settings SQLALCHEMY_DAT..

Python/FastAPI 2023.12.24

Dependency와 FastAPI에서의 Dependency Injection

의존성(Dependency)이란? 코드에서 의존성은 두 모듈간의 연결을 의미한다. class A가 다른 class B를 사용할 때 A는 B에 의존한다고 볼 수 있다. 즉 한 객체의 코드에서 다른 객체를 생성하거나 다른 객체의 메서드를 호출할 때, 또는 파라미터로 객체를 전달받아 사용할 때 의존성이 발생한다고 할 수 있다. 이렇게 되면 A는 B 없이는 작동할 수 없고 B를 재사용하지 않으면 A또한 재사용할 수 없으며 하나를 수정하면 다른 클래스에도 영향을 끼치게 된다. 강한 결합은 강한 의존성을 만들게 되고 이는 유지보수를 힘들게 하며 재사용을 어렵게 만든다. ​ 의존성 주입(Dependency Injection)이란? 흔히 DI(Dependency Injection)라고 불리는 의존성 주입은 위와 같은 ..

Python/FastAPI 2023.12.22

FastAPI에서 JWT 로그인 기능 구현하기(회고)

IT 서비스를 이용하면서 로그인 기능은 흔히 볼 수 있는 기능이다. 가장 흔하고 구현을 위한 수 많은 라이브러리가 존재하기 때문에 쉽지만, 그만큼 보안에 있어서 가장 중요한 부분이기 때문에 신경써야 할 점들이 많다. 회사에서 내년 3월 일본에 테스트할 서비스를 만들면서 로그인 기능구현을 담당하게 됐다. 어떤 방식을 적용하면 좋을까 고민하게 됐었고, JWT와 AccessToken, RefreshToken을 이용하기로 했다. 이틀이라는 시간에 걸쳐 현재는 로그인 구현을 완료한 상황이지만 구현하는 과정에서 생겼던 의문점과 회고를 기록하고 싶다는 생각이 들었다. FastAPI에 대한 이해 현재 다니고 있는 회사는 Python 기반의 FastAPI 프레임워크를 사용한다. FastAPI는 어플리케이션을 빠르게 개발..

Python/FastAPI 2023.12.16

파이썬 Coroutine(코루틴) 사용하기(feat. 비동기, asyncio)

최근 회사에서 코딩을 하다가 문제없이 작성한 코드에서 Coroutine 에러가 났었습니다. 처음보는 에러였는데 내용을 살펴보니 파이썬 비동기 함수를 제대로 사용하지 못했던게 이유였습니다. 파이썬 비동기 라이브러리인 asyncio에 대해 알아보기 전에 동기와 비동기 개념에 대해서 알아보겠습니다. 동기와 비동기 동기(synchronous)처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식이고 비동기(asynchronous)처리는 여러 작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식입니다. 비동기의 장점은 Request, I/O와 같이 딜레이가 발생하는 작업에서 뛰어난 효과를 보입니다. 즉 서버에 요청하거나 데이터를 읽는 등에 대한 작업에서 유리합니다. 대기 시간이 발생하는 상황에서의 ..

Python/FastAPI 2023.11.19

FastAPI localhost port 변경

from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} uvicorn main:app --reload FastAPI를 사용하던 중 위 명령어를 사용해 서버를 실행하려고 하는데 ERROR: [Errno 48] error while attempting to bind on address ('127.0.0.1', 8000): address already in use 다음과 같은 에러가 발생 FastAPI를 사용할 때 "Address already in use"에러가 발생하면 대부분은 해당 포트 번호가 이미 다른 FastAPI 애플리케이션 또는 다른 프로세스에서 사용 중인 ..

Python/FastAPI 2023.11.01

오버로딩 vs 오버라이딩

자바의 오버로딩(overloading)과 오버라이딩(overriding)에 대해서 살펴보자. 한 줄 요약을 통해 기본적인 느낌을 알고가자 오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는 것 오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것 ✅ Overloading(오버로딩) 오버로딩은 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 오버로딩이라 한다. 같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니며 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다. 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 3. 반환 타입은 관계없다. 메서드의 이름이 같다고 하더라도 매개변수가 다르면 서로 구..

Java 2023.10.20

Spring Boot + JPA + MySQL연동(Gradle)

1️⃣ 프로젝트 의존성 추가 가장 먼저 build.gradle에 의존성을 추가한다. dependencies { // MySQL implementation 'mysql:mysql-connector-java:8.0.33' // JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' compileOnly 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.proj..

Java 2023.07.23

[Annotation] Spring Framwork Annotation 알아보기

✅ Annotation이란? Spring Framwork를 사용하다보면 Annotation을 자주 사용하게 되는데 Annotation은 사전적 의미로는 주석이라는 뜻지만 자바에서 Annotation은 특별한 의미, 기능을 수행하도록 하는 기술이다. Annotation의 종류는 여러가지가 있는데, 그 중에서 자주 사용되는거 위주로 정리해보고자 한다. ✅ Annotation 종류 🔎 Component @Component는 어노테이션한 클래스가 컴포넌트임을 나타낸다. @Component 클래스가 ComponentScan에 속한다면 Spring Bean이 생성된다. @Component public class Game { public Game() { System.out.pringln("Good") } } 🔎 Co..

Java 2023.05.22
728x90