본문 바로가기
반응형

학습146

고급매핑 - 상속관계 *JPA에서 상속관계 구현방식은? 1. 관계형 데이터베이스는 상속 관계가 없다. 2. "슈퍼타입 서브타입 관계"라는 모델링 기법이 "객체 상속"과 유사하다. 4. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. * 슈퍼타입 서브타입 논리 모델을 물리 모델로 구현하는 방법 1. 각각 테이블로 변환 (조인전략) @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Disc.. 2022. 7. 7.
JDBC란? * JDBC JDBC는 관계 데이터베이스에 접근하는 자바 API입니다. 클라이언트가 데이터베이스에 접근하는 방법을 정의한 어플리케이션 프로그래밍 API입니다. 자바와 데이터베이스 연결을 위해 사용되는 데이터 접근 기술입니다. JDBC는 데이터베이스와 커넥션을 만들고, SQL 작업을 위한 인터페이스를 제공하고, 결과를 처리합니다, JDBC API는 데이터베이스와 연결하기 위해 JDBC 드라이버를 사용합니다. JDBC Driver는 아래 4가지가 있습니다. JDBC-ODBC Bridge Driver Native API Driver (partially java driver) Network Protocol Driver (fully java driver) Thin Driver (fully java driver) .. 2022. 7. 5.
HikariCP란? * 개요 DataSource를 여러개 만드는 과정에서, connection Pool로 Hikari를 이용하는 예제를 보았습니다. Hikari는 성능이 좋아서 쓴다고 생각은 했지만, 어느정도 성능이 좋고 어떤 개념을 가지고 있는지 확인하려고 합니다. * Hikari란? Hikari는 connection pooling을 제공하는 JDBC DataSource의 구현체입니다. 이 프레임워크가 다른 connection pooling 보다 가장 빠른 이유는 몇몇 바이드코드 레벨의 구현이 있으며, 마이크로 최적화, ArrayList 사용 대신 FastList 직접 구현으로 처음부터 끝까지 모든 것을 스캔하는 과정 생략 등이 있습니다. 실제 성능의 테스트 결과를 보고 싶다면 다음 벤치마크를 확인해주세요. Hikari .. 2022. 7. 4.
jar war 차이점 *개요 spring 프로젝트를 서버에 배포할 때 jar, war 2가지 방법으로 배포 할 수 있습니다. 각 방식의 차이점이 무엇인지, 구조가 어떻게 다른지 확인해봅니다. From Java Tips: Difference between ear jar and war files 둘다 모두 java jar를 사용해서 압축된 것이다. 이 파일들은 다른 목적으로 만들어졌다: .jar files: libraries, resources, accessories files 처럼 설정파일로 구성되어 있다. .war files: 어떠한 servlet/jsp container에도 배포할 수 있는 웹 어플리케이션을 포함한다. jsp, html, javascript 혹은 웹 어플리케이션 개발을 위한 파일들이 포함된다. 위 설명에 따.. 2022. 4. 26.
Git Flow 사용해보기 *개요 sourcetree를 공부해보면서 깃 플로우 전략을 손쉽게 버튼클릭으로 이용할 수 있다는 것을 알게되었습니다. 많은 회사들이 깃플로우 전략을 사용하는 것으로 아는데, 혼자서만 git을 사용해보는 것이 아니라, 나중에 협업할 때 git을 자 사용하기 위해서 기능 사용들을 정리해보았습니다. github repository에서 git의 default branch인 main을 master로 변경합니다. 이 때, github에서 친절하게 local repository에서 default branch를 변경하는 방법을 제공합니다. ( 그냥 main으로 해도 무방합니다 ) git clone 로 Github 저장소를 local git에 clone합니다. git flow init으로 git flow 를 시작합니다... 2022. 2. 6.
데이터베이스를 사용해 API 요청하기 *개요 지난 시간, 노드의 ORM인 sequelize를 공부했습니다. 이를 바탕으로 배열로 만들어 둔 API 요청을 sqlite를 이용해서 만들어 보겠습니다. * sequelize로 개선하기 //models.js const Sequelize = require('sequelize'); const sequelize = new Sequelize({ dialect: 'sqlite', storage: './db.sqlite', logging: false }); const User = sequelize.define('User', { //name: Sequelize.STRING //varchar255 name: { type: Sequelize.STRING, unique: true } }); module.exports.. 2022. 1. 17.
노드 ORM 시퀄라이저 * 개요 앞서, 코드 리팩토링을 통해 user API 코드들을 개선했습니다. 이제, DB와 연동해서 실제 데이터를 활용 할 예정입니다. ORACLE, MYSQL 등의 DB를 연동해서 사용할 수도 있지만, ORM을 사용합니다. node에서 만든 객체를 활용해 바로 DB에 연동시켜 좀 더 객체지향적으로 코드를 짤 수 있습니다. * 모델 데이터베이스에서 테이블을 ORM으로 추상화 한 것을 model이라고 합니다. node js에서는 ORM으로 시퀼라이저를 사용합니다. package.json의 dependencies에 sequelize, sqlite3 의존성을 추가하도록 합니다. //models.js const Sequelize = require('sequelize'); const sequelize = new .. 2022. 1. 17.
라우터 컨트롤러 함수로 분리 *개요 이전에 index.js에 라우팅 관련 모든 정보들을 썼습니다. 하지만 모든 코드를 한 파일에 넣는 것은 가독성이 떨어지고 유지보수가 쉽지 않습니다. 따라서, 이번에 유저 관련 API를 user 폴더에 분리하고 controller도 따로 보관합니다. api/user/index.js const express = require("express"); const router = express.Router(); const ctrl = require("./user.ctrl"); router.get("/", ctrl.index); router.get("/:id", ctrl.show); router.delete("/:id", ctrl.destory); router.post("/", ctrl.create); rou.. 2022. 1. 17.
TDD로 API 서버 개발하기 * 개요 앞 글에서, mocha, should 사용법을 알아보았습니다. 이제, 실제 API 서버를 어떻게 TDD로 개발할 수 있는지 실습합니다. HTTP 메서드인 GET, POST, PUT, DELTE 4가지를 실습하고 예외 상황도 검사합니다. 1. GET /users - 성공시 유저객체를 담은 배열로 응답한다 - 성공시 최대 limit 갯수만큼 응답한다. - 실패시 limit이 숫자형이 아니면 400을 응답한다 //index.spec.js const request = require("supertest"); const should = require("should"); const app = request("./index"); describe('GET /users 는', () => { describe('성공.. 2022. 1. 15.
반응형