본문 바로가기
728x90
반응형

Spring83

[Spring] JNDI를 이용한 Tomcat에 Datasource 구성 안녕하세요. J4J입니다. 이번 포스팅은 JNDI를 이용한 Tomcat에 Datasource 구성에 대해 적어보는 시간을 가져보려고 합니다. JNDI란? JNDI는 Java Naming and Directory Interface의 약자로 디렉터리 서비스에서 제공하는 데이터 및 객체를 참고하여 사용할 수 있도록 도와주는 자바 API입니다. JNDI를 사용하는 이유는 프로젝트 내부에 DB정보를 담아두는 것이 아니라 Tomcat과 같은 WAS 서버에 DB정보를 담아두고 사용하기 위해서입니다. 보통 개인들이 모여서 하는 프로젝트에서는 DB서버를 하나만 사용하지만 회사에서는 개발 목적, 운영 목적 등으로 구분되어 여러 서버를 사용하는 경우가 있습니다. 이런 경우 목적에 적합한 DB를 실행시키기 위해 매번 data.. 2021. 4. 4.
[JPA] MapStruct, Entity ↔ DTO 변환 안녕하세요. J4J입니다. 이번 포스팅은 엔티티와 DTO 간 변환을 도와주는 MapStruct에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전 포스팅에서 MapStruct와 유사한 역할을 해주는 ModelMapper의 사용법에 대해 작성을 했었습니다. ModelMapper에 대해 알고 싶으신 분들은 이곳으로 방문해주시면 됩니다. MapStruct란? MapStruct는 엔티티와 DTO 간에 변환할 때 자동으로 매핑시켜 변환되도록 도와주는 라이브러리입니다. 매핑해줄 클래스에는 setter가 있어야 하고 매핑이 되는 클래스에는 getter가 있어야 사용 가능합니다. 또한 추가적인 인터페이스를 작성해야 되고 maven install을 통해 작성된 인터페이스에 맞는 구현 클래스도 만들어져 있어야.. 2021. 4. 3.
[JPA] ModelMapper, Entity ↔ DTO 변환 안녕하세요. J4J입니다. 이번 포스팅은 엔티티와 DTO 간의 변환을 도와주는 ModelMapper에 대해 적어보는 시간을 가져보려고 합니다. JPA로 이것저것 해보다가 궁금한 사항이 생겼습니다. 데이터베이스 테이블과 매핑하여 사용되는 엔티티를 view layer와 주고받아도 될까??? MyBatis만 사용하던 상황을 생각해보면 이런저런 상황들 때문에 dto에는 데이터베이스에 들어있는 값만 변수로 지정돼있지 않습니다. 이와 같은 상황을 동일하게 엔티티에 적용한다고 생각해봤을때 테이블과 자동으로 매핑되는 엔티티에는 치명적일 것이라고 생각이 들었습니다. 관련된 내용을 찾아보면서 다른 사람들도 저와 유사한 고민을 하고 있다는 것을 알게되었습니다. 그리고 궁금증에 대한 해답으로 DB layer와 view lay.. 2021. 4. 1.
[JPA] MyBatis와 동시 사용 (DTO/엔티티 통합, 연관관계 매핑) 안녕하세요. J4J입니다. 이번 포스팅은 DTO/엔티티를 통합하여 JPA와 MyBatis를 동시 사용하는 설정에 대해 적어보는 시간을 가져보려고 합니다. 이전 포스팅에서는 DTO/엔티티를 분리하여 JPA와 MyBatis를 위한 클래스들이 독립적으로 되어있도록 구현해봤습니다. 하지만 이런 방법으로 구현했을 땐 데이터베이스에 매핑되는 클래스들을 JPA와 MyBatis 각각 1개씩 생성해줘야 됩니다. 그렇기 때문에 이번 포스팅에서는 DTO와 엔티티를 통합하여 하나의 클래스만 생성해보도록 하겠습니다. 추가적으로 MyBatis를 간단하게 사용해보신 분들은 엔티티끼리 연관관계 매핑이 되어 클래스 변수에 객체가 있을 경우 mapper에서 객체를 조회하는 방법에 대해 모르실 수 있습니다. 연관관계 매핑이 되어있을 때 .. 2021. 3. 31.
[JPA] MyBatis와 동시 사용 (DTO/엔티티 분리) 안녕하세요. J4J입니다. 이번 포스팅은 DTO/엔티티를 분리하여 JPA와 MyBatis를 동시 사용하는 설정에 대해 적어보는 시간을 가져보려고 합니다. JPA 관련되어 초기 포스팅을 했던 것처럼 JPA와 MyBatis를 동시 사용하는 프로젝트를 구성해보고자 합니다. JPA가 효율적인 것은 JPA를 사용하고, JPA로 구현을 못하거나 MyBatis가 더 효율적인 것은 MyBatis를 사용할 수 있게끔 하여 보다 효율적인 개발환경이 세팅될 것으로 생각됩니다. 이번에는 DTO와 엔티티를 분리하여 설정해보도록 하겠습니다. 서로 독립되어 있기 때문에 연관되는 것 없이 각자의 스타일대로 작성해줄 수 있다는 특징이 있습니다. DTO와 엔티티를 통합하여 설정하는 것은 다음 포스팅에서 진행하도록 하겠습니다. 이번 주제.. 2021. 3. 30.
[JPA] @Query, 직접 쿼리 작성 안녕하세요. J4J입니다. 이번 포스팅은 JPA에서 직접 쿼리를 작성할 수 있게 해주는 @Query에 대해 적어보는 시간을 가져보려고 합니다. JPQL JPA가 쿼리를 자동으로 생성해주지만 상황에 따라 직접 쿼리를 작성할 필요가 생기게 됩니다. JPA에서 직접 쿼리를 작성할 수 있는 방법은 다음과 같이 2가지가 있습니다. JPQL로 작성 일반 SQL로 작성 JPQL이라고 하는 것은 JPA의 일부분으로 정의된 플랫폼 독립적인 객체지향 쿼리 언어입니다. JPA에서 사용할 수 있는 쿼리 언어로 일반 SQL이 데이터베이스를 바라보고 작성한다면 JPQL은 엔티티 클래스를 바라보고 작성해야 합니다. JPQL과 SQL모두 직접 쿼리를 작성하는 방법은 동일하게 @Query어노테이션을 이용하면 됩니다. 그리고 @Quer.. 2021. 3. 29.
[JPA] 연관관계 매핑 (양방향) 안녕하세요. J4J입니다. 이번 포스팅은 JPA 연관관계 매핑(양방향)에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 2021.03.24 - [Spring/JPA] - [JPA] 복합키(Composite Key) 엔티티 2021.03.26 - [Spring/JPA] - [JPA] 연관관계 매핑 (단방향) 연관관계 주인 이전 포스팅에서 양방향으로 매핑이 되는 것은 두 .. 2021. 3. 28.
[JPA] 연관관계 매핑 (단방향) 안녕하세요. J4J입니다. 이번 포스팅은 JPA 연관관계 매핑(단방향)에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 2021.03.24 - [Spring/JPA] - [JPA] 복합키(Composite Key) 엔티티 연관관계 매핑이란? 객체의 참조와 테이블의 외래 키를 매핑하는 작업을 연관관계 매핑이라고 합니다. 데이터베이스 관점에서는 외래키를 가지고 다른 테이블.. 2021. 3. 26.
[JPA] 복합키(Composite Key) 엔티티 안녕하세요. J4J입니다. 이번 포스팅은 JPA 복합키(Composite Key) 엔티티에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 이해가 더 잘되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 2021.03.23 - [Spring/JPA] - [JPA] 조건절(where) 메서드 앞서 포스팅을 읽어보신 분들이라면 기본키가 1개일 때는 문제없이 JPA를 활용할 수 있는 환경을 구성하셨을 겁니다. 그리고 본인만의 개성이 드러난 프로젝트를 구성하려고 하는데 기본키가 2개 이상인 경우 JpaRepository의 제네.. 2021. 3. 24.
[JPA] 조건절(where) 메서드 안녕하세요. J4J입니다. 이번 포스팅은 JPA 조건절(where) 메서드에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 읽고 오시면 더 이해가 잘 되실 겁니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 2021.03.22 - [Spring/JPA] - [JPA] JPA Repository설정 및 CRUD 조건절(where) 메서드 앞서 포스팅에서 "JPA는 쿼리를 따로 작성하지 않고 인터페이스 구현만으로 실제 쿼리가 작성된 것처럼 동작하도록 해준다"라고 말한 적이 있습니다. 그렇기 때문에 만약 쿼리에 작성되던 조건절을 사용하고 싶다면 단순하게 JpaRepository 인터페이스에 메서드만 작성해주면 됩니다. 이전 포스팅에서 사용했던.. 2021. 3. 23.
[JPA] JPA Repository설정 및 CRUD 안녕하세요. J4J입니다. 이번 포스팅은 JPA Repository설정 및 CRUD에 대해 적어보는 시간을 가져보려고 합니다. 아직 환경설정을 하지 않으신 분들은 이전 포스팅 참고해주시길 바랍니다. 2021.03.21 - [Spring/JPA] - [JPA] JPA 환경설정 학교를 주제로 하여 해당 내용을 테스트해보도록 하겠습니다. 데이터베이스에는 학교라는 테이블을 만들고 스프링에서는 학교 클래스를 생성하여 기본적인 CRUD작업을 수행해보겠습니다. 프로젝트 구성 [ 1. MySQL에 학교 테이블 생성 ] create database jpa; use jpa; create table school ( school_id int auto_increment, name varchar(50), region varcha.. 2021. 3. 22.
[JPA] JPA 환경설정 안녕하세요. J4J입니다. 이번 포스팅은 JPA 환경설정에 대해 적어보는 시간을 가져보려고 합니다. 지금까지 스프링을 사용하며 데이터베이스에 접근하기 위해 MyBatis만 사용해왔었습니다. 하지만 최근에 MyBatis보다 더 핫(?)한 JPA라는 기술이 있다는 것을 알게 되었습니다. 객체와 관계형 DB를 서로 매핑하여 쿼리를 따로 작성하지 않고 정의하지 않은 메서드만을 가지고 DB동작을 실행할 수 있었고 필요시에는 직접 쿼리를 작성할 수도 있었습니다. JPA를 사용하면 개발할 때 MyBatis보다 편리함을 가져다줄 것이라고 생각하여 관련된 내용을 공부하긴 했지만 실상은 러닝 커브가 높아 아직도 이해가 안 되는 부분이 너무 많습니다. 그래서 생각한 것은 한 프로젝트에서 MyBatis와 JPA를 동시에 사용.. 2021. 3. 21.
[JPA] Composite-id class must implement Serializable 에러 안녕하세요. J4J입니다. JPA를 테스트하던 도중 새로운 Entity를 추가했더니 "Composite-id class must implement Serializable" 에러가 저를 반겼습니다. 해결방법은 간단했습니다. Entity에 Serializable을 추가했더니 정상 가동되었습니다. package com.spring.jpaTest.dto; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConst.. 2021. 3. 17.
[Spring] MyBatis ↔ Repository를 연결하는 다양한 방법들 안녕하세요. J4J입니다. 이번 포스팅은 MyBatis ↔ Repository를 연결하는 다양한 방법들에 대해 적어보는 시간을 가져보려고 합니다. 이 포스팅에서도 보실 수 있듯이 저는 DB 연결을 위해 MyBatis와 Repository를 연결할 때 interface, interface를 구현한 class, mapper를 모두 생성하곤 했습니다. 하지만 최근 interface와 mapper만으로 MyBatis와 Repository를 연결할 수 있는 방법을 알게 되었는데 사용하던 방법보다 더 효율적이라고 느껴지고 지식을 얻은 김에 알고 있는 방법들을 정리하는 포스팅을 하고자 글을 적게 되었습니다. 알고 있는 방법이 2개밖에 없지만 이 2개보다도 더 효율적인 방법을 알게된다면 추후 포스팅을 해보도록 하겠습니.. 2021. 3. 16.
[Spring] 파일 업로드 - MultipartRequest(With. React) 안녕하세요. J4J입니다. 이번 포스팅은 MultipartRequest를 이용한 파일 업로드에 대해 적어보는 시간을 가져보려고 합니다. 이전 포스팅에서 MultipartFile을 이용한 파일 업로드에 대해 다뤘었는데 개인적으로 MultipartFile이 유동적으로 적용하기가 더 편리하게 느껴지고 또한 자세히 알아본 것은 아니지만 MultipartFile이 더 최신 기능인 것 같습니다. 한 마디로, 새롭게 파일 업로드 기능을 구현하고자 한다면 MultipartFile 사용을 추천합니다. 그럼에도 불구하고 MultipartRequest에 대해 포스팅을 하는 이유는 오래 지속되어온 시스템들엔 MultipartRequest를 사용하고 있을 수도 있기 때문에 추가적인 작업을 진행하시는 분들에게 도움이 되고자 작성.. 2021. 3. 5.
[Spring] 파일 업로드 - MultipartFile(With. React) 안녕하세요. J4J입니다. 이번 포스팅은 MultipartFile을 이용한 파일 업로드 방법에 대해 적어보는 시간을 가져보려고 합니다. 적용 방법 ※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다. [ 1. pom.xml에 dependency 추가 ] commons-fileupload commons-fileupload 1.4 com.fasterxml.jackson.core jackson-databind 2.9.8 [ 2. servlet-context에 multipartResolver 추가 ] [ 2-1. xml에 설정할 경우 ] ... [ 2-2. Java에 설정 할 경우 ] package com.spring.multipartFile.config; impor.. 2021. 3. 4.
[Spring] Swagger 안녕하세요. J4J입니다. 이번 포스팅은 Swagger에 대해 적어보는 시간을 가져보려고 합니다. Swagger란? 스웨거는 개발자가 Rest API를 만들고 만든 Rest API에 대한 설계, 빌드, 문서화 등을 도와주는 오픈 소스 프레임워크입니다. 간단하게 말하자면 스프링으로 만든 Rest API를 한눈에 볼 수 있도록 자동화해준다고 생각합니다. 사용 이유 스웨거를 사용하는 이유는 협업을 위한 API 문서 자동화입니다. 개발 요건에 맞게 구현된 Rest API는 적게는 한 곳, 많게는 여러 곳에서 클라이언트 화면을 구성하기 위한 데이터를 호출하기 위해 사용됩니다. 결과적으로 API를 사용하기 위해 파라미터 값은 무엇이고 리턴 값은 무엇인지 등의 정보가 필요했고 스웨거는 관련 데이터를 스웨거만 보며 이.. 2021. 3. 3.
[Spring] Lombok 개요 ◎ Lombok이란? ◎ 장점 ◎ 단점 ◎ 적용 방법 ◎ 사용 방법 (캡슐화) ◎ 사용 방법 (로그) 안녕하세요. J4J입니다. 이번 포스팅은 Lombok에 대해 적어보는 시간을 가져보려고 합니다. Lombok이란? 롬복은 개발자의 노가다(?)성이 짙은 단순 반복 작업을 덜어주기 위한 라이브러리로 데이터 접근을 위한 객체인 DTO의 캡슐화하는 작업들을 자동으로 해줍니다. 또한 로그를 찍기 위해 loggerFactory 등을 사용하던 것도 단순히 어노테이션만 추가하면 로그를 출력할 수 있도록 해줍니다. 장점 롬복의 가장 큰 장점은 반복적인 단순 작업을 안 하도록 도와준다는 겁니다. 일반적으로 DTO 클래스를 작성할 때 접근 지정자가 private인 변수들을 작성한 뒤 getter, setter는 기본.. 2021. 3. 2.
728x90
반응형