본문 바로가기

스프링

회사에서 Spring Boot + mongoDB 트랜잭션 도입하기 1. 왜 mongoDB에서 트랜잭션을 도입하는거야? 우선 업무에서 왜 mongoDB를 사용하고 있는지 부터 이야기 해야 할 것 같아요. 일반적인 회사에서는 관계형 데이터베이스를 사용하고 있는데, 제가 머물고 있는 곳은 규모가 작은 스타트업이고 제품이 유저의 반응, 트렌드, 새로운 아이디어를 빠르게 반영 시켜야 만 했어요. 그렇기 때문에 스키마 변경에 자유로운 nosql을 선택하게 되었습니다. 그러나 서비스가 방향을 잡아가면서 점점 복잡해지고 결정적으로 유저의 재화가 소모되는 기능이 추가되면서 트랜잭션의 ACID속성을 필요로 하게 되었습니다. MongoDB는 태생은 ACID보다 BASE 속성(Basically Available, 일관성)을 우선시하여 설계되었기 때문에 트랜잭션을 지원하지만 선택사항으로 남아.. 더보기
SpringDataJPA(스프링데이터JPA)를 뜯어보자 1. 스프링 데이터 JPA 💡 Spring Data Jpa는 SQL 쿼리를 직접 작성하는 대신 객체와 객체 간의 관계에 집중할 수 있게 돕는 기술, 덕분에 Java의 ORM 기술인 JPA (Java Persistence API)를 더 쉽고 편리하게 사용 2. 특징은 무엇? Repository 인터페이스 JPA를 추상화 시킨 인터페이스만 정의하면, Spring Data JPA가 구현체를 자동으로 생성해주는 기능을 제공, 이를 통해 CRUD (Create, Read, Update, Delete) 작업을 위한 코드 중복을 줄일 수 있움 쿼리 메소드 메소드 이름을 분석하여 SQL 쿼리를 자동으로 생성하는 기능을 제공 예를 들어, **findByName(String name)**이라는 메소드를 Repository.. 더보기
JPA n+1 문제는 왜 생기는걸까? Java ORM 기술인 JPA를 사용하다보면 필수적으로 n+1문제를 맞닫뜨리게 됩니다. 내가 의도 하지않는 쿼리가 나가고 거기다 여러번 나간다면 정말 무섭겠죠. 왜 발생하고 어떻게 해결해 나가야 정리하면 좋을 것 같아 작성하려고 합니다. 해당 글은 JPA에 대한 기본적인 내용을 숙지하셔야 합니다.. 🙃 1. JPA n+1 문제가 무엇? 흔히 n+1문제라고 하는 것은 연관관계로 매핑된 엔티티를 조회할 때 의도치 않게 첫번째 쿼리로 날린 결과만큼 n번의 쿼리가 더 나가는 것을 말합니다. 간단히 코드를 짜보겠습니다. 여러명의 Member는 하나의 Team에 소속될 수 있는 엔티티 구조가 있다고 했을 때 Member 엔티티 @Entity @Getter @Setter public class Member { @Id.. 더보기
서블릿(Servlet)이 뭔지 궁금해? 자바 웹기술 역사는 서블릿 → JSP → (서블릿 + JSP) MVC 패턴 → 스트럿츠, 웹워크 -> 스프링 MVC 요런식으로 발전해왔어요. 요즘은 Spring WebFlux라는 서블릿 기반이 아닌 Web Reactive 기반을 이용하기도 하죠. 이번 글은 자바 웹 기술의 핵심이면서 기본인 서블릿에 대해서 알아보려고해요. 같이 공부해보면 좋겠습니다. 🙃 요즘 흥하는 ChatGPT한테 서블릿에 대해 물어볼게요 ㅎㅎ 서블릿에 대해 알아보기에 앞서 먼저 HTTP 프로토콜과 웹에서 데이터를 어떻게 주고 받고 있는지에 대해서 알면 좋습니다. 웹 HTTP는 무엇일까요? 클라이언트와 서버가 데이터를 주고 받을 때 사용하는 인터넷 규약으로 서버와 서버가 데이터를 주고 받을 때도 쓰이고, HTML, TEXT, 이미지, .. 더보기
의존관계주입 or 의존성주입 with spring #3 이전 포스팅에서 자바의 다형성 만으로는 SOLID 원칙을 모두 지키기 어렵다고 했었죠? 그래서 스프링이 나왔고, 어떻게 객체지향을 지키기 위해 설계 되었는지 보시면 좋을 것 같네요. 🙃 그럼 스프링은 어떻게 이문제를 해결하려고 하는거야 ? 다형성 만으로는 SOLID 원칙을 모두 지키면서 개발하려면 할일이 너무 많아져 버렸어요. 역시 귀찮은 것을 병적으로 싫어하는 개발자는 이것을 한방에 해결할 수 있는 툴을 만들어버렸습니다. 이게 바로 스프링 프레임워크 ㅎㅎ 클라이언트 코드의 변경없이 확장할 수 있도록 구현체를 의존하지 않고 역할만 의존하도록, 그래서 다형성을 지키며 OCP, DIP를 쉽게 피할 수 있도록, 결국 스프링의 태생은 객체지향 원칙을 지킬 수 있도록 도와주기 위해 생겨 난 것입니다. 그것도 아주.. 더보기
SOLID에 대해서 쉽게 알려줄게 with spring #2 다들 설 명절은 가족과 함께 행복하게 보내셨나요? 저번 포스팅에 이어서 객체 지향 설계의 5가지 원칙의 진짜 의미와 자바의 다형성만으로 해결하지 못하는 문제를 스프링은 어떻게 도와주는 지에 대해서 열심히 적어볼게요. 함께 가시죵 ㅎㅎ 🙃 SOLID가 뭐야 ? SOLID는 클린코드의 밥아저씨로 유명한 로버트 마틴이 객체지향 프로그래밍을 설계하기 위해서 필요한 5가지 원칙을 소개했는데 앞글자 만 따서 SOLID라고 불리게 되었어요. 말그대로 시간이 지나도 유지보수와 확장이 쉽게 만들게 하기 위한 원칙이에요. 기술면접 하게되면 간혹 물어볼 수도 있는데, 내용을 완전히 이해하지 못햇다면 어? 그거 아는데 뭐였지 하는 바로 그거에요. ㅎㅎ 위키백과에서 써져있는 그대로 옮겨 볼게요. SRP (Single respo.. 더보기
좋은 객체 지향 설계란? with spring #1 다들 잘 지내시나요? 저는 요즘 인프런의 Spring을 주제로 주말마다 스터디를 하게되어서 너무나도 바쁘게 지내고 있는데요. 🥲 매일 퇴근하고 공부하는게 어느새 일상이 되어가는 것 같아요. 좋은거겠죠? 🙃 김영한님 스프링 로드맵을 따라가며 왜 스프링을 사용하고 있는지 핵심이 무엇인지 저의 시각으로 정리해서 공유하고자 합니다. 잘부탁드려요. 스프링은 왜 만들어졌을까요? 스프링이 나오기 이전에 자바진영에서는 EJB(Enterprise Java Bean)를 사용했다고 해요. EJB는 규모가 큰 애플리케이션을 개발하는데 객체를 관리하는 컨테이너를 만들어서 필요할 때 자바 객체를 재사용할 수 있도록 도와주는 것이 목표였어요. 의도는 좋으나 객체들이 너무 복잡하게 의존되어있거나 무엇보다 객체를 직렬화하는 과정에서 .. 더보기
Spring Boot에서 GraphQL 활용법 Spring Boot를 활용하여 RESTAPI를 다룰 수 있으며 REST가 무엇인지, 클라이언트와 서버가 통신하는 HTTP에 대해 학습한 지식이 있을 때 유용합니다. 이 글을 읽기 전 사전에 RESTAPI 그리고 HTTP메서드를 참고하고 보시길 바랍니다. 1. GraphQL 정의 페이이스북에서 만든 API를 위한 쿼리 언어 타입과 필드 시스템을 사용하여 쿼리를 실행하는 서버사이드 서버와 클라이언트 사이에 효율적으로 데이터를 주고 받는 것이 목적 2. REST API와 GraphQl의 차이 RESTAPI는 url에 http method (post, get, put, delete)를 활용하여 데이터를 주고받는 방식 rest api는 /member, /team 이런식으로 다양한 요청 엔드포인트가 있음 Grap.. 더보기