본문 바로가기

springboot26

Jenkins를 활용한 React, Springboot CI,CD 구현(1) 들어가기 팀 프로젝트를 진행하다가 개발회사에 다니시는 분으로부터 들은 얘기가 있다. 회사에서는 본격적으로 개발하기 전에 테스트 서버라는 것을 만들어서 디자이너, 기획 등 다같이 프로젝트 현황을 볼 수 있도록 한다고 하셨다. 확실히 다른 사람들도 모두 개발 현황을 볼 수 있어야 한다고 생각을 하기에 앞으로는 차후를 위해 프로젝트마다 테스트 서버를 항상 구현할 생각이다. 그리고 이를 위해서는 CI,CD 가 이뤄져있어야 편하게 진행을 할 수 있다고 생각한다. 이 글은 인터넷을 찾아보며 CI,CD 구현을 하고 내 생각에 맞춰 작성한 글이다. CI, CD에 대한 개념이 궁금하다면 https://seosh817.tistory.com/104 를 참고하길 바란다. [CI/CD] CI/CD란? - 지속적 통합(Conti.. 2023. 1. 18.
스프링부트 - 인터셉터(Interceptor) 스프링 프로젝트를 진행하다 보면 controller에 접근전 공통적으로 처리해야 하는 로직이 있었을 것이다. controller로 이동하기 전에 로그인 정보를 확인한다든지, 보안토큰, 불필요한 파라미터나 파일 등을 전송 중인지 미리 확인하면 좋은데 이러한 상황에서 사용하는 것이 필터와 인터셉터이다. 필터와 인터셉터는 비슷한 기능을 하지만 차이가 존재한다. 아래 사진을 봐보자. 위 사진과 같이 스프링 프로젝트에서 요청이 와서 스프링 MVC를 사용하고 DispatcherServlet에 앞에서 처리를 하면 필터이고 뒤에서 처리하면 인터셉터이다. 아래는 좀 더 필터와 인터셉터의 구체적인 부분들이다.(출처: https://velog.io/@ansalstmd/%EC%8A%A4%ED%94%84%EB%A7%81%EB%.. 2022. 3. 6.
스프링부트 AOP에 대한 기본 정리 스프링의 여러 장점이 되는 특징들이 있고 그중 하나이 AOP에 대해 간단히 정리해 보고자 한다. 좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다'이다. 대부분의 시스템이 공통으로 가지고 있는 보안, 로그 , 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. AOP(Aspect-Oriented Programming)는 '관점 지향 프로그래밍'이라는 의미이고 '관점(Aspect)'이라는 용어는 개발자들에게는 '관심사(concern)'라는 말로 통용된다. 관심사는 핵심 로직은 아니지만, 코드를 온전하기 위해 필요한 것들이.. 2022. 2. 28.
스프링부트 MyBatis를 이용하여 MySQL 연동 및 동적쿼리 개발자들은 데이터 베이스에 데이터를 유지하기 위해 JDBC를 이용하여 데이터베이스에 접근하였다. JDBC의 복잡함을 단순하게 하게 위해 Persistence FrameWork를 사용했는데 ORM 프레임워크와 SQL 매퍼이다. ORM 프레임워크는 SQL 코드를 직접 작성하지 않고 자바에서 객체지향적인 방식으로 데이터를 객체로 다루면 이를 관계형 데이터베이스에서 작업할 때 SQL로 변환하여 연동을 할 수 있도록 하는 것이다. 즉 SQL을 직접 작성할 필요가 없는 것이다. 데이터베이스에 종속성이 약해서 바뀌더라도 바로바로 적용 가능하다. 대표적으로는 Hibernate가 있고 이에 대한 표준 기술 명세가 JPA이다. MyBatis는 ORM 프레임워크라고 말하지는 않고 SQL 매퍼라고 한다. 객체와 관계형 데이터.. 2022. 2. 25.
JPA column에 list를 넣는 방법(String 변환, @ElementCollection) 들어가기 Springboot와 JPA를 통해 프로젝트를 진행하던 중 간단한 값들의 리스트를 하나의 엔티티에 넣어두고 싶을 때가 있었다. 이는 '@OneToMany'를 통해서 새로운 테이블과 연관관계를 맺으면 쉽게 구현할 수 있지만... 새로운 테이블을 만들고 조인을 하는 등 복잡한 방법을 쓰고 싶지가 않았다. 오직 원하는 테이블만을 위한 리스트 필드를 가지고 싶은 것이다. 이럴 때 어떻게 사용할 수 있을까? 이 글에서는 간단하게 1. String으로의 변환 2. @ElementCollection 두가지 방법으로 소개하려고 한다. 본론 1. String 타입으로 변환 첫번째로 리스트를 Stirng 타입으로 변환하여 저장하는 것이다. 아래의 사진을 봐보자. 위는 특정 요청을 했을 때 응답 값을 JSON 형식.. 2021. 12. 11.
JPA - 읽기 전용으로 데이터를 조회하여 성능 향상(메모리, 속도) 들어가기 JPA를 사용하면서 영속성 컨텍스트를 통해 1차 캐시 및 쓰기 지연 등 여러 가지 이점을 얻을 수 있었다. 그런데 조회 기능만을 사용하는 상황에서는 단순히 읽기 전용 기능으로 데이터를 조회만 가능하게 하고 데이터의 수정을 불가능하게 할 수 있다고 한다. 이런 방식을 적용하면 두 가지 장점을 얻을 수 있다. 바로 메모리와 속도의 최적화이다. 메모리 사용량을 최적화하는 읽기 전용 기능과 속도를 최적화하는 읽기 전용 기능은 각각 다른 방식으로 구현된다. 이 글은 메모리와 속도를 최적화하기 위한 읽기 전용 기능에 대해 작성한 글이다. 영속성 컨텍스트에 대한 내용이 많이 나오는데, 이에 대한 것은 https://khdscor.tistory.com/110를 참고하길 바란다. 메모리 최적화 먼저 메모리 사용.. 2021. 9. 18.
JPA - 프록시와 연관관계(즉시로딩, 지연로딩, N + 1 문제) 들어가기 JPA는 데이터 베이스에 있는 객체를 가져올 때 우선 영속성 컨텍스트에 가져오게 된다. 그렇다면 그 객체와 연관된 객체를 가져올 때 어떻게 가져오는가?경우는 두 가지가 있다.첫 번째는 그 연관된 객체도 미리 영속성 컨텍스트에 올려놓는 것이다. 이 방식을 즉시 로딩이라 한다.두 번째는 그 연관된 객체를 사용하는 시점에 가져오는 것이다. 이 방식을 지연 로딩이라 한다.이 글에서는 이러한 두 가지 로딩 방식에 대해서 '프록시 객체'와 함께 설명할 것이다. 영속성 컨텍스트에 대한 내용이 많이 나오는데, 이에 대한 것은 https://khdscor.tistory.com/110를 참고하길 바란다.   본론 지연 로딩을 이용하기 위해선 실제 객체 대신에 데이터 베이스 조회를 지연할 수 있는 가짜 객체가 필요.. 2021. 7. 19.
JPQL 개념과 스프링 데이터 JPA 쿼리메서드 이용 JPA를 사용하여 프로젝트를 구현할 때 스프링 데이터 JPA를 이용하고 repository 인터페이스를 작성하여 CRUD기능을 사용하였을 것이다. 우리는 JPA를 사용하기 위해 Repository를 만들고 CRUD기능을 수행할 수 있다. 하지만 간단한 형식의 엔티티만을 가져올 뿐이지 특정 범위, 특정 경우, 특정 순서 등 복잡한 경우에 적용하기는 힘들다. 이러한 경우는 자세한 sql문을 이용해서 해결할 수 있다. ORM은 엔티티 객체를 대상으로 개발하므로 검색을 위한 sql문도 엔티티 객체를 대상으로 해야 하기에 JPQL을 사용한다. 스프링 데이터 JPA에서는 복잡한 쿼리를 쿼리 메서드를 이용하여 JPQL을 직접 짜는 것이다. 이 글에서는 JPQL에 대해서는 간단한 설명과 파라미터 바인딩에 대해서만 설명.. 2021. 6. 27.