본문 바로가기
반응형

개발공부102

JPA ddl-auto 옵션 종류 hibernate는 시작할 때마다 맵핑 설정을 DB 스키마에 반영하는 작업을 한다. 옵션을 선택할 수 있다. application.yml jpa: hibernate: ddl-auto: validate 1. none 사용하지 않음 2. create 기존 테이블 삭제 후 테이블 생성 스테이징, 운영환경에서는 절대로 사용하면 안된다. / 개발 환경에서 사용한다. 3. create-drop 기존 테이블 삭제 후 테이블 생성 / 종료 시점에 테이블 삭제 스테이징, 운영환경에서는 절대로 사용하면 안된다. 4. update 도메인 객체에 맞춰 변경된 스키마 적용 컬럼 추가만 반영된다. (지우는 것은 반영되지 않는다.) 스테이징, 운영환경에서는 절대로 사용하면 안된다. / 개발 환경에서 사용한다. 5. validate.. 2023. 1. 25.
Spring 웹 계층 Web Layer 컨트롤러 등의 뷰 템플릿 영역 사용자의 응답에 대한 처리, 사용자 권한 인증 처리 Service Layer 트랜잭션에 대한 경계 역할 @Transactional Controller와 DAO의 중간 영역 Repository Layer DAO DTOs 계층간 데이터 교환을 위한 객체 뷰에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등 Domain Model 비즈니스 로직을 처리하는 영역 도메인이라 불리는 대상을 이해할 수 있도록 단순화 시킨 것 ex) 택시 앱의 도메인 -> 배차, 탑승, 요금 등 @Entity 2023. 1. 25.
[Spring Boot] DB 관련 용어 정리 ORM(Object Relation Mapping) 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑하는 방법 ORM을 이용하면 쿼리문 작성이 아닌 코드로 데이터를 조작할 수 있다. 장점 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다. 쿼리문 작성 양이 줄어들어 개발 비용이 줄어들고, 가독성이 높아진다. 매핑된 객체는 독립적으로 작성돼있어서 재사용 및 유지보수가 편리하다. 데이터베이스에 대한 종속성이 줄어든다. 데이터베이스 교체 시 리스크가 적다. 단점 ORM만으로 온전한 서비스 구현에는 한계가 있다. 복잡한 코드를 정확한 설계 없이 ORM 구성하면 속도 저하 등의 문제가 발생할 수도있다. 애플리케이션의 객체 관점과 데이터베이스 관계 관점의 불일치가 발생한다. 설계 방법에 따라 데이터베이스에 있는 .. 2023. 1. 25.
spring 포트 번호 관련 에러 - Only one usage of each socket address (protocol/network address/port) is norm ally permitted. spring 프로젝트를 실행시키려는데 에러가 발생한다 !!! Only one usage of each socket address (protocol/network address/port) is norm ally permitted. CMD 관리자 권한 실행 netstat -ano | findstr :3306 3306 포트번호가 이미 실행중이라서 실행이 되지 않는듯하다. 윈도우용 DB포트 ⚡⚡⚡ 도커용 DB포트 해결법 포트를 죽인다. taskkill /f /pid {피드번호} 다시 도커 실행 docker-compose -f docker-compose-local.yml up 2023. 1. 25.
템플릿엔진 Handlebars 라이브러리 현재까지 꾸준히 업데이트 되고있는 템플릿 엔진은 Thymeleaf, Handlebars 이다. Handlebars - 간단한 문법 - 로직 코드를 사용할 수 없어 view 역할에 제한된다. 1. 의존성 추가 build.gradle implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.4' 2. 인텔리제이 내 Handlebars 플러그인 추가 3. 메인 페이지 생성 src/main/resources/templates 하위에 main.hbs 생성 4. Controller 생성 prefix: src/main/resources/templates suffix: .hbs src/main/.../controller/FormController... 2023. 1. 25.
Java 거리 계산 알고리즘 - Haversine formula 하버사인 공식 두 위도, 경도 사이의 거리를 계산하기 위한 알고리즘 지구를 완전한 구 라고 가정하고 계산하기 때문에 0.5% 오차가 발생할 수 있다. // A 위도, A 경도, B 위도, B 경도 private double calculateDistance(double lat1, double lon1, double lat2, double lon2) { lat1 = Math.toRadians(lat1); lon1 = Math.toRadians(lon1); lat2 = Math.toRadians(lat2); lon2 = Math.toRadians(lon2); double earthRadius = 6371; //Kilometers return earthRadius * Math.acos(Math.sin(lat1).. 2023. 1. 24.
Java/Spring 공공 기관 데이터 셋업 하기 1. 직접 sql 생성하여 저장한다. https://www.data.go.kr/data/15065023/fileData.do CSV 참고 서울특별시 성북구_약국현황_20200101 서울특별시 성북구 내 약국현황에 대한 데이터로, 약국명, 주소, 약국 전화번호, 기준일자, 위도, 경도, 행정동 의 데이터를 제공합니다. www.data.go.kr 도커 컨테이너 생성시 초기 데이터 만들기 디렉토리 /docker-entrypoint-initdb.d/ 에 .sql 또는 .sh 파일 넣어두면 컨테이너 실행 시 실해된다. /database/init/xxx.sql 2. 데이터를 유지하기 위해 validate로 변경한다. application.yml create - 기존 데이터를 모두 drop시키고 다시 create 한.. 2023. 1. 24.
API 재호출 라이브러리 - Spring Retry 한번의 API 호출실패로 비지니스 로직을 모두 실패처리하는 것은 몇번 다시 호출하는 것보다 리소스 낭비가 클 수 있다. 따라서 보통 최대 3번의 재호출을 하는 방법을 사용한다. 단, Read Timeout 상황은 특정 시간동안 네트워크 이슈가 지속되는 경우가 많기 때문에 재시도를 하더라도 모두 실패할 수 있다. 재호출 고려해야할점 재시도를 몇 번 실핼할 것인가? 재시도 하기 전 지연시간을 얼마나 줄 것인가? 재시도를 모두 실패했을 경우 어떻게 처리할 것인가? -> 순수 코드로 구현할 수 있지만, 비지니스 로직에 집중하고 유지보수가 쉽도록 스프링 라이브러리를 사용하자! Spring Retry 라이브러리 구현 방법 1) 어노테이션 2) RetryTemplate @EnableRetry : Spring Retr.. 2023. 1. 22.
Spring @Transactional 이란? 스프링 트랜잭션 처리 @Transactional 스프링 AOP (관점 지향 프로그래밍) 기반 기능 1 @Transactional이 포함된 메소드가 호출되면 2 프록시 객체를 생성 3 트랜잭션 생성 및 커밋 또는 롤백 후 트랜잭션 닫는 작업을 프록시 객체에게 위임한다. 스프링 AOP 기반으로 하는 기능들 (@Transactional, @Cacheable, @Async) 사용시 self invocation 문제로 인하여 장애가 발생할 수 있다 self invocation 해결 방법 방법 1. 트랜잭션 위치를 외부에서 호출하는 bar() 으로 이동 방법 2. 객체의 책임을 최대한 분리하여 외부 호출 하도록 리팩토링 Spring Transactional 주의사항 @Transactional(readOnly = t.. 2023. 1. 22.
728x90
반응형