전체 글 16

Java 개발자가 JPA 를 쓸 때 이정도는 알고 쓰자 - 엔티티 기본 설계3

엔티티를 설계하면서 필수라고 볼 수 있는 연관관계, 그리고 내 엔티티는 어떤 쿼리를 생산하는가?에 대한 글을 작성합니다.Java 에서 객체지향적 표현과 DB 테이블의 표현 방식의 차이로 인한 패러다임의 불일치가 발생하지만, JPA 를 사용함으로서 그 문제를 해결할 수 있다는 것은 다들 아실거에요. 하지만, 이런 편한 기능 뒤에 숨어있는 JPA 의 동작 원리를 아는 것은 매우 중요합니다.편하게 객체지향적으로 DB 테이블을 다룰 수 있지만, 실제로 우리가 짠 코드에서 어떤 쿼리가 나가게 하는지 아는것은 아무리 강조해도 지나치지 않습니다. 편하다고 무작정 사용하면 성능 이슈 및 장애 유발 등 낭패를 볼 수 있습니다. (작성중...)

개발/JAVA 2025.02.18

Java 개발자가 JPA 를 쓸 때 이정도는 알고 쓰자 - 엔티티 기본 설계2

Java 와 Spring 프레임워크 생태계를 실무에서 사용하는 웹 백엔드 개발자들이 JPA 를 사용할때 종종하는 실수들이 있습니다.백엔드 개발자라면 JPA 를 사용할 때 이정도는 알고 쓰자는 의미에서 글을 작성합니다.JPA 구현체로는 Hibernate 를 사용하고 DB 는 MySQL 을 사용하는 것을 전제로 합니다.값 객체 JPA 에서 사용하는 값 객체의 의미와 그 사용법에 대해 알기전에 참고 객체를 안짚을 수 없을 것 같습니다.Java 에서는 참조 객체(Reference Object)라는 개념이 있습니다. 참조 객체는 객체가 메모리에 위치하는 그 주소자체를 참조하는 객체를 말합니다.class Person { String name;}public class Main { public static ..

개발/JAVA 2025.02.13

Java 개발자가 JPA 를 쓸 때 이정도는 알고 쓰자 - 엔티티 기본 설계1

Java 와 Spring 프레임워크 생태계를 실무에서 사용하는 웹 백엔드 개발자들이 JPA 를 사용할때 종종하는 실수들이 있습니다.백엔드 개발자라면 JPA 를 사용할 때 이정도는 알고 쓰자는 의미에서 글을 작성합니다.JPA 구현체로는 Hibernate 를 사용하고 DB 는 MySQL 을 사용하는 것을 전제로 합니다. 엔티티 설계@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본 생성자 보호@AllArgsConstructor(access = AccessLevel.PRIVATE) // AllArgsConstructor도 보호@Builder@Table(name = "order")public class Order { @Id @Gen..

개발/JAVA 2025.02.09

전략적 설계 - Context Mapping

도메인 주도 설계(DDD) 의 전략적 설계(혹은 전략적 패턴) 에서 쓰이는 컨텍스트 매핑이 무엇이며, 컨텍스트 매핑에서 자주 사용하는 패턴에 대해 공부하고 실무에 어떻게 적용할지 설명합니다.컨텍스트 매핑이란?도메인 주도 설계(DDD)에서 여러 개의 바운디드 컨텍스트(Bounded Context)가 서로 어떤 관계를 맺고 있는지 시각적으로 표현하는 기법입니다.* 바운디드 컨텍스트(Bounded Context)는 특정 도메인 모델이 일관되게 유지되는 경계를 의미합니다. 특히, 하나의 시스템 내에서도 여러 개의 바운디드 컨텍스트가 존재할 수 있습니다.예를 들어, 제가 담당하는 셀러 오피스 시스템에서는 상품, 주문, 회원, 클레임 등등 여러개의 컨텍스트가 존재합니다. 게다가 서로 다른 시스템 간의 바운디드 컨텍..

개발/DDD 2025.02.07

GoF 디자인 패턴 : 커맨드 패턴 (그런데 CQRS 패턴을 곁들인...)

실무에서 즐겨 쓰고 있는 GoF 의 디자인 패턴 중, 커맨드 패턴에 대해 작성합니다.저는 실무에서 CQRS(혹은 CQS) 패턴을 적용하여 CRUD 중 CUD 명령을 처리하는 Command 와 R 에 해당하는 Query 를 명확히 분리하여, 클래스의 단일 책임을 적용하고 응집도를 높이는 방법을 채택했습니다.이번 글은 CQRS 패턴에 대해 자세히 설명하는 것보다 GoF 의 디자인 패턴 중 커맨드 패턴에 대해 설명드리고자 CQRS 패턴은 다음에 자세히 다루도록 하겠습니다. CommandHandlerSpring 프레임워크의 내부 코드들을 들여다보면 ~~CommandHandler 라는 클래스가 종종 보입니다. CommandHandler 는 커맨드 패턴을 활용하여 Command 명령을 처리하는 객체입니다.즉, Co..

정적 팩토리 메소드 컨벤션 : from() 과 of()

오늘 회사 동료의 코드를 리뷰하면서 제안드린 내용을 정리합니다. from() 과 of() 는 일반적으로 정적 팩토리 메소드(Static Factory Method)의 이름으로 사용되며, 각각 미묘한 의미적 차이를 가지고 있습니다. 아래는 동료가 작성했던 PR의 코드 중 일부분입니다.public static Product of(DraftProduct draft) { return Product.builder() .name(draft.getName()) ... // 중략 .build();}보기에는 딱히 이상한 부분이 없죠.다만, 일반적으로 메소드 네이밍 컨벤션에서 of() 는 아래와 같은 의미로 사용됩니다. 명확하고 직관적인 값 반환: of()는 주어진 인자를 사용하여 명확한 ..

블로그를 다시 시작 해보려고 합니다

안녕하세요.2025년 새해를 맞아 오랜만에 블로그에 글을 올립니다.그동안 티스토리 말고 개인 Github Page 를 이용해서  jekyll 를 이용해 별도로 기술 블로그를 작성했었는데요.그 블로그는 폐쇄하고 티스토리에서 다시 시작하려고 합니다. . . . 어느새 8년차 직장인이 되었는데요.경력도 주니어 엔지니어에서 미들급 엔지니어로 접어들었습니다. 그동안 많이 깨지고 많이 배우고 많이 성장했는데요.다시 블로그를 시작하면서 그동안 배우고, 실무에 적용 했었던 기술들 및 경험에 대해 공유하고 또 공유하면서 배우는 계기가 될 것 같습니다. 감사합니다.

생각 정리 2025.02.02

[Spring] Spring MVC

Spring MVC - 톰캣을 실행시키면 서블릿 컨테이너가 구동된다. 그 후 web.xml 의 내용을 불러와 생성해주고 관리해준다. - Web.xml 내용대로 .do 리퀘스트가 생기면 디스패처 서블릿이 실행된다. - 디스패처 서블릿은 스프링 컨테이너를 구동하고 핸들러 매핑을 이용해 컨트롤러를 검색하도록 요청하고 핸들러 매핑은 해당 컨트롤러 객체를 리턴한다. - Controller 는 model and view 에 비즈니스 로직 후에 얻은 결과물을 셋팅하고 View 단으로 리턴한다. - 디스패처 서블릿은 응답할 View 객체를 찾기 위해 ViewResolver 에게 질의를 한다. - ViewResolver 를 통해 찾아낸 Viewp(jsp)에 request를 전달 한다.

개발/SpringBoot 2018.11.19

[Spring] Model1, Model2 아키텍쳐

Model1 아키텍쳐 - 클라이언트가 jsp 요청 - jsp 에서 View 단의 html 과 css 를 처리하고 Controller 단의 사용자 입력정보추출, DB연동처리, 화면 네비게이션 등의 기능을 처리한다. - jsp 에서는 자바빈즈를 이용해 비즈니스 로직인 Model 에 접근한다. - 그 다음으로 DB 연동을 통해 사용자가 요청한 정보를 가져온다. - 요청에 대한 응답으로 통신을 마친다. - 이 구조의 특징은 jsp 에서 Controller 기능과 View 기능을 모두 제공한다는 것이다. 이로 인해서 jsp 파일에 자바 코드와 디자인 소스들이 혼재하기 때문에 유지보수에 어려움이 따른다. Model2 아키텍쳐 - 클라이언트가 jsp 를 요청 - Controller 단의 Servlet 은 브라우저의 ..

개발/SpringBoot 2018.11.19