Backend

Backend/Django

django 설치 및 프로젝트 생성

가상환경 생성 및 활성화 virtualenv 설치 프로젝트 폴더 하나 생성 후 $ pip install virtualenv 가상환경 만들기 // python 3.7 이상 $ python -m venv myenv // python 3.7 이하 $ virtualenv myenv 가상 환경 활성화 $ source myenv/Scripts/activate 하면 하단에 (myenv)가 에코되면서 가상 환경 활성화가 완료된다. VSCode 인터프리터 선택 (반드시 가상 환경이 활성화된 상태에서 진행) ctrl+shift+p → python interpreter → ‘myenv’: venv 후에 터미널 창 (git bash) 열면 자동으로 가상 환경이 활성화된다. django 설치 $ pip install djang..

Backend/Database

[MySQL] Group by, Having, Having과 Where의 차이

Group by ~ Having 절 Group by: 특정 열을 기준으로 데이터를 그룹화. group by의 기준은 여러개가 될 수도 있다. Having: 집계 함수(예: COUNT, SUM, AVG)를 사용하여 그룹화된 데이터를 필터링. Having과 Where의 차이 HAVING Clause WHERE Clause The HAVING clause checks the condition on a group of rows. (한 그룹 내에서 조건을 확인 한다) The WHERE clause checks the condition on each individual row. (모든 행에 대해 각각 조건을 확인한다) The HAVING is used with aggregate functions. (집계 함수와 함..

Backend/Database

[MySQL] Date 관련 함수 정리

Date 타입 원하는 형식으로 출력하기 date_format(date, format) 날짜 %Y 4자리 년도 (1999, 2023) %y 2자리 년도 (99, 23) %M 영문 월 (January, Feburary, ..., December) %b 짧은 영문 월 (Jan, Feb, ..., Dec) %m 월 (01, 02, 03, ..., 12) %c 월 (1, 2, 3, ..., 12) %d 일 (01, 02, 03, ..., 31) %e 일 (1, 2, 3, ..., 31) %W 영문 요일 (Sunday, ..., Saturday) %a 짧은 영문 요일 (Sun, ..., Sat) %w 일주일의 몇번째 요일인가 (0: 일, 1: 월, ..., 6: 토) 시간 %k 24시 형식의 시간 (00, 01, ..

Backend/JPA

[JPA] 상속 관계 매핑

상속 관계 매핑 전략 상속 관계 매핑이란 객체의 상속 구조와 DB의 슈퍼-서브타입 관계(아이템-영화/책/앨범 관계)를 매핑하는 것. 객체는 상속관계가 존재하지만 대부분의 RDB는 상속 관계가 없다. 이것을 슈퍼-서브타입 관계라는 모델링 기법으로 나타내 주는 것. 슈퍼-서브타입 자세히 DB모델링 - 관계 (슈퍼-서브타입) 논리 모델 → 물리 모델 구현 세가지 @Inheritance(strategy=InheritanceType.XXX) stategy 설정 JOINED SINGLE_TABLE(=default) : 단일 테이블 전략 TABLE_PER_CLASS @DiscriminatorColumn(name="DTYPE") 부모 클래스에 선언. 하위 클래스를 구분하는 용도의 컬럼을 생성함. (DTYPE 컬럼에 영..

Backend/JPA

[JPA] 연관 관계 매핑

연관 관계 정의 규칙 1. 방향 (단방향, 양방향) DB 테이블은 외래 키 하나로 양 쪽 테이블 조인이 가능하기 때문에 단방향, 양방향 나눌 필요가 없다. 그러나 객체는 참조용 필드가 있는 객체만 다른 객체를 참조할 수 있다. 그래서 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 있으면 단방향, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 한다. 무조건적인 양방향 매핑은 복잡성을 증가시키고 유지 보수도 어렵게 만들기 때문에 기본적으로 단방향 매핑을 사용하되 역방향 객체 탐색이 반드시 필요한 경우에 추가하는 것이 바람직하다. 고객(Member) 객체와 주문(Order) 객체가 있을 때, 고객이 주문한 내역을 모두 확인하기 위해서는 고객 객체에 주문을 참조할 수 있는 필드가 필요하다..

Backend/Testing

SpringBoot + JUnit으로 JPA 테스트하기 (mysql, mongodb)

1. build.gradle 설정 dependencies { ... // Junit5 testImplementation 'org.junit.jupiter:junit-jupiter' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } test { useJUnitPlatform { includeTags 'fast' excludeTags 'slow' } } build.gradle의 dependencies와 test에 위의 코드를 추가한다. 2. application.yml 설정 원하는 DB를 연결하면 된다. 나는 MySQL과 Mongo..

Backend/Testing

JUnit이란?

Junit5란? Patform: JVM에서 테스트 프레임 워크를 실행시키기 위한 기반. TestEngine API 제공 Jupiter: JUnit5를 지원하는 TestEngine API 구현체 Vintage: Junit4와 3을 지원하는 TestEngin 구현체 단위테스트란? 응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트이다. Junit4와 Junit5의 차이점 JUnit4는 하나의 Jar파일로 dependency가 추가되어, Junit이 참조하는 다른 라이브러리가 있는 형태인데 JUnit5부터는 그 자체로 여러 모듈화가 된다. 어노테이션 @Test: 테스트 메서드임 @BeforeAll: 해당 클래스에 위치한 모든 테스트 메서드 실행 전에 딱 한 번 ..

Backend

[WebSocket] spring-websocket-chat 분석

갓갓 소스 코드 출처: https://daddyprogrammer.org/post/series/spring-websocket-chat-server/ 웹소켓(websocket)으로 채팅서버 만들기 웹소켓(websocket)으로 채팅서버 만들기 daddyprogrammer.org 대충 stomp 로직 분석한 내 노션 글.. https://fringe-paneer-bfc.notion.site/Socket-Chat-8d123b31ef964a719778f5f38e8a920c Socket Chat 채팅방 fringe-paneer-bfc.notion.site

Backend/Spring

[Springboot] SpringBoot Security에서 CORS 전체 허용

전체 코드 ## SecurityConfig.java @Override protected void configure(HttpSecurity http) throws Exception { http .cors() .configurationSource(corsConfigurationSource()) .and() .sessionManagement() ... .csrf() .disable() .formLogin() .disable() .httpBasic() .disable() .exceptionHandling() ... .authorizeRequests() ... .oauth2Login() ... .successHandler(oAuth2AuthenticationSuccessHandler) .failureHandler..

Backend/Database

[DB] SQL문/정규화,비정규화,반정규화

DML (Data Manipulation Language) 데이터 조작어 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 삭제하는 역할의 언어. 데이터베이스 사용자가 질의어를 통해 저장된 데이터를 실질적으로 처리하는데 사용. DML은 타겟 테이블을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에 실시간으로 테이블에 반영되지 않아 Commit 명령어를 통해 트랜잭션을 종료해야 변경 사항이 테이블에 반영된다. 따라서 DML에 의한 데이터 변동을 Commit하지 않았다면 Rollback으로 다시 되돌릴 수 있다. select 테이블에서 조건에 맞는 튜플 검색 select 컬럼 from 테이블 where 조건 order by 컬럼 ASE/DESC limit 개수 insert 새로운 튜플 삽입 inser..

얌얌념념
'Backend' 카테고리의 글 목록