728x90

BackEnd 67

Bean Life Cycle

Spring Bean Life Cycle 스프링 빈이 언제 Create되고 Destroy 되는지에 대한 Life Cycle 입니다. 순서 스프링 컨테이너 생성 스프링 빈 생성 의존 관계 주입 초기화 콜백 사용 (사용작 사용 시점) 소멸 전 콜백 스프링 종료 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원합니다. 인터페이스(InitializingBean(afterPropertiesSet), DisposableBean(destroy)) 단점 초기화, 소멸 메서드의 이름을 변경할 수 없습니다. 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없습니다. 설정 정보에 초기화 메소드, 종료 메소드 지정 @PostConstruct, @PreDestroy 애노테이션 지원 @PostConstruct, @P..

BackEnd/Spring Boot 2023.04.16

Show JPA Query Log

개요개념적인 내용은 다른 블로그를 참고 하시는게 좋을거 같습니다.Mybatis에서 개발을 할 때 log4jdbc-log4j2-jdbc4.1 설정을 하여 쿼리문을 확인한다.그러면 select * from temp where id = 1이런식으로 출력이 된다.하지만 JPA는 로그가 기본으로 설정 되어 있지만 select * from temp where id = ? -> 그 뒤에 ? 관한 정보가 뜬다.위와 같은 식으로 노출이 된다.이런 방식은 local에서 개발 할 때 가독성이 현저히 떨어진다.하나하나 대입 하거나 하는 정말 귀찮은 일이 발생한다.그래서 이번 게시글은 p6spy-spring-boot-starter를 사용하여 Mybatis와 같이 노출 되게 설정 할려고 한다.참고..

BackEnd/Spring Boot 2023.04.16

채팅 만들기_2(chatting_room)

개요 이전에 소켓을 사용한 채팅을 만들어 보았습니다. 이번 게시글에서는 STOMP를 사용한 채팅방 구성을 하였습니다. 사용자 로그인 및 인증은 사용하지 않았고 최초 방에 들어오면 date로 사용자 닉네임을 설정하여 테스트 하였습니다. 참고 채팅 방 있는 채팅 Terian의 IT 도전기 설명 현재 프로젝트 Terian의 IT 도전기 블로그를 참고 하여 정리 하였습니다. 개념 적으로 Terian의 IT 도전기를 참고 하는것을 추천 드리고 현재 게시글은 Terian의 IT 도전기의 기반으로 내가 필요한 코드만 뽑아서 사용 했기 때문에 Terian의 IT 도전기와 코드가 많이 다를 수 있습니다. 또한 View 개발을 위해 CSS를 작성하기 귀찮아 Bootstrap을 간단히 적용 하였습니다. STOMP란? 간단하..

BackEnd/Spring Boot 2023.04.16

채팅 만들기_1(basic)

개요 웹 개발을 하면서 꼭 해봐야 하지만 잘 안해보는 2가지 기술중 하나였습니다. 채팅은 심심치 않게 볼수있는데 웹 서비스 기술이였지만 내가 한 회사, 외부 프로젝트에서는 적용한 적이 없는 기술이였습니다. 그래서 이번에 어디서든 쉽게 적용 할수있게 프로젝트를 하나 만들어 봤습니다. 스펙 Spring Boot2.7.7 Java 17 jsp 사용 dependencies // Spring Boot Web Server Dependency implementation 'org.springframework.boot:spring-boot-starter-web' // Spring Web Socket implementation 'org.springframework.boot:spring-boot-sta..

BackEnd/Spring Boot 2023.04.16

ExpressJS 기본 셋팅(ES6, NodeDemon, Jest)

ExpressJS ES6 설정 Node.js는 common.js 방식을 따릅니다. ES6 사용이유 Fat Arrow Function, 템플릿 리터럴 (Template Literal) 등 사용하기 쉬운 문법들이 ES6에 포함 되어 있다. CommonJS -> ES6 폴더 및 파일 구조 변경 "server"폴더를 생성한다. create a folder "bin", "routes" 폴더 와 "app.js" 파일을 "server"폴더에 이동시킨다. "bin > www" 파일을 www.js로 변경한다. "public" 폴더를 프로젝트 루트에 그대로 둡니다. bin/www.js > ES6 코드로 변환 TIP! 생성된 코드를 ES6로 변환하는 작업은 조금 번거롭기 때문에 여기에 코드를 게시하고 자유롭게 복사하여 붙여..

BackEnd/ExpressJS 2023.04.16

ExpressJS Create Project

프로젝트 생성 Node Express 설치 npm install express-generator -g Node Express 프로젝트 생성 express --no-view backend 'backend' : 프로젝트 이름 Node Express 폴더 이동 cd backend Node Express package.json 생성 npm init Node Express 서버 실행 npm start 만약 "Error: Cannot find module 'http-errors'" 에러 시 npm install 최초 Dependency cookie-parser 쿠키 헤더를 구문 분석하고 req.cookies를 쿠키 이름으로 키가 지정된 개체로 채웁니다. 선택적으로 다른 미들웨어에서 사용..

BackEnd/ExpressJS 2023.04.16

Request PathVariable Enum Converter

개요 API 개발 도중 @PathVariable를 enum Type으로 설정 하였다. 이러다 보니 한가지 오류가 발생했는데 Enum에 없는 데이터가 넘어 오면 Exception이 발생 하였습니다. 이를 해결하기 위해 Spring Boot Converter를 사용하였습니다. 이는 @PathVariable 뿐만 아니라 @ModelAttribute, @RequestParam에서도 동작 한다고 되어 있다. 따라서 외부에서 날라오는 데이터를 바인딩 하는데 Header에 있는 데이터 뿐만 아니라 Body에 있는 데이터도 되는지 한번 확인해 봐야 할꺼 같다.(Stack Over Flow에서 비슷한 질문인데 확인 해봐 야 할거 같습니다.) Spring Boot Document Spring 3.0 Document에는 이..

BackEnd/Spring Boot 2023.04.16

Enum 등록된 값 이외에 값 등록시

개요 Enum에 잘못된 값을 넣게 되면 오류가 뜨게 되므로 이를 방지 하기 위해 @JsonCreator을 사용 코드 public enum LangCode { KO, JA, EN; // Enum에 데이터를 입력 하면 실행이된다. // 원하는 데이터가 없으면 null이 입력이 된다. @JsonCreator(mode = JsonCreator.Mode.DELEGATING) public static LangCode findByCode(String name) { return Stream.of(LangCode.values()) .filter(c -> c.name().equals(name.toUpperCase())) .findFirst() .orElse(null); } }

BackEnd/Spring Boot 2023.04.16

TypeHandler

개요 Mysql 과 Mybatis로 개발을 진행 하였습니다. Paging 처리된 List를 불러오는 도중 하나의 Row에 특정 code list를 한번에 불러 왔어야 했습니다. 그러다 보니 Left Join과 Limit을 처리 하면 code list 별로 짤린후 resultMap이 되어 Collection을 사용해도 정확한 Paging 데이터를 가져올수 없었습니다. 그래서 서브쿼리에 GROUP_CONCAT을 사용하여 Code List를 한번에 문자로 받아 왔습니다. 하지만 이는 String으로 넘어 오기 때문에 List Type 으로 각각 쪼갤려면 서버에서 for문을 돌려서 하나하나 split 하여야 했습니다. 이러한 동작을 별도로 하기 전에 TypeHandler를 사용하여 resultMap에서 데이터를..

BackEnd/Spring Boot 2023.04.16
728x90