목록벡앤드 (7)
밍쎄의 코딩공간
Transaction의 사용 JDBC 라이브러리에서 트랜잭션을 시작하고, try 코드 구문에서 결제 관련 비즈니스 로직을 수행하고, 해당 변경을 커밋하거나 롤백하고, 최종적으로 DB 커넥션을 종료하는 트랜잭션 코드를 살펴보자. 아래 코드에서는 결제금액의 저장과 결제 정보의 저장을 하나의 단위로 바라보았다. 그리고, 이를 하나의 트랜잭션으로 묶어주었다. 어느 하나의 부분에라도 에러가 발생한다면, 롤백하도록 설정되었다. 구체적으로, 결제 기능 안에서 ‘결제금액 저장’과 ‘결제정보 저장’을 하나의 단위로 보고 트랜잭션으로 묶어줌으로써 어느 한 부분에서라도 에러가 발생한다면 롤백 할 수 있도록 설정했다. 하기 JDBC Connection 트랜잭션 코드의 단점은 분명하다. 트랜잭션을 발생시켜야 하는 경우, Dat..

빈 생명 주기 콜백 데이터베이스 커넥션 풀처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요합니다. 스프링 빈은 객체 생성 후, 의존 관계를 주입하는 순서로 라이프사이클이 동작합니다. 따라서 초기화 작업은 의존 관계 주입이 완료되고 난 다음에 호출해야 합니다. 스프링 빈에게 콜백 메스드를 통해서 이 시점을 알려주는 다양한 기능이 있습니다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줍니다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 스프링 빈 생성 의존 관계 주입 초기화 콜백: 빈이 생성되고 빈의 의존 관계 주입이 완료된 후 호출 로직 소멸 전 콜백: 빈이 소멸되기 직전..

문득 공부가 하기 싫어질 때, 나는 어떤 것의 한 가지에 집중하게 된다. 하루는 제로베이스 홈페이지에 있는 모든 버튼을 다 눌러봤다. (항상 하는 엄청난 뻘짓) 거기서 "클린 코드" 라는 책을 접하게 되었다. 항상 책이면 에세이만 읽는 나에게는 에세이가 아닌 개발 서적에 어려움을 겪는다고 느꼈는데, 인생도 코딩처럼 내가 인생이란 판을 구축을 하니 낯설긴 커녕,, 술술 익힌다.. https://zero-base.co.kr/event/media_review_1book_cleancode 한달한권 수강후기 | “『클린코드』 언젠가 읽어볼까 싶었다면, ‘한달한권’으로 도전해보세 기술서적을 읽을 때의 어려움, 한달한권으로 극복한 수강후기입니다. zero-base.co.kr 요즘 내가 코딩하는 자세는 "모 아니면 도..
깊이 우선 탐색(DFS, Depth-First Search)은 그래프를 탐색하는 알고리즘 중 하나로, 한 경로를 따라 최대한 깊이까지 탐색한 후, 다음 경로로 이동하는 방식이다. DFS는 스택(Stack)이나 재귀(Recursion)를 사용하여 구현할 수 있다. 주로 그래프의 탐색, 경로 찾기, 연결 요소 확인 등에 활용된다. DFS의 작동 방식 출발 노드 선택: 시작 노드를 선택하고, 해당 노드를 방문한 것으로 표시한다. 인접한 미방문 노드 탐색: 선택한 노드의 인접한 미방문 노드 중 하나를 선택한다. 선택한 노드로 이동: 선택한 노드로 이동하여 그 노드를 방문한 것으로 표시한다. 이동한 노드의 인접 미방문 노드 탐색: 이동한 노드의 인접한 미방문 노드 중 하나를 선택하여 이동한다. 반복: 이동한 노드..
어노테이션이란? 어노테이션이란 과연 무엇일까요? 단순히 앞에 골뱅이(@) 기호를 붙인 것일까요? 사용법으로는 맞지만, 우리가 원하는 어노테이션의 정의와는 조금 다를 겁니다. 어노테이션은, 소스코드에 추가해서 사용할 수 있는 메타데이터의 일종입니다. 메타데이터는 또 뭘까요? 바로 다른 정보를 설명해주는 데이터입니다. 풀어쓰자면, 어노테이션은 소스코드에 추가해서 사용할 수 있는 소스코드를 설명해 주는 데이터라고 볼 수 있겠네요. 어노테이션은 다음과 같은 상황에서 쓸 수 있습니다. 컴파일러에게 어떠한 정보를 제공할 때 컴파일할 때와 설치 시 작업을 지정할 때 실행 시 별도의 처리가 필요할 때 https://ducktopia.tistory.com/m/98 @Getter 어노테이션을 이해해보자 자바 언어로 개발하..
import java.util.*; class Solution { public int[] solution(int[] arr, int[] delete_list) { ArrayList tmp = new ArrayList(); HashSet set = new HashSet(); for(int x : delete_list) set.add(x); for(int x : arr){ if(!set.contains(x)) tmp.add(x); } int[] answer = new int[tmp.size()]; for(int i = 0; i < tmp.size(); i++) answer[i] = tmp.get(i); return answer; } } https://school.programmers.co.kr/learn/c..