분류 전체보기

    [Spring] @Transactional 사용시 주의점(+ @Async, 같은 Class 내에서 사용하는 경우)

    @Transactional을 사용하면서 마주쳤던 특이사항에 대해 정리한다. 1. @Async와 함께 사용하는 경우(ThreadLocal) 2. 같은 Class 내에서 사용하는 경우(AOP) 로 나뉜다. @Async와 함께 사용하는 경우 @Transactional이 붙은 메서드에서 다른 메서드를 호출하는데 그 메서드를 비동기로 호출해야 하는 일이 생겼다. 호출하는 메서드에 @Async를 붙여서 비동기로 호출해주려는데 Exception이 나면 Rollback 되어야 하는 @Transactional annotation이 잘 동작하지 않는다. 왤까? 간단한 코드로 확인해보자. // 예시를 위해 만든 간략한 코드라 실제로 돌아가지는 않음 class TestService { private final TestRepo..

    [Spring] @Transactional 개념, 사용법

    이번 포스팅에선 트랜잭션의 개념과 스프링에서 @Transactional 어노테이션을 통해 트랜잭션 관리를 하는 방법을 알아본다. 트랜잭션? 트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위이다. 예를 들어, A가 B에게 돈을 송금한다고 해보자. A의 계좌에서 돈을 차감하고, B의 계좌에 돈을 추가하는 과정은 하나의 작업의 단위이다. 둘 중 하나가 실패했을 경우 전체가 원상태로 돌아가야(rollback)하고 두 작업이 모두 완료되어야 성공(commit)되어야 한다. 이 작업의 단위를 트랜잭션이라고 한다. 우리는 보통 트랜잭션의 특징을 말할 때 줄여서 ACID라고 말한다. 원자성(Atomicity) 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다...

    [개발자 원칙] 개발자로써의 성장 방향을 고민중일 때

    [개발자 원칙] 개발자로써의 성장 방향을 고민중일 때 대학교를 졸업하고, 취준생이고 되고 마침내 취직에 성공해서 개발자로 살아가기 시작했을 때 회사는 내 생각처럼 녹록치 않았다. 대학처럼 나를 가르쳐주실 교수님이 계신 것도 아니고, 같은 과제를 해결해 나갈 동기들이 있는 것도 아니니까. 상사들도 있었지만 조금 더 마음 터놓고 고민을 얘기할만한 자리가 부족하다고 느껴졌다. 이런 저런 고민들과 함께 큰 비중은 차지하는 것은 개발자로써의 성장이었다. 업무를 하면서 개발을 하고 있지만 과연 이게 내가 성장할 수 있는 방향이 맞을까? 나보다 다른 동기가 더 잘하는 것 같은데 내가 방향을 못잡고 있는 것이 아닐까? 다양한 고민을 가지고 서성이던 중 교보문고의 한쪽에서 발견한 책이 바로 ‘개발자 원칙’ 이었다. ‘테..

    [BaekJoon] 백준 16928번 뱀과 사다리 게임 - Python

    [BaekJoon] 백준 16928번 뱀과 사다리 게임 - Python 🎈문제 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 💬설명 간단한 bfs문제 게임판 전체를 기준으로 주사위 1-6칸이 나왔을 경우를 하나씩 큐에 넣어가면서 해결하면 되는 문제 포인트는 사다리나 뱀을 만난 경우 이동하는 칸으로 update를 해줘야 한다는 것이다. 👩‍💻코드 from collections import deque..

    [Error] Parameter 1 of constructor in '...' required a bean of type 'com.couchbase.client.core.deps.com.fasterxml.jackson.databind.ObjectMapper' that could not be found.

    Parameter 1 of constructor in '...' required a bean of type 'com.couchbase.client.core.deps.com.fasterxml.jackson.databind.ObjectMapper' that could not be found. 발생 원인 찾아보니까 couchbase는 몽고디비같은 문서형 데이터베이스라고 함 의도한 것과 다른 import를 해줘서 생긴 문제였음 해결 첫번째 줄로 import 되어 있던 걸 두번째줄로 수정 //import com.couchbase.client.core.deps.com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.Obje..

    [BaekJoon] 백준 7576번 토마토 - Python

    [BaekJoon] 백준 7576번 토마토 🎈문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 💬설명 비슷한 문제를 여러개 풀어봤기 때문에 금방 풀었다. Bfs로 많이 푼 것 같은데, 큐를 쓰지 않고 풀었다. 아래와 같이 푸니까 pypy로 채점하지 않고 제한시간을 만족시킬 수 있었다. 아래와 같이 푼다. 토마토 위치를 먼저 배열에 저장해준다. 익은 토마토 개수와 모든 토마토 개수를 따로 저장해준다. (나중에 일일히 세지 않고..

    [BaekJoon] 백준 7569번 토마토 - Python

    [BaekJoon] 백준 7569번 토마토 - Python 🎈문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 💬설명 처음에 bfs로 큐를 써서 풀려고 하다가 적용하지 않고 풀어봤다. 대신 시간 초과에 걸려서 pypy로 채점했다. 확실하게 시간 단축해서 풀고 싶으면 queue로 풀어줘야 할듯 풀이는 간단하다. 매일 추가된 익은 토마토에 대해 6개 방향을 체크해서 익은 토마토의 개수와 전체 토마토의 개수가 같다면 출력 ..

    [BaekJoon] 백준 1107번 리모컨 - Python

    [BaekJoon] 백준 1107번 리모컨 - Python 🎈문제 https://www.acmicpc.net/problem/1107 💬설명 범위가 작고, 시간은 많이 주어졌기 때문에 완전탐색으로 풀 수 있는 문제 1. +-만 썼을 때 얼마나 걸리는지 구한다. 2. 모든 범위에 대해 고장난 버튼이 없는 수를 찾아서 100에서 몇번 버튼을 눌러야하는지 계산해서 최소값을 업데이트 한다. 나는 고장난 버튼을 찾기 위해 set을 써서 교집합을 통해 비교해줬다. 👩‍💻코드 N = input() M = int(input()) if M != 0: broken = set(map(int, input().split())) else: broken = set() # +-로 가는 횟수 answer = abs(100 - int(N..