본문 바로가기
728x90
반응형

Spring83

[SpringBoot] JPA에서 QueryDSL 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 JPA에서 QueryDSL 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. QueryDSL이란? QueryDSL은 자바 코드를 이용하여 데이터베이스 query를 작성할 수 있게 도와줍니다. 일반적으로 JPA를 사용하여 개발하면 JPARepository를 상속받은 인터페이스 파일을 만들어 활용하고는 합니다. 하지만 JPARepository가 가지는 한계가 있기 때문에 상황에 따라 JPQL문을 직접 작성하기도 합니다. 여기서 문제점은 JPQL을 작성을 했지만 에러가 발생될 수 있는 코드임에도 불구하고 디버깅 단계 때 확인이 불가합니다. 결국 런타임까지 넘어갔을 때 에러가 발생될 것이고 그때서야 잘못된 코드임을 확인하여 수정작업이 이루어집니다. 게다가 개인적으.. 2022. 4. 24.
[SpringBoot] AWS S3에 파일 업로드하기 안녕하세요. J4J입니다. 이번 포스팅은 AWS S3에 파일 업로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 Controller에서 파일 데이터를 받을 수 있기 위해 multipartfile을 사용할 예정입니다. 또한 AWS S3 버켓​ 생성하는 방법은 [AWS] 이미지 저장을 위한 S3 버킷 생성하기를 참고해주시길 바랍니다. S3에 접근할 IAM 계정 생성 가장 먼저 S3에 접근할 수 있는 IAM 계정 생성을 해줘야 합니다. 계정 생성이 완료되면 해당 계정 정보를 SpringBoot에 입력해줄 것이고 이를 기반으로 S3에 접근할 수 있는 사용자인지를 판단할 수 있게 도와줍니다. ​​​[ 1. IAM 서비스 접근 ] [ 2. 사용자 추가 클릭 ] [ 3. 사용자 정보 입력 ] .. 2022. 4. 23.
[JPA] 자동으로 Datetime 설정하기 안녕하세요. J4J입니다. 이번 포스팅은 자동으로 Datetime 설정하는 방법에 대해 적어보는 시간을 가져보려고 합니다. LocalDateTime 이용하기 [ 1. DB 스키마 구성 ] create table jpadatetime ( id int auto_increment primary key, name varchar(100), create_id varchar(50), create_at datetime, update_id varchar(50), update_at datetime ); [ 2. Datetime 설정 클래스 생성 ] package com.spring.datetime.entity; import java.time.LocalDateTime; import javax.persistence.Mappe.. 2022. 4. 7.
[SpringBoot] 환경 변수 파일 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 환경 변수 파일 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 사용 방법 [ 1. 변수 파일 생성 ] src/main/resources 경로에 properties라는 폴더를 생성한 뒤 그 안에 변수 값을 담아둘 env.properties 파일을 생성해보겠습니다. env.properties 파일 안에는 Java 파일과 properties 파일에서 테스트할 데이터를 다음과 같이 각각 넣어보겠습니다. # Java 파일에서 테스트 java.file.test=Hello, World!! # properties 파일에서 테스트 properties.file.port=8080 [ 2. 변수 설정 파일 생성 ] 생성한 properties 파일을 개발을 하는 여러 파일들에.. 2022. 3. 28.
[Spring] STS 이전 버전 설치하기 안녕하세요. J4J입니다. 이번 포스팅은 STS 이전 버전 설치하는 방법에 대해 적어보는 시간을 가져보려고 합니다. STS 4.x버전 설치 방법 [ 1. STS 사이트 접속 ] https://spring.io/tools [ 2. PROJECT WIKI 접속 ] 사이트에 접속하고 70% 정도 스크롤을 하면 다음과 같이 PROJECT WIKI 버튼을 확인할 수 있습니다. [ 3. Previous Releases Eclipse 접속 ] PROEJCT WIKI를 클릭하면 github에 접속이 됩니다. 그리고 우측을 확인하면 Previous Release Eclipse라는 링크를 확인할 수 있습니다. [ 4. 이전 버전 리스트 확인 ] 링크를 클릭하면 다음과 같이 이전 버전 리스트들을 확인할 수 있고 원하는 버전.. 2022. 3. 17.
[SpringBoot] GraphQL 설정 안녕하세요. J4J입니다. 이번 포스팅은 GraphQL사용을 위한 환경 설정 방법에 대해 적어보는 시간을 가져보려고 합니다. GraphQL이란? GraphQL은 API를 위한 쿼리 언어로 기존에 서버와 클라이언트 간 데이터 전달을 위해 많이 사용되는 Rest API의 단점들을 보완해줄 수 있는 기술입니다. Rest API의 단점은 다음과 같이 크게 2가지가 있습니다. OverFetching (오버패칭) UnderFetching (언더패칭) OverFetching은 클라이언트에서 실제로 사용되는 데이터만 불러오지 않고 사용되지 않는 데이터도 함께 불러옴으로 써 리소스의 낭비를 발생시키는 것을 의미합니다. 예를 들어 사용자 정보 중 사용자 아이디를 화면에서 사용하기 위해 API를 요청하게 되면 일반적으로 사.. 2021. 12. 23.
[Spring] Filter를 이용하여 Request Parameter 조작하기 안녕하세요. J4J입니다. 이번 포스팅은 filter를 이용하여 request parameter를 조작하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 최근 회사 업무를 수행하다가 클라이언트로부터 전달받은 parameter를 조작해야 되는 상황이 생겼었습니다. 대표적인 케이스가 parameter 암호화입니다. 보안성을 높이기 위해 클라이언트에서 리소스를 암호화하여 전달하고는 하는데 서버에서 전달받는 리소스마다 복호화하게 될 경우 불필요하고 반복적인 작업이 많아지게 됩니다. 이를 보완하고자 request를 조작하는 filter를 등록하여 클라이언트에서는 암호화된 리소스를 전달했지만 스프링의 비즈니스 로직 구간에서 데이터를 전달받았을 땐 복호화가 되어있도록 하여 재사용성을 높이는 방향을 생각하게 되었습니.. 2021. 11. 11.
[SpringBoot] 파일 다운로드 안녕하세요. J4J입니다. 이번 포스팅은 부트에서 파일 다운로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 다운로드될 파일 테스트용으로 다운로드해 볼 파일을 다음과 같은 위치에 두겠습니다. 해당 파일을 부트에서 작성된 코드를 활용하여 웹페이지에서 다운로드해보도록 하겠습니다. 부트 코드 package com.spring.fileDown.controller; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.springframework.core.io.InputStreamResource; import org.springframework.core.i.. 2021. 6. 7.
[Spring] 파일 다운로드 안녕하세요. J4J입니다. 이번 포스팅은 스프링에서 파일 다운로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 다운로드될 파일 테스트용으로 다운로드해 볼 파일은 다음과 같은 위치에 저장되어 있습니다. 그리고 이 파일을 스프링을 이용하여 접근할 수 있도록 하고 웹페이지에서 특정 URL에 접근을 하게 되면 해당 파일이 다운로드되는 코드를 구현해보겠습니다. 스프링 코드 package com.spring.fileDown.controller; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletResponse; import org.springfra.. 2021. 6. 7.
[SpringBoot] 파일 업로드 - MultipartFile(With. React) 안녕하세요. J4J입니다. 이번 포스팅은 부트에서 multipartFile을 이용한 파일 업로드 방법에 대해 적어보는 시간을 가져보려고 합니다. ※ legacy에서 multipartFile을 이용한 파일 업로드하는 방법이 궁금하신 분은 여기를 참고해주세요. 부트 설정 및 코드 [ 1. application.yml에 multipart 설정해주기 ] spring: servlet: multipart: max-file-size: 20MB #최대 파일 사이즈를 20MB로 지정 참고적으로 max-file-size 말고도 더 다양한 설정값들이 있으니 한 번 확인해보시는 것도 좋을 것 같습니다. [ 2. controller단 ] package com.spring.multipart.controller; import ja.. 2021. 5. 27.
[SpringBoot] 다중 DB 및 다중 개발환경에서 JNDI 설정 안녕하세요. J4J입니다. 이번 포스팅은 다중 DB 및 다중 개발환경에서 JNDI 설정하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 포스팅에서는 jndi를 이용한 가장 기본적인 환경 구성에 대해 다뤘었습니다. 이번에는 한 번에 여러 개의 데이터베이스에도 연결되고 또한 동일한 코드로 개발/운영 환경에 맞는 데이터베이스 접속될 수 있도록 설정을 해보겠습니다. 다중 DB 같은 경우는 jndi 설정을 위한 resource를 여러 개를 등록한 뒤 각각의 resource와 매핑되는 rootContext 설정을 해 볼 예정입니다. 개발/운영 환경을 구분하는 것은 profile을 이용하여 설정해 볼 예정입니다. 참고적으로 설정 부분만 끄집어내기에는 애매하다고 생각되어서 MyBatis를 이용하여 설정하는 방.. 2021. 5. 25.
[SpringBoot] Boot환경에서 JNDI사용하기 안녕하세요. J4J입니다. 이번 포스팅은 스프링 부트에서 JNDI 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 기존 환경 [ 1. application.yml ] spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/jndi?serverTimezone=UTC username: root password: root ... 기존에는 위와 같이 application.yml에 datasource가 등록되어 있습니다. 그리고 비즈니스 로직 구간도 구성이 되어 있어서 포스트맨에서 API를 호출할 경우 다음과 같이 조회가 되고 있습니다. 이와 동일한 결과가 나오도록 JNDI로 변경해보도록.. 2021. 5. 17.
[Spring] 설정 파일 변경하는 다양한 방법 (xml → Java) 안녕하세요. J4J입니다. 이번 포스팅은 설정 파일을 변경하는 다양한 방법에 대해 적어보는 시간을 가져보려고 합니다. 최근 스프링 설정 파일의 추세는 익숙하지 않은 xml파일보다 익숙한 환경의 Java파일로 설정하는 추세라고 개인적으로 생각합니다. 그리고 변경하는 방법에는 다양한 방법들이 있는데 그중 제가 알고 있는 방법들을 정리해보고자 합니다. root-context와 service-context 모두 각각 2가지 방법밖에 모르지만요 ㅎㅎ.. 제 블로그에서 사용했던 JPA와 MyBatis 설정방법까지 같이 포함하여 변경해보도록 하겠습니다. 변경 전 root-context.xml 혹시 태그를 사용하는데 에러가 발생하시는 분은 xml파일 하단의 Namespaces탭을 다음과 같이 변경해주시면 됩니다. ro.. 2021. 4. 10.
[Spring] JWT 구현하기 (2) 안녕하세요. J4J입니다. 이번 포스팅은 Client에서 JWT 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 참고하시면 이해가 더 잘되실 겁니다. 2021.04.07 - [Spring/Spring] - [Spring] JWT란? 2021.04.08 - [Spring/Spring] - [Spring] JWT 구현하기 (1) 이전 꺼를 보신 분들은 스프링에서 JWT사용을 위한 설정이 완료된 상태일 겁니다. 이번엔 Client가 사용되는 화면을 구성할 React를 이용해서 어떤 식으로 서버와 주고받는지에 대해 보여드리도록 하겠습니다. 기본적인 흐름은 다음과 같습니다. 화면에서 아이디와 비밀번호를 입력하여 로그인하기 정상적으로 로그인이 된 경우 브라우저 저장소.. 2021. 4. 9.
[Spring] JWT 구현하기 (1) 안녕하세요. J4J입니다. 이번 포스팅은 Server에서 JWT 구현하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이전에 작성된 포스팅을 참고하시면 이해가 더 잘되실 겁니다. 2021.04.07 - [Spring/Spring] - [Spring] JWT란? 이번 포스팅에서는 스프링 설정만 진행해보고자 합니다. Client 부분은 다음 포스팅에서 작성하여 이번에 구현한 스프링과 서로 통신되는 과정을 보여드리도록 하겠습니다. 스프링에서 JWT를 구현을 위한 키워드는 Interceptor를 이용하는 것입니다. ※ Interceptor에 대해 모르신다면? 2021.03.01 - [Spring/Spring] - [Spring] Filter / Interceptor Client에서 보낸 요청.. 2021. 4. 8.
[Spring] JWT란? 안녕하세요. J4J입니다. 이번 포스팅은 JWT가 무엇인지에 대해 적어보는 시간을 가져보려고 합니다. JWT란? JWT는 JSON Web Token의 약자로 선택적 서명 및 암호화를 사용하여 JSON 데이터를 보관하고 있는 인터넷 표준 웹 토큰입니다. JWT를 사용하는 이유는 주로 사용자 인증처리를 위해서입니다. 기존에 사용되던 세션 처리와 달리 서버에 정보를 저장하지 않아 Stateless한 상태의 서버를 만들어주는 특징이 있습니다. JWT 구조 JWT는 Header(헤더), Payload(내용), Signature(서명)의 3가지로 구분되며 다음과 같이 토큰이 만들어집니다. JWT 토큰: [Base64(Header)].[Base64(Payload)].[Base64(Signature)] Header(헤.. 2021. 4. 7.
[JPA] could not initialize proxy - no Session 에러 안녕하세요. J4J입니다. JPA를 사용하다가 연관관계 매핑을 위해 @OneToMany 어노테이션을 추가한 뒤 findAll() 메서드를 테스트했는데 다음과 같은 에러가 저를 반겼습니다. "failed to lazily initialize a collection of role: className, could not initialize proxy - no Session" 위의 에러가 나올 때 @Transactional을 추가해줬더니 에러가 해결되었습니다. package com.spring.jpa; import javax.transaction.Transactional; import org.junit.Test; import org.junit.runner.RunWith; import org.springframe.. 2021. 4. 6.
[Spring] JUnit Test에 JNDI 적용 안녕하세요. J4J입니다. 이번 포스팅은 JUnit Test에 JNDI 적용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 포스팅을 보시면 JNDI를 이용하여 데이터베이스를 연결하는 방법에 대해 설명드렸었습니다. 하지만 JNDI를 사용하게 되면 단위 테스트를 진행할 때는 서버를 실행시키지 않으니 데이터베이스의 정보를 알 수 없는 문제가 발생하게 됩니다. 역시나 JNDI와 단위 테스트를 동시에 사용할 수 있는 방법이 있었고 어떻게 설정하는지 보여드리도록 하겠습니다. 프로젝트 설정 제가 설정했었던 RootContext파일은 다음과 같습니다. package com.spring.jndi.config; import javax.sql.DataSource; import org.mybatis.spring.S.. 2021. 4. 5.
728x90
반응형