전체 글
FastAPI, MySQL을 연동한 웹 서버 구축하기 with Docker, SQLAlchemy
FastAPI MySQL을 연동한 웹서버 구축 개요 Python 진영 중 현대적인 웹 프레임워크 FastAPI와 대중적인 관계형 데이터베이스인 MySQL을 연동하는 간단한 웹 서버를 구축한다. 이 과정에서 편의를 위해 Docker를 사용하며, 관계형 데이터베이스를 객체 지향적인 방식으로 다룰 수 있게 도와주는 ORM 라이브러리 SQLAlchemy를 함께 사용한다. 참고 사항 윈도우 10 환경에서 작업 C:\...\fastapi-mysql>로 시작하는 모든 명령어는 cmd에서 프로젝트 루트 디렉토리인 fastapi-mysql에 위치한 상태에서 실행함 작업시 venv 가상환경을 사용하였지만 사용하지 않은 것처럼 작성함 디렉토리에 venv 디렉토리, mysql/data의 하위 파일, .gitnore파일은 생략..
Pagination이란 (페이징 처리) - Offset vs Cursor
1. Pagination이란 Pagination이란 검색 결과를 가져올 때 데이터를 쪼개 번호를 매겨 일부만 가져오는 기법이다 1.1 Pagination을 사용하는 이유 사용자가 애플리케이션을 사용 중 게시판, 상품 목록 등을 요청할 때 결과 값이 총 100만개일 경우 매번 전체를 전부 가져오게 되면 매우 느려지며 사용자는 불편을 느끼고 애플리케이션을 이탈할 것이다. 하지만 데이터를 조금씩(20개~100개) 나눠서 가져오고 사용자가 원하는 경우 다음 데이터를 가져오게 되면 훨씬 빠르고 사용자도 애플리케이션에 대해 만족할 것이다. 이러한 이유로 사용하는 것이 Pagination이다. 1.2 Pagination 구현 방법의 종류 Offset 방식 : Offset과 limit 예약어를 통하여 select의 전..
프로젝트 시작할 때 자바 버전 고르기 Java 8 vs Java 11
1. 자바 업데이트 지원 기간 JDK는 6개월마다 다음 버전을 제공하며 이전 버전에 대한 유지보수와 보안 업데이트가 중지된다. 하지만 JDK 8 버전 이후로 3년마다 하나의 버전이 LTS(Long Term Supported)로 지정된다. 이 LTS 버전은 최소 4년 이상(벤더사마다 다름) 업데이트를 제공한다. 현재 LTS 버전은 8과 11버전이 있다. 그 다음으로는 17버전이 예정되었고 2021년 9월 14일에 오라클사가 LTS 출시 주기를 3년에서 2년으로 전환하는 것을제안하여 만약 이 제안이 받아들여진다면 다음 LTS 버전은 23버전이 아니라 21버전이 될 수 있다. 2. 스프링에서 지원하는 JDK 버전 스프링 5.1부터 JDK 최소사양은 1.8이며 권장사양은 JDK 11이다. JDK 8 패치 릴리즈..
인텔리제이 Checkstyle과 Formatting으로 코드 스타일 관리하기
인텔리제이에는 코드 스타일을 정하고 그에 맞춰 정렬되도록하는 Formatting 기능과 플러그인으로 제공되는 Checkstyle을 통해 코드 스타일을 분석할 수 있다. 구글 코드 스타일 가이드를 참고하여 이에 맞는 Formatting 설정과 Checkstyle 설정을 하도록 한다. 단 들여쓰기는 2칸에서 4칸으로 변경한다. 1. 인텔리제이 Checkstyle 시작하기 인텔리제이에서 File → Settings → Plugins를 들어간다. Checkstyle-IDEA를 다운로드 받는다. Checkstyle 설정 파일을 다운로드하고 프로젝트 내부에 .idea/config/checkstyle 디렉토리를 생성하여 저장하고 checkstyle.xml로 이름을 변경한다 (checkstyle.xml파일을 생성하여 ..
오픈 마켓 서비스 데이터베이스 스키마 설계하기
데이터베이스 설계의 필요성 개인 포트폴리오 프로젝트 오픈마켓서비스를 진행하는 도중 그때마다 필요한 컬럼과 테이블을 생성하면 개발 도중에 테이블과 컬럼 정보가 계속 바뀌어 개발을 진행하는 동안 동료 개발자와 소통하는 비용이 많이 들고 번거롭다고 생각하였다. 따라서 데이터베이스 설계를 체계적으로 하여 데이터베이스의 변동을 최소로 하여 개발 생산성과 데이터베이스 구조의 효율성과 확장성을 갖추도록 한다. 데이터베이스 스키마 설계 개요 설계는 E-R모델과 릴레이션 변환 규칙을 이용하여 설계하며 순서는 아래와 같다. 요구사항 분석 개념적 설계 (E-R 다이어그램) 논리적 설계 (릴레이션 스키마) 데이터 베이스 구현 (MYSQL 8.0) 느낀 점 1. 요구사항 분석 사용자의 요구사항을 분석하고 그에 맞는 설계를 한다..
[Docker] 도커 간단 정리 with KataCoda - 1편
도커 배우기 프로젝트를 진행하며 새로운 서버를 띄우거나 환경을 변경하는 과정에서 많은 시간과 노력이 들어 항상 도커를 활용하고 싶다는 생각은 하였다. 하지만 프로젝트 초기에 적은 서버만 구축하면 상황이였고 더 먼저 학습해야할 것들이 많았기 때문에 미뤄왔었다. 하지만 이번에 개발자 커뮤니티에 도커 학습에 대한 질문과 답변에서 카타코다 도커 과정과 도커 공식 문서 2가지만 알아도 된다는 조언에 이번 기회에 더 늦기 전에 시작하기로하였다. 항상 드는 생각이지만 빠른 성장을 위해서는 좋은 학습 자료가 필수이고 더 빨리 학습하여 고군분투한 사람들의 조언은 아주 꿀이라고 할 수 있다. 1. 포스팅 의도 해당 포스팅은 위 과정을 간단 정리하여 해당 과정을 진행하고 싶은 사람이 미리 한번 훑어보는 것과 위 과정을 진행..
[프로그래머스] 전화번호 목록 in JAVA
개요 프로그래머스 고득점 Kit에서 level 2인 전화번호 목록 문제입니다. 이 문제의 유형은 해시맵으로 key, value로 이루어진 해시맵 자료구조를 활용해야한다는 힌트가 주어집니다. 문제의 요구사항은 전화번호가 적힌 문자열 배열에서 어느 한 전화번호가 다른 전화번호의 접두어일 경우를 찾는 것입니다. 중복되는 문자열은 존재하지 않습니다. * 119의 접두어로는 1, 11이 있습니다. 모든 값을 순회하는 해결 public boolean solution2(String[] phone_book) { for (int i = 0; i < phone_book.length; i++) { for (int j = 0; j < phone_book.length; j++) { if (i == j) { continue; }..
[프로그래머스] 완주하지 못한 선수 in JAVA
완주하지 못한 선수 프로그래머스 사이트 코딩 테스트 고득점 Kit 메뉴에 해시 카테고리에 Level 1문제이다. 해시맵 자료구조를 사용하면 더 효율적으로 해결할 수 있는 문제가 존재한다. 해시맵 자료구조는 key-value쌍으로 저장하며 검색과 입력이 O(1)인 장점이 있는 자료구조이다. 문제의 요구사항은 마라톤에 참여한 선수들의 이름이 담긴 배열과 완주한 선수의 이름이 담긴 배열이 주어지고 완주하지 못한 선수의 이름을 리턴하는 것이다. 테스트 케이스마다 완주하지 못한 선수는 항상 1명이며 또한 동명이인이 있을 수 있으니 주의하여야 한다. 문제 해결의 핵심 아이디어 문자열을 비교해야하며 동명이인이 존재하기 때문에 이 또한 카운트를 해야한다. 1. 해시맵 자료구조에 참석한 선수의 이름과 인원 수를(동명이인..