분류 전체보기
-
Service Layer 에 읽기 쓰기 분리기Project/TravelFeelDog 2023. 8. 10. 13:56
기존의 프로젝트를 진행을 하는데 있어 서비스 레이어는 다음과 같은 목적으로 작성을 하였다. 1. 어플리케이션에서 사용할 로직을 담당한다 . 2. 클라이언트의 인터페이스를 담당하는 컨트롤러 프랜제테이션 계층과 도메인의 비즈니스 로직을 담당하는 모델의 결합을 끊는 역할 3.Dto 매핑을 하는 역할. 4. 다른 도메인 , 루트 에그리거트의 접근을 제어하는 역할. 서비스는 데이터의 crud 와 관련된 로직을 제어 및 호출 하는 역할을 하였지만 하나의 모델과 관련된 기능이 늘어나면서 가독성이 떨어지고 하나의 클라스에서 담당하는 역할이 많아지면서 클라스의 목적이 모호해지는 현상이 생겼다. 추가적으로 , 조회를 위한 조회 성능을 위한 옵션을 설정한 트랜잭션이 자원을 생성하는 매서드 내부에서 호출 되면서 , 트랜잭션의..
-
Transaction (1) 정의 , ACID 특성CS-Theory/DB 2023. 8. 9. 23:29
데이터베이스의 트랜잭션이란 , 데이터 베이스에서 수행하는 작업 또는 논리의 하나의 단위이다. 운영체제로 부터 자원을 할당 받아 실행하는 작업의 단위인 프로세스와 유사한 정의 인것 같다. 논리의 단위라는것이 중요하다 , 트랜잭션의 결과가 물리적으로 , 하드디스크에 변경이 된다라는걸 의미 하지 않는다. ??? 데이터 베이스에 WRITE 과 관련된 트랜잭션이 발생을 하면 , RAM에서의 결과를 COMMIT 이라는 명령어를 해야 하드디스크에 변화가 생긴다. 추가로 + ACID 의 개념이 들어가게 설명을 하자. 데이터베이스의 트랜잭션이란 , ACID 속성이 있는 작업 그룹이며 , DB 의 어떤 변화가 있는 경우를 일컫는 말이다. 정리 하자) 데이터 베이스의 트랜잭션이란 , ACID 속정이 있는 작업 그룹으로 DB..
-
@Transactional (1)Java&Spring/Spring 2023. 8. 9. 17:21
@Transactional 은 Aop 의 관점에서는 사용하기는 편리하지만 , 개발자가 동작원리를 이해를 기반으로 해야 효과적인 troubleshooting 이 가능하다 라고 생각한다. 학생 Id 를 이용하여 , 10 명의 학생 객체를 만들려고 한다. 식별자는 db 에서 생성을 받는다하자. 다음 코드가 동작을 정상적으로 할까 ? @Service public class SomeService { @Transactional public void methodA(int studentId) { Student member = new Student(studentId) } @Transactional public void methodB() { for(int i = 0 ; i < 10 ;i++) { methodA(i) } }..
-
Arrays & Hashing (2)CodeingTestPrac/neetCode.io 정주행 2023. 8. 9. 16:15
238. Product of Array Except Self nums = [1,2,3,4] 일 때 , 각 리스트에 원소에 자기 자신을 제외한 값의 곲을 넣어야 한다. class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length ; List index = new ArrayList(); int pro = 1 ; for(int i = 0 ; i 1) { return new int[n] ; } if(index.size() == 1) { Arrays.f..
-
Firebase 에서 OAuth2 , JWT 로 전환기(1)Project/TravelFeelDog 2023. 8. 8. 19:46
도입 배경 기존의 프로젝트는 웹과 앱 모두를 지원을 하는 상황 , 유저의 로그인 인증여부를 firebase Auth 서비스를 사용하였다. 당시 한달이라는 개발 기간안에 Spring Security 까지 다룰 여력이 부족하여 Firebase Auth 를 사용한 시스템을 이용했다. Firebase Authentication 의경우 이메일 존재여부, 중복여부, 연락처 인증 등 다양한 기능을 지원하니 여력이 부족하면 사용하는 것을 추천한다. 대략적인 흐름은 다음과 같다. Client : 안드로이드 모바일 , 리엑트 웹 등 Firebase : Firebase Authentication service Resource Server : SpringBoot , Node server etc.. 클라이언트의 구글 로그인을 ..
-
Arrays & Hashing (1)CodeingTestPrac/neetCode.io 정주행 2023. 8. 8. 18:07
217. Contains Duplicate : 같은 숫자가 존재하나 ? import java.util.* ; class Solution { public boolean containsDuplicate(int[] nums) { int size = Arrays.stream(nums). distinct(). boxed(). collect(Collectors.toList()).size(); return size != nums.length; } } -> HashSet 또는 map 을 사용하여 o(N ) 으로 접근 하는 풀이도 가능 242. Valid Anagram 주어진 문자열이 재구성 가능 한지 확인 하는 코드 , 두개의 문자를 비교하는것은 Char arr 이후 arrays. 의 api 를 이용한 풀이를 생각하자..
-
DDDProgrammingTheory/DDD 2023. 8. 8. 15:03
DDD ,, DDD ,, DDD 벡엔드 엔지니어의 길을 걷고자 공부한 지난 1년간 정말 많은 블로그에서 보고 들은 단어 이지만 , DDD 가 뭐다 ! 라고 명확하게 이야기를 못한 자신을 보았다. 그러한 이유는 명확한 정의, 이론들을 알지 못한 상황에서 기능을 급급하게 만들었던, 모래성을 쌓는 것 과 같은 일을 하고 있었기 때문이다. 이글을 통하여 나와 같이 DDD에 대하여 가볍게 넘어가거나 추상적으로만 개념이 있던 사람들에게 도움이 되고자 아직 부족하지만 나름의 경험과 공부했던 내용의 일부를 적어본다. DDD 정의 : DDD 는 도메인의 깊은 이해(process and domain rule)를 바탕으로 만들어진 도메인 모델을 중심으로 소프트웨어를 개발 및 설계하는 접근 법이다. DDD 이전에 MDD 라는..
-
정수를 대체하는 횟수는 ? : 중요한 기본기 + 재귀 , mapCodeingTestPrac/Java Coding Test 2023. 8. 7. 19:01
https://leetcode.com/problems/integer-replacement/solutions/3614937/java-hashmap-solution-using-memoization/ Java HashMap Solution Using Memoization - Integer Replacement - LeetCode View tylercdesouza's solution of Integer Replacement on LeetCode, the world's largest programming community. leetcode.com 리트 코드의 문제이다. 문제를 해결하는 과정도 중요하지만, 문제를 푸는 방식도 중요하다. 1. 에지 케이스를 항상 생각하자 . 정수 값의 범위가 주어졌을때 양 끝 값이 ..