전체 글 97

말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 1편

개요 프로젝트를 진행하면서 가끔씩 service부분에서 @Transaction이 readOnly=true로 되어있어 현재 수행하는 작업 단위(save,update등)가 불가능하다는 오류가 발생했다는 에러코드가 뜹니다. 물론 제가 아는 바 로는 트랜잭션이 하나의 단위로 원자성 단위로 진행되기 위해 선언한다고 대충은 알고 있습니다. 하지만 트랜잭션은 기술면접에서도 중요하게 다루며 자주 생각해야하고 마주쳐야 하는 문제이기 때문에 이번 기회를 통해 자세히 살펴보려고 합니다. 이번 시간을 통해 굉장히 긴 내용으로 다루게 될것이며 학교수업과 데이터베이스 개론의 책을 보며 정리하는 글이므로 자세하게 공부하고 싶은 분은 이번 글을 통해 배워가셨으면 좋겠습니다. 트랜잭션이란 데이터베이스는 다수의 사용자가 동시에 사용하더..

11주차 CafeMate 브랜치에서 실수로 다른 기능 구현을 했을때

문제 인지 현재 저의 사항은 다음과 같습니다. 보시다시피 feature-auth 브랜치에 다음과 같은 문제가 발생했습니다. 1. feature-auth는 인증 관련 기능을 수행하는 브랜치 2. 브랜치를 바꾸지 않은 상태로 상품등록폼 구현 및 리스트 구현 중에 브랜치 바뀌지 않은 상태였다는 것을 인지 3. 다행이 아직은 커밋을 하지 않은 상태 문제 해결 어떻게 하면 안전하게 상품등록폼 구현 및 리스트 구현중인 작업을 feature-product 브랜치에 옮길 수 있을까 고민을 해봤습니다. 저의 생각은 다음과 같습니다 먼저, develop브랜치로 switch 2번째, develop 브랜치에서 feature-branch를 생성(git checkout -b feature-branch): 위의 그림처럼 아직 생성..

10주차 CafeMate 시큐리티 인증 구현

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.0.5' 시큐리티를 구현하기 위해 먼저 MVN Repository에서 위의 코드를 따와 의존성 주입을 하였습니다. 현재 저희가 진행 중인 스프링부트 버전은 3.0.5 버전으로 2.7+ 버전에서부터는 Spring Security의 WebSecurityConfigureAdapter를 통해 security config를 override 할 때 오류가 발생합니다. 따라서 아쉽게도 제가 알고 있던 방식으로는 더 이상 진행할 수 없기에 이참에 새로운 버전인 시큐리티를 공부하며 인증구현을 하도록 하겠습니다. 비교 다음은 HTTP로 모든 엔드..

10주차 CafeMate RESTAPI 작성

인증 페이지(비회원): GET /auth/signin : 로그인 페이지로 이동 POST /auth/signin: 로그인 요청 GET /auth/signup: 회원가입 페이지로 이동 POST /auth/signup: 회원가입 요청 GET /auth/admin/signup : member가입 페이지로 이동 POST /auth/admin/signup: member 가입 요청 회원관리페이지(관리자용): GET /admin/customers: customer 목록 조회 페이지로 이동 GET /admin/customers/{customerId} : 특정 customer 수정 페이지로 이동 GET /api/customers :customer 데이터들 불러오기 PUT /api/customers/{id}/status :..

[백준 16236] 아기상어

처음 아기상어 크기: 2 1초에 상하좌우로 인접한 한 칸씩 이동 아기상어의 크기 물고기의 크기 : 이동가능O 먹을 수 O 아기상어의 크기 = 물고기의 크기: 이동가능 O 먹을수 X 물고기 먹는 순서 1. 먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 간다.(9는 상어) 0 0 0 0 0 0 1 0 9 2. 먹을 수 있는 물고기가 1마리보다 많다면 거리가 가장 가까운 물고기를 먹으러간다. 0 1 0 0 0 0 1 0 9 3. 거리가 같은 물고기가 많다면 가장위, 가장 왼쪽 물고기를 먹는다. 1 0 1 0 9 0 0 0 1 먹을 수 있는 물고기가 있는 칸으로 이동했다면 그 칸은 0이 된다. 아기상어는 자신의 크기와 같은 수의 물고기를 ..

Algorithm/BOJ 2023.05.07

[백준 1475] 방번호

한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있고 다솜이의 방 번호가 주어지면 필요한 세트의 개수의 최솟값을 구해야한다. 그래서 예를들면 1234 번호가 주어지면 1,2,3,4번 카드가 각각 1장 씩 필요하므로 이렇게 표현이 가능하다. 이것은 1세트로 가능한 번호이다. 다음 예시로는 1233이 주어졌을때를 보면 1,2는 각각 1장 필요하고 3은 2장이 필요하다 이것은 2세트가 있어야 이 방번호를 표현할수있다. 이렇게 위 배열을 표현하기 위해서는 방번호가 주어졌을때 방번호의 숫자를 분리하고 그 숫자에 해당하는 인덱스값을 1씩 증가 시키면 저 배열이 표현이 가능하다. 그다음으로 배열에 있는 값중 가장 큰 값이 우리가 구하려는 세트의 최솟값이다. 다음으로 고려해야할것은 6과 9이다. 예를들어 669가 주어..

Algorithm/BOJ 2023.05.03

[백준 14500] 테트로미노

1x1 4개를 이어 붙인다. 총 5가지가 있다. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회전이나 대칭을 시켜도 된다. 따라서 5가지가 아니라 파랑색은 2가지 노란색 1가지 오랜지색은 8가지 연두색은 4가지 보라색은 4가지이다. 총 그래서 19가지 이 경우를 모두 할 수 있도록 미리 방향배열을 만들고나서 이 방향배열들을 모두 실행하도록하면 19*4 = 76 그리고 이 76번의 연산이 모든 배열에서 실행되므로 500\*500\*76 = 약 40000 500 => 20000000 약 2천만번의 연산이 일어난다. 시간제한은 2초 약 2억번의 연산을 감당할 수 있으므로 충분히 가능하다. 그래서 브루드포스로 무식하게 풀어도 가능한 문제이다. 그렇게 풀도록 하자. (딱히 다른 ..

Algorithm/BOJ 2023.05.02

[백준 12100] 2048(Easy)

문제 분석 예를 들어 2 2 2 4 4 4 8 8 8 이 주어지고 왼쪽으로 이동할때는 4 2 0 8 4 0 16 8 0 의 결과가 나와야 하는데 이러한 결과에 착안해서 해당입력에서 왼쪽으로 이동할때는 왼쪽부터 계산해야한다는 순서가 필요합니다. 좀더 도식화를 시키고 보면 a b c d e f h i j 왼쪽으로 이동할때 보는 순서는 (0,0)⇒(0,1): a와 b가 같을때 (0,0) = a+b (0,1) = 0 a와 b가 다를때 (0,0) = a (0,1) = b 그러나 만약 a가 0이라면 (0,0) = b (0,1) = 0 그 다음은 (0,1)⇒(0,2): b와 c가 같을때 (0,1) = b+c (0,2) = 0 b와 c가 다를때 (0,1) = b (0,2) = c 그러나 만약 b가 0이라면 (0,1) ..

Algorithm/BOJ 2023.05.01

[백준 15683] 감시

문제 파악 사무실은 NxM 그리고 그 사무실은 총 k개의 cctv설치 cctv는 총 5종류 1번은 한쪽 방향만 감시할 수 있다. 2번은 두방향 감시 단, 직선형태로 감시 3번은 두방향 감시 단, 직각 형태로 감시 4번은 세방향 5번은 네방향 cctv는 벽을 통과 못함 cctv는 통과 할 수 있음 cctv는 회전가능 단 90도방향으로 즉 방향이 가로또는 세로 방향 0번은 빈칸, 6번은 벽, 1~5는 cctv번호 출력=> cctv방향을 적절히 정해서 사각지대의 최소 크기를 구해야한다. 입력=> 1cnt가 2일때 카메라 개수 2와 일치하므로 이때는 완성했으므로 0의 개수를 센다 if (cnt == cctv.size()) { for (int i = 0; i < cctv.size(); i++) { //모든 카메라..

Algorithm/BOJ 2023.04.30