ObjectMapper 싱글톤 빈으로 사용해도 될까?
·
Programming/Java,Back-end
서론프로젝트에서 JSON 데이터의 직렬화 및 역직렬화 작업을 위해 Jackson의 ObjectMapper를 사용하고 있다. 효율적인 데이터 처리와 성능 최적화를 위해 객체 재사용이 중요하다. 이에 따라 ObjectMapper를 싱글톤 빈으로 사용하는 것이 적절한지에 대한 고민이 필요하다. 📌 ObjectMapper는 Thread-safe 할까?✔️ 결론 : 완전히 thread-safe하다고 말할 수 없다. Jackson의 ObjectMapper는 스레드 간에 공유되어도 안전하게 설계된 부분이 있지만, 완전히 스레드 안전하다고는 할 수 없다. ObjectMapper 인스턴스를 만드는 데 비용이 크기 때문에 인스턴스를 생성하고 재사용하는 게 권장된다. ObjectMapper itself is only th..
[JPA] Hibernate 내부 동작을 알고 계신가요?(save 안티패턴 고찰)
·
Programming/Spring,JPA
서론프로젝트 초기에는 JDBC Template을 사용해 데이터베이스와의 연동 작업을 진행했다. 하지만 객체지향적 언어로 도메인을 구성하며 프로그래밍을 하던 중, 객체와 데이터베이스 간의 연결 방법에 대한 고민이 생겼다. 객체지향 설계와 관계형 데이터베이스 사이의 패러다임 불일치로 인해 코드가 복잡해지는 문제를 겪었다.  이러한 문제를 해결하기 위해 ORM(Object-Relational Mapping) 기술인 JPA를 도입하게 되었고, 이를 통해 객체와 데이터베이스 간의 매핑을 더 자연스럽게 처리하고자 했다. JPA는 Java Persistence API의 약자로, 자바 ORM 기술에 대한 표준 API 명세를 의미한다. JPA는 여러 인터페이스로 구성되어 있으며, 이 인터페이스들을 구현한 대표적인 프레임..
LATERAL JOIN을 사용하여 각 그룹의 “TOP N” 레코드 가져오기
·
Books/MySQL 8.0
MySQL에서 어려웠던 SQL 쿼리 유형 중 하나는 각 그룹에 대해 "Top N" 행을 얻는 것이었다. LATERAL 조인은 여러 복잡한 쿼리들을 효율적으로 작성할 수 있는 기능을 제공한다. LATERAL JOIN을 사용하여 각 회원별 가장 마지막 주문을 가져오는 방법을 알아보자.(Top N)  ✔️ 예제 테이블 MEMBERS 테이블select * from members;+----+--------------------+---------------------------+| id | name | email |+----+--------------------+---------------------------+| 1 | PcbiQuxvPqj ..
DAO와 Repository는 다른 개념일까?(차이를 구분할때의 장점)
·
Programming/Java,Back-end
DAO(Data Access Object)DAO는 데이터 영속성을 추상화한 개념으로, 데이터베이스 테이블 중심의 기본 storage에 가까운 개념이다.대부분의 경우 DAO는 데이터베이스 테이블과 일치하므로 까다로운 쿼리를 추상화하여 스토리지에서 데이터를 보다 간단하게 전송하고 검색하는 기능을 수행한다. User 도메인 클래스public class User { private String name; private String email; //getters and setters}  User 도메인에 대하여 CRUD 연산을 수행할 수 있는 UserDao 인터페이스public interface UserDao { void create(User user); User read(Long id); voi..
[CS] 쿠키, 세션, JWT Token
·
Programming/Network
쿠키와 세션은 별개의 개념이 아니다. 쿠키(Cookie)쿠키는 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 세션(Session)세션은 일정 기간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.  세션은 쿠키를 기반으로 동작 HTTP는 비연결성과 무상태 프로토콜이라는 특징을 가진다. 비연결성이라는 것은 클라이언트가 요청을 보내고 서버가 응답을 완료하면 연결이 끊어진다는 것이다.  Stateless(무상태) 특성은 HTTP는 따로 상태를 저장하지 않는다는 것이다. 따라서 서버는 클라이언트가 첫번째 통신 때 보낸 정보를 두번째 통신 때 알 수 없다. 하지만 애플레케이션은 로그인과 같이 상태를 유지할 필요가 있는 요구사항이 발생한다...