분류 전체보기
-
[Spring] Spring DataBackend/공부,개념 2023. 2. 27. 04:34
회사에서 신규 프로젝트에 도입할 기술들을 정하고 있어서 개념정리할 겸 적어본다. JDBC (Java DataBase Connectivity) - Java와 데이터베이스를 연결하기 위한 Java 표준 인터페이스 - 다양한 DB미들웨어의 드라이버 제공, JVM기반에서 어디든지 사용 가능 - class.forName(driver), driverManager.getConnection, con.prepareStatement, pstmt.executeQuery 그 완전 기본 형태 - 커넥션 종료시 일일이 close 해주어야 함 Spring JDBC - 스프링에서 DB를 사용하기 위한 오리지널 디펜던시 - JDBC사용 시 자주 사용하는 객체와 코드를 클래스 화하였음 - Connection 열고 닫기, Statemen..
-
[Spring Boot] @Transactional Rollback 관련 트러블슈팅Backend/개발 2023. 1. 30. 02:26
사이드프로젝트 게임 저장로직에 문제가 생겨서 해결하다 알게 된 내용을 정리해보려고 한다. 생각보다 간단하고 많이 봤던 이슈였는데 발견하는데 좀 오래 걸려서 기록 남기기용.. 게임을 저장할 때 1. 게임 정보 저장 2. 팀 정보 저장 3. 참가자 정보 저장 3-1. 회원 정보 업데이트 이렇게가 @Transactional로 걸려서 한 트랜잭션에 묶여있는데 3-1. 회원정보 업데이트를 하는 로직에 외부 API (라이엇 API)를 호출하는 부분이 있었다. 우리는 게임 등록을 보통 새벽 12~1시쯤 하게 되고, 게임마다 10명의 참가자의 정보를 외부 API를 호출해서 가져오고 있었는데 이때 왜인지 timeout이 자주 나서 한동안 게임등록이 자꾸 실패했다. 그런데 게임 등록이 모두 실패하는 게 아니고 1,2는 저..
-
[Spring Boot] List의 null값 처리하기2 - 일급컬렉션, @RequestBodyBackend/개발 2022. 5. 15. 16:04
컨트롤러에서 List로 된 요청을 받아오는 과정에서, null이나 empty List가 왔을 때 처리하는 방법에 대한 글이다. 이전에 올렸던 [Spring Boot]List의 null 값 처리하기1 - CustomConverter로 @RequestParam 에서 좀 애매한 부분이 있었는데, 다른 해결 방안이 될 수 있을 것 같아서 적어본다. 이전 글은 param, List 이고 이번 글은 body, List 라 조금 다를 수도 있지만 일단 기록용 ㅎㅎ;; 요청으로 받을 DTO를 json파일로 받아와 게임을 등록하는 API가 있었는데, 이 json파일을 리스트로 한번에 받아올 수 있게 하려고 한다. public ResponseEntity saveGameRecords( @RequestBody List rio..
-
[Spring Boot] 카카오 로그인 - 1Backend/개발 2022. 5. 1. 13:20
oauth 로그인을 구현하는 방법 oauth의 기본 로직은 다음과 같다. 출처 : https://datatracker.ietf.org/doc/html/rfc6749 보통 OAuth의 인증 종류(grant type)으로 Autorization Code을 주로 사용한다. Resouce Owner로 부터 리소스 사용 동의를 받으면 Authorization Server는 Client에게 Token을 발급해준다. Client는 Token을 가지고 Resource Server에게 Resource Owner의 정보를 요청한다. Client는 받은 정보를 이용해서 로그인을 진행하거나, 추가적인 회원가입으로 애플리케이션에 필요한 기능을 개발한다 Access Token이 만료되면 웹페이지를 사용하고 있는 Resource ..
-
[Spring Boot] JPA Flush 특징, 문제 해결Backend/개발 2022. 4. 17. 20:16
JPA 특징 중 쓰기지연과 Flush에 관련한 글이다. JPA JPA는 엔티티를 영속성 컨텍스트에서 관리하며, JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다. tx.begin() tx.commit() tx.rollback() 쓰기지연 쓰기 지연이란 트랜잭션을 커밋하기 직전까지 데이터베이스에 엔티티를 저장하지 않고 내부 쿼리 저장소에 SQL을 모아뒀다가, 트랜잭션을 커밋할 때 모아둔 쿼리를 반영하는 과정이다. 이때 실제로 반영하는 작업을 flush라고 한다. 쓰기 지연의 이점 성능상 이점 (50개의 insert를 50번씩 하는 것보다 한 번에 50개를 다 하는 게 낫다) 데이터베이스 테이블 row에 lock 걸리는 시간 최소화 Flush 플러시 하는 방법 트랜잭션 커밋 시 flush 자동 호출 em..
-
[Github] 이슈 템플릿 설정하기Backend/git,협업 2022. 4. 10. 15:39
Git, Github에서 commit과 push 말고도 제공하는 여러 기능이 많은 것 같다. 혼자 공부할때나 협업할 때 쓸만한 것들 차근차근 정리해보려고 한다. 첫 번째로는 이슈 템플릿! 1. github 프로젝트 - Settings 2. Features - Issues - Set up templates 3. Add template - 선택 - Preview and edit 나는 스터디할 때 매주 이슈에 주제를 올리고 있는데 그걸 만드려고해서 Custom template으로 만들어볼 것이다. 4. 템플릿 꾸미기 템플릿 이름, 설명, 내용, 기본 제목, assignees, labels 등! 5. propose changes 6. main 브랜치에 바로 커밋 또는 PR용 브랜치 생성 -----.md로 되어있..
-
[Spring Boot] List의 null 값 처리하기1 - CustomConverter로 @RequestParamBackend/개발 2022. 4. 7. 17:18
요청이 컨트롤러에게 전해질 때 HandlerAdapter -> ArgumentResolver -> Handler(Controller)로 전해지는데 이때 ArgumentResolver에서 Converter를 사용해서 값을 변경한다. @RequestParam으로 값을 받아올 때 ", "로 구분하면 List로 받아와 지는 것도 StringToCollectionConverter에서 변환이 이뤄지기 때문이다. public ResponseEntity result( @RequestParam(required = false) List searchNames, @RequestParam(required = false) List gameTypes) { // 빈 값 들어올 경우 if (searchNames != null) { s..
-
[Algorithm/Java] 백준 12100 2048(Easy)알고리즘 2022. 3. 16. 15:12
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 백준 12100번 2048(Easy) 문제 난이도 : G2 알고리즘 : 구현, 백트래킹 N이 최대 20인 NxN 배열에서 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하는 프로그램 상, 하, 좌, 우 4개의 경우로 5^4 -> 2^10 이므로 1024*20*20 이 정도 시간 복잡도 일거고 그냥 구현 문제구나 싶었다. 그렇게 잘 푼 풀이는 아닌 것 같지만 ..