본문 바로가기

개발42

데이터베이스 트랜잭션 정리하기 정의 시스템에서 상호작용의 단위. 영어 단어 transaction은 거래를 뜻한다. 나는 논리적 작업단위라는 말이 더 와닿았다. 송금 작업을 하나의 트랜잭션이라고 하면 이 트랜잭션은 인출과 입금이라는 연산작업을 모아둔 논리적 작업단위이다. 목적 데이터베이스 완전성(integrity) 유지 원자성 Atomicity 어떤 것이 더이상 쪼개질 수 없는 성질. 원자성을 가지고있으면 원자적이라 한다. 데이터베이스에서의 원자성 All or Nothing. 트랜잭션과 관련된 작업들이 일부만 실행되고 일부는 중단되지 않도록 보장하는 것을 의미하며 은행 송금으로 예를 드는 경우가 많다. "A에게서 B로 10000원 송금"이 이루어지는 과정을 2단계로 나눴을때 A의 계좌에서 10000원을 차감한다. B의 계좌에 10000.. 2021. 6. 28.
초보 개발자의 Golang 학습기 - (1) Goland로 Go 개발 시작하기 Go 언어를 처음 접한 저에게 발생한 문제와 도움이 되었던 정보들을 정리한 글입니다. 초보의 입장에서 작성한 글로 잘못된 내용이 있을 수 있습니다. Goland는 Jetbrains사의 Golang IDE 이며, 유명한 무료 IDE로는 Visual Studio Code가 있습니다. 이 글에선 Goland: 2021.1.3 , Go: 1.16.4/windows 버전을 사용하고 있습니다. Go 언어와 관련된 검색에선 키워드를 Go 대신 Golang으로 검색해야 합니다. 정식 명칭은 'Go' 이지만 불필요한 검색 결과가 많이 포함되는 문제가 있기 때문에 Golang이라고 검색합니다. 위키백과에 따르면 Go의 홈페이지 주소가 golang.org 이기 때문에 종종 golang으로 호출된다고 합니다. .. 2021. 6. 24.
클라이언트 입장에 포커스를 맞춘 OAuth 2.0 정리 이 글은 생활코딩 강의를 토대로 개인적으로 이해한 내용을 덧붙여 작성하였습니다. 사용자 sang5c가 구글에 가입되어있고, OAuth 인증을 통해 사용자의 정보를 프로그램 P가 Google에게서 얻어오는 과정을 예로 들어 설명합니다. OAuth는 sang5c가 P에게 비밀번호를 제공하지 않고도 Google에 저장된 자신의 정보에 접근할 수 있는 권한을 부여할 수 있는 수단입니다. OAuth 인증이 완료되면 P에게 사용자의 토큰이 발급되며, 이 토큰을 사용하면 Google에 사용자를 대신하여 요청을 보낼 수 있습니다. 간단히 OAuth를 정리해보자면, OAuth는 사용자의 토큰을 얻기 위한 과정이다. 토큰이 있으면 사용자의 권한이 있다(API를 호출할 수 있다). 라고 할 수 있습니다. 용어 / 역할 정리.. 2021. 6. 23.
Github에서 commit 메시지가 깨져서 나올때 윈도우에서도 잘보이고 맥에서도 잘보이는데 Github에서만 커밋메시지가 깨져서 나오는 문제가 생겼다. 문제가 없는 케이스 windows git bash에서 한글 커밋 windows github에서 한글 커밋 mac에서 한글 커밋 windows intellij(webstorm)를 통해 커밋할때만 위와 같은 문제가 발생했다. 모든 툴을 재설치했으나 동일한 문제가 발생했다. 해결 방법은 git config --global -l 커맨드에서 찾았다 전과 후를 찍은 스크린샷이다. i18n.commitencoding설정을 "UTF-8"로 변경하여 해결했다. Github에서 한글 출력이 정상인 것을 확인하고 git rebase를 통해 수정했다. 2021. 6. 15.
일급 컬렉션 jojoldu님의 블로그 글을 참고하여 일부 재작성함. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 일급 컬렉션 예 public class Position { private final Map positions; public Position(Map positions) { this.positions = positions; } } @Test void test() { Map carPositionMap = new HashMap(); map.put("1", "A"); map.put("2", "B"); Position carPosition = new Position(carPositionMap); // 이후로 carPosition의 positions는 불변이 유지된다. } Wrapping으로 인해 .. 2020. 3. 28.
git hooks를 사용하여 commit 전에 gradle test 실행하기 Git-Hook pre-commit + gradle clean test 이 글에서 사용한 스크립트는 깃허브에서 볼 수 있습니다. Git Hooks ? 어떤 이벤트가 생겼을 때 자동으로 특정 스크립트를 실행 .git/hooks 폴더에 들어가면 여러 샘플이 있으며 그 중 pre-commit을 사용해봤다. 주의: pre-commit 파일은 서버에 저장되지 않음 /.git/hooks/pre-commit 파일에 저장 후 권한을 755로 설정한다. #!/bin/bash echo "Running Gradle clean test for errors" CWD=`pwd` MAIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $MAIN_DIR/../../ ./gr.. 2020. 3. 26.
준비 01 - gradle build failed (No tests found) 환경 macos catalina intellij idea ultimate gradlew 4.10.3 JUnit 5 intellij에서 테스트 코드를 실행 (cmd + R) 하였으나 테스트를 찾지 못했다는 에러가 나오는 상황 에러 Testing started at 12:25 오전 ... > Task :cleanTest > Task :compileJava NO-SOURCE > Task :processResources NO-SOURCE > Task :classes UP-TO-DATE > Task :compileTestJava UP-TO-DATE > Task :processTestResources NO-SOURCE > Task :testClasses UP-TO-DATE > Task :test FAILED FAI.. 2020. 3. 12.
토비의 스프링을 읽고 막 적어보자 (4) 191024 테스트 없이는 스프링도 없다. 스프링도 테스트를 만들어가며 개발됐다. 코드에 변경사항이 없다면 테스트도 동일한 결과를 내야 한다. DB 중복 값 에러 등 외부 상태에 따라 성공/실패하면 안 된다. 스프링의 창시자인 로드 존슨은 "항상 네거티브 테스트를 먼저 만들라"는 조언을 했다. 나는 잘 되던데? 는 변명이다. 테스트 코드는 잘 작성된 기능 정의서이다. 코드로 된 설계문서를 만든다고 생각하자. 실패하는 테스트를 먼저 만들고, 테스트를 성공하게 하는 코드를 작성하는 방식의 개발 방법을 "테스트 주도 개발, TDD, Test Driven Development"라고 한다. 실패한 테스트를 성공시키기 위한 목적이 아닌 코드는 만들지 않는다. 테스트는 작성한 후 가능한 한 빨리 실행할 수 있어야 한.. 2019. 10. 25.
토비의 스프링을 읽고 막 적어보자 (2) 191021 빈 스프링이 IoC 방식으로 관리하는 오브젝트 모든 오브젝트가 빈인건 아니다. 스프링이 관리하는 오브젝트만을 칭함 빈 팩토리 말 그대로 빈을 생성, 등록, 조회 등등의 빈 관리. 바로 사용하지 않고 이를 확장한 어플리케이션 콘텍스트를 사용 어플리케이션 콘텍스트 빈 팩토리를 확장한 IoC 컨테이너. 빈 팩토리라고 부를때는 주로 빈의 생성, 제어의 관점이고 애플리케이션 콘텍스트의 경우 스프링이 제공하는 지원 기능을 모두 포함하여 이야기하는 것. 빈팩토리를 상속함. 설정 정보 (configuration metadata) 스프링의 설정정보란 애플리케이션 컨텍스트 또는 빈팩토리가 IoC를 적용하기 위해 사용하는 메타 정보. 형상정보, 청사진. 컨테이너 (IoC 컨테이너) 컨테이너라는 말 자체가 IoC.. 2019. 10. 22.