[Java / Spring] API 문서 자동화 Swagger
·
Spring
📕 개요 Spring뿐만 아니라 다른 어떤 언어, 프레임워크로 백엔드를 개발했을 때, Rest API를 개발하고 그 API에 대한 문서를 정리하여 해당 API를 사용하는 클라이언트 및 서버 개발자들에게 문서를 정리해서 공유하는것은 필수이다. 기존에는 노션이나 엑셀을 사용하여 정리를 했었는데 이런식으로 노션을 사용해서 정리를 했었는데 단점이 너무 많다. 일일이 코드에서 구현내용, 설계 내용들을 끌고와서 입력해야 한다. api 설계가 바뀌면 노션 문서도 수정해야한다. 그러던중 Swagger에 대해 알게 되었고, 적용해보았다. 📕 Swagger란? Swagger 는 API를 설계하고 문서화 및 테스팅이 가능한 프레임워크이며, 무료 버전과 상용 버전 모두 존재한다. Swagger 에는 아래 5개 기능이..
[Spring / JPA] 엔티티 생성/수정 시각 자동화 Auditing
·
Spring
엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하는 기능이 대부분 있어야한다. 📕 순수 JPA 사용 📗 등록일, 수정일 [JpaBaseEntity] @MappedSuperclass public class JpaBaseEntity { @Column(updatable = false) private LocalDateTime createDate; private LocalDateTime updateDate; @PrePersist public void prePersist() { LocalDateTime now = LocalDateTime.now(); createDate = now; updateDate = now; } @PreUpdate public void preUpdate() { updateDate = ..
[Spring / JPA] JPQL을 사용한 코드 리팩토링
·
Spring
스프링 JPA는 다양한 쿼리 방법을 지원한다. 그 중 JPQL을 쓴 내용을 정리해보았다. 📕 JPQL (Java persistence Query Language) 📗 JPQL 이란? 테이블 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. SQL과 비슷한 문법을 가지며, JPQL은 결국 SQL로 변환된다. JPA에서 제공하는 메소드 호출만으로 섬세한 쿼리 작성이 어렵다는 문제에서 JPQL이 탄생된 것이다. 📗 특징 객체를 검색하는 객체지향 쿼리 SQL을 추상화 했기 때문에 특정 벤더에 종속적이지 않음 JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회 📕 프로젝트 중 활용(로스트아크 숙제 체크) 📗 엔티티 구조 [Content] - 일일 숙제와 주간 숙제를 나누기 위해 ..
[Spring / JPA] N+1 문제 해결하기!! fetch join과 @EntityGraph
·
Spring
스프링 JPA에서 특정 엔티티를 조회할 때, ManytoOne관계(1대다)일 경우 FetchType.LAZY 사용을 권장한다. 하지만 이럴경우, SQL을 호출 할 때 N+1 문제가 발생하게 된다. 📕 fetch join 📗 엔티티 구조와 N+1문제 [Member] @Entity @Data public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; } [Team] @Entity @Get..
[Java / Spring] JWT와 Spring Security (작성중)
·
Spring
📍 JWT란 무엇인가? JWT(Json Web Token)은 일반적으로 클라이언트와 서버 통신 시 권한 인가(Authorization)을 위해 사용하는 토큰이다. 📍 JWT의 구조 Header, Payload, Signature의 3 부분으로 이루어지며, Json 형태인 각 부분은 Base64Url로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 . 구분자를 사용하여 구분한다. 헤더(Header) - 토큰 서명에 사용되는 알고리즘과 같은 토큰에 대한 메타데이터가 포함 typ : 토큰의 타입을 지정 ex) JWT alg : 알고리즘 방식을 지정하며, 서명(Signature) 및 토큰 검증에 사용 ex) HS256(SHA256) 또는 RSA 페이로드(Payload) - 토큰에서 사용할 정보의 조..
[Java / Spring] JSP -> Thymeleaf(타임리프) 변경
·
Spring
📍 서론 JSP는 예전 키보드 쇼핑몰 프로젝트에서 썻던 템플릿 엔진이고, mustache는 null값 처리와 프론트 단에서 불편한 점이 조금 있어서, 타임리프를 사용해보았다. 📍 Thymeleaf (타임리프) 사용하기 Gradle - build.gradle implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' Maven - pom.xml org.springframework.boot spring-boot-starter-thymeleaf 위 설정을 추가 후 빌드하면 application.properties에 아래 코드가 자동으로 추가된다. spring.thymeleaf.prefix=classpath:/templates/ spring...
마볼링
'Spring' 카테고리의 글 목록 (2 Page)