- @Configuration 와 싱글톤starryeye@Configuration 은 스프링 컨테이너에 스프링 빈을 등록할 수 있도록 해주는 어노테이션이다. @Configuration 이 적용된 클래스 내부에 다수의 @Bean 이 적용된 메서드가 있으면 스프링 빈으로 등록해준다. @Bean 이 적용된 메서드가 하는 역할은 반환되는 객체를 해당 메서드의 이름을 가진 스프링 빈으로 등록한다. @Bean 은 스프링 빈으로 등록되는 클래스에 작성하여도 동작한다. (@Component 적용된 클래스 내부에 작성) 본격적으로 이번 포스팅 주제인.. @Configuration 어노테이션의 이해도를 높여보자. @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); ..
- 2023-07-13 22:04:18
- Layered architecture faults and improvementstarryeye오늘은 계층형 아키텍처의 문제점에 대해 알아보겠다. 계층형 아키텍처는 코드에 나쁜 습관들이 스며들기 쉽고.. 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들이 생긴다. 위는 전통적인 웹 애플리케이션의 구조이다. 의존성의 마지막은 영속성 계층이므로 애플리케이션은 데이터베이스에 의존하게 된다. 따라서, 어떤 요구사항을 구현할 때 데이터베이스의 구조를 먼저 생각하고 이를 토대로 도메인 로직을 구현하기 쉽다. 즉, 데이터베이스 주도 설계로 유도 되는 것이다. 하지만, 비즈니스 관점에서는 도메인 로직을 먼저 만들어야한다. 도메인 로직이 맞다는 것을 확인한 후에 이를 기반으로 영속성 계층과 웹 계층을 만들어야한다. 또한, ORM 프레임워크를 계층형 아키텍처와 결합하면 비즈니스 규칙을 영속..
- 2023-06-22 23:13:53
- JPA 등록, 기본 키 생성 전략starryeye이번엔 JPA 의 등록 과정에 대해 알아보겠다. JPA 의 등록 과정은 크게 2단계를 따른다. 1. 영속성 컨텍스트에 엔티티 등록 -> 엔티티를 영속 상태로 변경 2. 플러시 과정을 거쳐 영속성 컨텍스트에 존재하는 엔티티를 DB 에 반영 -> 쓰기 지연 SQL 저장소의 SQL 을 DB 에 보낸다. 이제 자세하게 알아보겠다.. 먼저 위 사진을 한번 보자.. persist 메서드를 호출하면 해당 엔티티에 대해서.. insert 문이 생성되어 쓰기 지연 SQL 저장소에 저장되고 1차 캐시에 저장되는 두개의 작업이 이루어진다 코드를 통해 이해해보자.. addMember 메서드를 호출하면 어떤일이 발생하는지 알아보겠다. 1. @Transactional 어노테이션이 적용된 메서드이므로 수동 커밋 모드로 진행되며....
- 2023-06-19 13:07:53
- @Async, TaskExecutor, CompletableFuturestarryeyehttps://docs.spring.io/spring-framework/reference/integration/scheduling.html Task Execution and Scheduling :: Spring Framework All Spring cron expressions have to conform to the same format, whether you are using them in @Scheduled annotations, task:scheduled-tasks elements, or someplace else. A well-formed cron expression, such as * * * * * *, consists of six space-separated time docs.spring.i..
- 2023-06-17 18:47:03
- Spring Cloud OpenFeign, Synchronizationstarryeyehttps://spring.io/projects/spring-cloud-openfeign#overview Spring Cloud OpenFeign This project provides OpenFeign integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. Features Declarative REST Client: Feign creates a dynamic implementation of an inte spring.io 선언적 웹 서비스 클라이언트 도구인 open feign 에 대해 알아보자.. Open F..
- 2023-06-17 04:08:35
- JPA 변경 감지와 플러시starryeyeJPA 의 변경 감지와 플러시에 대해 알아보자. 변경 감지엔티티의 변경사항을 데이터베이스에 자동으로 반영하는 기능을 변경 감지(Dirty Checking) 이라 한다. 플러시영속성 컨텍스트의 변경 내용을 데이터 베이스에 반영(동기화)한다. 위 그림을 한번 봐주고.. 코드를 통해 이해 해보자. 엔티티 Member 를 생성 후, 추가하는 addMember 메서드 findById 를 통해 한번 조회 하고, 닉네임을 변경하고, 다시 조회하는 test 메서드 실행은 다음과 같이 진행 하였다. test 메서드를 수행하면 내부적으로 어떤 일이 발생하는지 알아보겠다. 1. test 메서드는 하나의 트랜잭션으로 묶여있어서 메서드 내에서는 동일한 영속성 컨텍스트를 이용하게 된다. 2. (29 line) 최초에는 영속성 컨..
- 2023-06-15 22:06:22
- 시스템 설계 고민 2starryeye가장 간단하게 구현한 시스템 부터 대규모 트래픽을 감당할 수 있을 정도의 시스템 까지 생각하면서.. 시스템 설계 방법을 나열해보겠다.. (아래 내용은 트랜잭션 격리 수준에 따라 내용이 좀 달라질 수 있다.) (틀린 점이 있을 수 있다.. 있으면 댓글 부탁드립니다.) 기술 스택 : Spring, JPA, MySQL 요구사항타임라인 기능 설계에 대해 고민해보자.. 타임라인 기능이란.. 내가 어떤 게시글을 작성하면.. 나를 팔로우하는 사람들은 내 게시글을 각자의 타임라인 페이지(보통 home 페이지이다.)에서 볼 수 있는... 기능이다. 각 방법에서 쓰기 관점과 조회 관점으로 나눠서 설명하겠다. A 사용자가 B 사용자를 팔로우 하였고, B 사용자가 게시글을 쓰는 상황이라 생각하자. 첫번째 방법가장 간단하게 생..
- 2023-06-09 01:59:00
- 시스템 설계 고민 1starryeye가장 간단하게 구현한 시스템 부터 대규모 트래픽을 감당할 수 있을 정도의 시스템 까지 생각하면서.. 시스템 설계 방법을 나열해보겠다.. (아래 내용은 트랜잭션 격리 수준에 따라 내용이 좀 달라질 수 있다.) (틀린 점이 있을 수 있다.. 있으면 댓글 부탁드립니다.) 기술 스택 : Spring, JPA, MySQL, Redis 요구사항 게시물의 좋아요 기능 설계에 대해서 고민해보자.. 좋아요 카운터를 증가시키는 트랜잭션은 2개의 쿼리로 진행했다. 1. 현재 좋아요 수 조회 2. 좋아요 수 = 현재 좋아요 수 + 1 -> JPA 에서 Dirty Check 기능으로 업데이트하는 것과 같다. 쿼리 1개로 하면 안되나..? -> 밑에서 따로 다룬다. 시스템 설계 방법 첫번째 방법 가장 생각하기 쉬운 방법이다. 위..
- 2023-06-08 22:45:24
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)