Backend/SpringBoot 23

자바스크립트에서 타임리프 사용하기 (+onclick 인자 전달)

자바스크립트에서 타임리프 변수를 사용하기 위해선 다음과 같이 하면 된다.   만일 fragment 형식으로 페이지 구성을 할 경우, fragment 에서 스크립트를 추가 해도, 메인페이지에 추가 안될 수가 있다. 메인페이지에서 div 태그에 th:replace 를 이용하여 fragment를 호출 할 경우, 단순히 div 태그 역할을 하기 때문이다. 이럴경우 메인페이지 쪽에 javascript를 작성하든지, header fragment를 만든 후 javascript를 작성하고, header를 치환 하든지 해야 한다.  onclick에 타임리프 인자 전달하기태그에 커스텀 어트리뷰트 생성th:어트리뷰트명="${타임리프 변수명}"onclick 인자로 전달onclick = "함수명(this.getAttribute..

Backend/SpringBoot 2024.12.18

전반적인 프로젝트 구조

기본 구조아래의 4개의 구성은 모두 java 로 생성 Entity 생성DB 테이블과 1:1 매칭되는 클래스 Repository 생성Entity를 활용하여 DB에 저장, 혹은 값 검색Service 생성Repository의 DB 저장, 혹은 검색 함수를 직접적으로 호출하는, 한번 더 묶는 개념의 클래스Service 생성자에서 Repository를 인젝션 받을 수 있도록 작성Controller 생성API 를 매핑하고 , 매핑된 함수마다 Service 를 통해 비즈니스 로직에 맞는 항목을 클라이언트로 리턴Controller 생성자 에서 Service를 인젝션 받을 수 있도록 작성  DTO 활용성능에 영향을 미친다고 생각할 경우 DTO를 사용 할 수 있음. 그외에 Entity 항목을 직접 노출하기 싫을 경우도 사..

Backend/SpringBoot 2024.11.26

@Mapper, @Mapping

DTO와 Entity 간 상호 변환을 위해 사용되는 어노테이션이다.  @Mapper 는 인터페이스에 붙이는 어노테이션이고, @Mapping 은 실제 상호 변환을 하는 함수명에 붙이는 어노테이션 이다.  @Mapping (source = "변수명", target = "변수명")소스 변수명을 타겟 변수명으로 치환하는 설정을 한다. 변수명이 여러개 일 경우 @Mapping 어노테이션을 해당 개수에 맞춰 여러개 붙여준다.  다음은 예제이다. /////Entity가 다음과 같다고 가정/////...@Entity@Getter@Setterpublic class EntityData{ ... private String val1; private String val2; private String val3; ..

Backend/SpringBoot 2024.11.20

실행시 DB에 데이터 넣기

서버 실행시 DB 테이블에 미리 데이터를 넣을 필요가 있을경우 사용(기본 or 필수 데이터) 3가지 방법이 있다.  데이터 넣기 (data.sql)resources -> data.sql 생성 -> 쿼리문 작성yml 파일 수정defer-datasource-initialization : 'true' 설정sql init mode always 설정...spring: jpa: ... defer-datasource-initialization: 'true' sql: init: continue-on-error: 'true' mode: always...데이터 넣기 (@Transactional, @EventListener 어노테이션 이용)@Component 를 이용해 클래..

Backend/SpringBoot 2024.11.19

AOP (함수 실행 intercept)

함수들이 실행 될 때마다 중간에 intercept 하여 여러가지 작업을 할 수 있다. 예를들어 실행 시간 측정이나, 인자값 검사, 로깅 작성등이 가능하다. 쉽게 생각하면 클라이언트에서 RESTAPI 통신을 할때  Request 혹은 Response를 처리하는 함수를 Intercept 하여 로깅을 작성하든지, header를 조작하든지 하는 작업과 같은 것이라고 보면 된다.  @Aspect 어노테이션클래스에 붙이는 어노테이션으로, AOP 임을 명시한다.@Around 어노테이션함수에 붙이는 어노테이션으로 다양한 문법이 있으나, 보통 적용대상 설정을 많이 사용한다.@Around("execution(* 패키지경로..*(..))")함수는 Bean에 등록되야 하므로, @Configuration 을 이용해 등록해 준다..

Backend/SpringBoot 2024.10.30

QueryDSL

복잡한 쿼리를 동작하기 위해서 여러 방법이 있다. 앞서 작성한 @Query 를 이용하는 방법, Specification을 사용하는 방법이 있다. 이 두 방식은 프로젝트가 복잡해지면 처리가 어렵다고 하며, QueryDSL을 사용해야 한다고 한다.  전반적인 프로세스gradle 설정 build 를 통해 Q클래스 생성JPAQueryFactory를 Bean으로 등록하기 위한 Configuration 클래스 생성QueryDSL을 사용하는 Repository interface 생성Repository Interface를 구현하는 Impl 클래스 생성JPAQueryFactory 를 이용해서 함수 작성기존 Repository Interface 에서 QueryDSL을 사용하는 Repository interface 를 ex..

Backend/SpringBoot 2024.10.30

DB 연결 설정

application.yml 에서 DB 연결 및 속성에 대한 설정을 진행한다. # DATABASEspring: datasource: url:db접속주소(jdbc로 시작함) driverClassName:db드라이버이름(db종류에 따라 다름) username:아이디 password:비밀번호 jpa: properties: hibernate: dialect:db종류에따라 별도로 검색해서 설정 format_sql:true show_sql:true ddl-auto:update //none 등 알아서 설정Tab으로 상위 하위 구분을 해야한다. Tistory에서 탭이 제대로 표현안되어서 da..

Backend/SpringBoot 2024.10.29

테스트 코드 작성

요즘은 모르겠는데 한때 TDD가 유행을 한적이 있다. 테스트케이스를 먼저 구현하고, 로직을 구현하는 방식이다.나는 보통 테스트 코드를 작성하는걸 좋아하지 않는다. 그 이유는, 최대한 비지니스 로직에 맞추어 테스트 코드를 작성해야 한다. (같은일 2번 하는꼴)그렇다고 구현된 기능만 검증하는 간략한 테스트를 작성하면 테스트 하는 의미가 퇴색된다.저장, 입출력은 보통 잘 된다고 봐야하고, 안되면 개발 후 사람이 테스트 할때 바로 알아차릴 수 있다.테스트 코드를 통해 통과를 하더라도 실제 운영시 오류가 나는 경우가 많다.물론 오류 발생률을 사전에 줄여주지만 들이는 노력 및 시간 대비 비효율적이다.구현한 서비스를 실제 테스트 하는것을 더 신뢰한다. 하지만 백앤드의 경우 중요도가 높기도 하고, 클라이언트 와 다르게..

Backend/SpringBoot 2024.10.29

Query 어노테이션 및 JPA의 Specification

서비스 interface 를 통해 DB의 내용을 조회 해 올때, 복잡한 쿼리문을 직접 작성해야 할 경우가 있다. 직접 쿼리문을 작성하려면 @Query 어노테이션을 이용하여, Repository에 선언을 해주고, 코드로 구현한다면, Service 에 Specification을 이용해 작성해 준다.   @Query 어노테이션 유의점쿼리문 작성시, 실제 DB 테이블의 컬럼명이 아닌, 엔티티의 변수명을 기준으로 작성해야 한다. 쿼리 작성시 인자값where 절 등 인자값을 통해 쿼리문을 완성해야 할 필요가 있는데, 이때에는 @param 어노테이션을 이용한다. //Repository interface 에서, public interface repo extends JpaRepository{ ..... @Que..

Backend/SpringBoot 2024.10.25

Bean 어노테이션 (W.Configuration, Component 어노테이션)

Bean 어노테이션은 DI 를 위해 사용되는 어노테이션으로, 스프링부트 내부에 해당 어노테이션이 있는 클래스 내 함수를 등록해 두고, 사용처에서 @Autowired 등으로 인젝션 받아 사용할 수 있도록 한다. Bean 어노테이션만 사용하면 안되고, @Component 나 @Configuration 어노테이션과 같이 사용해야 한다.@Component 나 @Configuration 어노테이션이 있는 클래스 내부 함수에 @Bean 어노테이션을 붙인다.요약하자면,Bean으로 등록할 대상이 되는 일반 클래스 선언@Component 또는 @Configuration 어노테이션이 붙은 클래스 선언@Bean 어노테이션이 붙은 맴버함수 구현일반 클래스를 리턴하는 함수로 구현사용처에서 @Autowired 혹은 생성자 자동 ..

Backend/SpringBoot 2024.10.25