전체 글

전체 글

    [네트워크] IP(Internet Protocol) 톺아보기 (Feat. IP 구조, IP 할당)

    목표 OSI 7 계층에서, 3 계층인 Network 계층의 대표적인 프로토콜, IP(Internet Protocol)에 대해서 톺아보겠습니다. 전체적인 구조와 흐름을 복습할 예정입니다. 개요 통신을 위해서는 많은 절차와 작업이 필요합니다. 이에, ISO(국제 표준화 기구)에서는 7 단계로 나눴고, 다들 잘 알고 계실 OSI 7 계층입니다. 복잡한 통신 과정과 흐름을 쉽게 확인할 수 있고, 문제가 발생했을 때 비교적 수월하게 해결할 수 있기 때문입니다. 다른 계층에서 어떤 작업을 하는지 신경쓸 필요 없이 내가 맡은 일만 잘 해내면 됩니다. 이번 포스팅에서는 7 계층 중, 3 계층인 Network 계층을 중심으로 확인하려고 합니다. Network 계층의 목적을 간략히 말씀드리면 다음과 같습니다. 데이터를 적..

    [NEMODU] 메인 화면 조회 API 개선하기

    목표 메인 화면 조회 API를 개선하는 과정을 소개합니다. 개요 처음 프로젝트를 시작하면서 동아리 활동 기간인 2달에 맞춰 개발을 진행했습니다. 기간을 맞추는 것을 우선순위로 진행하면서, 기술 부채가 쌓이고 있었습니다. 그 중 하나는 메인 화면을 조회하는 로직입니다. 메인 화면은 애플리케이션에 진입하면 가장 먼저 볼 수 있는 화면입니다. 본인을 포함한 친구, 챌린지 멤버들의 운동 기록과 더불어 기록한 영역 수 등 많은 정보를 한 번에 확인할 수 있는 핵심 기능입니다. 역할을 분배하면서, 해당 기능은 팀원이 담당했었습니다. 이제 백엔드 개발을 혼자 진행하고 있어, 코드 분석부터 문제 해결까지 진행했습니다. 요약 구체적인 내용을 기술하기 전에 간단하게 요약하면 다음과 같습니다. 성능 개선을 위해 두 가지 측..

    [MySQL] MySQL 동시성 처리(2) - 트랜잭션의 고립성 보장을 위한 격리 수준과 MVCC

    목표 MySQL의 동시성 처리를 위한 격리 수준과 MVCC에 대해서 알아보겠습니다. 개요 이전 포스팅에서 DB의 Lock에 대해서 알아보았습니다. [MySQL] MySQL 동시성 처리(1) - LOCK 목표 MySQL의 동시성 처리를 위한 Lock에 대해서 알아보겠습니다. 개요 최근 프로젝트를 진행하면서 배포를 앞에 두고 가장 큰 관심사는 동시성 처리입니다. 사용자가 늘어날수록 동시 요청이 많 chanos.tistory.com 이어서 트랜잭션의 고립성 보장을 위한 격리 수준과 MVCC에 대해서 알아보도록 하겠습니다. 트랜잭션 격리 수준 트랜잭션은 작업 단위를 뜻합니다. DB의 값을 업데이트하거나 조회하는 등의 작업의 범위를 지정하는 것입니다. 이렇게 작업 단위를 지정하는 이유는 트랜잭션이 ACID를 보장..

    [MySQL] MySQL 동시성 처리(1) - LOCK

    목표 MySQL의 동시성 처리를 위한 Lock에 대해서 알아보겠습니다. 개요 최근 프로젝트를 진행하면서 배포를 앞에 두고 가장 큰 관심사는 동시성 처리입니다. 사용자가 늘어날수록 동시 요청이 많아질 것입니다. 현재 백엔드는 Spring boot로 구성되어 요청마다 스레드가 할당됩니다. 이 말은 즉, 여러 스레드가 한 DB에 동시에 요청을 보낸다는 뜻입니다. DB에 여러 요청에 동시에 들어왔을 때, 데이터 정합성을 보장함과 동시에 성능에 영향을 주지 않도록 하는 방법에 대해서 알아보려고 합니다. 가장 먼저, 데이터 정합성을 보장하기 위한 Lock에 대해서 알아보겠습니다. Lock의 설정 범위 Lock(락)은 여러 트랜잭션이 동시에 처리될 때 데이터의 무결성을 보장하기 위한 수단입니다. 한 트랜잭션이 처리되..

    [Spring] 내가 ~Service, ServiceImpl로 분리하는 이유

    목표 서비스 계층을 개발할 때 ~Service, ~ServiceImpl로 나누는 이유에 대해서 기술합니다. 개요 저는 Spring 기반의 백엔드를 구현하는 프로젝트를 구현할 때 항상 ~Service, ~ServiceImpl과 같이 인터페이스와 구현체로 분리해서 개발했습니다. 처음에는 이렇게 배웠기 때문에 따라 했고, 경험이 쌓이면서 왜 이렇게 해야 하는지에 대한 고민을 하기 시작했습니다. 정말 다양한 측면에서 생각해 볼 수 있는 문제이고, 상황에 따라 의견이 분분한 문제이므로 정답은 없다고 생각합니다. 하지만, 제가 프로젝트에서 이렇게 적용할 때는 그만한 근거가 필요하고, 저는 분리해서 개발하는 게 합당하다고 판단했습니다. 막상 면접 자리에서 '왜 이렇게 구현했는가?'라는 질문을 받았을 때, DI? 확장..

    [MySQL] UUID의 개념과 성능 개선 결과

    목표 MySQL에서 UUID를 최대한 효율적으로 사용해 보기 위한 노력 과정을 기술합니다. 개요 관계형 DB에서 데이터(튜플)을 식별하기 위해 PK(Primary Key, 기본키)를 사용합니다. 하지만, 클라이언트와 서버 사이에서 데이터를 확인하기 위해 PK를 주고받는 것은 보안적인 측면에서 위험합니다. 만약 다음과 같은 URL이 있다면 어떨까요? http://www.domain.com/user/info?userid=1 파라미터로 들어가는 userid의 값만 바꿔도, 다른 사람의 정보를 확인할 수 있는 것을 예측할 수 있습니다. 이처럼 예측가능한 모델이 되어 SQL Injection의 위험성이 존재하기 때문에, PK값을 그대로 넘겨주는 것은 바람직하지 않습니다. 따라서, 고유값을 갖는 특정 값으로 데이터..