eckrin.log
close
프로필 배경
프로필 로고

eckrin.log

  • 분류 전체보기
    • [ CS기초 ]
      • 알고리즘
      • 컴퓨터구조
      • 오토마타
      • 데이터베이스
      • 네트워크
      • 운영체제
      • Linux
    • [ 아키텍쳐, 방법론, 디자인패턴 등 ]
    • [ Backend ]
      • Spring
      • Spring Web
      • Spring DB, JPA
      • Infra
      • 기타
    • [ Languages ]
      • Java
      • C
      • Kotlin
      • Go
    • [ 기타 ]
      • 백준, 프로그래머스
      • 코딩
      • 잡담
    • [ 코딩테스트 ]
    • 일기장
  • 홈
  • 태그
  • 방명록
  • 글쓰기
'클린 아키텍처' 프로젝트 설계하기

'클린 아키텍처' 프로젝트 설계하기

개요 작년에 로버트 마틴의 '클린 아키텍처'를 읽은 적이 있다. SOLID부터 시작해서 여러 디자인 패턴이나 방법론에 대한 소개를 통해 객체지향적인 사고를 할 수 있도록 도왔고, OOP에 대한 새로운 시각을 제시해 주기도 했던 책이었다. 하지만 그 책을 읽고 나서도, 프로젝트를 진행하면서 책에 존재하는 수많은 선택지들 중에 '그렇다면 내가 앞으로 어떤 방법을 택해야 하는가?'라는 질문에 대한 확답을 내리지는 못했다. 예를 들어 추상화를 통해 클래스간의 결합도를 줄이고 외부 인터페이스에 의존하지 않는 코드를 만들고자 했던 목표를 두고 작성한 코드가, 간단한 프로젝트임에도 기존의 몇 배에 달하는 클래스들이 복잡한 연관관계를 가지고 있어 가독성이 떨어지고 간단한 유지보수조차 어렵게 하는 trade-off를 ..

  • format_list_bulleted [ 아키텍쳐, 방법론, 디자인패턴 등 ]
  • · 2024. 5. 19.
  • textsms
[Spring DB] 트랜잭션 매니저 커스텀하기

[Spring DB] 트랜잭션 매니저 커스텀하기

개요 JPA는 내부에 하나의 EntityManagerFactory가 존재하고, EntityManagerFactory가 여러개의 EntityManager들을 생성할 수 있으며, 이렇게 생성된 EntityManager는 영속성 컨텍스트를 생성해 엔티티의 영속성을 관리한다. EntityManager는 트랜잭션 범위 내에서 작동하는 것이 일반적이기 때문에 트랜잭션을 시작할 때 마다 새로운 EntityManger 인스턴스가 필요하며, 이는 트랜잭션 종료 시 폐기된다.스프링 컨테이너에 등록된 트랜잭션 매니저는 데이터베이스 커넥션을 획득하고, 반납하는 역할을 한다. 스프링에는 데이터베이스 커넥션 풀이라는 것이 존재하는데, 스프링은 빈으로 등록된 Datasource 객체를 통해 커넥션 풀을 관리한다. 이 커넥션 풀에 ..

  • format_list_bulleted [ Backend ]/Spring DB, JPA
  • · 2024. 4. 25.
  • textsms
[Spring] Spring Batch 프로젝트에 적용해보기

[Spring] Spring Batch 프로젝트에 적용해보기

Batch와 Spring Batch Spring Batch는 배치 작업을 위해서 스프링에서 제공하는 배치 프레임워크이며, 배치(Batch)란 데이터를 실시간으로 처리하지 않고 단발성으로 일괄처리하는 방식을 말한다.  상품 결제를 승인하거나 api요청에 따라 뷰를 띄워주는 등의 작업을 위해서는 클라이언트에게 즉각적인 응답을 제공해야 한다. 하지만 일정 시간을 기준으로 데이터를 취합하여 통계 리포트를 생성하거나, 부하가 큰 대용량의 데이터 작업을 서버 부하가 적은 특정 시간대에 처리하려 할 경우에는 실시간 처리보다는 특정 주기를 두고 처리하는 것이 바람직하다. 이러한 데이터 처리 방식을 배치(Batch)라고 한다. 이러한 배치 어플리케이션의 특성에 Spring Framework의 3대 요소인 DI, AOP,..

  • format_list_bulleted [ Backend ]/Spring
  • · 2024. 4. 21.
  • textsms
BOJ 플레 달성

BOJ 플레 달성

https://eckrin.tistory.com/65 이후 무려 2년 2개월만에 달성 막타는 BOJ17143으로 쳤다 나도 이제 (물)플레 기념으로 난이도 기여도 해봤다

  • format_list_bulleted [ 기타 ]/잡담
  • · 2024. 4. 14.
  • textsms
[알고리즘] Traveling Salesman Problem

[알고리즘] Traveling Salesman Problem

개요 따로 알고리즘 포스팅을 하는건 union-find 이후 1년만이다 사실 코테에 나올 확률이 매우 드문 알고리즘이라고 생각해 본인이 코테 대비만 한다면 굳이 알 필요는 없을 것 같지만.. 개인적인 호기심으로 작년 말부터 정리해야겠다 생각은 했는데, 그동안 놓았던 ps를 다시 감을 잡고 돌아오는데 시간이 많이 걸렸다. 위키를 보면 Travelling Salesman Problem(이하 TSP)를 다음과 같이 설명하고 있다."Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to th..

  • format_list_bulleted [ CS기초 ]/알고리즘
  • · 2024. 4. 8.
  • textsms
[알고리즘] LIS로 알아보는 역추적 기법

[알고리즘] LIS로 알아보는 역추적 기법

개요 참고 문제: BOJ 11053, BOJ 12015, BOJ 14003, BOJ2568LIS 개념: https://eckrin.tistory.com/30 O(N^2)의 LIS 풀이: https://www.acmicpc.net/source/37212239O(NlogN)의 LIS 풀이: https://www.acmicpc.net/source/75537735 for(int i=0; i  반복문만을 사용하는 LIS의 경우, O(N^2)의 시간복잡도를 가진다. 여기서 12015번 문제의 경우는 N이 백만으로, O(N^2)의 시간복잡도를 가지는 일반적인 LIS를 사용하면 무조건 TLE가 날 것을 예상할 수 있다. int end = 0;for(int i=0; idp[end-1]) { // dp 최대길이 갱신 ..

  • format_list_bulleted [ CS기초 ]/알고리즘
  • · 2024. 3. 23.
  • textsms
자바에서 다양한 정렬기준 커스텀하기

자바에서 다양한 정렬기준 커스텀하기

Comparator를 사용하려면 Array나 List Collection에 대해서 가능하다. 1. Primitive type array primitive type의 경우 Comparator를 사용할 수 없다. 내림차순 정렬을 위해서 Collections.reverseOrder()를 사용하기 위해서는 아래와 같이 Wrapper Type으로 감싸서 사용해야 한다. 2. Wrapper type array Integer[] arr = new Integer[30]; Arrays.sort(arr, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1-o2; } }); 3. Collection ArrayList nodes..

  • format_list_bulleted [ 코딩테스트 ]
  • · 2024. 3. 21.
  • textsms
[Spring] 프록시(Proxy)와 스프링 AOP

[Spring] 프록시(Proxy)와 스프링 AOP

개요 예전 JPA를 처음 공부하던 시절에 '프록시'라는 개념을 접한 적이 있고, 구조 패턴 중 하나인 프록시 패턴과 데코레이터 패턴에 대해서 공부했던 적이 있다. 이처럼 스프링 환경의 다양한 곳에서 프록시가 사용되고 있다는 것은 들어본 적이 있는데, 지금까지는 @Transactional 사용시 스프링이 트랜잭션 대상 코드를 프록시 형태로 감싼다는 정도로만 알고 있었다. 이번 포스트에서 프록시에 대한 개념부터, 스프링이 프록시를 어떻게 활용하고 있는지에 대해서 자세하게 정리해보도록 하겠다.  동적 프록시 타겟 클래스 하나마다 프록시 클래스를 직접 생성하여 적용하는 방법을 정적 프록시라고 한다. 프록시의 사용 목적이 접근 제어나 기능 추가와 같이 공통 코드의 반복이라는 점을 고려하면, 프록시 적용 대상이 되..

  • format_list_bulleted [ Backend ]/Spring
  • · 2024. 2. 4.
  • textsms
다양한 디자인 패턴 - (2) 행동 패턴

다양한 디자인 패턴 - (2) 행동 패턴

행동 패턴? 행동 패턴은 '객체 사이의 상호작용 또는 객체의 책임 할당'과 밀접한 관련이 있는 디자인 패턴이다. 한 객체가 수행할 수 없는 작업을 여러개의 객체로 분배하는 등의 작업을 통해서 객체 사이의 결합도를 최소화하는데 중점을 두는 패턴이다.  템플릿 메서드 패턴 부모 클래스에서 골격을 정의하면 자식 클래스가 알고리즘의 특정 메소드를 오버라이딩하여 사용할 수 있도록 한다. 다시 말하자면, 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 메소드의 형태로 자식 클래스에 두어 상속을 사용하여 문제를 해결한다.  예를 들어 다음과 같이 메소드 실행에 대한 로깅을 한다고 가정하자.   핵심 비즈니스 로직의 시작과 끝에 로깅을 위한 코드가 추가되었다. 이는 개발자가 핵심 코드에 집중할 수 없게 할 뿐..

  • format_list_bulleted [ 아키텍쳐, 방법론, 디자인패턴 등 ]
  • · 2024. 1. 28.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • ···
  • 19
  • navigate_next
전체 카테고리
  • 분류 전체보기
    • [ CS기초 ]
      • 알고리즘
      • 컴퓨터구조
      • 오토마타
      • 데이터베이스
      • 네트워크
      • 운영체제
      • Linux
    • [ 아키텍쳐, 방법론, 디자인패턴 등 ]
    • [ Backend ]
      • Spring
      • Spring Web
      • Spring DB, JPA
      • Infra
      • 기타
    • [ Languages ]
      • Java
      • C
      • Kotlin
      • Go
    • [ 기타 ]
      • 백준, 프로그래머스
      • 코딩
      • 잡담
    • [ 코딩테스트 ]
    • 일기장
인기 글
최근 댓글
공지사항
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바