본문 바로가기

전체 글

(103)
프로젝트를 시작하며(merge 전략) 이번에 스터디에서 프로젝트를 하나 하기로 했다. 주제는 1인 가구를 위한 쇼핑몰로 최근 4개월간 자바, 스프링, 객체지향에 대해서 기초부터 공부한 후 처음으로 하는 프로젝트이다. 처음으로 제대로 하는 프로젝트이다 보니 내가 알고있는 것들을 최대한 담아서 진행하고 싶은 마음이다. 이런 마음으로 프로젝트를 시작하기에 앞서 git merge 전략과 branch 전략에 대해서 알아봤다. git merge 전략 git merge 전략에는 다음과 같이 3개의 머지 전략이 있다. 일반 merge rebase and merge squash and merge 일반 merge 각각에 대해서 살펴보면 일반 merge의 경우 다음 그림과 같이 표현할 수 있는데, merge를 하기 전 브랜치에서 했던 작업들의 커밋 내용과, 해..
Requires_new 우리는 흔히 Requirs_new의 옵션을 생각하면 각각의 트랜잭션이 독립적으로 실행되는것으로 알고 있다. 하지만 다음과 같은 코드가 있에서는 서비스 B에서 예외를 보냈지만 서비스 B 와 A 모두 롤백이 된다. @RequiredArgsConstructor @Service public class TestServiceA { private final TestServiceB testServiceB; private final PostsRepository postsRepository; @Transactional public void save(PostsSaveRequestDto requestDto) { System.out.println("상위 트랜잭션 시작"); postsRepository.save(requestDt..
트랜잭션 트랜잭션이란 여러 쿼리를 하나의 작업으로 묶어두는것을 트랜잭션이라고 한다. 돈거래로 예를 들어보겠다. 판매자 A와 구매자 B가 있다고 했을때 다음과 같은 작업이 일어난다. -구매자 계좌에서 5000원 출금 -판매자 계좌에 5000원 입금 각각 쿼리로 나타낸다면 다음과 같다. -UPDATE 구매자 계좌 5000원 빼기 -UPDATE 판매자 계좌 5000원 더하기 하지만 이 과정에서 하나의 쿼리만 실행된 후 서버가 다운되거나 오류가 발생한다면 큰 문제가 발생할 것이다. 이러한 상황의 발생을 막기 위해 나타난 것이 바로 트랜잭션이다. 위의 쿼리들을 하나의 작업으로 묶어 모두 실행되거나(커밋) 실행되지 않게 해주는 것이다(롤백). 이로 인해 시스템 상의 오류가 있거나 사용자가 오류를 범하더라도 데이터베이스의 데..
단축 url 프로젝트 회고 간단한 url 단축 프로젝트를 만들었다. 요구사항은 다음과 같다. URL 단축 서비스를 만들어야함 단축 URL의 키는 8글자로 생성 - www.abc.com/{단축 URL 키} 키 생성 알고리즘은 자유롭게 단축 URL은 원래 URL로 리다이렉트 되어야함 원래 URL로 다시 단축 URL 생성해도 항상 새로운 단축 URL 생성되어야함 기존 URL은 계속 동작 해야함 단축 URL에서 리다이렉트 될 때 카운트 증가 이러한 정보(단축 URL, 카운트, 원래 URL)를 확인할 수 있는 기능 DB 없이 컬렉션으로 데이터 저장 위 기능을 확인할 수 있는 테스트 코드 해당 서비스를 사용할 수 있는 UI 페이지 위의 요구사항을 보고 url 리다이렉션을 이용해서 만들면 간단하게 만들 수 있을거라고 생각했다. 하지만 만들고 ..
JVM & GC JVM이란? JVM은 자바 가상 머신으로 자바와 OS사이의 중개자 역할을 한다. 따라서 자바가 OS에 구애받지 않고 작동할 수 있게 해주는 역할을 한다. JVM의 메모리 구조 JVM이 작동하는 과정을 알아보기 전에 JVM이 어떤 메모리 구조를 가졌는지 먼저 확인한 후 작동 과정을 이해해 보도록 하자. 우선 JVM은 다음 그림과 같은 메모리 구조를 갖는다. 각각 하나씩 살펴보도록 하자 (1) Class Loader 이름과 같이 JVM 내로 클래스 파일을 로드하는 역할을 한다. 런타임 시에 동적으로 클래스를 로드한다. (2) Execution Engine 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명렁어 단위로 읽어서 실행해주는 역할을 한다. (3) Garbag..
HTTP HTTP란 우리는 HTTP에 대해서 많이 들어봤다. 하지만 HTTP가 무엇인가 라는 질문에 대답하기엔 아직 대답하기에 어려운 부분이 많이 있다. 이번에 HTTP에 대해서 정리해보겠다. 우선 HTTP란 인터넷 상에서 정보를 주고받는 프로토콜을 말한다. 특징 HTTP는 다음과 같은 특징이 있다. 무상태 무상태란 통신을 하는데 서로의 상태를 기억하지 않는것을 말한다. 따라서 어떠한 클라이언트와 통신을 하던 간에 해당 요청에 따른 응답만 하면 된다. 즉, 모든 통신이 독립적이다. 이러한 특징을 통해 서버는 클라이언트의 정보를 기억할 필요가 없으며, 요청에 따른 응답만 하면 되기에 여러개의 서버를 둘 수 있다는 서버에 확장성이라는 장점을 가질 수 있다. 하지만 클라이언트가 자신이 누군지 서버에 알려줘야 하는 상황..
Race Condition Race Condition? 이전의 글에서 Thread에 관련하여 작성하였다. 그 안에는 동기화와 관련된 내용도 있는데 본 글은 동기화를 할때 생기는 상황들에 대해서 설명해 보겠다. 먼저, 레이스 컨디션이란 두개 이상의 스레드나 프로세스가 하나의 자원을 두고 경쟁하는 상황을 말한다. 이를 해결하기 위해 임계영역을 생성해 하나의 자원에는 하나의 스레드만 접근할 수 있도록 동기화를 해준다. 세마포어 뮤텍스? 이때 동기화 방법에는 세마포어와 뮤텍스가 있는데, 둘의 가장 큰 차이는 동기화 대상의 개수이다. 세마포어인 경우 동기화의 대상이 여러개로 임계영역에 들어갈 수 있는 프로세스나 스레드의 개수를 카운트로 표시해 카운트 값에 따라 스레드나 프로세스가 임계영역에 접근할 수 있다. 반면 뮤텍스의 경우 임계영역에 ..
Equals & HashCode 프로그래머스의 level2에 있는 방문길이라는 문제를 풀었다. 여기서 Equals와 HashCode를 재정의 하여 문제를 풀었기 때문에 이번 기회에 Equals와 HashCode를 같이 재정의 해야하는 이유를 설명해 보겠다. 문제의 내용은 다음과 같다. https://school.programmers.co.kr/learn/courses/30/lessons/49994 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 ..