목록분류 전체보기 (40)
백엔드 개발자
1. 트랜잭션(Transaction)이란?트랜잭션은 데이터베이스에서 수행되는 하나의 작업 단위로, 데이터베이스의 상태를 일관성 있게 유지하고, 여러 작업을 하나의 원자적 작업으로 묶어 처리할 수 있도록 한다. 즉, 트랜잭션 내에서 여러 쿼리가 실행되며, 그 결과가 모두 성공적으로 처리되거나, 아무것도 처리되지 않은 상태로 롤백되어야 한다.하나의 논리적인 작업 단위라고 할 수 있다.A가 B에게 돈을 송금한다.라는 작업은 A의 계좌를 확인하고, 돈을 인출하고, B의 계좌를 확인하고, 돈을 더하는 작업으로 이루어질 수 있을 것이다.실제 작업과 다를 수 있지만 간단하게 나타내면 이렇게 표현할 수 있을 것이다.이런 트랜잭션은 다음과 같은 ACID 속성을 만족해야 한다:Atomicity (원자성): 트랜잭션은 모든..
HTTP란 무엇인가?HTTP(Hypertext Transfer Protocol)는 웹 상에서 클라이언트와 서버 간 데이터를 교환하기 위한 규칙이자 프로토콜입니다.HTTP는 신뢰할 수 있는 전송 프로토콜(TCP) 위에서 동작하며, 클라이언트-서버 모델을 따릅니다. HTTP의 확장성 덕분에 현재는 하이퍼텍스트 문서 뿐만 아니라 이미지와 비디오, JSON 등 다양한 데이터 포맷을 지원합니다.OSI 7계층에서 HTTP의 위치HTTP는 애플리케이션 계층(OSI 7계층의 7층)에 위치합니다. OSI 모델에서 각 계층은 특정 역할을 담당하며, HTTP는 데이터를 직접 전달하는 것이 아니라 하위 계층을 통해 전송되기 때문에 네트워크의 상세 동작을 이해하려면 하위 계층인 전송 계층(TCP/IP 4계층의 전송 계층)도 함..
IP는 인터넷 프로토콜(IP, Internet Protocol)로 컴퓨터 네트워크에서 데이터를 패킷(packet) 단위로 송수신하기 위한 규칙이다.데이터를 목적지까지 안전하고 효율적으로 전달하는 데 필요한 핵심 프로토콜로, 인터넷을 비롯한 네트워크 통신의 기본 원리를 규정한다.OSI 7 계층에서 3계층인 네트워크 계층에서 사용하는 대표적인 프로토콜이다.IP 주소와 라우팅이때 네트워크 상에서 호스트들은 고유한 IP 주소로 식별되고, 출발지 IP 주소에서 목적지 IP 주소까지 전달하는데 라우터를 거치는 과정인 라우팅이 일어난다.IP 특징이런 IP의 특징은 비신뢰성 과 비연결성 이다.기본적으로 데이터가 손실되거나 잘못된 순서로 도착할 수 있으며, 데이터를 전송하기 전에 발신자와 수신자 간에 연결을 설정하지 않..
1. UDP의 개요사용자 데이터그램 프로토콜, User Datagram ProtocolUDP는 비연결형 프로토콜로, 송신자가 데이터를 수신자에게 보내기 전에 별도의 연결을 설정하지 않습니다. TCP와 비교하면 상대적으로 간단한 구조로, 데이터를 빠르게 전송하는 것을 목표로 합니다. 신뢰성보다 속도가 중요한 애플리케이션에서 주로 사용됩니다. TCP의 3-way handshake와 같은 연결 설정 과정이 없으며, 데이터 전송이 매우 빠르게 이루어집니다. 또한, UDP는 데이터의 신뢰성을 보장하지 않기 때문에 패킷 손실, 중복, 순서 뒤바뀜 등을 감지하거나 복구하지 않습니다.주요 특징:비연결성 (Connectionless): 데이터를 전송하기 전에 연결을 설정하지 않으며, 수신자의 응답을 기다리지 않고 계속 ..
1. TCPTCP는 연결 지향적이며, 신뢰성 있는 데이터 전송을 보장하는 전송 계층(Transport Layer)의 프로토콜입니다.TCP는 IP위에서 동작하는데, IP가 데이터를 목적지로 라우팅하는 역할을 한다면, TCP는 그 데이터가 정확하고 순서대로 도착하도록 관리하는 역할을 합니다. TCP는 패킷 손실, 패킷의 순서 뒤바뀜, 혼잡한 네트워크 상황 등 다양한 네트워크 문제를 해결하기 위해 고안된 여러 메커니즘을 포함하고 있습니다.TCP의 동작 흐름을 크게 보면 연결을 생성하고, 데이터 전송, 연결 종료의 순으로 이루어집니다.2. 3-Way Handshake (3단계 핸드셰이크)TCP는 연결 지향적 프로토콜이기 때문에, 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정하는 과정이 필요합니다.이 ..
스프링 부트에서 파일업로드 관련 rest api를 만들었는데 잘 동작하던게 갑자기 Current request is not a multipart request 이런 오류가 뜨며 동작하지 않았다. 스프링시큐리티 설정을 지워주니 잘 동작하여서 스프링시큐리티 관련해서 찾아보니 뭐 MultipartFilter를 추가해 주라고 했다. 근데 이것도 xml파일로 설정하는 글들이 대부분이어서 더 찾아보니 그냥 기존 @PATCHMAPPING 에서 @PUTMAPPING으로 바꿔주니 잘 동작하였다 ..!! 마찬가지로 @POSTMAPPING도 이거 대신 @PUTMAPPING을 써야하는 것 같다. 그럼 오류 해결 끝~~
싸피 공통프로젝트에서 깃과 지라 관리를 담당하여 컨벤션을 정하고 팀원들과 공유하게 되었다. 커밋 컨벤션과 코딩 컨벤션을 정하고 프로젝트에서 gitlab을 사용하였기 때문에 템플릿 작성까지 정리해보겠다. 커밋 컨벤션 feat : 새로운 기능 추가 fix : 버그 수정 docs : 문서 수정 style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 refactor : 코드 리펙토링 test : 테스트 코드, 리펙토링 테스트 코드 추가 chore : 빌드 업무 수정, 패키지 매니저 수정 feat : oAuth 구글 로그인footer Resolves: #67 -> 꼬리말 Ref: #64 Related to: #33, #34 유형: #이슈 번호 형식으로 작성 유형은 다음 중 하나를 사용 유형 예시 제목..
새벽코딩을 하다가 작성한거 푸시만 해놓고 자야지 했다가 원격 develop 브랜치로 바로 푸시해버렸다 (IDE를 믿지말자..) 원격브랜치에서 커밋을 revert하려면 커밋 하나하나 해주어야 하고 또 그거에 대한 MR도 생성 후 승인이 되어야 해서 다시 커밋을 되돌리는 방법을 찾게 되었다. git set \[커밋 아이디\]를 하면 해당 커밋 시점으로 돌아가게 된다. 그리고 이것을 원격 develop브랜치에 푸시하면 된다. git push -f origin develop커밋이 develop 브랜치 보다 뒤에 있기 때문에 -f 를 써서 강제로 푸시해 주어야 한다. 그런데 나는 바로 푸시하기는 무서워서 원격 develop브랜치에서 test브랜치를 하나 만들어주고 원하는 대로 잘 동작하는지 확인해주었다. 로컬 t..