트랜잭션 격리수준
·
데이터베이스
트랜잭션이란?트랜잭션은 작업의 완전성을 보장해 준다. 즉, 트랜잭션은 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않도록 해준다. 잠금(Lock)과 비슷한 개념이라고 생각할 수 있지만, 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.또한, 트랜잭션은 여러 개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념이 아니다. 트랜잭션은 하나의 논리적인 작업 셋에 쿼리의 수와 상관없이 원자성을 보장하는 것이다.주의사항트랜잭션 범위를는 최소화해하는 것이 좋다. 이유가 무엇일까? 데이터베이스 커넥션은 개수가 제한적이어서 각 단위 프로그램이 커넥션을 소..
[BOJ] 나머지 합 (Java) - 골드 3
·
알고리즘
문제 링크https://www.acmicpc.net/problem/10986 사실 문제를 보자마자 너무 놀랐다. 삼성 SDS Pro 시험 2차 시험 문제가 거의 똑같았기 때문이다. 그리고 티어를 보고 다시 한번 놀랐다. 시험장에서 4시간 동안 고민했던 문제가 고작 골드3이라니.. 뭔가 허무하기도 했고 실력이 많이 늘었다고 생각했는데 아직 많이 부족하구나 라는 겸손이 생기게 된 문제였다... (+ 시험장에서 쫄지 말자!) 아직 문제 푸는 속도도 그렇고 아이디어를 떠올리는 것도 그렇고 골드 위주의 문제들을 많이 풀어봐야 할 것 같다.문제 접근이 문제는 모든 경우를 구하고자하면 시간초과가 발생하게 된다. N의 범위를 살펴보면 1 ≤ N ≤ 10^6로 전체 구간 길이의 경우의 수는 NC2이기 때문이다. 때문에 ..
SQL 정리 - 복습용
·
알고리즘
SQL 동작 순서💡 'FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY'정규 표현식https://schatz37.tistory.com/39CTECTE는 쿼리 내에서 임시 테이블을 정의하여, 후속 SELECT문에서 사용할 수 있도록 하는 구조-> 임시로 쿼리 결과를 저장해 놓고, 여러번 참조해서 사용하는 용도로 사용사용 방법WITH 키워드와 AS로 cte_name에 맵핑할 쿼리를 작성한 후 cte_name으로 지정한 테이블을 조회한다.WITH CTE_NAME AS ( -- CTE 정의 부분 SELECT column1, column2, ... FROM some_table WHERE condition)-- CTE 사용 부분SELECT..
[Programmers] 파괴되지 않은 건물 (Java) - 2022 KAKAO BLIND RECRUITMENT
·
알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 효율성 테스트 실패 코드효율성을 고려하지 않고 Brute Force 방식으로 코드를 작성한다면, 굉장히 쉬운 문제다.class Solution { public int solution(int[][] board, int[][] skill) { for (int[] s : skill) { if (s[0] == 1) { // 공격 for (int i=s[1]; i 0) { ..
삼성 SDS 알고리즘 특강 후기
·
대외 활동
지원한 이유이번 상반기에 진행했던 삼성SDS에서 주관하는 대학생 알고리즘 특강에 참여했다. 평소 알고리즘 공부를 소홀히 한 탓인지 항상 코딩테스트에서 좌절했었다. 혼자서 알고리즘을 준비하니 뭔가 체계가 안잡히는 느낌이 들었고 운이 좋게도 학교 에타에서 해당 공고을 발견하게 되어 망설임 없이 바로 지원하였다.합격자는 오롯이 지원서를 통해서만 선발된다. 개인적인 생각이지만, 지원서에 내가 이 특강이 필요한 이유를 진실되게 적는다면 무난히 선발되지 않을까 싶다. 또한, 재학 중인 학교와 학점 증명서를 제출해야 하기 때문에 학점 관리를 잘해놓는 것을 추천한다.참고로 특강은 C++과 Java로만 진행되며 Pro 시험 또한 2개의 언어로만 응시가 가능하기 때문에 파이썬을 이용해서 코테를 연습한 사람이라면 지원을 한..
로그인 코드 리팩토링 대장정
·
대외 활동/SOPT
미뤄두고 미뤄두던 로그인 로직 리팩토링.. 더이상 미룰 수 없다고 생각해서 이번에 코드를 새롭게 갈아엎어보았다. 그 과정을 살펴보자!기존 코드의 문제점 🤔SOLID 원칙 위반기존 코드의 가장 큰 문제점은 객체지향스럽지 못하다는 것이다.위의 코드는 AuthService의 코드 중 일부로 외부 네트워크와 통신하여 사용자의 정보를 받아오고 또 탈퇴하는 코드이다. 인자인 platform은 사용자가 가입을 할 때, 클라이언트에서 어느 플랫폼으로 가입을 시도했는지 서버에게 보내준 enum 값이다. 이 코드의 문제점은 무엇일까? DIP와 OCP에 위배된다는 점이다. 만약, 기획의 요구사항의 변경으로 구글 로그인이 추가되었다면 어떨까? 구글 서버와 통신하기 위한 로직과 클래스를 생성해야하는 것은 물론이고, 이 Aut..
스프링 트랜잭션과 전파
·
대외 활동/SOPT
문제점을 찾아보자!위 코드는 '한끼족보'에서 로그인을 담당하는 코드이다. 무엇이 문제일까?트랜잭션 범위RealMySQL에서는 트랜잭션의 범위를 최소화 하라는 조언이 있다. 특히, 외부 서버와 통신을 하는 과정은 트랜잭션 내에서 제거하는 것이 좋다고 한다. 프로그램이 실행되는 동안, 외부 서버와 통신할 수 없는 상황이 발생한다면 웹 서버 뿐만 아니라 DBMS 서버까지 위험해지는 상황이 발생할 수 있기 때문이다.다시 돌아와서, 코드를 살펴보자. 무엇이 문제일까?위 로직은, DB에 유저를 조회하거나 저장하는 로직과 함께 애플과 카카오 서버를 통해 사용자의 정보를 가져오는 getSocialInfo메서드 즉, 외부 서버와 통신하는 로직이 하나의 트랜잭션 단위로 묶여져있다. 만약, 카카오 서버에 문제가 생긴다면 어..
스프링 DB 2편 - 섹션 10~11
·
Spring
외부 트랜잭션과 내부 트랜잭션트랜잭션 전파란, 이미 진행 중인 트랜잭션이 존재할 때 추가로 트랜잭션을 수행하려는 상황에서 어떻게 동작할 지 결정하는 것을 트랜잭션 전파(propagation)이라고 한다. 트랜잭션 전파에는 여러가지 옵션이 존재하지만, 기본 옵션이 REQUIRED를 기준으로 설명하겠다.외부 트랜잭션이란 쉽게 말해서 가장 먼저 시작된 트랜잭션이다. 그리고 내부 트랜잭션은 그 이후에 호출된 트랜잭션으로 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는 것처럼 보여서 내부 트랜잭션이라 한다.흐름내부 트랜잭션을 시작하는 시점에는 이미 외부 트랜잭션이 진행중인 상태이다. 이 경우 내부 트랜잭션은 외부 트랜잭션에 참여한다. 즉, 내부 트랜잭션은 외부 트랜잭션을 기대로 이어 받아..
스프링 DB 2편 - 섹션 9
·
Spring
선언적 트랜잭션과 AOP@Transactional이라는 애노테이션을 사용하여 매우 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리라고 한다. 이 방식은 기본적으로 프록시 방식의 AOP가 적용된다.AOP의 핵심은, 실제 객체 대신 트랜잭션을 처리해주는 프록시 객체가 스프링 빈에 등록된다는 것이다. 또한 주입을 받을 때도 실제 객체 대신에 프록시 객체가 주입된다. 즉, 선언적 트랜잭션을 사용하면 항상 프록시를 통해서 대상 객체를 호출한다는 것이다.프록시 내부 호출만약, 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 어떻게 될까? 2가지 상황에 대해 알아보자.상황 1트랜잭션이 적용된 Internal() 메서드가 내부 호출로 External() 메서드를 호출하는 상황이다. Internal() 메서..
중복 추가 이슈를 해결하기 위한 고민
·
대외 활동/SOPT
메뉴 추가 동시성 이슈요즘, 동시성에 대해 공부하면서, 이전에 만들었던 프로젝트에서 발생할 수 있는 동시성 문제들에 대해 찾아보고 해결방법을 고민하고 있다. '한끼족보' 프로젝트에서는, 여러 명의 사람이 동시에 같은 메뉴를 추가할 경우, 같은 메뉴가 하나의 테이블에 여러 개 저장되는 현상이 발생한다.테이블 구조고민한 해결방법위의 문제를 해결하기 위해 고민한 방법은 2가지이다. 1. 유니크 키 제약조건(store_id, name) 컬럼 조합에 대해 복합 유니크 제약 조건을 걸어, 동시성 문제 해결하는 것이다.가장 간단한 해결 방법으로 DB 차원에서 중복 삽입을 자동으로 방지할 수 있다. 하지만 이 경우, DB단에서 발생하는 예외(유니크 키 제약 위반)를 service의 비즈니스 로직 상에서 try-catc..