매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

분류 전체보기 77

프로그래머스 Lv2 - 도넛과 막대그래프

https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답률 : 18 00:00 ~ 01:35 오랜만에 보니 DFS 기법의 근본이 헷갈린다. 그래프탐색문제 써클이 두번 발생하면 8자 써클 한번 발생하면 도넛 써클이 없으면 막대 edge를 여러개 들고 자기 자신으로 안돌아오면 기점 으로 기준을 세웠는데 구현이 잘 안된다. 옛날거 보면서 기억을 떠올리자

알고리즘 2024.02.02

클린아키텍처

클린아키텍처란?추상화 개념으로써 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처를 말합니다. 클린아키텍처 레이어 구조 안쪽에 위치할 수록 고수준 정책이며, 바깥쪽에 위치할 수록 저수준 정책을 의미합니다. 1. 엔티티(Entities)의도에 따라 도메인 계층으로도 불리며, 엔티티 계층은 하나 이상의 프로그램 간에 공유될 수 있다는 가정하에 만드는 수명이 긴 객체입니다. 즉 재사용 가능성이 높다는것을 인지하고 외부에 의해 변경될 가능성을 낮춰야 합니다. 이곳에 Enterprise 규모의 비즈니스 데이터를 포함함거나 핵심이 되는 비즈니스 규칙을 캡슐화 합니다. 2. 유즈케이스애플리케이션 계층이라고도 불리며, 어플리케이션 규모의 비즈니스 규칙을 포함합니다. 이 레이어의 변경사항은 엔티티에 영향을 미..

프로그래머스 Lv1 - 가장 많이 받은 선물

문제 https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이시간 : 42분 1:06 ~ 1:48 시도 횟수 : 1 복기 : 오래간만에 프로그래머스에서 풀려고하니, 익숙치 않았다. 자료구조 선언하는데 Import 를 해야한다니.. import java.util.*; class Solution { public int solution(String[] friends, String[] gifts) { Map friendsMap ..

알고리즘 2024.01.30

레이어드 아키텍처

레이어드 아키텍처란? 레이어드 아키텍처는 소프트웨어 시스템을 관심사 별로 여러 개의 계층으로 분리한 아키텍처를 말합니다. 각 계층은 어플리케이션 내에서 특정 역할과 책임을 가지며, 자신의 역할에만 집중합니다. 레이어드 아키텍처에서는 추상화된 인터페이스를 통해 소통하며, 소통은 자신에게 인접한 하위 계층에 요청을 보내는 방식으로 이루어집니다. 상위 계층은 하위 계층으로 단방향 의존성을 가집니다. 일반적인 레이어드 아키텍처는 다음과 같은 4단계로 구성됩니다: 프레젠테이션 계층: 사용자 혹은 클라이언트 시스템과 직접 연결됩니다. 서비스 계층: 비즈니스 로직을 구현하는 부분입니다. 영속성 계층: 데이터의 영구 저장과 관리를 담당합니다. 데이터베이스 계층: 실제 데이터베이스를 의미합니다. 레이어드 아키텍처를 사용..

마이크로서비스 아키텍처

마이크로서비스 아키텍처란? 마이크로서비스 아키텍처(MicroService Architecture, MSA)는 단일 애플리케이션으로 이루어진 모놀리식 아키텍처와 달리 아주 작은 서비스 단위로 나눠 각 서비스에 독립적으로 서비스를 구성하는 소프트웨어 아키텍처 입니다. 마이크로서비스 아키텍처의 장점 유연한 확장성 : 각 마이크로서비스는 다른 서비스와 독립적으로 확장할 수 있기 때문에 유연합니다. 더 민첩한 배포 주기 : 코드 변경점이 생긴 서비스 영역만 배포할 수 있기 때문에 빠르게 배포할 수 있습니다. 유지 관리 안전성 : 여러 마이크로서비스로 분할하여, 특정 마이크로서비스가 중단되더라도 전체 어플리케이션에 영향을 미치기 않기 때문에 안정적이다 기술 유연성 높음 : 각 마이크로 서비스는 필요에 따라 독립..

성능 향상을 위한 1차 캐시와 2차 캐시

네트워크를 통해 데이터베이스에 접근하는 시간비용이 어플리케이션 서버에 내부 메모리 접근하는 시간보다 훨씬 큼. 조회한 데이터를 메모리에 캐시해서 데이터베이스 접근횟수 줄일 수 있다면, 애플리케이션 성능을 획기적으로 개선 가능. 1차 캐시 영속성 컨텍스트 내부에는 엔티티를 보관하는 장소가 있는데, 이것을 1차 캐시라함. 트랜잭션을 커밋하거나 플러시를 호출하면 1차 캐시에 있는 엔티티의 변경 내역을 데이터베이스에 동기화 1. 1차 캐시의 동작 과정분석 최초 조회할 때는 1차 캐시에 엔티티가 없으므로 데이터베이스에서 엔티티를 조회해서 1차 캐시에 보관하고 1차 캐시에 보관한 결과를 반환. 이후 같은 엔티티를 조회하면 1차 캐시에 같은 엔티티가 있으므로 데이터베이스를 조회하지 않고 1차 캐시 엔티티 반환 2...

Spring/JPA 2023.12.31

JPA 비관적 락

비관적 락(Pessimistic Locking) 이란 동시성 제어 기법중 비관적 락은 트랜잭션이 데이터에 대한 엑세스를 시도할 때 미리 해당 데이터를 잠궈서 충돌을 해결하는 방식. 트랜잭션이 데이터를 읽거나 수정하기 전에 해당 데이터를 잠금(락)을 획득하여 다른 트랜잭션의 엑세스를 막음. 데이터베이스에서는 주로 SELECT ... FOR UPDATE와 같은 명령어를 사용하여 비관적 락을 구현. 비관적 락은 데이터를 수정하는 작업이 많거나 동시에 여러 트랜잭션이 데이터를 수정하는 환경에서 사용. JPA 비관적 락 활용 JPA가 제공하는 비관적 락은 데이터베이스 트랜잭션 락 메커니즘에 의존하는 방법이다. 주로 SQL 쿼리에 select for update 구문을 사용하면서 시작하고 버전 정보는 사용하지 않는..

Spring/JPA 2023.12.08

JPA 낙관적 락

낙관적 락(Optimistic Locking)이란 동시성 제어 기법 중 낙관적 락은 트랜잭션 충돌을 기대하지 않고, 일단 트랜잭션을 수행하고 나중에 충돌을 해결하는 방식. 트랜잭션이 데이터를 읽을 때는 어떠한 락도 획득하지 않고, 수정이 필요한 경우에만 해당 데이터의 버전을 확인하여 충돌 여부를 판단 데이터를 수정하기 전에 해당 데이터의 버전을 확인하고, 만약 다른 트랜잭션에 의해 이미 변경되었다면 충돌이 발생한 것으로 간주하여 롤백하거나 충돌을 해결하는 방법을 적용 일반적으로 낙관적 락은 읽기 작업이 많고 충돌이 드물거나 극히 적은 경우에 사용. 낙관적 락은 데이터베이스가 제공하는 락 기능을 사용하는 것이 아니라, JPA가 제공하는 버전 관리 기능을 사용 JPA 낙관적 락 활용 JPA(Java Pers..

Spring/JPA 2023.12.07

트랜잭션

트랜잭션이란? 트랜잭션은 데이터베이스에서 데이터를 안전하게 처리하기 위한 작업의 논리적 단위를 말합니다. 트랜잭션 ACID 원리 트랜잭션 ACID는 데이터베이스에서의 트랜잭션 처리를 위한 속성들을 설명하는 약어입니다. 각각의 속성은 다음과 같은 의미를 가집니다: 원자성 (Atomicity): 트랜잭션의 모든 연산은 원자적으로 실행되어야 합니다. 즉, 트랜잭션 내의 모든 연산은 전부 성공하거나 실패해야 하며, 중간에 일부만 성공하는 경우는 없어야 합니다. 예를 들어, 어떤 계좌에서 돈을 출금하여 다른 계좌로 입금하는 트랜잭션이 있다면, 출금과 입금 모두가 성공해야 트랜잭션이 성공한 것으로 간주됩니다. 만약 입금이 성공하고 출금이 실패하는 경우, 트랜잭션은 롤백되어야 합니다. 일관성 (Consistency)..

데이터베이스 2023.12.07

모놀리식 아키텍처

모놀리식 아키텍처란? 모놀리식 아키텍처(Monolithic Architecture, MA)는 단일 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 소프트웨어 개발 아키텍쳐입니다. 모놀리식 아키텍처의 장점 단순하고 통일성 있는 구조 : 단일코드 베이스로 단순한 구조를 가졌기에, 개발이 쉽습니다. 간편한 개발 : 새로운 기능이 추가되거나 버그를 수정 했을때, 단일 프로젝트로 간편한 배포가 가능합니다. 빠르고 편한 E2E 테스트 : 단일 어플리케이션으로 E2E 테스트가 쉽습니다. 손쉬운 모니터링, 디버깅 : 별도 추가 구성 없이 단일 어플리케이션에서 로직을 수행하기 때문에 모니터링 및 디버깅 쉽습니다. 모놀리식 아키텍처의 단점 유지 보수 및 안전성 문제 : 프로젝트가 거대해짐에 따라 코드가 복잡해지고, ..