전체 글 422

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 ..

[07월 1주차] Mybatis 바인딩 에러 해결 및 PostgreSQL 배열 관련 메서드

PostgreSQL - 배열, 문자열 관련 메서드 generate_subscripts(배열명, 아래 첨자): 배열의 요소를 서브스크립트 형식으로 변환해서 반환한다. 배열 arr = {a, b, c} .... (1은 아래 첨자) 이라고 하면 배열의 각 요소에 아래 첨자를 붙여서 [a1, b1, c1]를 반환한다. string_agg(필드명, '구분자'): 그룹별로 id로 구분해서 필드 name 값을 모두 콤마로 이어붙일 수 있다. generate_subscripts(array, 1) string_agg(name, ',') 에러 해결 오류: BindingException 원인 : Mapper 인터페이스에 정의한 메서드명과 sql.xml 파일에 정의한 메서드명이 일치해야한다. 해결 org.apache.ibat..

Chapter 05. DI와 테스트, 디자인 패턴

테스트 코드를 이용한 테스트 서버를 띄우고 http 요청과 응답을 확인할 수 있다. 그런데 매번 직접 확인하는 것은 번거로운 일이다. ex) 헤더, 바디 등 테스트 코드를 사용하면 효율적이다. Spring initializer를 통해 애플리케이션을 처음 세팅하면 "test" 폴더 안에 TestClass 가 생성된다. 애플리케이션이 기본적으로 스프링 부트를 기반으로 작동한다. API 요청 라이브러리 RestTemplate vs TestTemplate RestTemplate: 정상이 아닌 경우, 예외를 던진다. TestRestTemplate: 응답 자체를 그대로 가져오기 때문에 에러가 난 경우 사용할 때 적합하다. status code, content-type 이 뭔지 파악할 수 있어 편리하다. Assert..

[06월 5주차] 반응형 객체 만드는 방법(ref, reactive), Postman 에서 만든 API 공유하는 방법(export)

프론트 에러 해결 오류: 배열에 null이 들어왔다. 원인: subtaskList에 대해 잘못된 데이터 타입이 전달되는 경우 바랫ㅇ한다. axios 요청을 보내고 응답을 받아서 list를 조회했는데 데이터가 없는 경우가 문제였다. 이 값이 null 인 경우, subtaskList = null 이 전달되어서 에러가 나는 것이다. 해결 getSubtaskList()메서드 안에서 axios를 통해 목록을 불러왔을 때, 데이터가 없는 경우에 대해 다음과 같이 빈 배열을 넣어준다. .then((res) => { if(res.data.data === null){ state.subtaskList = []; ... } } 렌더링 시점에 ( 안에 정의되지 않은) 변수에 접근하면 발생하는 에러 오류 modalTitle w..

Chapter 04. 독립 실행형 스프링 애플리케이션

스프링 컨테이너 사용 지난 시간까지는 독립 실행이 가능한 서블릿 애플리케이션을 만들었다. 그러면 독립 실행형 스프링 애플리케이션은 어떻게 만들 수 있을까? 1) POJO(Plain Old Java Object): 비지니스 로직을 담은 Java 오브젝트 (상속 X, ) 2) 구성 정보를 담은 Configuration 메타 데이터 에러가 나지 않는한 서블릿 컨테이너가 기본적으로 Http response 200을 세팅해서 넣어준다. (생략 가능) Ex) GenericApplicationContext applicationContext = new GenericApplicationContext(); applicationContext.registerBean(HelloController.class); applicati..

[06월 4주차] 프론트엔드 element plus 사용 방법

element plus를 이용한 탭 만들기 - Vue.js 여러 가지 탭이 있을 때 하나의 탭을 클릭 시, 그에 대한 내용만 보이도록 구현하려고 한다. 사내에서 element plus라는 디펜던시를 사용하고 있다.( package.json 파일에 있는 dependency 목록에 element plus의 버전을 정의하면 된다. ) => Java에서 build.gradle/ pom.xml 파일에 dependency를 설치하는 것과 같다. 엘리먼트 플러스(element plus): Vue.js 기반의 UI 컴포넌트 라이브러리이다. 사용하기 쉬운 UI 컴포넌트를 제한다. 버튼, 입력 필드, 선택 목록, 테이블, 모달 창 같은 UI요소를 포함하고 있다. main.js 파일에서 element plus 를 impor..

Chapter 03. 독립 실행형 서블릿 애플리케이션

Containerless 개발 준비 컨테이너 리스 방식은 서블릿 컨테이너와 관련된 번거롭고 복잡한 작업들에 대해 개발자가 더이상 신경쓰지 않도록 스프링 컨테이너에 올라가는 빈에만 집중할 수 있도록 해준다. main() 메서드 하나만 실행시켰는데 Tomcat(Java의 서블릿 컨테이너)이 뜨고 스프링 컨테이너도 뜬다. 애플리케이션을 동작시킨다. 그런데 만약, Spring Boot가 없다면? 서블릿 컨테이너 띄우기 서블릿 컨테이너(Servlet container)란? 자바의 표준 기술인 servlet에 대해 서블릿을 구현한 컨테이너를 말하며 종류가 다양하다. ex) Tomcat springio를 통해 스프링 프로젝트를 셋업하면 자동으로 내장형 톰캣(embedded tomcat)이라는 라이브러리가 제공된다. ..