분류 전체보기 428

[08월 4주] MyBatis(string_agg, unnest), element plus를 이용한 스위치 버튼 만들기

PostgreSQL에서 unnest()를 사용하면 정렬이 되지 않는 이유? postgre에서는 string_agg() 를 이용해서 구분자를 기준으로 어떤 값들을 이어 붙일 수 있다. 또는 반대로 unnest()를 사용해서 구분자로 이어붙여진 값들을 펼칠 수도 있다. 그런데 여기서 unnest() 사용해서 펼친 경우, 해당 데이터들은 정렬이 되지 않는다. 원인: ? 해결 방법: ? MyBatis PostgreSQL의 string_agg()를 이용하면 특정 데이터를 구분자로 구분해서 문자열 형태로 이어붙일 수 있다. ex) ['a', 'p', 'p', 'l', 'e'] => 'apple' 검색 쿼리를 만드는 중이다. 'searchKeyword' 에 대해서 searchKeyword 가 포함된 model_id_..

도커(docker) 와 컨테이너 및 기본 명령어

서비스 배포 먼저, 인텔리제이에서 코드를 구현한다. 지금까지는 콘솔에 결과를 출력하거나 API를 호출해서 확인했다. 그런데 사용자들이 서비스를 사용하려면 서비스를 배포해야한다. 서버 컴퓨터를 구매해서 사용하거나 클라우드 서비스를 이용하는 방법이 있다. 온 프레미스(on premise) 방식으로 서버를 직접 구매해서 운영하려면 비용 부담이 크게 발생한다. 온 프레미스 클라우드 서비스: ex) AWS 가상화(virtualization) 하나의 물리 시스템에서 분리된 여러 환경을 구성하는 기술 서버의 물리적인 자원을 최대한 효율적으로 활용하기 위한 기술이다. 가상화는 기술 개념이고 클라우드는 서비스 개념이다. 가상 머신(virtual machine)과 컨테이너의 차이점 컨테이너와 VM은 유사하다. 하드웨어에서..

Infra 2023.09.04

Vue.js 3 프로젝트 세팅, VO / Entity / DTO 차이점

Vue.js 3 프로젝트 설정 및 세팅 vue 설치 npm install vue node.js 설치 npm install -g @vue/cli npm을 사용하기 위해 node 설치가 필수적이다. pc 환경 전역에 vue cli를 설치하는 명령이다. vue 설치 확인 vue --version을 통해 확인 이 때, power shell 을 이용하면 vue 명령어를 인식하지 못한다. 따라서, cmd로 작업한다. (vue 명령이 시스템 변수에 등록되어 있지 않기 때문이다. power shell과 cmd 각각에 대한 환경 변수는 따로 설정한다.) vue 2, 3 중 선택한다. 백엔드와 겹치지 않도록 port 번호를 설정한다. vue.config.js 파일 const { defineConfig } = require..

ERD, querydsl 세팅

ERD ERD는 추후 수정될 부분이 많다. 멘토링도 학생당 여러 개 신청하는 경우도 있도록 테이블이 분리될 것이다. 최악의 경우 회원 관련 테이블이 모두 삭제될 수 있음.. querydsl 설정 Spring boot 2.6.0 이상 & querydsl 5.0.0 버전 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'com.ewerk.gradle.plugins.querydsl' version "1.0.10" // Querydsl Gradle 플러그인..

가비아 컨테이너 호스팅, PuTTY 설치, Spring 프로젝트 초기 설정

프롤로그 게임 강의(C, C++, Unreal, DirectX) 관련된 강의 자료 홈페이지를 만들려고 한다. 인프런과 유튜브에서 활동 중인 얄코 강사님처럼 동영상 강의는 인프런에 올리고 강의 자료를 별도로 올릴 수 있는 웹 페이지를 기획하고 있다. gabia로 몇 달 운영해보고 AWS로 바꿀 예정이다. 이번 포스팅에서는 가비아 호스팅 서비스 구독, DB 연결, spring 프로젝트 셋업 등을 다루려고 한다. 들어가기에 앞서 호스팅 관련 기본 개념(SSH, SFTP 같은 프로토콜)을 알아봤다. SFTP(Secure File Transfer Protocal) 파일 전송을 위해 사용되는 프로토콜 중 하나이다. 클라이언트와 서버 간 안전한 파일 전송을 가능하게 해주는 프로토콜이다. 클라이언트가 SFTP 클라이언..

[08월 1주차] MyBatis bacth 처리 방법(INSERT, DELETE), Vue.js 3 폼 유효성 검증

MyBatis 일괄 INSERT, DELETE 여러 엔티티의 정보를 List 형태로 받아서 일괄적으로 DB에 INSERT 쿼리를 실행하려고한다. 관련된 내용을 정리해보려한다. 프론트 다음과 같이 배열 list에 각 object를 담아서 이 데이터를 POST 요청과 함께 보낸다. 그러면 백엔드에서 @RequestBody List 형태로 데이터를 받을 수 있다. cf) DELETE 요청에는 requestbody 를 보내는게 권장되지 않는다. HTTP 프로토콜의 표준 사양에 따르면 DELETE 요청에 requestbody를 포함하지 않는 게 원칙이다. 보안/캐싱에 관한 문제가 있기 때문이다. 따라서, 선택 삭제 같은 기능을 구현하는 경우, URL에 "id=model3&id=model9" 와 같은 방식으로 이어..

Chapter 08. 외부 설정을 이용한 자동 구성

Environment 추상화와 프로퍼티 지금까지 자동구성에 대한 과정을 살펴봤다. 자동 구성에 의해 만들어지는 빈 오브젝트에는 보통 기본값이 들어가있다. ex) port: 8080 cf) Environment 인터페이스 스프링 애플리케이션의 환경 설정과 관련된 정보를 제공한다. 프로퍼티 값을 가져오거나 환경 변수 값을 조회하는 메서드를 제공한다. getProperty() 스프링은 단일화된 방식으로 접근할 수 있도록 설계되어있다. 1) standardEnviroment System propertyies System Enviroment Variables 2) standardServletEnvironment: 웹 환경일 때 사용 가능 ServletConfig Parameters servletcontext Pa..

Chapter 07. 조건부 자동 구성

@ConditionalOnMissingBean 스타터와 Jetty 서버 구성 추가 Jetty를 서블릿 컨테이너로 사용해보자. 조건부 자동 구성: configuration 클래스에 infra structure 역할을 하는 빈의 구성 정보를 담아서 기술 종류별로 잘게 쪼개어 여러 개의 클래스를 만들어 놓고 외부 설정 파일에 이 목록을 나열하고 파일을 읽어서 해당하는 configuration 클래스를 부트가 시작할 때 빈으로 등록한다. 자동 구성 configuration 클래스들이 스프링 컨테이너에 들어있다. 스프링 부트에 내장된 @AutoConfiguration 애너테이션은 상위에 @Configuration이 있다. 다음과 같이 파일을 살펴 보면 144개의 파일 위치 정보가 들어있다. 부트가 켜지면 144개..

[07월 3주차] axios 요청으로 컬렉션 데이터 전달하기, PostgreSQL 배열(_VARCHAR) 필드 관리 방법

Note cf) HTTP 요청 관련 Spring의 애너테이션 @RequestBody: Java에 정의한 Object 형태로 데이터를 전달받는 경우, 사용한다. 아래 쿼리 스트링과는 다르게 URL에 데이터가 표시되지 않으며 Json 형태로 request body를 전달할 수 있다. ex) 컨트롤러 메서드 안에 (@RequestBody Model model) 같은 형식으로 파라미터를 받을 수 있다. POST 요청 보낼 때 주로 쓰인다. Java에 Model 이라는 클래스가 꼭 정의되어 있어야한다. @RequestParam: url에 "localhost:8080/model?curPage=3&searchNm=apple" 와 같은 식으로 HTTTP 요청을 보내는 경우에 쓰인다. GET 을 통해 검색하기 위해 자주..

Chapter 06. 메타 애너테이션과 합성 애너테이션

메타 애너테이션 메타 애너테이션이란? 메타 애너테이션: 애너테이션을 위한 애너테이션을 말한다. ex) @Component @Service, @Controller 를 타고 들어가면 상위에 @Component가 붙어있는 걸 알 수 있다. 메타 애너테이션이 불은 클래스를 사용하면 기능적으로는 차이가 없다. 그런데, @Service / @Controller와 같이 다른 이름을 붙이는 것은 WebMvc 에서 컨트롤러 / 서비스 어느 역할인지를 명확히 할 수 있다. 메타 애너테이션에는 상속 개념이 없다. 에너테이션에는 @Retention(RetentionPolicy.RUNTIME), @Target 을 줘야한다. @Retention(RetentionPolicy)의 디폴트 값은 RetentionPolicy.CLASS ..