백엔드 개발/백엔드 일기25 #064. DB 스키마 작성 기본 개념 1. ID 컬럼 - bigint 를 쓰는 것이 좋다. - postgresql에서는 bigserial을 사용한다(bigint + auto increment) - tinyint 는 1byte 로 2^8을 나타낸다. Boolean 타입과 동일하다. 하지만 DB에서는 Boolean 타입이 다시 1 또는 0으로 사용되므로 컬럼은 tinyint로 정의하고 1 또는 0을 사용하는 것이 더 좋다. 뿐만 아니라 boolean 타입 컬럼은 가능하면 사용하지 않은 것이 좋다. - 이외에 smallint(2 byte), int(4 byte), bigint(8byte)이다. int는 4 byte 이니 2^(8*4) 약 21억까지 표현할 수 있다. ID를 표현하는 것이니 unsigned로 42억까지 표현하는 것도 가능하다. 하지.. 2023. 11. 6. #063. 단건 쿼리를 복수형 쿼리로 바꾸기 + map 생성방법 보호되어 있는 글 입니다. 2023. 9. 12. #025. 리팩터링: 트랜젝션 범위를 최소해 안전한 쿼리 만들기 ⛑ 개념 트랜젝션은 최소의 코드에만 적용하는 것이 좋다. 이 원칙을 지키기 위해서 다음을 확인 해봐야 한다. - 트랜젝션을 시작(데이터 베이스 커넥션을 생성)은 DBMS에 작업하는 코드부터 시작해서 가능한 빠르게 COMMIT을 해 트랜젝션을 종료하는 것이 좋다 : 일반적으로 데이터베이스 커넥션은 개수가 제한적이어서 각 단위 프로그램이 커넥션을 소유하는 시간이 길어질수록 사용 가능한 여유 커넥션의 개수는 줄어들기 때문이다. 그리고 어느 순간에는 각 단위 프로그램에서 커넥션을 가져가기 위해 기다려야하는 상황이 발생할 수도 있다. - 네트워크 작업은 트랜젝션에서 제거한다. : 네트워크 장애가 날 경우 웹 서버 뿐 아니라 DBMS까지 락이 걸릴 수 있다. - 하나로 묶어야하는 작업 단위는 하나의 트랜젝션 안에 넣는.. 2023. 1. 27. #024. TS 선언문(:타입)과 단언문(as 타입) 구분해 사용하기 개념 ts에는 변수에 값을 할당하고 타입을 부여하는 방법에는 단언문과 선언문 두 가지가 있다. 선언문은 ':'을 이용해서 변수에 타입을 명시하고 단언문은 'as'를 사용해 타입을 단언한다. interface Person { name: string }; const a: Person = {name: 'Alice'}; // 선언문 const b = {name: 'Alice'} as Person // 단언문 const c: Person = {}; // name 필드가 없으므로 에러가 난다. // ~~~~~~~~~~~~~~~~~ Property 'name' is missing in type '{}' but required in type 'Person'. const d = {} as Person // 에러를 던지지.. 2023. 1. 26. #023. 무중단 배포: Readiness 와 Liveness 설정하기 goal(목표) (1) Spring boot에서 무중단 배포(Zero-downtime Deployment)를 한다. (2) 빌드가 정상적으로 뜨지 않는 경우 배포하지 않는다. (3) 배포 실패 또는 서버가 죽었을 때 슬랙으로 알림을 받는다 (4) 개발 단계에서도 클라이언트와 사이좋게 지내기.. 누가 무중단 없이 배포 소리를 내었는가?.. Non-goal Cloud 환경 설정 플로우 다이어그램 서버 내부 구현 (1) Kubernetes Probes란 Probe는 kubelet이 주기적으로 컨테이너의 상태를 체크하는 것이다. Spring Boot 2.3 이후부터는 Kubernetes probes 기능이 통합되어서 스프링부트에서 직접 설정할 수 있게 되었다. Spring Boot에 spring-boot-sta.. 2022. 12. 30. #022. github의 graphql explorer로 private repository 접근하기 요약 goal(목표) 문제상황: github의 graphql 의 explorer에서 private 한 repository 에 접근할 수 없다. Oauth token을 발급해서 header에 넣어도 접근 불가. "Although you appear to have the correct authorization credentials, the `***` organization has enabled OAuth App access restrictions, meaning that data access to third-parties is limited. For more information on these restrictions, including how to enable this app, visit https://d.. 2022. 11. 9. 이전 1 2 3 4 5 다음