개발 51

controller 에서 dto 그대로 전달하기 vs 파라미터로 나누어 전달하기

DTO 전달하는 방식서비스 확장성이 높음새로운 필드가 추가될 경우, Service의 메서드 시그니처를 변경하지 않고 DTO만 수정하면 된다. 의미 전달이 명확함DTO 자체가 하나의 도메인 개념을 가지므로, 어떤 요청인지 쉽게 이해 가능하다.서비스 인터페이스가 명확함createUser(UserRequestDto requestDto)처럼 도메인 중심적인 메서드 시그니처를 유지할 수 있다.하지만 반대로 동일한 함수를 다른 곳에서도 사용하고 싶을 때 dto 를 만들어서 전달하는 과정이 추가될 수도 있다.   파라미터를 전달하는 방식 DTO 와 독립적: dto가 변경되어도 service 레이어가 변경될 필요는 없다. dto 는 controller 의 요청을 표현하는 역할, service 레이어는 비즈니스 레이어를..

개발/TIL 2025.02.15

mongodb aggregation Spring Data MongoDB 에서 사용하기 (mappedResults - 클래스 매핑)

Spring Data MongoDBSpring Data JPA 와 다르다.  JPA 와 다르기 때문에 프로젝트 내에서 mongoDB가 아니라 RDB, 예를들어 Mysql을 위해서 Spring Data JPA 를 함께 사용할 경우 transaction 이 되는 방식 등등이 다르기 때문에 주의가 필요하다.  각설하고,  이 프레임워크를 이용해서 mongodb aggregation 수행 시 입력한 class 에 대해 mapping 된 결과를 mappedResults 필드에 저장하도록 할 수 있다.   이렇게 사용하면 mappedResult 에 알아서 클래스의 필드에 매핑이 되는 것이다. class TagCount { String tag; int n;}import static org.springframework..

개발/TIL 2025.02.14

애플리케이션 에러 로깅하기, 에러 핸들링 (feat. clean code)

fastapi 을 이용한 web app 을 개발하면서, 어떻게 에러처리를 할 지 고민하면서 읽은 글을 정리해보았다. 어디서 에러를 던질 것이며, 어디서 이 에러에 대한 핸들링을 할 것이냐는 클린코드 관점, 책임 분리 관점, 협업 관점에서 모두 필요한 고민지점인 것 같다.  고민해두고, 좋은 참고자료를 통해 예시를 공부해두어서 개발에 참고하기 위해 이 글을 작성했다. 참고자료: [원문]error handling 방식의 큰 전통적인 2가지 방법을 살펴보자. 첫번째는 LBYL(Look Before you Leap) 방식이고, 두번째 방식은 EAFP(Easier to Ask Forgiveness than Permission) 방식이다.  1. Look Before You Leap (LBYL)돌다리는 두들겨 보고..

개발/TIL 2024.11.13

[Spring Security] Spring Security 의 동작과정과 구현

본 글은 Spring Boot 3 & Spring Framework 6 마스터하기! (https://www.udemy.com/course/spring-boot-and-spring-framework-korean/) 를 보고 정리한 글입니다.글또 x Udemy 이벤트로 수강하게 된 강의인데, 좋은 기회를 얻게 되어 감사드리는 마음입니다!컴퓨터에 강한 나라 인도 출신 강사님이 설명해주시는 spring framework 강의로, Hibernate, React, Docker AWS 등 spring framework 뿐 아니라 이를 활용해서 하나의 어플리케이션을 만들기 위한 전반적인 과정을 담고 있습니다.가장 좋은 점은 정말 핵심 이론만 쏙쏙 골라서 설명한 후 , 코드를 작성하는 방식이라는 점입니다.군더더기 없이 ..

개발/java 2024.04.14

[Spring - JPA] 4. 엔티티 매핑

목차 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관 관계 매핑 : @ManyToOne, @JoinColumn 1. 객체와 테이블 매핑 1. @Entity 이 어노테이션이 붙으면 JPA가 관리한다. 이 어노테이션 사용 시 주의점 기본 생성자 필수 (public or protected 생성자) 다양한 기술을 사용하기 위해서 필요 final 클래스, enum, interface, inner 클래스에는 사용 불가 저장할 필드에 final 사용 x @Entity 속성 name : JPA에서 사용할 엔티티 이름 지정 (기본값으로는 클래스 이름 그대로)2. @Table 엔티티와 매핑할 테이블 지정 속성 : name, catalog, schema,..

개발/java 2024.03.16

Spring 에서 configuration 을 다루는 방법 - @Value vs @ConfigurationProperties

사이드 프로젝트를 하면서 동료 개발자분께서 Components/KakaoKey 의 존재 이유를 여쭤보셨다. application.properties 의 값을 @Value 어노테이션을 이용해 가져와 저장하는 목적의 클래스들이었다. 단순히 환경 설정을 위한 값을 저장하는 빈, 컴포넌트로는 사용하기 애매할 수 있다는 생각이 들었고, @ConfigurationProperties라는 어노테이션에 대해 알게 되어 이번 기회에 정리해보게 되었다. Externalized Configuration 서로 다른 환경에서 애플리케이션이 돌아갈 수 있게 하는 방법 중 하나는 externalized configuration 이다. 여러가지 외부 설정을 java properies 파일, yaml 파일, 환경 변수, command-..

개발/java 2024.02.26

[Spring - JPA] 3. 영속성관리

JPA 에서 가장 중요한 2가지 객체와 관계형 데이터 베이스를 어떻게 매핑하나 영속성 컨텍스트 (JPA 가 내부적으로 어떻게 동작하나) 1. 영속성 컨텍스트란? 'Entity를 영구 저장하는 환경’이라는 뜻 EntityManager.persist(entity); EntityManager를 통해 영속성 컨텍스트에 접근. 2. Entity 의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) : 영속성 컨텍스트에 관리되는 상태 ((em.persist(member))) 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 (em.detach(member)) 삭제 (removed) : 삭제된 상태 *영속상태가 되었다고 해서 바로..

개발/java 2024.02.18

[Spring - JPA] 2. JPA 개요

JPA 설정하기 위치가 정해져 있음. Dialect ? 데이터베이스들은 각각 SQL 문법과 함수가 조금씩 다르다. 예를 들어 Mysql은 VARCHAR, Oracle은 VARCHAR2 페이징 : Mysql은 LIMIT, Oracle은 ROWNUM 방언 -> SQL 표준을 지키지 않는 특정 데이터베이스 만의 고유한 기능. JPA 구동 방식 설정정보를 보고 나서, entity manager factory를 만든다. persistenceUnitName (pom.xml 에서 설정된 게 있음) 인자를 넣어서 createEntityManagerFactory 궁금한 점 : 트랜잭션마다 entity manager 를 새롭게 만들어야 하는 이유가 뭐지? create table Member( id bigint not nu..

개발/java 2024.02.18

[Spring - JPA] 1. JPA 소개

*본 글은 JPA 에 대해 공부(책, 강의) 하고 쓴 글입니다. 내용 요약 JPA 란, 객체와 관계형 데이터 베이스 간을 연결해주는 인터페이스로, 객체의 필드에 대해 관계형 데이터베이스에 저장, 삭제, 수정, 조회를 SQL 작성없이 용이하게 할 수 있도록 하는 JAVA API 이다. (Java Persistence API) - JPA는 entityManager를 통해 객체를 관리한다. - JPA는 JPQL 을 사용하여 객체를 기반으로한 쿼리를 작성할 수 있다. - JPA 는 내부적으로 database 와 통신하기 위해 JDBC 를 사용한다. JPA 를 사용함으로써 직접 SQL을 작성해 객체를 저장해야하는 시절의 어려움 (객체들마다 다르게 작성, 상속관계, 연관관계의 객체들은 별도의 맵핑, 객체간의 비교 ..

개발/java 2024.02.03

[Spring - DB] 1. JDBC 이해

본 글은 Spring Database 관리에 관한 강의를 수강한 후 작성한 정리입니다. JDBC, Java Database Connectivity를 통해 다양한 Database 들을 사용함에도 불구하고 일관된 접근을 할 수 있게 되었다는 점이 인상적입니다. 1. JDBC 이해 Java Database Connectivity 클라이언트, 즉 브라우저는 보통 애플리케이션에 특정 작업이나 리소스를 요청하고, 애플리케이션 서버가 데이터베이스에 접근한다. 애플리케이션 서버가 데이터베이스를 사용하기 위해서 진행하는 절차 1. 커넥션 연결 : 주로 TCP/IP 사용 2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 커넥션을 통해 DB 로 전달 3. 결과 응답 예전에는 데이터베이스마다 위의 방법..

개발/java 2024.01.07
728x90
728x90